我正在尝试从4.5更新到ANTLR4 4.7.1。除了环境之外,唯一的变化是更新对CharStreams的ANTLRInputStream和ANTLRFileStream引用。然而,在4.5中工作的代码现在会引发错误。
更新后,我尝试运行测试时收到NoSuchMethod错误。
$ /usr/bin/java -cp $classpath org.antlr.v4.gui.TestRig com.greg.gumji_parser.Gumji2001 source_text -tokens -tree gumji/test_debug4.v
Exception in thread "main" java.lang.NoSuchMethodError: org.antlr.v4.runtime.atn.RuleTransition.<init>(Lorg/antlr/v4/runtime/atn/RuleStartState;IILorg/antlr/v4/runtime/atn/ATNState;)V
at org.antlr.v4.runtime.atn.ATNDeserializer.edgeFactory(ATNDeserializer.java:715)
at org.antlr.v4.runtime.atn.ATNDeserializer.deserialize(ATNDeserializer.java:332)
at com.greg.gumji_parser.Gumji2001Lexer.<clinit>(Gumji2001Lexer.java:3485)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.antlr.v4.gui.TestRig.process(TestRig.java:144)
at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
$ echo $classpath
/home/greg/.m2/repository/com/greg/gumji2001-parser/1.0-SNAPSHOT/*:/usr/local/share/java/*:/home/greg/.m2/repository/org/antlr/antlr4/4.7.1/antlr4-4.7.1.jar:/home/greg/.m2/repository/org/antlr/antlr4-runtime/4.7.1/antlr4-runtime-4.7.1.jar
ATN变得太大了吗?我很感激有关如何进行调试的建议。
答案 0 :(得分:0)
Mark Rotteveel在上述评论中回答:
您为导入使用通配符这一事实可能会导致导入 非预期的依赖关系(例如来自
/usr/local/share/java
,或者可能 从那个快照文件夹);那些路径包含较旧的antlr 版本,您实际上可能正在使用旧版本的运行时 比你认为你正在使用,或更糟:新老结合!