2

ANTLR4の質問でエラーを処理するという受け入れられた回答の指示に従った後、次のエラーに行き詰まりました。

CustomErrorListener.java:11: シンボル symbol が見つかりません
: 変数 REPORT_SYNTAX_ERRORS
場所: クラス CustomErrorListener

ANTLR4 のエラー処理方法が ANTLR3 とは異なることを理解し、前述の質問とその回答に基づいて、次のエラー リスナーを実装することになりました。

public class DescriptiveErrorListener extends BaseErrorListener {
    public static DescriptiveErrorListener INSTANCE = new DescriptiveErrorListener();

    @Override
    public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol,
                        int line, int charPositionInLine,
                        String msg, RecognitionException e)
    {
        if (!REPORT_SYNTAX_ERRORS) {
            return;
        }

        String sourceName = recognizer.getInputStream().getSourceName();
        if (!sourceName.isEmpty()) {
            sourceName = String.format("%s:%d:%d: ", sourceName, line, charPositionInLine);
        }

        System.err.println(sourceName+"line "+line+":"+charPositionInLine+" "+msg);
    }
}

REPORT_SYNTAX_ERRORS残念ながら、ANTLR ドキュメントのどこにもこのフィールドに関する情報は見つかりませんでした。これが何に由来するかについての手がかりはありますか?

4

1 に答える 1

1

クラスをコピーして貼り付けたのと同じファイルで宣言されています。DescriptiveErrorListener宣言は次のとおりです。

private static final boolean REPORT_SYNTAX_ERRORS = true;

値が のfalse場合、syntaxErrorメソッドはエラーを表示せずに戻ります。

于 2013-09-04T03:37:26.097 に答える