我正在为我的编译器类编写一个简单的解析器(只是一个概念证明,我可以让工具工作)并且正在使用带有python绑定的ANTLR.我已经得到了我们琐碎的语法来正确地标记和解析,但我也希望以自定义的方式处理错误.根据ANTLR文档(更具体地说:http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery),我可以将以下代码放在我的语法文件中:
@members {
private List<String> errors = new LinkedList<String>();
public void displayRecognitionError(String[] tokenNames,
RecognitionException e) {
String hdr = getErrorHeader(e);
String msg = getErrorMessage(e, tokenNames);
errors.add(hdr + " " + msg);
}
public List<String> getErrors() {
return errors;
}
}
但是,这是一个Java示例,我似乎无法在python中复制(我可以复制代码,但实际上似乎无法让它运行).有谁知道我怎么会这样做?
解决方法:
我设法找到了解决问题的方法:
@members {
def displayRecognitionError(self, tokenNames, e):
# do something
pass
antlr3.BaseRecognizer.displayRecognitionError = displayRecognitionError
}