4

私はこのような文法を持っています。

locationPath returns [CustomParser xpathParser]  
    :^(LOCATION_PATH relativeLocationPath {**Want to throw a exception if this condition matches**})
    |^(LOCATION_PATH absoluteLocationPath {$xpathParser=$absoluteLocationPath.xpathParser;})
    ;

それを行う方法は何ですか?私はこれで試しました

locationPath returns [CustomParser xpathParser]  
    :^(LOCATION_PATH relativeLocationPath {throw new Exception})
    |^(LOCATION_PATH absoluteLocationPath {$xpathParser=$absoluteLocationPath.xpathParser;})

しかし、これを使用すると、生成されたコードでコンパイル エラーが発生します。そのメソッド loactionapth には、メソッド シグネチャでスローの手がかりがないためです。

4

1 に答える 1

3

これを行う唯一の方法は、チェックされていない例外をスローすることです。

locationPath returns [CustomParser xpathParser]  
 : ^(LOCATION_PATH relativeLocationPath) {throw new RuntimeException("No way!");}
 | ^(LOCATION_PATH absoluteLocationPath {$xpathParser=$absoluteLocationPath.xpathParser;})
 ;

それでもコンパイラが文句を言う場合(思い出せず、今はテストできません)、そのif(true)前にを追加します。

locationPath returns [CustomParser xpathParser]  
 : ^(LOCATION_PATH relativeLocationPath) {if(true) throw new RuntimeException("No way!");}
 | ^(LOCATION_PATH absoluteLocationPath {$xpathParser=$absoluteLocationPath.xpathParser;})
 ;
于 2012-10-08T21:51:16.243 に答える