Compiler construction 在ANTLR中重写规则

Compiler construction 在ANTLR中重写规则,compiler-construction,antlr,Compiler Construction,Antlr,我正在做一个ANTLR规范。在我的AST中,我需要执行以下操作: characters ('*'^|'+'^|'?'^)? 我需要做一个重写规则,它将出现在ast中,而不是*星号,而不是+加号和?QMARK节点 我知道如果我们有这样的东西: characters '*' 它可以重写为 ^(ASTERISK characters) 但我不知道如何处理|操作员?试试这个: grammar T; // options ... tokens { ASTERISK; PLUS; Q

我正在做一个ANTLR规范。在我的AST中,我需要执行以下操作:

characters ('*'^|'+'^|'?'^)?
我需要做一个重写规则,它将出现在ast中,而不是*星号,而不是+加号和?QMARK节点

我知道如果我们有这样的东西:

characters '*' 
它可以重写为

^(ASTERISK characters)
但我不知道如何处理|操作员?

试试这个:

grammar T;

// options ...

tokens {
  ASTERISK;
  PLUS;
  QMARK;
}

// @header and/or @members ...

rule
 : (characters -> characters) ( '*' -> ^(ASTERISK characters)
                              | '+' -> ^(PLUS characters)
                              | '?' -> ^(QMARK characters)
                              )?
 ;
这里的关键是,如果可选的
*
+
不存在,则
字符将根据重写规则保持
字符