関数定義に対応するの大変でした。
初めは今までと同じNodeとして定義していたのですが、それだとうまくいかず
プログラムを関数の集まりと定義する事にして関数定義に対応しました。
再帰呼び出しもちゃんとできているのでいったん良しです。
生成規則は以下のような感じになりました。
program: def_func program: def_func def_func program: ε def_func: ident "(" def_argument ")" "{" func_body "}" def_argument: ident def_argument: ident "," def_argument def_argument: ε func_body: stmt func_body func_body: ε stmt: assign ";" : |
インクリメンタルに開発していく事でコンパイラが成長していくのが面白いです。
次は制御構文を追加します。
これができると再帰でループできるようになります。
0 件のコメント :
コメントを投稿