我正在做一个ANTLR规范。在我的AST中,我需要这样做:
characters ('*'^|'+'^|'?'^)?
我需要做一个重写规则,它将出现在ast而不是* ASTERISK,而不是+ PLUS而不是? QMARK节点?
我知道如果我们有这样的事情:
characters '*'
它可以重写为
^(ASTERISK characters)
但我不知道如何处理|操作
答案 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)
。