我最近不得不使用解析器来完成一个项目。我下载ANTLR4
并按照书籍The Definitive ANTLR4 Reference
中描述的步骤进行操作。以下是我在命令行中键入的步骤:
1. export CLASSPATH=".:/<Mydirectory>/antlr-4.2.2-complete.jar:$CLASSPATH"
2. alias antlr4='java -jar /<My directory>/antlr-4.2.2-complete.jar'
3. alias grun='java org.antlr.v4.runtime.misc.TestRig'
4. antlr4 Hello.g4
所有的工作都很好,它生成我需要的java文件。但是,在我输入
之后 5. grun Hello r -tokens
报告
无法加载Hello作为词法分析器或解析器。
我谷歌一些信息,但仍然无法弄清楚发生了什么。
答案 0 :(得分:32)
您通过在语法上运行ANTLR来生成Java源文件,但TestRig正在查找已编译的 .class 文件。在使用TestRig之前,您需要在源文件上运行Java编译器。
答案 1 :(得分:22)
我在Windows上遇到了完全相同的错误。我的批次最初设置如下:
java -cp "C:\ANTLR\antlr-4.4-complete.jar" org.antlr.v4.runtime.misc.TestRig %*
事实证明我编译的所有Hello*.class
文件都位于当前文件夹中,但我忘记在current folder
中加入-cp
。我改成以下后。有用。 请注意-cp
中的前导点。
java -cp ".;C:\ANTLR\antlr-4.4-complete.jar" org.antlr.v4.runtime.misc.TestRig %*
答案 2 :(得分:3)
在生成了所有*.java
个文件后,您的*.class
文件已生成,并且%CLASSPATH%
已正确设置,基于“Hello World”示例语法,你不应该看到这个错误。
如果您的%CLASSPATH%
环境变量中没有“antlr-runtime-4.4.jar”并从本书中运行“grun”代码,则在运行生成的解析器时会收到此错误关于你提供的语法。
%CLASSPATH%
应该是:
C:\libraries\antlr-4.4-complete.jar;C:\libraries\antlr-runtime-4.4.jar;
输入此命令后输入输入。就像书中的“hello parrt”一样。然后输入CTRL+Z
(在Windows中)以结束输入,或输入CTRL+D
(在Unix上)。
答案 3 :(得分:1)
为了正确执行此操作,我将假设您已安装JDK并将其添加到系统PATH变量中。
在这种情况下,您需要两个批处理文件来帮助您。
antlr4.bat
:
java -cp antlr-4.2-complete.jar org.antlr.v4.Tool %*
grun.bat
:
java -cp .;antlr-4.2-complete.jar org.antlr.v4.runtime.misc.TestRig %*
这也假定您在当前目录中有antlr-4.2-complete.jar
。除此之外,只需按照getting started guide。
请注意,我使用了-cp
标记,因为在Windows 7上,我没有看到CLASSPATH
变量。
答案 4 :(得分:1)
您需要Antlr jar文件和CLASSPATH
中的.bat文件。我知道,因为我遇到了同样的问题。
转到开始菜单并搜索Environment Variables
,您会发现Set Environment Variables for Users
或类似内容。应该有一个标有Variables for all Users
的部分。如果您看到%CLASSPATH%
,请点击它,然后点击该框下方的edit
按钮。转到列表的最后,将C:\**PATH TO JAR FILE**\antlr-X.X-complete.jar;
添加到结尾。使用每个.bat文件的路径重复此操作。如果您没有看到%CLASSPATH%
,请在框中单击添加的按钮,然后添加%CLASSPATH%
,并执行相同的过程。
我不熟悉OSX和存储系统,但您可以在终端中执行export CLASSPATH="/Users/**USER**/**PATH TO JAR FILE**/antlr-X.X-complete.jar:$CLASSPATH"
。重复,但使用每个.bat文件的路径。希望如此简单。如果这是错误的,请告诉我,因为正如我上面所说,OSX不是我的强项。您还可以在StackOverflow上查看此问题:How can I permanently add a class path to my Mac terminal?
我添加了OSX指令以防万一其他人遇到此问题,但是在OSX上! :) 强>
另请:将antlr-X.X-complete.jar
中的X替换为版本号,或者只是将其作为jar文件的名称。无论你的船是什么漂浮。
答案 5 :(得分:1)
在macOS上,正确的字样似乎是(假设您downloaded ANTLR 4.8,并创建了文件Hello.g4):
java -jar antlr-4.8-complete.jar Hello.g4
javac -cp antlr-4.8-complete.jar Hello*.java
java --class-path ".:antlr-4.8-complete.jar" org.antlr.v4.gui.TestRig Hello r -gui
这些命令将生成Java源文件,对其进行编译,然后启动TestRig,等待您输入表达式。