\section{\module{token} ---
         Constants used with Python parse trees}

\declaremodule{standard}{token}
\modulesynopsis{Constants representing terminal nodes of the parse tree.}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}


This module provides constants which represent the numeric values of
leaf nodes of the parse tree (terminal tokens).  Refer to the file
\file{Grammar/Grammar} 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.

This module also provides one data object and some functions.  The
functions mirror definitions in the Python C header files.



\begin{datadesc}{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.
\end{datadesc}

\begin{funcdesc}{ISTERMINAL}{x}
Return true for terminal token values.
\end{funcdesc}

\begin{funcdesc}{ISNONTERMINAL}{x}
Return true for non-terminal token values.
\end{funcdesc}

\begin{funcdesc}{ISEOF}{x}
Return true if \var{x} is the marker indicating the end of input.
\end{funcdesc}


\begin{seealso}
  \seemodule{parser}{The second example for the \refmodule{parser}
                     module shows how to use the \module{symbol}
                     module.}
\end{seealso}
