【问题标题】:Handling errors in ANTLR 4处理 ANTLR 4 中的错误
【发布时间】:2013-09-02 23:09:07
【问题描述】:

在遵循Handling errors in ANTLR4 问题的accepted answer's 说明后,我遇到了以下错误。

CustomErrorListener.java:11:找不到符号
符号:变量 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);
    }
}

不幸的是,我在 ANTLR 文档中的任何地方都找不到有关此 REPORT_SYNTAX_ERRORS 字段的任何信息。关于这可能来自什么的任何线索?

【问题讨论】:

  • 符号在你的代码中,它是你方法的第一行。你写了if (!REPORT_SYNTAX_ERRORS) {
  • 是的,我注意到,它必须引用我认为从父类继承的一些字段,但我不知道它不是从哪里来的。直觉上我猜它必须检查是否真的有错误,否则不做任何事情就返回(当我将它注释掉并且我有很多 NullPointerException 时我注意到了),但我不知道它为什么不编译也不知道该怎么做有了它...

标签: java error-handling antlr


【解决方案1】:

它是在 same file 中声明的,您从中复制并粘贴了 DescriptiveErrorListener 类。这是声明:

private static final boolean REPORT_SYNTAX_ERRORS = true;

当值为false 时,syntaxError 方法返回而不显示错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多