ANTLR表达式重写中间树

时间:2010-04-11 10:47:37

标签: tree antlr expression evaluate

对于像3 + 4这样的表达式,我想在中间表示树中使用值7。

我无法弄清楚如何将返回值转换为重写规则。

表达式返回[int v]: 等

如何将expression.v转换为WR?在我获得(+ 3 4)的那一刻,我想要(7)

| ^(WRITE c =表达式) - > ^(WRINT ^(INTC ^($ c))

下一步是在汇编程序中发出7。

1 个答案:

答案 0 :(得分:1)

我想您想知道如何使用重写语法构造值为$ c的单个数字标记,而不是另一个树?如果是这种情况,您可以使用

执行此操作
^(WRITE c=expression) -> INT[$c.v] ;

假设INT是整数的标记类型。

假设您的表达式规则实际上计算并返回整数结果。如果没有,你想知道如何进行恒定折叠,这是一个更大的话题。看一下ANTLR示例集合中的polynomial example;它显示了如何进行一些基本的简化。您可以使用树重写器使用

之类的规则来完成它
^('+' a=INT b=INT) -> INT[String.valueOf($a.int+$b.int)] ;