diff options
Diffstat (limited to 'Doc/library/_ast.rst')
-rw-r--r-- | Doc/library/_ast.rst | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Doc/library/_ast.rst b/Doc/library/_ast.rst new file mode 100644 index 0000000..9b195be --- /dev/null +++ b/Doc/library/_ast.rst @@ -0,0 +1,59 @@ +.. _ast: + +Abstract Syntax Trees +===================== + +.. module:: _ast + :synopsis: Abstract Syntax Tree classes. + +.. sectionauthor:: Martin v. Löwis <martin@v.loewis.de> + + +.. versionadded:: 2.5 + +The ``_ast`` module helps Python applications to process trees of the Python +abstract syntax grammar. The Python compiler currently provides read-only access +to such trees, meaning that applications can only create a tree for a given +piece of Python source code; generating byte code from a (potentially modified) +tree is not supported. The abstract syntax itself might change with each Python +release; this module helps to find out programmatically what the current grammar +looks like. + +An abstract syntax tree can be generated by passing ``_ast.PyCF_ONLY_AST`` as a +flag to the :func:`compile` builtin function. The result will be a tree of +objects whose classes all inherit from ``_ast.AST``. + +The actual classes are derived from the ``Parser/Python.asdl`` file, which is +reproduced below. There is one class defined for each left-hand side symbol in +the abstract grammar (for example, ``_ast.stmt`` or ``_ast.expr``). In addition, +there is one class defined for each constructor on the right-hand side; these +classes inherit from the classes for the left-hand side trees. For example, +``_ast.BinOp`` inherits from ``_ast.expr``. For production rules with +alternatives (aka "sums"), the left-hand side class is abstract: only instances +of specific constructor nodes are ever created. + +Each concrete class has an attribute ``_fields`` which gives the names of all +child nodes. + +Each instance of a concrete class has one attribute for each child node, of the +type as defined in the grammar. For example, ``_ast.BinOp`` instances have an +attribute ``left`` of type ``_ast.expr``. Instances of ``_ast.expr`` and +``_ast.stmt`` subclasses also have lineno and col_offset attributes. The lineno +is the line number of source text (1 indexed so the first line is line 1) and +the col_offset is the utf8 byte offset of the first token that generated the +node. The utf8 offset is recorded because the parser uses utf8 internally. + +If these attributes are marked as optional in the grammar (using a question +mark), the value might be ``None``. If the attributes can have zero-or-more +values (marked with an asterisk), the values are represented as Python lists. + + +Abstract Grammar +---------------- + +The module defines a string constant ``__version__`` which is the decimal +subversion revision number of the file shown below. + +The abstract grammar is currently defined as follows: + +.. literalinclude:: ../../Parser/Python.asdl |