在 ANTLR 中构建 AST 时遇到问题(我使用的是 ANTLR 3.2、ANTLRWorks 1.4)。
这是我的语法:
classDeclaration
:
(
'class' n=IDENTIFIER ('extends' e=IDENTIFIER)?
'{'
…
'}'
)
-> ^(CLASSDECLARATION ^(NAME $n) ^(EXTENDS $e)
;
问题出现在类的可选部分 - ('extends' e=IDENTIFIER)?
.
所以语法适用于这个类声明:
class Test1 extends AbstractTest1 {
…
}
并且在我排除extends
部分时失败,如下所示:
class Test2 {
…
}
ANTLR 在此片段之前停止并在控制台中给出此异常:
javax.swing.text.BadLocationException: Position not represented by view
我如何指向 ANTLR 来处理^(EXTENDS $e)
可选的重写规则?