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