关于将代码从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上看到了一些问题和答案,但我无法了解如何在我的情况下使用它。)
答案 0 :(得分:0)
在ANTLR 4中删除了displayRecognitionError
方法,因此即使您更正了该方法的主体,它也不会执行任何操作。您需要完全从语法中删除该方法,并实现ANTLRErrorListener
。该文档包含实现该接口的类列表,因此您可以引用它们和/或扩展其中一个以产生所需的功能。
获得ANTLRErrorListener
的实例后,您可以使用以下代码将其附加到Parser
实例。
// remove the default error listener
parser.removeErrorListeners();
// add your custom error listener
parser.addErrorListener(listener);