2016-09-06 42 views
1

我使用antlr4与python2目标,Access属性

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)等,但它始终指向表情最后出场

回答

1

尝试这样:

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

ANTLR4 visitor pattern on simple arithmetic example