什么可能导致ANTLR4 4.7.1中的运行时Lexer错误?

时间:2018-01-27 15:53:52

标签: antlr4

我正在尝试从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变得太大了吗?我很感激有关如何进行调试的建议。

1 个答案:

答案 0 :(得分:0)

Mark Rotteveel在上述评论中回答:

  

您为导入使用通配符这一事实可能会导致导入   非预期的依赖关系(例如来自/usr/local/share/java,或者可能   从那个快照文件夹);那些路径包含较旧的antlr   版本,您实际上可能正在使用旧版本的运行时   比你认为你正在使用,或更糟:新老结合!