Antlr4 v4中的自定义错误报告

Antlr4 v4中的自定义错误报告,antlr4,Antlr4,关于将代码从v3迁移到v4的另一个问题: 对于v3,我有一个定制的错误报告,在语法文件中使用如下代码: @members { public void displayRecognitionError(String[] tokenNames, RecognitionException e) { String hdr = getErrorHeader(e); String msg = getErrorMessa

关于将代码从v3迁移到v4的另一个问题:

对于v3,我有一个定制的错误报告,在语法文件中使用如下代码:

@members {
  public void displayRecognitionError(String[] tokenNames,
                                    RecognitionException e) {
    String hdr = getErrorHeader(e);
    String msg = getErrorMessage(e, tokenNames);
    System.out.println("ERR:"+hdr+":"+msg);
    errCount += 1;
  }
}
在v4中,在编译生成的java文件时,我遇到了以下错误:

MyParser.java:163: cannot find symbol
symbol  : method getErrorMessage(org.antlr.v4.runtime.RecognitionException,java.lang.String[])
location: class MyParser
            String msg = getErrorMessage(e, tokenNames);
                         ^
这个函数是否被v4中的其他函数所取代?我在AntlErrorListener上看到了一些问题和答案,但我不知道如何在我的情况下使用它。

在ANTLR 4中删除了displayRecognitionError方法,因此即使您更正了该方法的主体,它也不会做任何事情。您需要完全从语法中删除该方法,并实现它。文档包括实现接口的类的列表,因此您可以引用这些类和/或扩展其中一个类以生成所需的功能

拥有AntlErrorListener实例后,可以使用以下代码将其附加到解析器实例

// remove the default error listener
parser.removeErrorListeners();
// add your custom error listener
parser.addErrorListener(listener);