2010-11-28 8 views
3

ANTLRでASTを作成する際に問題があります(私はANTLR 3.2、ANTLRORK 1.4を使用しています)。ANTLRのASTのオプションの書き換えルール

これは私の文法である:

classDeclaration 
    : 
    (
     'class' n=IDENTIFIER ('extends' e=IDENTIFIER)? 
     '{' 
     … 
     '}' 
    ) 
     -> ^(CLASSDECLARATION ^(NAME $n) ^(EXTENDS $e) 
; 

問題は、クラスのオプション部分で発生 - ('extends' e=IDENTIFIER)?

ので、文法はこのクラスの宣言で良い作品:

class Test1 extends AbstractTest1 { 
… 
} 

そして、私はextends一部を除外したときに、次のように、失敗します。

class Test2 { 
… 
} 

ANTLRはちょうどこのフラグメントの前に停止し、この例外を与えますコンソール:

書き換えルールを処理するにはANTLRをどのように指すことができますかはオプションですか?

答えて

2

問題が解決しました。扱いにくいものではなく、一般的なRegExp構文を使用するだけでした。

^(EXTENDS $e)?