# `token` --- 用于 Python 解析树的常量

源码： Lib/token.py

该模块提供了一些代表解析树的叶子节点的数字值的常量（终端形符）。 请参阅 Python 发布版中的 `Grammar/Tokens` 文件获取在该语言语法情境下的名称定义。 这些名称所映射的特定数字值有可能在各 Python 版本间发生变化。

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

请注意一个词元的值可能取决于分词器选项。 例如，`"+"` 词元可能被报告为 `PLUS` 或 `OP`，而 `"match"` 词元可能被报告为 `NAME` 或 `SOFT_KEYWORD`。

token.tok_name

  将此模块中定义的常量的数值映射回名称字符串的字典，允许生成更加人类可读的解析树表示。

token.ISTERMINAL(x)

  对终端形符值返回 `True`。

token.ISNONTERMINAL(x)

  对非终端形符值返回 `True`。

token.ISEOF(x)

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

形符常量有：

token.NAME

  表示一个 标识符 的词元值。 请注意关键字也会被初始分词化为 `NAME` 词元。

token.NUMBER

  表示一个 数字字面值 的词元值。

token.STRING

  表示一个 字符串或字节串字面值 的词元值，不包括 格式化字符串字面值。 该词元字符串不会被解读：它包括两边的引号以及前缀（如果有的话）；反斜杠将按照字面值被包括，而不会处理转义序列。

token.OP

  表示一个 运算符 或 分隔符 的泛用词元。

  这个值仅会由 `tokenize` 模块报告。 在内部，分词器会改用 实际词元类型。

token.COMMENT

  用于表示注释的词元值。 解析器会忽略 `COMMENT` 词元。

token.NEWLINE

  表示一个 逻辑行 结束的词元值。

token.NL

  用于表示非终结换行符的词元值。 `NL` 词元会在一个代码逻辑行跨越了多个物理行时被生成。 解析器会忽略 `NL` 词元。

token.INDENT

  用于在一个 逻辑行 的开头表示 缩进块 的开始的词元值。

token.DEDENT

  用于在一个 逻辑行 的开头表示 缩进块 的结束的词元值。

token.FSTRING_START

  用于表示一个 格式化字符串字面值 的开始的词元值。

  该词元值包括前缀和开始引号，但不包括字面值的内容。

token.FSTRING_MIDDLE

  用于一个 格式化字面值 内部的字面文本包括格式说明的词元值。

  替换字段（即格式化字符串的非字面值部分）使用与其他表达式相同的词元，并由 `LBRACE`, `RBRACE`, `EXCLAMATION` 和 `COLON` 词元来分隔。

token.FSTRING_END

  用于表示一个 格式化字符串 的结束的词元值。

  该词元字符串包含结束引号。

token.TSTRING_START

  用于指明一个模板字符串字面值的开始的词元值。

  该词元值包括前缀和开始引号，但不包括字面值的内容。

  Added in version 3.14.

token.TSTRING_MIDDLE

  用于表示模板字符串内部的字面文本包括格式说明的词元值。

  替换字段（即 t-字符串的非字面值部分）使用与其他表达式相同的词元，并由 `LBRACE`, `RBRACE`, `EXCLAMATION` 和 `COLON` 等词元来分隔。

  Added in version 3.14.

token.TSTRING_END

  用于指明一个模板字符串字面值的结束的词元值。

  该词元字符串包含结束引号。

  Added in version 3.14.

token.ENDMARKER

  用于指明输入结束的词元值。 在 最高层级语法规则 中使用。

token.ENCODING

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

  该词元类型不被 C 分词器所使用但却是 `tokenize` 模块所需要的。

下列词元类型不会由 `tokenize` 模块产生，它们是为分词器或解析器内的特殊用处而定义的。

token.TYPE_IGNORE

  指明一个 `type: ignore` 注释已被识别的词元值。 此种词元仅在设置了 `PyCF_TYPE_COMMENTS` 旗标时会代替常规的 `COMMENT` 词元被产生。

token.TYPE_COMMENT

  指明一个类型注释已被识别的词元值。 此种词元仅在设置了 `PyCF_TYPE_COMMENTS` 旗标时会代替常规的 `COMMENT` 词元被产生。

token.SOFT_KEYWORD

  指明一个 软关键字 的词元值。

  分词器绝不会产生该值。 要检测一个软关键字，请将一个 `NAME` 词元字符串传给 `keyword.issoftkeyword()`。

token.ERRORTOKEN

  用于表示错误输入的词元值。

  `tokenize` 模块通常用引发异常而不是发出这个词元来指明错误。 它也可以发出 `OP` 或 `NAME` 等词元并附带将被解析器拒绝的字符串。

其余的词元代表特定的 运算符 和 分隔符。 (`tokenize` 模块会将它们报告为 `OP`；请参阅 `tokenize` 文档的 `exact_type` 了解详情。）

形符 | 值
--- | ---

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.N_TOKENS

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

token.EXACT_TOKEN_TYPES

  将形符字符串表示形式映射到其数字代码的字典。

  Added in version 3.8.

在 3.5 版本发生变更: 增加了 `AWAIT` 和 `ASYNC` 形符。

在 3.7 版本发生变更: 形符 `COMMENT`、 `NL` 和 `ENCODING` 形符。

在 3.7 版本发生变更: 移除了 `AWAIT` 和 `ASYNC` 形符。 "async" 和 "await" 被形符化为 `NAME` 形符。

在 3.8 版本发生变更: 增加了 `TYPE_COMMENT`, `TYPE_IGNORE`, `COLONEQUAL`。 重新增加了 `AWAIT` 和 `ASYNC` 形符（需要用它们来支持解析 `ast.parse()` 的 `feature_version` 设为 6 或更低的较旧 Python 版本）。

在 3.12 版本发生变更: 增加了 `EXCLAMATION`。

在 3.13 版本发生变更: 重新移除了 `AWAIT` 和 `ASYNC` 形符。