2010-04-11 35 views
2

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

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

表达返回[INT V]: 等

我如何expression.v到WR?目前,我得到(+ 3 4),我想(7)

| ^(写C =表达式) - > ^(WRINT ^(INTC ^($ C))

下一步在汇编程序中发射7个数据

回答

1

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

^(WRITE c=expression) -> INT[$c.v] ; 

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

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

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