当前位置: 首页 > 知识库问答 >
问题:

ANTLRWorks 2.1:在Eclipse中生成的Lexer解析器导致UUID异常

邵旺
2023-03-14

我对ANTLR和ANTLRWorks还不熟悉,所以我对这一点很困惑:我正在使用ANTLRWorks 2.1创建语法,并随后创建词法分析器和解析器(Java目标)。然后,我创建了一个小型Eclipse项目,并从AntlWorks导入了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个答案

孙承弼
2023-03-14

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

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

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

姬墨竹
2023-03-14

ANTLRWorks使用非标准的ANTLR构建,以支持其一些编辑器功能(代码完成等)。它的设计方式支持正确的代码生成,但为了编译和运行解析器,需要使用ANTLR中的参考ANTLR库。组织。

 类似资料:
  • 我正在尝试使用ANTLRV4为一个简单的自定义语法生成一个lexer和解析器。问题是,当我运行Antlr.jar实用程序时,它生成了一个Lexer文件,而不是一个解析器文件,我认为它应该生成。 简单语法 hellolexer.js hellolexer.tokens 所需输出 hellolexer.js helloparser.js hellolistener.js hellovisitor.js

  • 在ANTLR4中,我有一个lexer规则,说我可以使用任何字符得到任何单词,但空格和换行符除外。其定义如下: 我还有一个lexer规则(定义在than WORD之前),用于进入EVAL模式: 我考虑的另一个选择是将“word”定义为${and}包围的文本以外的任何东西。但我不知道如何创建这样的lexer规则。 我该怎么解决?要区分评价和词?

  • 在浏览器中生成一个 UUID。 使用 crypto API 生成一个 UUID,符合RFC4122 版本 4 。 const UUIDGeneratorBrowser = () => ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ (crypto.getRandomValues(new Uint8Arra

  • 我在窗口构建器的GUI上工作,我想导入一些我在主界面上声明的对象。GUI与我的主类和5个类(1个父类和4个子类)在同一个包中。这可能做到吗?到现在为止,我正在尝试将我创建的游戏中的角色调用到GUI中,以便在按下某个按钮时显示出来。

  • 我正在将C#脚本移植到Spark(Scala)中,我遇到了Scala中UUID生成与C#中GUID生成的问题。 有没有办法在 Java 中生成与 C# 中生成的 UUID 相同的 UUID? 我通过从字符串的MD5散列创建Guid来生成数据库的主键。最后,我希望在Java/Scala中生成与C#脚本中的UUIDs相匹配的UUIDs,这样数据库中使用C#实现进行散列的现有数据就不需要重新散列。 C#

  • 问题内容: 为什么此查询给我一个解析异常?如果我把它移开,它似乎确实起作用。但是我需要在其中带有query_string的布尔值。我该如何工作? 问题答案: 您应该使用查询过滤器,它将所有查询包装到过滤器中。否则,您将得到解析错误。 您需要将零件更改为: @Edit:由于我看到人们可能会注意到,我只粘贴了整个查询的更改部分,包括部分(而不是整个),所以这里是修改后的全部: