2013-03-05 38 views
1

我在ANTLR 3中已經有了一個相當基本的語法,並且我正在執行以下操作: - 如果'+'出現在'term'前面,只需將其刪除即可是多餘的(完成)。 - 如果在'term'前面出現' - ',則保留它,但是爲第一個子節點添加一個'0',以便我有效地從「-2」變爲「0-2」。ANTLR基於模式的樹重寫

expression: 
    unaryterm ((ADD^ | MINUS^) term)* 
; 

unaryterm: 
    (ADD! | MINUS^)? term 
; 

我已經去了樹重寫,但似乎遇到了匹配可能的' - '。

注:ADD代表'+',MINUS代表' - '。

回答

2

假設INTEGER是你想要的記號類型字面0,你可以使用以下命令:

unaryterm 
    : ADD! term 
    | MINUS term -> ^(MINUS INTEGER["0"] term) 
    | term 
    ; 
+0

完美的作品 - 謝謝! – 2013-03-05 16:41:40