From dbeb13600f2eea152020cadd7b138aea75dfeedd Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Fri, 3 Aug 2007 07:35:19 +0000 Subject: [PATCH] Re-add the _ast docs to 3k; rename it accordingly. --- Doc-26/library/{ast.rst => _ast.rst} | 1 + Doc-26/library/compiler.rst | 5 ++- Doc-3k/library/_ast.rst | 59 ++++++++++++++++++++++++++++ Doc-3k/library/language.rst | 1 + 4 files changed, 64 insertions(+), 2 deletions(-) rename Doc-26/library/{ast.rst => _ast.rst} (98%) create mode 100644 Doc-3k/library/_ast.rst diff --git a/Doc-26/library/ast.rst b/Doc-26/library/_ast.rst similarity index 98% rename from Doc-26/library/ast.rst rename to Doc-26/library/_ast.rst index 15a73cf8c..9b195be46 100644 --- a/Doc-26/library/ast.rst +++ b/Doc-26/library/_ast.rst @@ -4,6 +4,7 @@ Abstract Syntax Trees ===================== .. module:: _ast + :synopsis: Abstract Syntax Tree classes. .. sectionauthor:: Martin v. Löwis diff --git a/Doc-26/library/compiler.rst b/Doc-26/library/compiler.rst index 40c4d236b..96f4fc3d3 100644 --- a/Doc-26/library/compiler.rst +++ b/Doc-26/library/compiler.rst @@ -30,15 +30,16 @@ work. It blends reference material with a tutorial. The following modules are part of the :mod:`compiler` package: - .. toctree:: - ast.rst + _ast.rst + The basic interface =================== .. module:: compiler + :synopsis: Python code compiler written in Python. The top-level of the package defines four functions. If you import diff --git a/Doc-3k/library/_ast.rst b/Doc-3k/library/_ast.rst new file mode 100644 index 000000000..9b195be46 --- /dev/null +++ b/Doc-3k/library/_ast.rst @@ -0,0 +1,59 @@ +.. _ast: + +Abstract Syntax Trees +===================== + +.. module:: _ast + :synopsis: Abstract Syntax Tree classes. + +.. sectionauthor:: Martin v. Löwis + + +.. 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 diff --git a/Doc-3k/library/language.rst b/Doc-3k/library/language.rst index d405a4bc8..7d6af7def 100644 --- a/Doc-3k/library/language.rst +++ b/Doc-3k/library/language.rst @@ -15,6 +15,7 @@ These modules include: .. toctree:: parser.rst + _ast.rst symbol.rst token.rst keyword.rst