重写ANTLR中的规则

时间:2012-03-01 15:07:11

标签: compiler-construction antlr

我正在做一个ANTLR规范。在我的AST中,我需要这样做:

characters ('*'^|'+'^|'?'^)?

我需要做一个重写规则,它将出现在ast而不是* ASTERISK,而不是+ PLUS而不是? QMARK节点?

我知道如果我们有这样的事情:

characters '*' 

它可以重写为

^(ASTERISK characters)

但我不知道如何处理|操作

1 个答案:

答案 0 :(得分:2)

试试这个:

grammar T;

// options ...

tokens {
  ASTERISK;
  PLUS;
  QMARK;
}

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

rule
 : (characters -> characters) ( '*' -> ^(ASTERISK characters)
                              | '+' -> ^(PLUS characters)
                              | '?' -> ^(QMARK characters)
                              )?
 ;

这里的关键是,如果可选的*+? characters将保持characters 1}}通过重写规则:(characters -> characters)