2016-08-25 41 views
0

無法真正找到對此的答案。注意:如果有問題,使用antlr 3而不是4。 試圖根據三種不同的可能表達式構造一個子節點。antlr從三種不同的可能選項創建子節點

(variable)* (n_expr|d_expr|s_expr)+ 
      { 

      } -> ^(FORMULA_DEF n_expr|d_expr|s_expr) 

引發錯誤,因爲我無法使用(n_expr | d_expr | s_expr)作爲子節點。

回答

0

他們都添加到子樹的一個共同列表:

(variable)* (e+=num_expr|e+=date_expr|e+=string_expr)+ 
-> ^(FORMULA_DEF INTEGER RCALL $e+) 

,或者如果你想爲每個expr

(variable)* (e+=num_expr|e+=date_expr|e+=string_expr)+ 
-> ^(FORMULA_DEF INTEGER RCALL $e)+ 
+0

什麼是電子定義爲新FORMULA_DEF? – clearner

+0

'e'是ANTLR變量,ANTLR應該將其定義爲生成的代碼中的樹節點列表。不需要用語法明確地定義它 –

+0

(e + = ... | e + = ... | e + = ..)可以正常工作。但通過做^(FORMULA_DEF INTEGER RCALL e +),我得到了一個未定義規則的引用:e。 – clearner

相關問題