ANTLRWorks 2.1:在Eclipse中生成了Lexer + Parser,导致UUID异常

时间:2014-06-28 14:53:36

标签: antlr4 antlrworks

我是ANTLR和ANTLRWorks的新手,所以我对此非常困惑: 我正在使用ANTLRWorks 2.1进行语法创建以及随后创建词法分析器和解析器(Java目标)。然后,我创建了一个小型Eclipse项目,并从ANTLRWorks导入ANTLR4 jar,手动调用lexer和解析器,如ANTLR书籍示例中所述。运行应用程序时,我得到以下异常:

Caused by: java.lang.UnsupportedOperationException: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not  deserialize ATN with UUID 33761b2d-78bb-4a43-8b0b-4f5bee8aacf3 (expected e4178468-df95-44d0-ad87-f22a5d5fb6d3).
    at org.antlr.v4.runtime.atn.ATNSimulator.deserialize(ATNSimulator.java:111)
    at org.antlr.v4.runtime.atn.ATNSimulator.deserialize(ATNSimulator.java:90)
    at TestLexer.<clinit>(TestLexer.java:177)
    ... 1 more
Caused by: java.io.InvalidClassException: org.antlr.v4.runtime.atn.ATN; Could not deserialize ATN with UUID 33761b2d-78bb-4a43-8b0b-4f5bee8aacf3 (expected e4178468-df95-44d0-ad87-f22a5d5fb6d3).
    ... 4 more

但是,当在ANTLRWorks TestRig中运行相同的语法和输入数据时,一切正常。 这里出了什么问题?我已经找到了有关版本问题的类似帖子,但没有解决这个UUID问题。任何人都可以帮我这个吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

ANTLRWorks使用ANTLR的非标准版本来支持其一些编辑器功能(代码完成等)。它的设计方式支持正确的代码生成,但为了编译和运行解析器,您需要使用antlr.org中的引用ANTLR库。

答案 1 :(得分:0)

最可能的原因是您在解析器生成时和运行时使用了不同版本的antlr运行时。

请确保在两种情况下都使用完全相同的antlr版本,错误应该消失。

免责声明:我可能错了,因为我在.Net中使用了antlr。