对于像 3+4 这样的表达式,我想在中间表示树中使用值 7。
我无法弄清楚如何将返回值转换为重写规则。
表达式返回 [int v]: 等等。
如何将 expression.v 放入 WR?在我得到 (+ 3 4) 的那一刻,我想要 (7)
|^( WRITE c=表达式) -> ^(WRINT ^(INTC ^($c))
下一步是在汇编程序中发出 7。
对于像 3+4 这样的表达式,我想在中间表示树中使用值 7。
我无法弄清楚如何将返回值转换为重写规则。
表达式返回 [int v]: 等等。
如何将 expression.v 放入 WR?在我得到 (+ 3 4) 的那一刻,我想要 (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)] ;