関数定義に対応するの大変でした。
初めは今までと同じNodeとして定義していたのですが、それだとうまくいかず
プログラムを関数の集まりと定義する事にして関数定義に対応しました。
再帰呼び出しもちゃんとできているのでいったん良しです。
生成規則は以下のような感じになりました。
```
`gutter:false;
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 ";"
:
```
インクリメンタルに開発していく事でコンパイラが成長していくのが面白いです。
次は制御構文を追加します。
これができると再帰でループできるようになります。
## 参考URL
* [低レイヤを知りたい人のためのCコンパイラ作成入門](https://www.sigbus.info/compilerbook)
* 進捗は[ここ](https://github.com/k28/9cc)
0 件のコメント :
コメントを投稿