symbol table
symbol tableは、プログラミング言語のコンパイラやインタプリタが、ソースコード内の識別子(変数名、関数名、クラス名など)を効率的に管理するための内部的な名簿のような役割を果たします。単に名前を記録するだけでなく、その識別子がどのデータ型であるか、どのメモリ番地に割り当てられているかといった重要な属性情報を紐付けて保持します。
動作の仕組みと重要性
プログラムの解析中、コンパイラは新しい識別子を見つけるたびにそれをsymbol tableに追加し、後でその識別子が参照された際に、テーブル内を検索して正しい定義や型情報を取得します。これにより、変数の二重定義の検知や、型チェックなどの静的解析が可能になります。効率的な検索を実現するために、内部的にはハッシュテーブルなどの高速なデータ構造が一般的に採用されています。
スコープとシンボルテーブルの関係
多くの言語では、変数の有効範囲(スコープ)が存在するため、単一のテーブルではなく、階層構造を持つ複数のsymbol tableが利用されます。例えば、関数内部で定義されたローカル変数は、その関数専用のテーブルに保存され、関数を抜けると破棄されます。これにより、異なるスコープで同じ名前の変数が使われていても、正しく区別して処理することができます。
意味
コンパイラやインタプリタが、ソースコード内で見つかった変数、関数、クラスなどの識別子に関する情報を保存するために使用するデータ構造のこと
The compiler looks up the variable name in the symbol table to determine its data type and memory location.
コンパイラはシンボルテーブルで変数名を検索し、そのデータ型とメモリ上の位置を決定する。