基于模式的ANTLR树重写

基于模式的ANTLR树重写,antlr,antlr3,abstract-syntax-tree,Antlr,Antlr3,Abstract Syntax Tree,我在ANTLR 3中掌握了相当基本的语法,我希望做以下工作: -如果“+”出现在“术语”前面,只需删除它,因为它是多余的(完成)。 -如果一个“-”出现在一个“term”的前面,保留它,但是在第一个子节点中添加一个“0”,这样我就可以有效地从“-2”转到“0-2” 我曾尝试过树重写,但在匹配可能的'-'时似乎陷入了困境 注意:ADD表示“+”,减号表示“-”。假设INTEGER是文本0所需的标记类型,您可以使用以下方法: unaryterm : ADD! term | M

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

我曾尝试过树重写,但在匹配可能的'-'时似乎陷入了困境


注意:ADD表示“+”,减号表示“-”。

假设
INTEGER
是文本
0
所需的标记类型,您可以使用以下方法:

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