对于像3 + 4这样的表达式,我想在中间表示树中使用值7。
我无法弄清楚如何将返回值转换为重写规则。
表达式返回[int v]: 等
如何将expression.v转换为WR?在我获得(+ 3 4)的那一刻,我想要(7)
| ^(WRITE c =表达式) - > ^(WRINT ^(INTC ^($ c))
下一步是在汇编程序中发出7。
答案 0 :(得分:1)
我想您想知道如何使用重写语法构造值为$ c的单个数字标记,而不是另一个树?如果是这种情况,您可以使用
执行此操作^(WRITE c=expression) -> INT[$c.v] ;
假设INT是整数的标记类型。
假设您的表达式规则实际上计算并返回整数结果。如果没有,你想知道如何进行恒定折叠,这是一个更大的话题。看一下ANTLR示例集合中的polynomial example;它显示了如何进行一些基本的简化。您可以使用树重写器使用
之类的规则来完成它^('+' a=INT b=INT) -> INT[String.valueOf($a.int+$b.int)] ;