blob: 9383591e658c9a1b0b7423ddb7c9b5c52970ce9a [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001.. _ast:
2
3Abstract Syntax Trees
4=====================
5
6.. module:: _ast
7 :synopsis: Abstract Syntax Tree classes.
8
9.. sectionauthor:: Martin v. Lรถwis <martin@v.loewis.de>
10
11
12.. versionadded:: 2.5
13
14The ``_ast`` module helps Python applications to process trees of the Python
15abstract syntax grammar. The Python compiler currently provides read-only access
16to such trees, meaning that applications can only create a tree for a given
Georg Brandl5e52db02007-10-21 10:45:46 +000017piece of Python source code; generating :term:`bytecode` from a (potentially modified)
Georg Brandl8ec7f652007-08-15 14:28:01 +000018tree is not supported. The abstract syntax itself might change with each Python
19release; this module helps to find out programmatically what the current grammar
20looks like.
21
22An abstract syntax tree can be generated by passing ``_ast.PyCF_ONLY_AST`` as a
23flag to the :func:`compile` builtin function. The result will be a tree of
24objects whose classes all inherit from ``_ast.AST``.
25
26The actual classes are derived from the ``Parser/Python.asdl`` file, which is
27reproduced below. There is one class defined for each left-hand side symbol in
28the abstract grammar (for example, ``_ast.stmt`` or ``_ast.expr``). In addition,
29there is one class defined for each constructor on the right-hand side; these
30classes inherit from the classes for the left-hand side trees. For example,
31``_ast.BinOp`` inherits from ``_ast.expr``. For production rules with
32alternatives (aka "sums"), the left-hand side class is abstract: only instances
33of specific constructor nodes are ever created.
34
35Each concrete class has an attribute ``_fields`` which gives the names of all
36child nodes.
37
38Each instance of a concrete class has one attribute for each child node, of the
39type as defined in the grammar. For example, ``_ast.BinOp`` instances have an
40attribute ``left`` of type ``_ast.expr``. Instances of ``_ast.expr`` and
41``_ast.stmt`` subclasses also have lineno and col_offset attributes. The lineno
42is the line number of source text (1 indexed so the first line is line 1) and
43the col_offset is the utf8 byte offset of the first token that generated the
44node. The utf8 offset is recorded because the parser uses utf8 internally.
45
46If these attributes are marked as optional in the grammar (using a question
47mark), the value might be ``None``. If the attributes can have zero-or-more
48values (marked with an asterisk), the values are represented as Python lists.
49
50
51Abstract Grammar
52----------------
53
54The module defines a string constant ``__version__`` which is the decimal
55subversion revision number of the file shown below.
56
57The abstract grammar is currently defined as follows:
58
59.. literalinclude:: ../../Parser/Python.asdl