1 オートマトンと状態遷移図

5.2 記号表
(1)記号表とは
ソースプログラム中の識別子は何らかの対象を示す。
①変数名
②関数名、手続き名
③型名
④予約語
上記①、②、③について制御するための表を
記号表(Symbol Table, Name Table)という。
(2)記号表の内容
①識別子の綴り
②識別氏の種類(変数、関数、手続き、定数、型など)
③種別ごとの情報
変数名は多くなりがちなので、
ハッシュ法(hashing)が用いられることが多い。
■ハッシュ法については他の文献参照。
たとえば、拙著「Visual C#.NETによる明解アルゴリズムとデータ構造」
(3)種別ごとの情報
(a) 変数のとき
①型
②サイズ(バイト数、語数など)
③変数の有効範囲(局所、大域的など)
④通常の変数か、仮引数か
⑤既に宣言されているかどうか
⑥実行時の番地
など
種別ごとの情報
(b) 関数名や手続き名
①関数か手続きか
②関数結果の型
③名前の有効範囲(局所、大域的など)
④関数や手続きの先頭番地
⑤仮引数の型、仮引数名、これらの個数
種別ごとの情報
(c) 型名
①型の種別(整数、浮動小数点、配列、構造体)
②型の種別ごとの情報
配列の次元、添え字範囲
構造体を構成する要素名とその型
など
③データ抽象化が概念がある場合、その演算子情報
種別ごとの情報
(c) 型名
①型の種別(整数、浮動小数点、配列、構造体)
②型の種別ごとの情報
配列の次元、添え字範囲
構造体を構成する要素名とその型
など
③データ抽象化が概念がある場合、その演算子情報
(3)種別ごとの情報
(d) 定数名
①型
②定数の内部表現または定数表現を格納する番地
(3)言語別の取扱い
① Ada ではパッケージ名、タスク名、タスクのエントリ
名も識別子として取り扱う
② 識別子は、基本的にはプログラムの宣言部から得られ
るが、FORTRAN や BASIC 等、暗黙の型宣言を許す言
語では、実行部における名前の参照でも記号表に登録
する必要がある。
③ LISP や Prolog のように実行時に識別名が生成され
るような言語もある。
なお、通常、記号表は識別子全体でまとめることが普通
だが、関数名・手続き名、型、ラベルなど各種別ごとに
別の表にすることも多い。
(4)識別子の有効範囲
① FORTRAN 副プログラム(サブルーチン、ファンクション)
局所変数(Local)、コモン変数(Common)
② 言語C 関数(値を返さない関数Void(空虚)がある)
局所変数、外部変数(extern)、静的変数(static)
③ PL/I 手続き(procedure)、関数(function )
局所的変数(Local)、大域的変数(Global)
④ Pascal、Ada 手続き(procedure)、関数(function )
ブロックの入れ子構造に対応して内側から外側のブロックの名前を参
照可能
⑤ Lisp 関数(function )
呼出し順序に対応して、呼び出された側から呼出し側の変数を参照可
能(結果的には、Pascal や Ada と同じ)
(5)一括コンパイルと分離コンパイル
① 一括コンパイル(batch compilation )
Pascalでは完結したソースプログラムを1回のコンパイルで目的プログ
ラムに変換
② 分離コンパイル(separate compilation)
一般には、ソースプログラムを分割して複数ファイルにして、別々にコ
ンパイル。後でリンケージエディタやリンクローダ等でリンクする。
外部名はコンパイル後も保持し、
アドレス解決はリンケージエディタや
ダイナミックリンクローダで行う。