ANTLR中AST的可选重写规则

时间:2010-11-28 16:38:25

标签: antlr abstract-syntax-tree

在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)作为可选项?

1 个答案:

答案 0 :(得分:2)

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

^(EXTENDS $e)?