ocamllex と ocamllyacc を使用して 3 つのアドレス コードを記述する方法を考えていました。私はこれについてたくさんグーグルで調べましたが、ocamlyacc を使用して何も見つけることができませんでした。パーサーとレクサーが動作しています (もちろん、両方とも ocamlyacc と ocamllex を使用しています) が、これらを使用して 3 つのアドレス コード ジェネレーターを作成する必要があります。たとえば、このパーサー (電卓) があるとします。
3つの住所コードはどのように書けばよいですか?
パーサー:
input: /* empty */ { }
| input line { }
;
line: NEWLINE { }
| exp NEWLINE { }
;
exp: NUM { }
| exp PLUS exp { }
| exp MINUS exp { }
| exp MULTIPLY exp { }
| exp DIVIDE exp { }
| MINUS exp %prec NEG { }
| exp CARET exp { }
| LPAREN exp RPAREN { }
;
例:
入力:
5+(5*7)
3 つのアドレス コード出力:
t1 = 5*7
t2 = 5+t1