目次

前のトピックへ

32.2. 抽象構文木

次のトピックへ

32.4. symbol — Python 解析木と共に使われる定数

このページ

32.3. symtable — コンパイラの記号表へのアクセス

記号表(symbol table)が作られるのはコンパイラが AST からバイトコードを生成する直前です。 記号表はコード中の全ての識別子のスコープの算出に責任を持ちます。 symtable はこうした記号表を調べるインターフェイスを提供します。

32.3.1. 記号表の作成

symtable.symtable(code, filename, compile_type)

Python ソース code に対するトップレベルの SymbolTable を返します。 filename はコードを収めてあるファイルの名前です。 compile_typecompile()mode 引数のようなものです。

32.3.2. 記号表の検査

class symtable.SymbolTable

ブロックに対する名前空間の表。 コンストラクタはパブリックではありません。

get_type()

記号表の型を返します。 有り得る値は 'class', 'module', 'function' です。

get_id()

表の識別子を返します。

get_name()

表の名前を返します。この名前は表がクラスに対するものであればクラス名であり、 関数に対するものであれば関数名であり、グローバルな (get_type()'module' を返す) 表であれば 'top' です。

get_lineno()

この表が表しているブロックの一行目の行番号を返します。

is_optimized()

この表の locals が最適化できるならば True を返します。

is_nested()

ブロックが入れ子のクラスまたは関数のとき True を返します。

has_children()

ブロックが入れ子の名前空間を抱えているならば True を返します。 入れ子の名前空間は get_children() で得られます。

has_exec()

ブロックの中で exec が使われているならば True を返します。

has_import_start()

ブロックの中でアスタリスクの from-import が使われているならば True を返します。

get_identifiers()

この表にある記号の名前のリストを返します。

lookup(name)

表から name を見つけ出して Symbol インスタンスとして返します。

get_symbols()

表中の名前を表す Symbol インスタンスのリストを返します。

get_children()

入れ子になった記号表のリストを返します。

class symtable.Function

関数またはメソッドの名前空間。 このクラスは SymbolTable を継承しています。

get_parameters()

この関数の引数名からなるタプルを返します。

get_locals()

この関数のローカルな名前からなるタプルを返します。

get_globals()

この関数のグローバルな名前からなるタプルを返します。

get_frees()

この関数の自由変数の名前からなるタプルを返します。

class symtable.Class

クラスの名前空間。 このクラスは SymbolTable を継承しています。

get_methods()

このクラスで宣言されているメソッド名からなるタプルを返します。

class symtable.Symbol

SymbolTable のエントリーでソースの識別子に対応するものです。 コンストラクタはパブリックではありません。

get_name()

記号の名前を返します。

is_referenced()

記号がブロックの中で使われていれば True を返します。

is_imported()

記号が import 文で作られたものならば True を返します。

is_parameter()

記号がパラメータならば True を返します。

is_global()

記号がグローバルならば True を返します。

is_local()

記号がブロックのローカルならば True を返します。

is_free()

記号がブロックの中で参照されても代入は行われないならば True を返します。

is_assigned()

記号がブロックの中で代入されているならば True を返します。

is_namespace()

名前の束縛が新たな名前空間を導入するならば True を返します。

名前が関数またはクラス文のターゲットとして使われるならば、真です。

一つの名前が複数のオブジェクトに束縛されうることに注意しましょう。 結果が True であったとしても、その名前が他のオブジェクトにも束縛され、 それがたとえば整数やリストであれば、そこでは新たな名前空間は導入されません。

get_namespaces()

この名前に束縛された名前空間のリストを返します。

get_namespace()

この名前に束縛されたただ一つの名前空間を返します。 束縛された名前空間が一つより多くあれば ValueError が送出されます。