generated at
記号表
symbol table
名前表、辞書、環境ともいう
束縛の集合
プログラマが付けた名前が何を指しているかなどを表す表を作る

項目の例
名前
ex. hoge, piyo
何の名前か
ex. 変数、配列、関数、自作型
ex. int, string, array
語長
ex. 1byte, 4byte, 8byte
種別
ex. global, local, 仮引数
記憶域
どこにメモリセグメントされるか
その他
インデント、ブロックのレベル
割り当てられた番地
相対番地、絶対番地
その変数がconstなのかletなのか


記号表の構造をどうするか
無難にただのテーブルにすると起こりうる問題点
複雑になりがち
記号によって全ての項目が必要なわけではない
無駄が生じる
記号の長さに30文字まで許容しておいたとしても全ても記号が30文字使うわけではない



記号表の更新
新しいスコープに入る毎に記号表を更新する
前の記号表\sigma_0から、\sigma_1=\sigma_0+\{a:\mathrm{int},\;b:\mathrm{string}\}などになる
記号表の中の記号がかぶった場合は、より新しい方のものを優先する
スコープから抜けたときは、その記号表を破棄する
\sigma_1を破棄して\sigma_0を見るように戻る
関数型の場合は再代入がないのでここで容易に\sigma_0に戻ることができる
手続き型の場合で、破壊的代入をしている場合は、記憶するなどの必要がある






参考