我正在尝试学习 ANTLR 4,并且正在遵循The Definitive ANTLR 4 Reference中给出的示例。可悲的是,我被困在第一个例子中。
系统:
Windows 10 (1703)
Java 8,更新 151
ANTLR 4,v4.7
My%CLASSPATH%设置为系统变量 ( .;"D:\Program Files\Java\libs\antlr-4.7-complete.jar";)。
我有antlr4.bat并且grun.bat可以在我的 中使用%PATH%,并且可以从命令行运行antlr4。
antlr4.bat: java -cp %CLASSPATH% org.antlr.v4.Tool %*
grun.bat:java -cp %CLASSPATH% org.antlr.v4.gui.TestRig %*
我正在-cp %CLASSPATH%明确使用,因为我看到其他一些人在不使用该-cp选项时遇到问题。
我的问题是:
当我grun在示例语法Hello( grun Hello r -tokens) 上运行时,我收到此错误消息
Exception in thread "main" java.lang.NoClassDefFoundError: HelloLexer (wrong name: main/resource/hello/HelloLexer)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.antlr.v4.gui.TestRig.process(TestRig.java:129)
at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
对我做错了什么有任何想法吗?
提前谢谢了!
编辑:
我以为我找到了答案。通过cd进入编译文件所在的文件夹(而不是grun从根项目文件夹调用),我设法通过了有问题的示例。
但是当我尝试建立自己的项目时,我遇到了同样的问题,并且出现了与上面相同的错误消息。
这一次,似乎grun在我antlr4使用该-package选项运行后抱怨。
有人知道为什么吗?