プログラミングと工作と

PythonとかPascalとかAVRマイコンとか、コンパイラつくったり電子工作なんかを楽しんでいるおっさんの記録

記号表の具体例

さて、記号表にはどのように値を入れていくのか、実際の例で見ていきます。
例えば、ソースプログラムで次の様な宣言があったとします。

var
  id : integer;
 
変数「id」を整数として宣言しています。
この宣言から、次のような記号表symbol(ディクショナリ)を作成します。

symbol = {'id':{type:'int', mode:mutable, value:'', alloc:yes, units:1}}

通常は、変数などの数は複数あります。
次の様な定数と変数の宣言があった場合

const
  yes = true;
  nom = 123;
var
  id1 : integer;
  id2 : boolean;
 
記号表は次のように複数の キー:値 を持ちます。

symbol = {'yes':{type:'bool', mode:immutable, value:'true', alloc:yes, units:1}
          'nom':{type:'int', mode:immutable, value:123, alloc:yes, units:1}
          'id1':{type:'int', mode:mutable, value:'', alloc:yes, units:1}
          'id2':{type:'bool', mode:mutable, value:'', alloc:yes, units:1}
          }

宣言された定数名や変数名をキーとして、その属性を値としてディクショナリの形で入れていきます。
このように、定数、変数、関数など、宣言されるたびにどんどん記号表の キー:値 の組が追加されていきます。

参照する場合は、例えば上の例で言うと、変数「id1」の型を知りたい場合

symbol['id1'][type]

とやれば'int'とすぐにわかります。
本当は、ここで2分探索やハッシュなどの検索アルゴリズムを駆使するところなのですが、辞書を使って全部Python先生に丸投げしますw
いや、そのためのPythonですから!