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 を指定するにはどうすればよいですか?