我正在尝试学习 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
选项运行后抱怨。
有人知道为什么吗?