4

オンラインでいくつかの調査を行った後、これが例外をキャッチして独自のエラーメッセージを出力する方法であることがわかりました。何らかの理由で、まだエラーをキャッチできないようです。以下は、antlrs のデフォルトのエラー処理をオーバーライドするクラスのコードです。

私がやりたいことは、antlr から例外をキャッチし、Java GUI で構文が正しくないことを画面に出力することだけです。

public class ExceptionErrorStrategy extends DefaultErrorStrategy {

@Override
public void recover(Parser recognizer, RecognitionException e) {
    throw e;
}

@Override
public void reportInputMismatch(Parser recognizer, InputMismatchException e) throws RecognitionException {
    String msg = "Input is mismatched " + getTokenErrorDisplay(e.getOffendingToken());
    msg += " expecting: "+e.getExpectedTokens().toString(recognizer.getTokenNames());
    RecognitionException ex = new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext());
    ex.initCause(e);
    throw ex;
}

@Override
public void reportMissingToken(Parser recognizer) {
    beginErrorCondition(recognizer);
    Token t = recognizer.getCurrentToken();
    IntervalSet expecting = getExpectedTokens(recognizer);
    String msg = "Missing "+expecting.toString(recognizer.getTokenNames()) + " at " + getTokenErrorDisplay(t);
    throw new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext());
}
}
4

1 に答える 1

6

ANTLRErrorListenerエラーを報告するだけなら、インターフェイスではなくインターフェイスを探している可能性がありAntlrErrorStrategyます。後者は、エラーに応答してパーサーの動作を実際に変更することを目的としています (たとえば、自動回復の試みなど)。

ANTLRWorks 2 では、このインターフェイスの主な実装として次の 2 つのクラスを使用します。

于 2013-10-16T14:34:27.170 に答える