代码之家  ›  专栏  ›  技术社区  ›  MiKo

ANTLR中AST的可选重写规则

  •  3
  • MiKo  · 技术社区  · 14 年前

    我在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 回复  |  直到 14 年前
        1
  •  2
  •   MiKo    14 年前

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

    ^(EXTENDS $e)?