token --- 与 Python 解析树一同使用的常量

源代码: Lib/token.py


此模块提供表示解析树叶节点(终端符号)的数值的常量。请参阅 Python 发行版中的 Grammar/Tokens 文件,了解这些名称在语言语法上下文中的定义。名称所映射的特定数值在不同 Python 版本之间可能会发生改变。

该模块还提供了一个从数字代码到名称的映射以及一些函数。这些函数反映了 Python C 头文件中的定义。

请注意,一个 token 的值可能取决于分词器选项。例如,一个 "+" token 可能会被报告为 PLUSOP,一个 "match" token 可能会被报告为 NAMESOFT_KEYWORD

token.tok_name

将此模块中定义的常量的数值映射回名称字符串的字典,从而可以生成更易于人类阅读的解析树表示。

token.ISTERMINAL(x)

对于终端符号值,返回 True

token.ISNONTERMINAL(x)

对于非终端符号值,返回 True

token.ISEOF(x)

如果 x 是表示输入结束的标记,则返回 True

token 常量有:

token.NAME

指示标识符的 token 值。注意,关键字最初也被标记为 NAME token。

token.NUMBER

指示数字字面值的 token 值。

token.STRING

指示字符串或字节串字面值的 token 值,不包括格式化字符串字面值。该 token 字符串不会被解释:它包含周围的引号和前缀(如果给定);反斜杠按原样包含,不处理转义序列。

token.OP

指示运算符分隔符的通用 token 值。

CPython 实现细节: 此值仅由 tokenize 模块报告。在内部,分词器使用确切的 token 类型

token.COMMENT

用于指示注释的 token 值。解析器会忽略 COMMENT token。

token.NEWLINE

指示逻辑行结束的 token 值。

token.NL

用于指示非终止换行的 token 值。当一个逻辑代码行跨越多个物理行时,会生成 NL token。解析器会忽略 NL token。

token.INDENT

逻辑行的开头使用,用于指示缩进块的开始。

token.DEDENT

逻辑行的开头使用,用于指示缩进块的结束。

token.FSTRING_START

用于指示f-string 字面值开始的 token 值。

CPython 实现细节: token 字符串包括前缀和起始引号,但不包括字面值的任何内容。

token.FSTRING_MIDDLE

用于f-string 字面值内部的字面文本的 token 值,包括格式说明。

CPython 实现细节: 替换字段(即 f-string 的非字面值部分)使用与其他表达式相同的 token,并由 LBRACERBRACEEXCLAMATIONCOLON token 分隔。

token.FSTRING_END

用于指示f-string结束的 token 值。

CPython 实现细节: token 字符串包含结束引号。

token.TSTRING_START

用于指示模板字符串字面值开始的 token 值。

CPython 实现细节: token 字符串包括前缀和起始引号,但不包括字面值的任何内容。

在 3.14 版本加入。

token.TSTRING_MIDDLE

用于模板字符串字面值内部的字面文本的 token 值,包括格式说明。

CPython 实现细节: 替换字段(即 t-string 的非字面值部分)使用与其他表达式相同的 token,并由 LBRACERBRACEEXCLAMATIONCOLON token 分隔。

在 3.14 版本加入。

token.TSTRING_END

用于指示模板字符串字面值结束的 token 值。

CPython 实现细节: token 字符串包含结束引号。

在 3.14 版本加入。

token.ENDMARKER

指示输入结束的 token 值。在顶层语法规则中使用。

token.ENCODING

指示用于将源字节解码为文本的编码的 token 值。tokenize.tokenize() 返回的第一个 token 始终是 ENCODING token。

CPython 实现细节: C 分词器不使用此 token 类型,但 tokenize 模块需要它。

以下 token 类型不由 tokenize 模块生成,它们是在分词器或解析器中为特殊用途定义的

token.TYPE_IGNORE

指示识别到 type: ignore 注释的 token 值。此类 token 仅在设置了 PyCF_TYPE_COMMENTS 标志时才会生成,以代替常规的 COMMENT token。

token.TYPE_COMMENT

指示识别到类型注释的 token 值。此类 token 仅在设置了 PyCF_TYPE_COMMENTS 标志时才会生成,以代替常规的 COMMENT token。

token.SOFT_KEYWORD

指示软关键字的 token 值。

分词器从不生成此值。要检查软关键字,请将 NAME token 的字符串传递给 keyword.issoftkeyword()

token.ERRORTOKEN

用于指示错误输入的 token 值。

tokenize 模块通常通过引发异常来指示错误,而不是发出此 token。它也可能发出 OPNAME 等 token,其字符串稍后会被解析器拒绝。

其余的 token 代表特定的运算符分隔符。(tokenize 模块将这些报告为 OP;有关详细信息,请参阅 tokenize 文档中的 exact_type。)

Token

token.LPAR

"("

token.RPAR

")"

token.LSQB

"["

token.RSQB

"]"

token.COLON

":"

token.COMMA

","

token.SEMI

";"

token.PLUS

"+"

token.MINUS

"-"

token.STAR

"*"

token.SLASH

"/"

token.VBAR

"|"

token.AMPER

"&"

token.LESS

"<"

token.GREATER

">"

token.EQUAL

"="

token.DOT

"."

token.PERCENT

"%"

token.LBRACE

"{"

token.RBRACE

"}"

token.EQEQUAL

"=="

token.NOTEQUAL

"!="

token.LESSEQUAL

"<="

token.GREATEREQUAL

">="

token.TILDE

"~"

token.CIRCUMFLEX

"^"

token.LEFTSHIFT

"<<"

token.RIGHTSHIFT

">>"

token.DOUBLESTAR

"**"

token.PLUSEQUAL

"+="

token.MINEQUAL

"-="

token.STAREQUAL

"*="

token.SLASHEQUAL

"/="

token.PERCENTEQUAL

"%="

token.AMPEREQUAL

"&="

token.VBAREQUAL

"|="

token.CIRCUMFLEXEQUAL

"^="

token.LEFTSHIFTEQUAL

"<<="

token.RIGHTSHIFTEQUAL

">>="

token.DOUBLESTAREQUAL

"**="

token.DOUBLESLASH

"//"

token.DOUBLESLASHEQUAL

"//="

token.AT

"@"

token.ATEQUAL

"@="

token.RARROW

"->"

token.ELLIPSIS

"..."

token.COLONEQUAL

":="

token.EXCLAMATION

"!"

提供了以下非 token 常量

token.N_TOKENS

此模块中定义的 token 类型数量。

token.EXACT_TOKEN_TYPES

一个将 token 的字符串表示映射到其数字代码的字典。

在 3.8 版本加入。

在 3.5 版本发生变更: 添加了 AWAITASYNC token。

在 3.7 版本发生变更: 添加了 COMMENTNLENCODING token。

在 3.7 版本发生变更: 移除了 AWAITASYNC token。“async” 和 “await” 现在被标记为 NAME token。

在 3.8 版本发生变更: 添加了 TYPE_COMMENTTYPE_IGNORECOLONEQUAL。重新添加了 AWAITASYNC token(为了支持使用 feature_version 设置为 6 或更低版本的 ast.parse() 来解析旧版 Python,这些 token 是必需的)。

在 3.12 版本发生变更: 添加了 EXCLAMATION

在 3.13 版本发生变更: 再次移除了 AWAITASYNC token。