我正在使用antlr4.3(完整)jar。它有许多重复的org.antlr.runtime和org.antlr.v4.runtime包。
在代码中,当我显式使用“v4.runtime”时——在运行时,类路径会选择“运行时”。所以我提取了jar并重新创建它,而没有org.antlr.runtime.
但是很明显,现在找不到像识别异常这样的类。
我应该如何解决这个问题,除了:
分解最新的Jar并指定组织。安特尔。v4。运行时间先于组织。安特尔。运行时,以便从v4中提取重复的类。运行时,如果没有,它将查看org。安特尔。运行时。。。??
除此之外,这里的代码片段给出了一个问题:jar在类路径中。
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.ANTLRInputStream;
public class AntlrMain {
public static void main(String[] args) {
System.out.println("Start Hello World");
try {
InputStream is = new FileInputStream(
"/home/ecworkspace/antlrCentral/DSL/mydev.dsl");
org.antlr.runANTLRInputStream input = new ANTLRInputStream(is);
org.antlr.v4.runtime.CharStream cs = (org.antlr.v4.runtime.CharStream) input;
VCFGLexer lexer = new VCFGLexer(cs);
'CharStream not found'
顺便说一句,语法编译OK,生成我所有的VCFG*. java和令牌
类,其中VCFG是语法名称。
更新1
为了与所有人的建议保持一致——我删除了对自己问题的回答,并将其添加到这个原始问题中。
在antlr-4.2中完成。jar,我明白了:
/tmp/x/ $ jar -xf antlr-4.2-complete.jar
/tmp/x/ $ ls org/antlr
runtime stringtemplate v4
/tmp/x/ $ ls org/antlr/v4
analysis codegen parse semantics Tool$1UndefChecker.class Tool$OptionArgType.class
automata misc runtime tool Tool.class Tool$Option.class
/tmp/x/ $ ## The 2 runtimes above: org.antlr.runtime and org.antlr.v4.runtime
/tmp/x/ $ ## which to use where, along with same-name classes in
/tmp/x/ $ ## org.antlr and org.antlr.v4
所以,在建。xml,我使用上面的jar来:`
更新2
根据您的回复添加。
我最近才开始在Stackoverflow上发布问题。所以,关于是回应我的问题以提供更多信息,还是对回复进行评论等方面的建议是受欢迎的。
-cp <3rd-party> is -cp "log4j.jar:commonsLang.jar".
我所说的-cp“over-jar”是指-cp“antlr-4.2-complete.jar”。
如果我没有提到它,这是一个疏忽-我有,对于每个'java'和'javac命令,包括antlr-4.2-complete.jar.但我看到你指出antlr-runtime-4.2.jar.所以有单独的antlr-runtime jar和antlr-完整的jar。
在下面的4个步骤中(为了方便起见,我省略了-cp,但在“每个”步骤中都包含了antlr-4.2-complete.jar)。
我认为,我应该在不同的步骤中使用antlr运行时和antlr complete JAR:
1 (java MyGrammar.java)
2 (javac MyGrammar*.java)
3. javac MyOwnCode.java
4. Run myCode (java MyCode) ...
在以上4个步骤中,我应该使用两个antlr JAR中的哪一个(运行时和完整;以及它们的版本)?
@280Z28/Sam:
我感到羞愧,但不得不承认最简单的答案往往是正确的。我花时间充实JAR,用它制作多个JAR文件,包括一个用于编译、一个用于运行等等。
答案是在ANT构建中简洁地解释的。下面的xml代码片段:我在其中生成“最终”生产JAR文件,这是执行主程序时唯一包含的JAR文件:
<jar destfile="${p_productionJar}">
<fileset dir="${p_buildDir}" casesensitive="yes">
<include name="**/*.class"/>
</fileset>
<zipfileset includes="**/*.class" src="${p_genCodeJar}"/>
<!-- How did I miss including p_antlrJar earlier?? -->
<zipfileset includes="**/*.class" src="${p_antlrJar}"/>
<zipfileset includes="**/*.class" src="${p_jschJar}"/>
<zipfileset includes="**/*.class" src="${p_log4jJar}"/>
<zipfileset includes="**/*.class" src="${p_commonslangJar}"/>
<manifest>
<attribute name="Main-Class" value="AntlrMain"/>
.....
生产罐缺少${p_antlrJar}=
jar文件不包含重复的类。ANTLR 4.3工具的代码生成部分依赖于ANTLR 3.5.2运行时库,该库包含在“完整”jar文件中。虽然有些类与ANTLR 4中的类同名,但它们不是重复的,不能互换使用。
请任何人解释Oracle中的锁定模式,即共享、独占和更新锁定。我找到了很多关于这个和那个的理论 共享锁:没有人可以改变数据,只读目的 独占锁定:只允许一个用户/连接更改数据。 更新锁:行被锁定,直到用户提交/回滚。 然后,我尝试共享以检查它的工作原理 然后,我发现,用户可以在共享锁定后更改数据。那么,它与独占锁和更新锁有什么不同呢。 另一个问题,更新锁和排他锁有什么不同,即使它们看起来几乎是等同的
我对不同类型的标识符案例以及人们对它们的称呼感兴趣。你知道这个名单上还有其他名字吗? :骆驼大小写(例如在java变量名中) :大写的骆驼大小写(例如在java类名中) :Snake大小写(例如在python变量名中) : Kebab大小写(例如球拍名称) :平面大小写(例如在java包名称) :大写(例如C常量名称)
本文向大家介绍Java中定义了哪些不同类型的嵌套类?,包括了Java中定义了哪些不同类型的嵌套类?的使用技巧和注意事项,需要的朋友参考一下 在Java中,可以在另一个类中定义一个类,此类称为嵌套类。对于内部类,我们可以使用访问修饰符,例如private,public,protected或default;对于外部类, 可以使用default或public访问修饰符。 Java中定义了两种类型的嵌套类
本文向大家介绍有哪些不同类型的区块链?相关面试题,主要包含被问及有哪些不同类型的区块链?时的应答技巧和注意事项,需要的朋友参考一下 回答:下面列出了三种主要的区块链类型: 公共区块链:顾名思义,这里没有人负责,任何人都可以读/写/审核区块链。 私有区块链:顾名思义,它是个人或组织的私有财产。 财团或联合区块链:财团的选定成员可以读取/写入/审核区块链
本文向大家介绍Selenium有哪些不同的等待类型?,包括了Selenium有哪些不同的等待类型?的使用技巧和注意事项,需要的朋友参考一下 下面列出了Selenium中可用的不同类型的等待- 隐式等待 这是Selenium中动态等待的一种,其语法为- 明确等待 这是Selenium中动态等待的一种,其语法为- 流利的等待 这是Selenium中动态等待的一种,其语法为- 静态等待 这用于将执行暂停
本文向大家介绍你知道的内容运营的方法有哪些?相关面试题,主要包含被问及你知道的内容运营的方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 内容运营是指基于产品的内容进行内容策划、内容创意、内容编辑、内容发布、内容优化、内容营销等一系列与内容相关的工作,多应用于互联网行业。为了适应当今数字媒体和社交媒体的发展,保持与顾客对话,品牌在传统平台和数字平台上都需要持续不断地提供新鲜的内容。归根结底,