4

我正在为我的编译器类编写一个简单的解析器(只是我可以让工具工作的概念证明),并且正在将 ANTLR 与 python 绑定一起使用。我已经获得了正确标记和解析的简单语法,但我还想以自定义方式处理错误。根据 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;
    }
}

但是,这是一个我似乎无法在 python 中复制的 Java 示例(我可以复制代码,但似乎无法让它运行)。有谁知道我会怎么做?

4

1 回答 1

5

我设法找到了解决我的问题的方法:

@members {
def displayRecognitionError(self, tokenNames, e):
    # do something
    pass

antlr3.BaseRecognizer.displayRecognitionError = displayRecognitionError
}
于 2012-04-11T16:33:41.687 回答