1

我在 ANTLR 3 中有一个相当基本的语法,我希望执行以下操作: - 如果“术语”前面出现“+”,只需将其删除,因为它是多余的(完成)。- 如果“术语”前面出现“-”,请保留它,但是在第一个子节点中添加“0”,这样我就可以有效地从“-2”变为“0-2”。

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

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

我尝试过重写树,但在匹配可能的“-”时似乎卡住了。

注:ADD 代表“+”,MINUS 代表“-”。

4

1 回答 1

2

假设这INTEGER是您想要的文字标记类型0,您可以使用以下内容:

unaryterm
    :   ADD! term
    |   MINUS term -> ^(MINUS INTEGER["0"] term)
    |   term
    ;
于 2013-03-05T16:08:54.257 回答