3

在 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)可选的重写规则?

4

1 回答 1

2

问题解决了。没什么棘手的,只需要使用常见的 RegExp 语法:

^(EXTENDS $e)?
于 2010-11-28T17:20:09.170 回答