antlr4-Can不能将Hello作为词法分析器或解析器加载

时间:2014-04-26 19:03:16

标签: antlr4

我最近不得不使用解析器来完成一个项目。我下载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作为词法分析器或解析器。

我谷歌一些信息,但仍然无法弄清楚发生了什么。

6 个答案:

答案 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

我不熟悉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,等待您输入表达式。