エラーメッセージを取得するためのANTLRErrorListener

xNappy

ANTLRからエラーメッセージを取得しようとしていますが、混乱しています

この参照質問のように、標準のErrorListenerを置き換えました

public String runAntlr(String sqlFile){
    ANTLRErrorListener error = new BaseErrorListener();

    ANTLRInputStream input;

    try {
        input = new ANTLRFileStream(sqlFile);
    } catch (Exception e) {
        return e.toString();
    }

    tsqlLexer lexer = new tsqlLexer(input);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    tsqlParser parser = new tsqlParser(tokens);

    parser.removeErrorListeners();
    lexer.removeErrorListeners();
    parser.addErrorListener(error);
    lexer.addErrorListener(error);

    ParseTree tree = parser.tsql_file();
    new MyTsqlVisitor().visit(tree);

    System.out.println(error);
    return "Analysis successful";
}

これは、実行後のコンソールのテキストでした。

run:
line 2:16 mismatched input 'as' expecting '.'
line 2:19 no viable alternative at input 'date'
line 5:38 mismatched input 'where' expecting {EXCEPT, INTERSECT, UNION, ')'}
BUILD SUCCESSFUL (total time: 5 seconds)

追加した後 ANTLRErrorListener

run:
org.antlr.v4.runtime.BaseErrorListener@4507ed
BUILD SUCCESSFUL (total time: 4 seconds)

私はANTLRErrorListener権利を実装しましたか?

xNappy

それは現在機能しています、これが私の解決策です:

最初にMyAntlrErrorListenerの実装:

public static MyAntlrErrorListener INSTANCE = new MyAntlrErrorListener();

//When the value is false, the syntaxError method returns without displaying errors.
private static final boolean REPORT_SYNTAX_ERRORS = true;

private String errorMsg = "";

@Override
public void syntaxError(Recognizer<?, ?> recognizer, 
                        Object offendingSymbol, 
                        int line, 
                        int charPositionInLine, 
                        String msg, 
                        RecognitionException re) {

    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);
    errorMsg = errorMsg + "\n" + sourceName+"line "+line+":"+charPositionInLine+" "+msg;
}

@Override
public String toString() {
    return errorMsg;
}    

そして、次のようにメインクラスでerrorMsgを取得します。

...
lexer.removeErrorListeners();
lexer.addErrorListener(MyAntlrErrorListener.INSTANCE);
parser.removeErrorListeners();
parser.addErrorListener(MyAntlrErrorListener.INSTANCE);

...

return MyAntlrErrorListener.INSTANCE.toString();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Slackエフェメラルメッセージを送信するためのトークンを取得する方法

分類Dev

生のエラーメッセージを取得するためのdjangoform.errorsに関する質問

分類Dev

メッセージスレッドを取得するためのクエリ

分類Dev

エラーメッセージを表示するためのspan要素の追加

分類Dev

エラー履歴を保持するためにPHPで例外メッセージを取得する

分類Dev

Python:例外のエラーメッセージを取得する

分類Dev

アラートメッセージを表示するためのラジオボタンの取得方法

分類Dev

複数のエラーが表示されたときに行番号を取得するためのメッセージボックス

分類Dev

パスワードの存在を確認するためのカスタムエラーメッセージ

分類Dev

送信されたメッセージを取得するためのbulksmsURI

分類Dev

vuejsでHttpExceptionエラーメッセージを処理するための最良の方法は何ですか?

分類Dev

ViewBagに基づくモーダルエラーメッセージを表示するためのPartialView

分類Dev

iSeriesWebsphereメッセージキューからメッセージを取得するときのMQRC_エラー

分類Dev

エラーメッセージ: "Authorization_RequestDenied"、 "操作を完了するための権限が不十分です

分類Dev

scalafmt:意味のあるエラーメッセージを取得する

分類Dev

APIを使用してエラーメッセージの投稿を取得する

分類Dev

PowerShellでエラーメッセージをキャプチャするためのヘルプが必要

分類Dev

構文エラーメッセージを解決するための助けが必要

分類Dev

HibernateでSQLエラーメッセージを取得する方法

分類Dev

ValidationErrorからエラーメッセージを取得する

分類Dev

StringTemplateでエラーメッセージを取得する方法は?

分類Dev

Javaからmysqldumpエラーメッセージを取得する

分類Dev

ユーザーへの新しいメッセージを取得するためのDjango更新セッション

分類Dev

eregiで非推奨のエラーメッセージを取得する

分類Dev

ソケットにメッセージを送信するためのスレッドを作成しようとしています。スレッドコンストラクターに関係する2つのエラーを取得する

分類Dev

分度器でテストするためのブートストラップアラートメッセージのテキストを取得する方法

分類Dev

たぶん、エラーメッセージを保持するために使用する必要がありますか?

分類Dev

配信されたメッセージを表示するための保留中のインテントからリクエストコードを取得する方法

分類Dev

LaravelControllerメソッドの考えられるすべてのエラーメッセージを取得する方法

Related 関連記事

  1. 1

    Slackエフェメラルメッセージを送信するためのトークンを取得する方法

  2. 2

    生のエラーメッセージを取得するためのdjangoform.errorsに関する質問

  3. 3

    メッセージスレッドを取得するためのクエリ

  4. 4

    エラーメッセージを表示するためのspan要素の追加

  5. 5

    エラー履歴を保持するためにPHPで例外メッセージを取得する

  6. 6

    Python:例外のエラーメッセージを取得する

  7. 7

    アラートメッセージを表示するためのラジオボタンの取得方法

  8. 8

    複数のエラーが表示されたときに行番号を取得するためのメッセージボックス

  9. 9

    パスワードの存在を確認するためのカスタムエラーメッセージ

  10. 10

    送信されたメッセージを取得するためのbulksmsURI

  11. 11

    vuejsでHttpExceptionエラーメッセージを処理するための最良の方法は何ですか?

  12. 12

    ViewBagに基づくモーダルエラーメッセージを表示するためのPartialView

  13. 13

    iSeriesWebsphereメッセージキューからメッセージを取得するときのMQRC_エラー

  14. 14

    エラーメッセージ: "Authorization_RequestDenied"、 "操作を完了するための権限が不十分です

  15. 15

    scalafmt:意味のあるエラーメッセージを取得する

  16. 16

    APIを使用してエラーメッセージの投稿を取得する

  17. 17

    PowerShellでエラーメッセージをキャプチャするためのヘルプが必要

  18. 18

    構文エラーメッセージを解決するための助けが必要

  19. 19

    HibernateでSQLエラーメッセージを取得する方法

  20. 20

    ValidationErrorからエラーメッセージを取得する

  21. 21

    StringTemplateでエラーメッセージを取得する方法は?

  22. 22

    Javaからmysqldumpエラーメッセージを取得する

  23. 23

    ユーザーへの新しいメッセージを取得するためのDjango更新セッション

  24. 24

    eregiで非推奨のエラーメッセージを取得する

  25. 25

    ソケットにメッセージを送信するためのスレッドを作成しようとしています。スレッドコンストラクターに関係する2つのエラーを取得する

  26. 26

    分度器でテストするためのブートストラップアラートメッセージのテキストを取得する方法

  27. 27

    たぶん、エラーメッセージを保持するために使用する必要がありますか?

  28. 28

    配信されたメッセージを表示するための保留中のインテントからリクエストコードを取得する方法

  29. 29

    LaravelControllerメソッドの考えられるすべてのエラーメッセージを取得する方法

ホットタグ

アーカイブ