我是新接触ANTLR和ANTLRWorks的,所以我对此感到非常困惑:我使用Java2.1创建语法以及随后创建词法分析器和解析器( ANTLRWorks目标)。然后,我创建了一个小的Eclipse项目,并从ANTLRWorks导入ANTLR,以手动调用ANTLR4书籍示例中描述的词法分析器和解析器。在运行应用程序时,我得到了以下异常:
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问题。有人能帮我吗?
提前感谢!
发布于 2014-06-29 00:42:12
ANTLRWorks使用了一个非标准的ANTLR版本,以支持它的一些编辑器特性(代码完成等)。它的设计方式支持正确的代码生成,但是为了编译和运行您的解析器,您需要使用来自antlr.org的参考ANTLR库。
发布于 2014-06-28 23:19:06
最可能的原因是您在解析器生成时和运行时使用了不同版本的antlr运行时。
确保在两种情况下使用完全相同的antlr版本,这样错误就会消失。
免责声明:我可能错了,因为我在.Net中使用了antlr。
https://stackoverflow.com/questions/24468009
复制相似问题