18.1.2 ASTオブジェクトを変換する

作成するために使われた入力に関係なく、ASTオブジェクトはリスト木またはタプル木として表される解析木へ変換されるか、または実行可能なオブジェクトへコンパイルされます。解析木は行番号情報を持って、あるいは持たずに抽出されます。

ast2list( ast[, line_info])
この関数は呼び出し側からastにASTオブジェクトを受け取り、解析木と等価なPythonのリストを返します。結果のリスト表現はインスペクションあるいはリスト形式の新しい解析木の作成に使うことができます。リスト表現を作るためにメモリが利用できる限り、この関数は失敗しません。解析木がインスペクションのためだけにつかわれるならば、メモリの消費量と断片化を減らすためにast2tuple()を代わりに使うべきです。リスト表現が必要とされるとき、この関数はタプル表現を取り出して入れ子のリストに変換するよりかなり高速です。

line_infoが真ならば、トークンを表すリストの三番目の要素として行番号情報がすべての終端トークンに含まれます。与えられた行番号はトークンが終わる行を指定していることに注意してください。フラグが偽または省略された場合は、この情報は省かれます。

ast2tuple( ast[, line_info])
この関数は呼び出し側からastにASTオブジェクトを受け取り、解析木と等価なPythonのタプルを返します。リストの代わりにタプルを返す以外は、この関数はast2list()と同じです。

line_infoが真ならば、トークンを表すリストの三番目の要素として行番号情報がすべての終端トークンに含まれます。フラグが偽または省略された場合は、この情報は省かれます。

compileast( ast[, filename = '<ast>'])
exec文の一部として使える、あるいは、組み込みeval()関数への呼び出しとして使えるコードオブジェクトを生成するために、PythonバイトコードコンパイラをASTオブジェクトに対して呼び出すことができます。この関数はコンパイラへのインターフェイスを提供し、filenameパラメータで指定されるソースファイル名を使って、astからパーサへ内部解析木を渡します。filenameに与えられるデフォルト値は、ソースがASTオブジェクトだったことを示唆しています。

ASTオブジェクトをコンパイルすることは、コンパイルに関する例外を引き起こすことになるかもしれません。例としては、del f(0)の解析木によって発生させられるSyntaxErrorがあります: この文はPythonの形式文法としては正しいと考えられますが、正しい言語コンストラクトではありません。この状況に対して発生するSyntaxErrorは、実際にはPythonバイトコンパイラによって通常作り出されます。これがparserモジュールがこの時点で例外を発生できる理由です。解析木のインスペクションを行うことで、コンパイルが失敗するほとんどの原因をプルグラムによって診断することができます。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。