cpython/Doc/library/token.rst
Vladyslav Lazoryk 8d17a412da
Some checks are pending
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run
gh-135263: Fix typo in token.NAME documentation (#135275)
2025-06-08 22:59:26 +03:00

266 lines
7.7 KiB
ReStructuredText

:mod:`!token` --- Constants used with Python parse trees
========================================================
.. module:: token
:synopsis: Constants representing terminal nodes of the parse tree.
.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
**Source code:** :source:`Lib/token.py`
--------------
This module provides constants which represent the numeric values of leaf nodes
of the parse tree (terminal tokens). Refer to the file :file:`Grammar/Tokens`
in the Python distribution for the definitions of the names in the context of
the language grammar. The specific numeric values which the names map to may
change between Python versions.
The module also provides a mapping from numeric codes to names and some
functions. The functions mirror definitions in the Python C header files.
Note that a token's value may depend on tokenizer options. For example, a
``"+"`` token may be reported as either :data:`PLUS` or :data:`OP`, or
a ``"match"`` token may be either :data:`NAME` or :data:`SOFT_KEYWORD`.
.. data:: tok_name
Dictionary mapping the numeric values of the constants defined in this module
back to name strings, allowing more human-readable representation of parse trees
to be generated.
.. function:: ISTERMINAL(x)
Return ``True`` for terminal token values.
.. function:: ISNONTERMINAL(x)
Return ``True`` for non-terminal token values.
.. function:: ISEOF(x)
Return ``True`` if *x* is the marker indicating the end of input.
The token constants are:
.. data:: NAME
Token value that indicates an :ref:`identifier <identifiers>`.
Note that keywords are also initially tokenized as ``NAME`` tokens.
.. data:: NUMBER
Token value that indicates a :ref:`numeric literal <numbers>`
.. data:: STRING
Token value that indicates a :ref:`string or byte literal <strings>`,
excluding :ref:`formatted string literals <f-strings>`.
The token string is not interpreted:
it includes the surrounding quotation marks and the prefix (if given);
backslashes are included literally, without processing escape sequences.
.. data:: OP
A generic token value that indicates an
:ref:`operator <operators>` or :ref:`delimiter <delimiters>`.
.. impl-detail::
This value is only reported by the :mod:`tokenize` module.
Internally, the tokenizer uses
:ref:`exact token types <token_operators_delimiters>` instead.
.. data:: COMMENT
Token value used to indicate a comment.
The parser ignores :data:`!COMMENT` tokens.
.. data:: NEWLINE
Token value that indicates the end of a :ref:`logical line <logical-lines>`.
.. data:: NL
Token value used to indicate a non-terminating newline.
:data:`!NL` tokens are generated when a logical line of code is continued
over multiple physical lines. The parser ignores :data:`!NL` tokens.
.. data:: INDENT
Token value used at the beginning of a :ref:`logical line <logical-lines>`
to indicate the start of an :ref:`indented block <indentation>`.
.. data:: DEDENT
Token value used at the beginning of a :ref:`logical line <logical-lines>`
to indicate the end of an :ref:`indented block <indentation>`.
.. data:: FSTRING_START
Token value used to indicate the beginning of an
:ref:`f-string literal <f-strings>`.
.. impl-detail::
The token string includes the prefix and the opening quote(s), but none
of the contents of the literal.
.. data:: FSTRING_MIDDLE
Token value used for literal text inside an :ref:`f-string literal <f-strings>`,
including format specifications.
.. impl-detail::
Replacement fields (that is, the non-literal parts of f-strings) use
the same tokens as other expressions, and are delimited by
:data:`LBRACE`, :data:`RBRACE`, :data:`EXCLAMATION` and :data:`COLON`
tokens.
.. data:: FSTRING_END
Token value used to indicate the end of a :ref:`f-string <f-strings>`.
.. impl-detail::
The token string contains the closing quote(s).
.. data:: TSTRING_START
Token value used to indicate the beginning of a template string literal.
.. impl-detail::
The token string includes the prefix and the opening quote(s), but none
of the contents of the literal.
.. versionadded:: 3.14
.. data:: TSTRING_MIDDLE
Token value used for literal text inside a template string literal
including format specifications.
.. impl-detail::
Replacement fields (that is, the non-literal parts of t-strings) use
the same tokens as other expressions, and are delimited by
:data:`LBRACE`, :data:`RBRACE`, :data:`EXCLAMATION` and :data:`COLON`
tokens.
.. versionadded:: 3.14
.. data:: TSTRING_END
Token value used to indicate the end of a template string literal.
.. impl-detail::
The token string contains the closing quote(s).
.. versionadded:: 3.14
.. data:: ENDMARKER
Token value that indicates the end of input.
Used in :ref:`top-level grammar rules <top-level>`.
.. data:: ENCODING
Token value that indicates the encoding used to decode the source bytes
into text. The first token returned by :func:`tokenize.tokenize` will
always be an ``ENCODING`` token.
.. impl-detail::
This token type isn't used by the C tokenizer but is needed for
the :mod:`tokenize` module.
The following token types are not produced by the :mod:`tokenize` module,
and are defined for special uses in the tokenizer or parser:
.. data:: TYPE_IGNORE
Token value indicating that a ``type: ignore`` comment was recognized.
Such tokens are produced instead of regular :data:`COMMENT` tokens only
with the :data:`~ast.PyCF_TYPE_COMMENTS` flag.
.. data:: TYPE_COMMENT
Token value indicating that a type comment was recognized.
Such tokens are produced instead of regular :data:`COMMENT` tokens only
with the :data:`~ast.PyCF_TYPE_COMMENTS` flag.
.. data:: SOFT_KEYWORD
Token value indicating a :ref:`soft keyword <soft-keywords>`.
The tokenizer never produces this value.
To check for a soft keyword, pass a :data:`NAME` token's string to
:func:`keyword.issoftkeyword`.
.. data:: ERRORTOKEN
Token value used to indicate wrong input.
The :mod:`tokenize` module generally indicates errors by
raising exceptions instead of emitting this token.
It can also emit tokens such as :data:`OP` or :data:`NAME` with strings that
are later rejected by the parser.
.. _token_operators_delimiters:
The remaining tokens represent specific :ref:`operators <operators>` and
:ref:`delimiters <delimiters>`.
(The :mod:`tokenize` module reports these as :data:`OP`; see ``exact_type``
in the :mod:`tokenize` documentation for details.)
.. include:: token-list.inc
The following non-token constants are provided:
.. data:: N_TOKENS
The number of token types defined in this module.
.. NT_OFFSET is deliberately undocumented; if you need it you should be
reading the source
.. data:: EXACT_TOKEN_TYPES
A dictionary mapping the string representation of a token to its numeric code.
.. versionadded:: 3.8
.. versionchanged:: 3.5
Added :data:`!AWAIT` and :data:`!ASYNC` tokens.
.. versionchanged:: 3.7
Added :data:`COMMENT`, :data:`NL` and :data:`ENCODING` tokens.
.. versionchanged:: 3.7
Removed :data:`!AWAIT` and :data:`!ASYNC` tokens. "async" and "await" are
now tokenized as :data:`NAME` tokens.
.. versionchanged:: 3.8
Added :data:`TYPE_COMMENT`, :data:`TYPE_IGNORE`, :data:`COLONEQUAL`.
Added :data:`!AWAIT` and :data:`!ASYNC` tokens back (they're needed
to support parsing older Python versions for :func:`ast.parse` with
``feature_version`` set to 6 or lower).
.. versionchanged:: 3.12
Added :data:`EXCLAMATION`.
.. versionchanged:: 3.13
Removed :data:`!AWAIT` and :data:`!ASYNC` tokens again.