2013-03-05 35 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