v4中的自定义错误报告

时间:2014-01-03 10:11:17

标签: antlr4

关于将代码从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上看到了一些问题和答案,但我无法了解如何在我的情况下使用它。)

1 个答案:

答案 0 :(得分:0)

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

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

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