2

在遵循公认答案的处理 ANTLR4 问题中的错误的说明后,我遇到了以下错误。

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);
    }
}

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 回答