我在ANTLR 3中有一个相当基本的语法,我希望做到以下几点: - 如果'''出现在'term'前面,只需将其删除,因为它是冗余的(完成)。 - 如果' - '出现在'term'前面,请保留它,但是为第一个子节点添加一个'0',以便我有效地从“-2”变为“0-2”。
expression:
unaryterm ((ADD^ | MINUS^) term)*
;
unaryterm:
(ADD! | MINUS^)? term
;
我已经进行了树重写,但在匹配可能的' - '时似乎陷入困境。
注意:ADD代表'+',MINUS代表' - '。
答案 0 :(得分:2)
假设INTEGER
是文字0
所需的令牌类型,您可以使用以下内容:
unaryterm
: ADD! term
| MINUS term -> ^(MINUS INTEGER["0"] term)
| term
;