访问在括号中定义的属性



我使用antlr4与python2的目标,

additive_expression returns [value] @init{$value = 0;}
  : multiplicative_expression ((PLUS_OPERATOR | MINUS_OPERATOR) multiplicative_expression)*

由于((PLUS_OPERATOR | MINUS_OPERATOR) multiplicative_expression)表达式出现零次或多次,

我需要分别访问它们,然后计算最终值。

任何想法?我试过以下方法,但都不行

  1. 使用re = (...)和antlr说我不能为非设置定义它
  2. 使用op = (PLUS_OPERATOR | MINUS_OPERATOR)等,但它总是指向表达式
  3. 的最后出现

试试这样:

additive_expression returns [value] 
@init{$value = 0;}
 : e1=multiplicative_expression                  {$value = $e1.value;}
   ( PLUS_OPERATOR e2=multiplicative_expression  {$value += $e2.value;}
   | MINUS_OPERATOR e2=multiplicative_expression {$value -= $e2.value;}
   )*
 ;

或者更好的是,使用访问者而不是在语法中嵌入目标代码1

1 ANTLR4访问者模式的简单算术示例

相关内容

  • 没有找到相关文章

最新更新