我想知道如何使用 ocamllex 和 ocamlyacc 编写三地址代码?我用谷歌搜索了很多关于这个,但我找不到任何使用 ocamlyacc 的东西。我的解析器和词法分析器都在工作(当然都使用 ocamlyacc 和 ocamllex),但现在我必须使用它们编写一个三地址代码生成器。例如,假设我有这个解析器(计算器):
三地址码应该怎么写?
解析器:
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)
三地址码输出:
t1 = 5*7
t2 = 5+t1