ANTLR / java / SDK 生成-编译-执行序列在 Windows10 命令 window 上失败
ANTLR / java / SDK generate-compile-execute sequence fails on Windows10 command window
我正在尝试在 Windows 10 上使用 ANTLR 4.8 编译一个小的 hello.g4 语法文件。我的最终目标是 运行 ANTLR 在 Visual Studio.
问题是发生了一些事情,阻止我运行使用常量 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 files\Oracle\java\javapath (three files java.exe, javaw.exe, etc.)
类路径指向我的工作目录(生成 ANTLR java 文件的地方)和 ANTLR jar 文件本身。 ANTLR 完整的 jar 文件与其他所有文件位于同一目录中。下面的示例都使用相同的 CLASSPATH 设置。
CLASSPATH=.;c:\dev\bin\antlr-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 Files\Java\jdk-14.0.2\bin\java" 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 Files\Java\jdk-14.0.2\bin\javac" hello*.java
"C:\Program Files\Java\jdk-14.0.2\bin\java" org.antlr.v4.gui.TestRig %*
一个失败的序列
CLASSPATH=.;c:\dev\bin\antlr-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 Files\Java\jdk-14.0.2\bin\java" org.antlr.v4.Tool hello.g4
FAILS: "C:\Program Files\Java\jdk-14.0.2\bin\javac" 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 的文件; it/they 可以在 antlr.4.8.complete.jar 文件中吗?
Java8 PATH 必须是生成阶段的第一个
SDK PATH 必须是编译和执行阶段的第一个。
我也只是使用命令行 window 来 运行 命令 - 不涉及 IDE。
任何人都可以告诉我如何解决问题以便我可以 运行 生成、编译、执行循环而不用翻转我的 PATH 变量吗?谢谢你。 PS。我在这里阅读了六个潜在的“重复”问题,但它们都涉及不同的设置(使用 IDEs)并且我从中尝试过的任何东西都不适合我。
自 ANTLR 4.6.5-beta001 发布 C# 版 ANTLR4 以来,可以直接在 VS 中使用 ANTLR4 将语法文件预编译为 C#,然后编译并 运行 您的应用程序。您只需要安装 nuget 包。今天,你有几个选择
- “ANTLR4 标准”版本
- “ANTLR4CS”优化版
开箱即用。更新你的语法,保存它,它会被预编译。按 F5 即可 运行 完成!更多信息在此 answer
如果您需要 fiddle 构建的内部运作,请检查此 link
解决你的路径问题,AntlrCS包安装的代码生成器是antlr4.exe:jar存放在里面,所以不再有路径问题。我有一个简单的设置,可以在 VS 之外预编译语法。从 Antlr4Dy 文件夹开始,我在 src 子文件夹中生成 C# 代码。代码生成器包与 Antlr4.exe
一起下载到给定的文件夹中
"C:\Users...\source\repos\Antlr4Dy\packages\Antlr4.CodeGenerator.4.6.6\tools\net45\Antlr4.exe" C:\Users...\source\repos\Antlr4Dy\Speak.g4 -o src -Dlanguage =CSharp -package Antlr4x -no-listener -visitor
我正在尝试在 Windows 10 上使用 ANTLR 4.8 编译一个小的 hello.g4 语法文件。我的最终目标是 运行 ANTLR 在 Visual Studio.
问题是发生了一些事情,阻止我运行使用常量 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 files\Oracle\java\javapath (three files java.exe, javaw.exe, etc.)
类路径指向我的工作目录(生成 ANTLR java 文件的地方)和 ANTLR jar 文件本身。 ANTLR 完整的 jar 文件与其他所有文件位于同一目录中。下面的示例都使用相同的 CLASSPATH 设置。
CLASSPATH=.;c:\dev\bin\antlr-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 Files\Java\jdk-14.0.2\bin\java" 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 Files\Java\jdk-14.0.2\bin\javac" hello*.java
"C:\Program Files\Java\jdk-14.0.2\bin\java" org.antlr.v4.gui.TestRig %*
一个失败的序列
CLASSPATH=.;c:\dev\bin\antlr-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 Files\Java\jdk-14.0.2\bin\java" org.antlr.v4.Tool hello.g4
FAILS: "C:\Program Files\Java\jdk-14.0.2\bin\javac" 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 的文件; it/they 可以在 antlr.4.8.complete.jar 文件中吗?
Java8 PATH 必须是生成阶段的第一个 SDK PATH 必须是编译和执行阶段的第一个。
我也只是使用命令行 window 来 运行 命令 - 不涉及 IDE。
任何人都可以告诉我如何解决问题以便我可以 运行 生成、编译、执行循环而不用翻转我的 PATH 变量吗?谢谢你。 PS。我在这里阅读了六个潜在的“重复”问题,但它们都涉及不同的设置(使用 IDEs)并且我从中尝试过的任何东西都不适合我。
自 ANTLR 4.6.5-beta001 发布 C# 版 ANTLR4 以来,可以直接在 VS 中使用 ANTLR4 将语法文件预编译为 C#,然后编译并 运行 您的应用程序。您只需要安装 nuget 包。今天,你有几个选择
- “ANTLR4 标准”版本
- “ANTLR4CS”优化版
开箱即用。更新你的语法,保存它,它会被预编译。按 F5 即可 运行 完成!更多信息在此 answer
如果您需要 fiddle 构建的内部运作,请检查此 link
解决你的路径问题,AntlrCS包安装的代码生成器是antlr4.exe:jar存放在里面,所以不再有路径问题。我有一个简单的设置,可以在 VS 之外预编译语法。从 Antlr4Dy 文件夹开始,我在 src 子文件夹中生成 C# 代码。代码生成器包与 Antlr4.exe
一起下载到给定的文件夹中"C:\Users...\source\repos\Antlr4Dy\packages\Antlr4.CodeGenerator.4.6.6\tools\net45\Antlr4.exe" C:\Users...\source\repos\Antlr4Dy\Speak.g4 -o src -Dlanguage =CSharp -package Antlr4x -no-listener -visitor