基于模式的ANTLR树重写

时间:2013-03-05 15:29:54

标签: antlr antlr3 abstract-syntax-tree

我在ANTLR 3中有一个相当基本的语法,我希望做到以下几点:   - 如果'''出现在'term'前面,只需将其删除,因为它是冗余的(完成)。   - 如果' - '出现在'term'前面,请保留它,但是为第一个子节点添加一个'0',以便我有效地从“-2”变为“0-2”。

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

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

我已经进行了树重写,但在匹配可能的' - '时似乎陷入困境。

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

1 个答案:

答案 0 :(得分:2)

假设INTEGER是文字0所需的令牌类型,您可以使用以下内容:

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