【问题标题】:ANTLR: how to extract error messages when build failsANTLR:构建失败时如何提取错误消息
【发布时间】:2011-05-13 20:43:01
【问题描述】:

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

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

有没有人解决这个问题?

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

我还在官方 ANTLR 常见问题解答中找到了这个确切的问题......但我真的不明白他的解决方案。谁能帮我翻译一下?我没有使用他提到的任何类,他说的是 v4(尚未发布)。 http://www.antlr.org/wiki/display/ANTLR3/Pattern+for+returning+errors+from+ANTLR+in+data+structures%2C+not+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);

【问题讨论】:

  • 参见:antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery(不确定这些示例是否与 ANTLR v3.2/v3.3 完全兼容,但如果不是,则不应进行太多更改才能使其正常工作)
  • 这回答了我的问题。谢谢巴特!
  • @Bart,您能否执行 cmets 的答案,这样这个问题就不会在 [antlr] 流中显示为未回答。谢谢。

标签: error-handling antlr antlr3 stderr


【解决方案1】:

请参阅:http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery(不确定这些示例是否与 ANTLR v3.2/v3.3 完全兼容,但如果不是,则不应进行太多更改以使其正常工作)

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 2016-06-15
    • 2022-01-04
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2012-11-26
    相关资源
    最近更新 更多