Tree ANTLR表达式重写中间树

Tree ANTLR表达式重写中间树,tree,antlr,expression,evaluate,Tree,Antlr,Expression,Evaluate,对于像3+4这样的表达式,我希望在中间表示树中使用值7 我无法解决如何将返回值放入重写规则中 表达式返回[int v]: 等等 如何将expression.v导入WR?在我得到(+34)的那一刻,我想要(7) |^(WRITE c=表达式)->^(WRINT^(INTC^($c)) 下一步是在汇编程序中发出7。我想您想知道如何使用重写语法构造一个值为$c的数字标记,而不是另一个树?如果是这样,您可以使用 ^(WRITE c=expression) -> INT[$c.v] ; 假设INT

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

我无法解决如何将返回值放入重写规则中

表达式返回[int v]: 等等

如何将expression.v导入WR?在我得到(+34)的那一刻,我想要(7)

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


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

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

^(WRITE c=expression) -> INT[$c.v] ;
假设INT是整数的标记类型

这假设您的表达式规则实际计算并返回整数结果。如果不计算并返回整数结果,并且您想知道如何进行常数折叠,这是一个更大的主题。请查看ANTLR示例集合中的;它显示了如何进行一些基本简化。您可能可以使用树重写器使用以下规则来完成此操作:

^('+' a=INT b=INT) -> INT[String.valueOf($a.int+$b.int)] ;