ANTLR/java/SDK在Windows10命令窗口上生成编译-执行序列失败



我正试图在Windows 10上使用ANTLR 4.8编译一个小的hello.g4语法文件。我的最终目标是在Visual Studio中运行ANTLR。

问题是发生了一些事情,使我无法使用常量PATH设置运行生成、编译、执行序列。我对Java是如何工作的还不够了解,无法确定哪里出了问题(或者如何修复它(。

The location of the latest Java SDK 14.0 files:
c:program files...sdk 14.0(a pile of files including java.exe and javac.exe)
The original Java 8 runtime location:
c:program files (x86)common filesOraclejavajavapath (three files java.exe, javaw.exe, etc.)

类路径指向我的工作目录(生成ANTLRjava文件的地方(和ANTLRjar文件本身。ANTLR完整的jar文件与其他文件位于同一目录中。下面的示例都使用相同的CLASSPATH设置。

CLASSPATH=.;c:devbinantlr-4.8-complete.jar

我没有设置JRE_HOME或JAVA_HOME或任何此类环境变量。只有CLASSPATH和PATH。

工作序列

此序列有效(表明语法和工具有效(

PATH=(the Java8 runtime location);(the SDK location);... other paths
// generate the parser with the SDK path explicitly (with PATH=Java8 in front)
"C:Program FilesJavajdk-14.0.2binjava" org.antlr.v4.Tool hello.g4
// now switch the PATH variable to put the SDK first
// this compiles and runs the generated files successfully
PATH=(the SDK location);(the Java8 runtime location);... other paths
"C:Program FilesJavajdk-14.0.2binjavac" hello*.java
"C:Program FilesJavajdk-14.0.2binjava" org.antlr.v4.gui.TestRig %*

一个失败的序列

CLASSPATH=.;c:devbinantlr-4.8-complete.jar (unchanged from above)
If the SDK is first in the path, generation works, but compilation fails
PATH=(the SDK location);(the Java8 runtime location);... other paths
OK:    "C:Program FilesJavajdk-14.0.2binjava" org.antlr.v4.Tool hello.g4 
FAILS: "C:Program FilesJavajdk-14.0.2binjavac" hello*.java
Hundreds of errors are generated, among them ones like this.  
fooLexer.java:6: error: package org.antlr.v4.runtime does not exist
import org.antlr.v4.runtime.*;
^

我没有名为org.antlr.v4.runtime的文件;它/它们会在antlr.4.8.complete.jar文件中吗?

Java8 PATH必须是生成阶段的第一个PATHSDK PATH必须是编译和执行阶段的第一个路径。

我也只是使用一个命令行窗口来运行命令——不涉及IDE。

有人能告诉我如何修复问题,这样我就可以在不翻转PATH变量的情况下运行生成、编译和执行周期吗?非常感谢。PS。我读过半打潜在的";重复";关于SO的问题,但它们都涉及不同的设置(使用IDE(,我从中尝试的都不适用。

由于ANTLR4.6.5-beta001发布了针对C#的ANTLR4,因此可以直接在VS中使用ANTLR4将语法文件预编译到C#,然后编译并运行您的应用程序。您只需要安装nuget软件包。今天,你有几个选择

  1. "ANTLR4标准";版本
  2. "ANTLR4CS";优化版本

它开箱即用。更新你的语法,保存它,它会被预编译。按F5,你就开始跑步了!更多信息在此回答

如果你需要篡改构建的内部工作,请检查此链接

为了解决路径问题,AntlrCS包安装的代码生成器是antlr4.exe:jar存储在里面,因此不再有路径问题。我有一个简单的设置,可以在VS之外预编译语法。在Antlr4Dy文件夹中,我在src子文件夹中生成C#代码。代码生成器包与Antlr4.exe 一起下载到给定的文件夹中

"C: \用户。。。\source\repos\Atlr4Dy\packages\Antlr4.CodeGenerator4.6.6\tools\net45\Atlr4.exe"C: \用户。。。\source\repos\Atlr4dy\Speak.g4-o src-Dlanguage=CSharp-package Antlr4x-无监听器-访问者

最新更新