##
18.1.1 ASTオブジェクトを作成する

ASTオブジェクトはソースコードあるいは解析木から作られます。ASTオブジェクトをソースから作るときは、`'eval'`と`'exec'`形式を作成するために別々の関数が使われます。

`expr`( | source)

  まるで"`compile(source, 'file.py', 'eval')`"への入力であるかのように、`expr()`関数はパラメータsourceを構文解析します。解析が成功した場合は、ASTオブジェクトは内部解析木表現を保持するために作成されます。そうでなければ、適切な例外を発生させます。

`suite`( | source)

  まるで"`compile(source, 'file.py', 'exec')`"への入力であるかのように、`suite()`関数はパラメータsourceを構文解析します。解析が成功した場合は、ASTオブジェクトは内部解析木表現を保持するために作成されます。そうでなければ、適切な例外を発生させます。

`sequence2ast`( | sequence)

  この関数はシーケンスとして表現された解析木を受け取り、可能ならば内部表現を作ります。木がPythonの文法に合っていることと、すべてのノードがPythonのホストバージョンで有効なノード型であることを確認した場合は、ASTオブジェクトが内部表現から作成されて呼び出し側へ返されます。内部表現の作成に問題があるならば、あるいは木が正しいと確認できないならば、`ParserError`例外を発生します。この方法で作られたASTオブジェクトが正しくコンパイルできると決めつけない方がよいでしょう。ASTオブジェクトが`compileast()`へ渡されたとき、コンパイルによって送出された通常の例外がまだ発生するかもしれません。これは(`MemoryError`例外のような)構文に関係していない問題を示すのかもしれないし、`del f(0)`を解析した結果のようなコンストラクトが原因であるかもしれません。このようなコンストラクトはPythonのパーサを逃れますが、バイトコードインタープリタによってチェックされます。

  終端トークンを表すシーケンスは、`(1, 'name')`形式の二つの要素のリストか、または`(1, 'name', 56)`形式の三つの要素のリストです。三番目の要素が存在する場合は、有効な行番号だとみなされます。行番号が指定されるのは、入力木の終端記号の一部に対してです。

`tuple2ast`( | sequence)

  これは`sequence2ast()`と同じ関数です。このエントリポイントは後方互換性のために維持されています。