v4 中的自定义错误报告



关于将代码从 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 中的其他函数替换?(我在ANTLRErrorListener上看到了一些问题和答案,但我无法了解如何将其用于我的情况。

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

拥有 ANTLRErrorListener 的实例后,可以使用以下代码将其附加到Parser实例。

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

相关内容

  • 没有找到相关文章

最新更新