在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)
作为可选项?
答案 0 :(得分:2)
问题解决了。没有什么棘手的,只需使用常见的RegExp语法:
^(EXTENDS $e)?