←第3回のヒント | ↑目次 | →4.3節の確認

情報科学実験II コンパイラ作成

第4回

電卓プログラムのコンパイルの方法

リスト4.2のプログラムをcalc.yとして作成して、以下の操作を行う。bison -t -dはcalc.tab.cという名前のCソースファイルとcalc.tab.hという名前のヘッダファイルを出力する。なお、bisonにさらに-yオプションをつけて起動すると、出力されるファイルの名前はそれぞれy.tab.c, y.tab.hに固定される。-tオプション(--debugオプションの省略形)をつけないと、gccでコンパイルした際に、ldにyydebugがないと叱られてうまくいかない。
bison -t -d calc.y
gcc -o calc calc.tab.c

課題4.2のヒント

SymAdd関数の動作

SymAddでは実行前の状態(A)から、SymEntryを1つ追加して(B)、symtable, prevを適切に設定(C)する。

SymLookup関数の動作

SymAddでは、大域変数symtableが最後に挿入されたSymEntryを指していて、prevを用いて挿入された逆順にSymEntryをたどっていくことができる。下の図では丸数字がSymAddで挿入された順である。例えば、SymEntryPtr xがを指しているとき、x->prevはのSymEntryを指す。
SymLookupでは、引数nameで与えた名前をもつSymEntryを探す。ただし、curfunc(今後の構文解析の途中で設定される大域変数であるが、SymLookup関数のテストをする際には、適宜設定すること)に属するSymEntryがあればそれを返す。

トップページ