我使用IntelliJ 14.1.3及其Antlr4-Plugin在Mac Yosemite上使用Antlr4编写语法代码。 我添加了antlr-4.5-complete.jar作为库,并使用插件工具创建了lexer和parser文件。
尝试使用这些文件我得到了一些经验,说明antlr4.5生成了代码但是版本4.4中存在antlr的运行时。这个版本来自哪里,因为我从未安装过它?
我已阅读此帖How to configure antlr4 plugin for Intellij IDEA 特别是这一部分:
该插件似乎使用了它包含的ANTLR版本 而不是您在项目中使用的ANTLR版本 库,所以使用插件可以生成Java源代码 不能在项目中编译的代码。
但它没有帮助,因为它没有说明如何解决问题。
问题仅出现在我的Mac上,Windows似乎没有受到影响。
这是堆栈跟踪:
Exception in thread "main" java.lang.ExceptionInInitializerError
at GeneratePlayerAIShots.main(GeneratePlayerAIShots.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.antlr.v4.runtime.RuntimeMetaData$VersionMismatchException: ANTLR Runtime version 4.5 used for parser compilation does not match the current runtime version 4.4
at org.antlr.v4.runtime.RuntimeMetaData.checkVersion(RuntimeMetaData.java:371)
at PlayerAIShotsLexer.<clinit>(PlayerAIShotsLexer.java:13)
... 6 more
答案 0 :(得分:0)
我找到了一个解决方案,我想让每个人都参与阅读我关心的解决方案:
问题是我在MacBook上的安装有一个过时的antlr-4.4.jar。它在“/ Library / Extensions /”文件夹中未被检测到,因此已经使用了IntelliJ和classpath(版本4.5)中添加的库。
我用新版本交换旧jar并删除项目中所有生成的Lexer / parse文件等。 最后它起作用: - )