3

私が呼ばれる文法を持っているとき、例えば

interpret
 : (op ';')*
 ;

次のようなthrow句を追加することは可能throws SQLExceptionですか?ANTLRを使用してGrammerをコンパイルするたびに、具体的なメソッドにthrow句を追加しなかったため、パーサーはエラーをスローします。

これにより、ルールが特定のSQL-database-connectionを使用するメソッドを呼び出すようになっているので、宣言を追加する必要があります。

public final void op() throws RecognitionException {

antlrで生成されたファイル(Lexer、Parser)SQLExceptionを自動的に追加して構築したいと思います。ClassNotFoundException

よろしく、redstreak

4

1 に答える 1

4

ANTLRリファレンスマニュアルの24ページには次のように書かれています。

パーサー(またはツリーパーサールール)が非ANTLR固有の例外をスローできるように指定するには、exceptions句を使用します。たとえば、MyExceptionをスローするルールを使用した単純なパーサー仕様を次に示します。

class P extends Parser;

a throws MyException
  : A
  ;

ANTLR generates the following for rule a:

public final void a() 
  throws RecognitionException,
         TokenStreamException,
         MyException
{
  try {
    match(A);
  }
  catch (RecognitionException ex) {
    reportError(ex);
    consume();
    consumeUntil(_tokenSet_0);
  }
}

これは以前のバージョンでは実装されていなかったようです。antlr以外の例外をスロー する幸いなことに、ANTLR3.4リリースノートには次のように書かれています。

Javaターゲットのパーサールールの「throwsSpec」機能を実装します

試してみてください。

于 2012-06-18T08:34:48.010 に答える