antlr4可以';不要将Hello作为lexer或解析器加载

antlr4可以';不要将Hello作为lexer或解析器加载,antlr4,Antlr4,我最近不得不使用解析器来做一个项目。我下载了ANTLR4,并按照《权威ANTLR4参考》一书中描述的步骤进行操作。以下是我在命令行中键入的步骤: 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='jav

我最近不得不使用解析器来做一个项目。我下载了
ANTLR4
,并按照《权威ANTLR4参考》一书中描述的步骤进行操作。以下是我在命令行中键入的步骤:

 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
它报告

无法将Hello作为lexer或解析器加载


我在谷歌上搜索了一些信息,但仍然无法确定发生了什么。

您通过在语法上运行ANTLR生成了Java源文件,但TestRig正在查找编译的.class文件。在使用TestRig之前,您需要在源文件上运行Java编译器。

为了正确执行此操作,我假设您已经安装了JDK并将其添加到系统路径变量中

在这种情况下,您将需要两个批处理文件来帮助您

antlr4.bat

java -cp antlr-4.2-complete.jar org.antlr.v4.Tool %* java -cp .;antlr-4.2-complete.jar org.antlr.v4.runtime.misc.TestRig %* 这还假设您在当前目录中有
antlr-4.2-complete.jar
。除此之外,只需按照中的说明操作即可


请注意,我使用了
-cp
标志,因为在Windows 7上,我没有看到
类路径
变量。

在生成了所有
*.java
文件,生成了
*.class
文件,并且根据“Hello World”示例语法正确设置了
%CLASSPATH%
之后,您不应该看到此错误

如果在
%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上)。

我在Windows上遇到了完全相同的错误。我的批次最初是这样设置的:

java-cp“C:\ANTLR\ANTLR-4.4-complete.jar”org.ANTLR.v4.runtime.misc.TestRig%*

原来我所有编译的
Hello*.class
文件都位于当前文件夹中,我忘了将
当前文件夹
包含在
-cp
中。之后我换到下面。它起作用了注意
-cp
中的前导点


java-cp“;C:\ANTLR\ANTLR-4.4-complete.jar”org.ANTLR.v4.runtime.misc.TestRig%*
您需要在
类路径中使用ANTLR-jar文件和.bat文件。我知道,因为我也有同样的问题

窗口 转到“开始”菜单并搜索
环境变量
,您将找到
为用户设置环境变量
或类似内容。应为所有用户提供一个标有
变量的部分
。如果看到
%CLASSPATH%
,请单击它,然后单击该框下的
编辑
按钮。转到列表的最后,将
C:\**路径添加到JAR文件**\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上查看此问题:

我添加了OSX指令,以防其他人有此问题,但在OSX上!:)


另外:用版本号替换
antlr-X.X-complete.jar
中的X,或者将其作为jar文件的名称。无论什么东西能让你的船漂浮。

在macOS上,正确的咒语似乎是(假设你已经创建并创建了一个文件):


这些命令将生成Java源文件,编译它们,然后启动TestRig,等待您输入表达式。

您的意思是我必须编译Java源代码,如HelloBaseListener.Java、HelloLexer.Java和HelloParser.Java?我使用命令“java*.java”编译所有java文件,但它报告“找不到或加载主类HelloBaseListener.java”@user3162707您需要的是“javac*.java”,而不是“java*.java”。javac是java编译器,它将java文件编译成类文件。我忘记在类路径中添加
,即我的
.class
文件所在的当前目录,同时调用
TestRig
。哦,我通过使用javac-g.*java解决了这个问题。在该目录中我遇到了同样的问题,我通过向类路径添加
解决了这个问题。(我已经编译了java文件)注意,类路径分隔符现在是分号(“;”)。至少在Windows上是这样。这是我的解决方案-包括类路径变量的前导点和分号。谢谢救了我一天。我的类路径看起来像。;C:\Programs\ANTLRv4\antlr-4.7-complete.jar和我的grun bat文件看起来像java org.antlr.v4.gui.TestRig%*
C:\libraries\antlr-4.4-complete.jar;C:\libraries\antlr-runtime-4.4.jar;
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