【问题标题】:ANTLR expressions rewrite intermediate treeANTLR 表达式重写中间树
【发布时间】:2010-04-11 10:47:36
【问题描述】:
对于像 3+4 这样的表达式,我想在中间表示树中使用值 7。
我不知道如何将返回值转换为重写规则。
表达式返回 [int v]:
等等
如何将 expression.v 导入 WR?在我得到 (+ 3 4) 的那一刻,我想要 (7)
|^( WRITE c=表达式) -> ^(WRINT ^(INTC ^($c))
下一步是在汇编程序中发出 7。
【问题讨论】:
标签:
tree
antlr
expression
evaluate
【解决方案1】:
我想你想知道如何使用重写语法来构造一个值为 $c 的单个数字标记,而不是另一棵树?如果是这种情况,您可以这样做
^(WRITE c=expression) -> INT[$c.v] ;
假设 INT 是整数的标记类型。
假设您的表达式规则实际计算并返回一个整数结果。如果没有,并且您想知道如何进行持续折叠,那将是一个更大的话题。查看 ANTLR 示例集合中的 polynomial example;它展示了如何进行一些基本的简化。您可能可以使用诸如
之类的规则使用树重写器来做到这一点
^('+' a=INT b=INT) -> INT[String.valueOf($a.int+$b.int)] ;