ANTLR:如何在构建失败时提取错误消息



我已经在ANTLR中构建了我的词法分析器和解析器,它们工作得非常好,当用户代码解析失败时,它会向STDERR输出有用的错误消息,显示确切的行号。等。

问题是,我需要提取这些信息,以便在Eclipse编辑器的正确位置显示错误消息,但是除了STDERR之外,它似乎在任何地方都不可用。我基本上是在寻找某种myParser.getErrorMessages()。

有人想到解决这个问题的办法吗?

我找到了下面的链接,但是这只在用户代码部分解析(即我们仍然得到AST)时才有效。当它完全失败时,你就拿不回树了。http://tech.puredanger.com/2007/02/01/recovering-line-and-column-numbers-in-your-antlr-ast/

我也在ANTLR官方FAQ中找到了这个确切的问题…但我真的不明白他的解决办法。有人能帮我翻译一下吗?我没有使用他提到的任何类,他说的是v4(还没有发布)。http://www.antlr.org/wiki/display/ANTLR3/Pattern + + +返回错误+ + ANTLR +在+数据+结构不% 2 c + + STDERR

我的代码如下:

FileInputStream fis = new FileInputStream("UserCode.txt");
ANTLRInputStream input = new ANTLRInputStream(fis);
MyLexer lexer = new MyLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
MyParser parser = new MyParser(tokens);
CommonTree tree = (CommonTree)parser.flow().getTree();
MyAST ast = new MyAST(tree);

参见:http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery(不确定示例是否与ANTLR v3.2/v3.3完全兼容,但如果不是,应该不会有太多的更改来使其工作)

相关内容

  • 没有找到相关文章

最新更新