当前位置: 首页 > 知识库问答 >
问题:

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

颜哲彦
2023-03-14

我在试着编一个小小的hello。在Windows 10上使用ANTLR 4.8的g4语法文件。我的最终目标是在VisualStudio内部运行ANTLR。

问题是发生了一些事情,阻止我使用常量路径设置运行generate、compile、execute序列。我对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或任何此类环境变量。只有类路径和路径。

工作顺序

这个序列有效(表明语法和工具有效)

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的文件。安特尔。v4。运行时间;它/它们可能在antlr中吗。4.8.完成jar文件还是什么?

Java8路径在生成阶段必须是第一个,SDK路径在编译和执行阶段必须是第一个。

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

有谁能告诉我如何解决问题,这样我就可以在不翻转PATH变量的情况下运行生成、编译和执行周期?非常感谢。顺便说一句,我在这里读了半打可能“重复”的问题,但它们都涉及不同的设置(使用IDE),我从他们那里尝试的任何东西都不适合我。

共有1个答案

笪欣嘉
2023-03-14

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

  1. “ANTLR4标准”版本
  2. “ANTLR4CS”优化版

它开箱即用。更新你的语法,保存它,它会被预编译。点击F5,你就可以运行它了!更多信息在这个答案中

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

为了解决路径问题,AntlrCS包安装的代码生成器是antlr4。jar存储在里面,所以没有更多的路径问题。我有一个简单的设置,可以在外部预编译语法,而不是在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

 类似资料:
  • 我在我的代码中包括boost,cpprest和openssl,但它给我的错误像follow在android studio使用ndk我给了所有路径的目录和添加到程序它构建成功,但当我运行它时,它给我以下错误 我的cmakelist.txt是 android{compileSdkVersion 28 defaultConfig{applicationId“com.example.dell.cppadd

  • 问题内容: 我需要使用sshj库通过ssh在远程服务器上执行一些命令序列。 我做 它把我扔了 net.schmizz.sshj.common.SSHRuntimeException:该会话通道已全部用尽 但是我无法为每个命令重新创建会话,因为此示例将显示主目录列表,但不显示/ some / dir列表。 问题答案: 您可以考虑使用类似Expect的第三方库,该库简化了使用远程服务和捕获输出的过程。

  • 我试图通过执行这样的东西来组装一个apk: 但我得到以下错误: 任务:应用程序:编译FlavourNameDebugJavaBackJavac失败 重点是gradle似乎没有生成我在gradle的应用程序文件中定义的BuildConfig,在Flavor的定义上定义如下: 根据官方留档这应该是这样的方式,但我没有任何线索的原因,这是不工作。请注意,当我通过点击运行与Android Studio构建

  • 互联网上的大多数网站都说: “使用命令编译文件。然后使用命令运行它” 但是今天我试着运行一个没有javac的java程序,得到了一个奇怪的结果。 下面是名为的文件的内容: 然后我跑: 这给了我这个错误: 但是,当我在没有命令的情况下运行它时,它执行时没有任何错误。 命令是否也编译程序?如果是,为什么我们需要命令? 我的java版本是:

  • 运用命令窗口去调入变量,运行函数和M-文件。如要得到更多的关于控制输出与输入的信息,请看控制命令窗口输入与输出。 命令历史 在控制窗的输入内容都被记录在 命令历史窗口中。在命令历史中,你可以看到以前用过的函数,并且可以复制和执行选定行。 要从MATLAB任务到一个文件保存输入与输出的内容,可以用diary函数。 运行外部程序 你可以在MATLAB控制窗口中运行外部程序。感叹号!为起点就可以跳出当前