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

^(EXTENDS $e)オプションとして書き換えルールを処理するために ANTLR を指定するにはどうすればよいですか?

4

1 に答える 1

2

問題が解決しました。一般的な RegExp 構文を使用するだけで済みます。

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