<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <link rel="STYLESHEET" href="lib.css" type='text/css' /> <link rel="SHORTCUT ICON" href="../icons/pyfav.gif" /> <link rel='start' href='../index.html' title='Python Documentation Index' /> <link rel="first" href="lib.html" title='Python Library Reference' /> <link rel='contents' href='contents.html' title="Contents" /> <link rel='index' href='genindex.html' title='Index' /> <link rel='last' href='about.html' title='About this document...' /> <link rel='help' href='about.html' title='About this document...' /> <LINK rel="next" href="node683.html"> <LINK rel="prev" href="module-parser.html"> <LINK rel="parent" href="module-parser.html"> <LINK rel="next" href="node683.html"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name='aesop' content='information' /> <META name="description" content="Creating AST Objects "> <META name="keywords" content="lib"> <META name="resource-type" content="document"> <META name="distribution" content="global"> <title>18.1.1 Creating AST Objects </title> </head> <body> <DIV CLASS="navigation"> <div id='top-navigation-panel'> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td class='online-navigation'><a rel="prev" title="18.1 parser " href="module-parser.html"><img src='../icons/previous.png' border='0' height='32' alt='Previous Page' width='32' /></A></td> <td class='online-navigation'><a rel="parent" title="18.1 parser " href="module-parser.html"><img src='../icons/up.png' border='0' height='32' alt='Up One Level' width='32' /></A></td> <td class='online-navigation'><a rel="next" title="18.1.2 Converting AST Objects" href="node683.html"><img src='../icons/next.png' border='0' height='32' alt='Next Page' width='32' /></A></td> <td align="center" width="100%">Python Library Reference</td> <td class='online-navigation'><a rel="contents" title="Table of Contents" href="contents.html"><img src='../icons/contents.png' border='0' height='32' alt='Contents' width='32' /></A></td> <td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png' border='0' height='32' alt='Module Index' width='32' /></a></td> <td class='online-navigation'><a rel="index" title="Index" href="genindex.html"><img src='../icons/index.png' border='0' height='32' alt='Index' width='32' /></A></td> </tr></table> <div class='online-navigation'> <b class="navlabel">Previous:</b> <a class="sectref" rel="prev" href="module-parser.html">18.1 parser </A> <b class="navlabel">Up:</b> <a class="sectref" rel="parent" href="module-parser.html">18.1 parser </A> <b class="navlabel">Next:</b> <a class="sectref" rel="next" href="node683.html">18.1.2 Converting AST Objects</A> </div> <hr /></div> </DIV> <!--End of Navigation Panel--> <H2><A NAME="SECTION0020110000000000000000"><!--x--></A><A NAME="Creating_ASTs"><!--z--></A> <BR> 18.1.1 Creating AST Objects </H2> <P> AST objects may be created from source code or from a parse tree. When creating an AST object from source, different functions are used to create the <code>'eval'</code> and <code>'exec'</code> forms. <P> <dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline"> <td><nobr><b><tt id='l2h-4650' class="function">expr</tt></b>(</nobr></td> <td><var>source</var>)</td></tr></table></dt> <dd> The <tt class="function">expr()</tt> function parses the parameter <var>source</var> as if it were an input to "<tt class="samp">compile(<var>source</var>, 'file.py', 'eval')</tt>". If the parse succeeds, an AST object is created to hold the internal parse tree representation, otherwise an appropriate exception is thrown. </dl> <P> <dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline"> <td><nobr><b><tt id='l2h-4651' class="function">suite</tt></b>(</nobr></td> <td><var>source</var>)</td></tr></table></dt> <dd> The <tt class="function">suite()</tt> function parses the parameter <var>source</var> as if it were an input to "<tt class="samp">compile(<var>source</var>, 'file.py', 'exec')</tt>". If the parse succeeds, an AST object is created to hold the internal parse tree representation, otherwise an appropriate exception is thrown. </dl> <P> <dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline"> <td><nobr><b><tt id='l2h-4652' class="function">sequence2ast</tt></b>(</nobr></td> <td><var>sequence</var>)</td></tr></table></dt> <dd> This function accepts a parse tree represented as a sequence and builds an internal representation if possible. If it can validate that the tree conforms to the Python grammar and all nodes are valid node types in the host version of Python, an AST object is created from the internal representation and returned to the called. If there is a problem creating the internal representation, or if the tree cannot be validated, a <tt class="exception">ParserError</tt> exception is thrown. An AST object created this way should not be assumed to compile correctly; normal exceptions thrown by compilation may still be initiated when the AST object is passed to <tt class="function">compileast()</tt>. This may indicate problems not related to syntax (such as a <tt class="exception">MemoryError</tt> exception), but may also be due to constructs such as the result of parsing <code>del f(0)</code>, which escapes the Python parser but is checked by the bytecode compiler. <P> Sequences representing terminal tokens may be represented as either two-element lists of the form <code>(1, 'name')</code> or as three-element lists of the form <code>(1, 'name', 56)</code>. If the third element is present, it is assumed to be a valid line number. The line number may be specified for any subset of the terminal symbols in the input tree. </dl> <P> <dl><dt><table cellpadding="0" cellspacing="0"><tr valign="baseline"> <td><nobr><b><tt id='l2h-4653' class="function">tuple2ast</tt></b>(</nobr></td> <td><var>sequence</var>)</td></tr></table></dt> <dd> This is the same function as <tt class="function">sequence2ast()</tt>. This entry point is maintained for backward compatibility. </dl> <P> <DIV CLASS="navigation"> <div class='online-navigation'><hr /> <table align="center" width="100%" cellpadding="0" cellspacing="2"> <tr> <td class='online-navigation'><a rel="prev" title="18.1 parser " rel="prev" title="18.1 parser " href="module-parser.html"><img src='../icons/previous.png' border='0' height='32' alt='Previous Page' width='32' /></A></td> <td class='online-navigation'><a rel="parent" title="18.1 parser " rel="parent" title="18.1 parser " href="module-parser.html"><img src='../icons/up.png' border='0' height='32' alt='Up One Level' width='32' /></A></td> <td class='online-navigation'><a rel="next" title="18.1.2 Converting AST Objects" rel="next" title="18.1.2 Converting AST Objects" href="node683.html"><img src='../icons/next.png' border='0' height='32' alt='Next Page' width='32' /></A></td> <td align="center" width="100%">Python Library Reference</td> <td class='online-navigation'><a rel="contents" title="Table of Contents" rel="contents" title="Table of Contents" href="contents.html"><img src='../icons/contents.png' border='0' height='32' alt='Contents' width='32' /></A></td> <td class='online-navigation'><a href="modindex.html" title="Module Index"><img src='../icons/modules.png' border='0' height='32' alt='Module Index' width='32' /></a></td> <td class='online-navigation'><a rel="index" title="Index" rel="index" title="Index" href="genindex.html"><img src='../icons/index.png' border='0' height='32' alt='Index' width='32' /></A></td> </tr></table> <div class='online-navigation'> <b class="navlabel">Previous:</b> <a class="sectref" rel="prev" href="module-parser.html">18.1 parser </A> <b class="navlabel">Up:</b> <a class="sectref" rel="parent" href="module-parser.html">18.1 parser </A> <b class="navlabel">Next:</b> <a class="sectref" rel="next" href="node683.html">18.1.2 Converting AST Objects</A> </div> </div> <hr /> <span class="release-info">Release 2.3.4, documentation updated on May 20, 2004.</span> </DIV> <!--End of Navigation Panel--> <ADDRESS> See <i><a href="about.html">About this document...</a></i> for information on suggesting changes. </ADDRESS> </BODY> </HTML>