【问题标题】: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)] ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      相关资源
      最近更新 更多