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



我是ANTLR和ANTLRWorks的新手,所以我对此很困惑:我使用ANTLRWorks 2.1创建语法,并随后创建词法分析器和解析器(Java目标)。然后,我创建了一个小型Eclipse项目,并从ANTLRWorks导入ANTLR4 jar,以便像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测试中运行相同的语法和输入数据时,一切都很好。这里出了什么问题?我已经找到了关于版本问题的类似帖子,但是没有一个解决这个UUID问题。有人能帮我一下吗?

提前感谢!

ANTLRWorks使用一个非标准的ANTLR构建来支持它的一些编辑器特性(代码完成等)。它的设计方式支持适当的代码生成,但为了编译和运行解析器,您需要使用antlr.org中的参考ANTLR库。

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

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

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

最新更新