diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2008-03-30 20:03:44 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2008-03-30 20:03:44 (GMT) |
commit | 618dc5e06459dab5fae2dc0a8caee7d15afd6410 (patch) | |
tree | 2881b2c079821ef43895742f3c65171acf582cc1 /Doc | |
parent | d3372793d6de665be2f866e9245a33bcefeaaa76 (diff) | |
download | cpython-618dc5e06459dab5fae2dc0a8caee7d15afd6410.zip cpython-618dc5e06459dab5fae2dc0a8caee7d15afd6410.tar.gz cpython-618dc5e06459dab5fae2dc0a8caee7d15afd6410.tar.bz2 |
Merged revisions 62004 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62004 | georg.brandl | 2008-03-28 13:11:56 +0100 (Fr, 28 Mär 2008) | 4 lines
Patch #1810 by Thomas Lee, reviewed by myself:
allow compiling Python AST objects into code objects
in compile().
........
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/library/_ast.rst | 23 | ||||
-rw-r--r-- | Doc/library/functions.rst | 33 |
2 files changed, 31 insertions, 25 deletions
diff --git a/Doc/library/_ast.rst b/Doc/library/_ast.rst index 9f56156..518798e 100644 --- a/Doc/library/_ast.rst +++ b/Doc/library/_ast.rst @@ -10,16 +10,16 @@ Abstract Syntax Trees 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 :term:`bytecode` 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. +abstract syntax grammar. 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``. +An abstract syntax tree can be generated by passing :data:`_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 :class:`_ast.AST`. + +A modified abstract syntax tree can be compiled into a Python code object using +the built-in :func:`compile` function. 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 @@ -39,12 +39,15 @@ 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. +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. +The constructors of all ``_ast`` classes don't take arguments; instead, if you +create instances, you must assign the required attributes separately. + Abstract Grammar ---------------- diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 7c97edb..d1e979c 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -193,21 +193,21 @@ available. They are listed here in alphabetical order. .. function:: compile(source, filename, mode[, flags[, dont_inherit]]) - Compile the *source* into a code object. Code objects can be executed by a call - to :func:`exec` or evaluated by a call to :func:`eval`. The *filename* argument - should give the file from which the code was read; pass some recognizable value - if it wasn't read from a file (``'<string>'`` is commonly used). The *mode* - argument specifies what kind of code must be compiled; it can be ``'exec'`` if - *source* consists of a sequence of statements, ``'eval'`` if it consists of a - single expression, or ``'single'`` if it consists of a single interactive - statement (in the latter case, expression statements that evaluate to something - else than ``None`` will be printed). - - When compiling multi-line statements, two caveats apply: line endings must be - represented by a single newline character (``'\n'``), and the input must be - terminated by at least one newline character. If line endings are represented - by ``'\r\n'``, use the string :meth:`replace` method to change them into - ``'\n'``. + Compile the *source* into a code object. Code objects can be + executed by a call to :func:`exec` or evaluated by a call to + :func:`eval`. *source* can either be a string or an AST object. + Refer to the :mod:`_ast` module documentation for information on + how to compile into and from AST objects. + + The *filename* argument should give the file from + which the code was read; pass some recognizable value if it wasn't + read from a file (``'<string>'`` is commonly used). The *mode* + argument specifies what kind of code must be compiled; it can be + ``'exec'`` if *source* consists of a sequence of statements, + ``'eval'`` if it consists of a single expression, or ``'single'`` + if it consists of a single interactive statement (in the latter + case, expression statements that evaluate to something else than + ``None`` will be printed). The optional arguments *flags* and *dont_inherit* (which are new in Python 2.2) control which future statements (see :pep:`236`) affect the compilation of @@ -227,6 +227,9 @@ available. They are listed here in alphabetical order. This function raises :exc:`SyntaxError` if the compiled source is invalid, and :exc:`TypeError` if the source contains null bytes. + .. versionadded:: 2.6 + Support for compiling AST objects. + .. function:: complex([real[, imag]]) |