如何打包Antlr生成的词法分析器

问题

在按照这一篇推文
https://blog.csdn.net/weixin_43877853/article/details/123148335
做实验的时候卡在了最后一步,即把生成的语法分析器和词法分析器打包成jar包的那一步,由于描述过于简略导致我不知道究竟应该怎么打包。所以如果有哪位知道如何打包希望能赐教,希望能有每一步的详细截图,在ide里面打开的是什么文件夹,修改的是什么文件,打jar包的详细截图。

自己的尝试

我是先把全部的文件在一个文件夹(也就是三个c文件夹)生成好,然后创建lib文件夹,把antlr-4.12.0-complete.jar放进lib文件夹,然后用ide打开,再创建MyCGrammer包,再把三个c文件夹中的下图这几个文件第一行全部加上package MyCGrammer;,再移动到MyCGrammer包下

img

img

然后Projecture Structure里面把jdk全部设置为11,接着打包,然后就失败

希望各位解答越详细越好

我看了你提到的那篇博文,也看了你的描述。我感觉做这个事情并不仅仅是打包。首先你需要把代码都编译通过,从你最后那个截图看,项目还没有编译通过,还有137个错误。第一步是先要解决这些错误。编译错误。我猜想你是没有把jar添加到你的path中。建议你使用maven来管理项目。编译通过后,再说打包的事情。打包其实是很简单的一件事情,可以参考我之前写的一片文章:
https://blog.csdn.net/weixin_53036603/article/details/128211312

用ant来打包
https://blog.csdn.net/anhuixiaozi/article/details/5278233

该回答引用GPTᴼᴾᴱᴺᴬᴵ
Antlr生成的词法分析器和语法分析器可以打包成一个JAR文件,可以按照以下步骤进行:

  1. 在IDE中创建一个Java项目。
  2. 在项目中创建一个名为lib的文件夹,将antlr-4.12.0-complete.jar文件放到这个文件夹中。这个JAR包包含了Antlr的运行时依赖。
  3. 在项目中创建一个名为src的文件夹,并在其中创建一个包名为MyCGrammar的包。
  4. 将你的*.g4文件放到src/MyCGrammar目录下。
  5. 生成Antlr的Java源代码。可以使用Antlr工具生成命令:java -jar lib/antlr-4.12.0-complete.jar -visitor -no-listener src/MyCGrammar/MyCGrammar.g4 -o src/MyCGrammar,这里假设MyCGrammar.g4是你的语法文件名称。
  6. 将生成的Java源代码(包含词法分析器和语法分析器)放到src/MyCGrammar目录下。
  7. 编译代码并打包成JAR文件。你可以使用IDE的构建工具,例如Eclipse可以使用Export功能打包成JAR文件。

参考GPT和自己的思路:Antlr生成的词法分析器和语法分析器可以打包成一个jar包,然后在其他项目中使用。下面是详细的步骤:

1 创建一个新的Java项目,例如MyParser。

2 将antlr-4.9.2-complete.jar文件复制到MyParser项目的lib目录下。如果没有lib目录,可以在项目根目录下创建一个。

3 在MyParser项目中创建一个新的包,例如com.myparser.grammars,用于存放我们的语法文件。

4 将Antlr生成的词法分析器和语法分析器的Java文件(.java文件)复制到com.myparser.grammars包下。这些文件应该在之前的步骤中已经生成了。

5 编辑Antlr生成的Java文件(.java文件),在开头添加如下代码:

package com.myparser.grammars;


这将确保生成的类位于正确的包中。

6 打开命令行,导航到MyParser项目的根目录,并运行以下命令:

javac -cp "lib/antlr-4.9.2-complete.jar" com/myparser/grammars/*.java

这将编译所有的Java文件。

7 创建一个新的包,例如com.myparser,用于存放我们的应用程序代码。

8 在com.myparser包中创建一个新的类,例如MyParser,用于实例化我们的词法分析器和语法分析器,并进行解析操作。例如:

package com.myparser;

import com.myparser.grammars.MyGrammarLexer;
import com.myparser.grammars.MyGrammarParser;
import org.antlr.v4.runtime.*;

public class MyParser {
    public static void main(String[] args) throws Exception {
        String input = "1 + 2 * 3";
        ANTLRInputStream inputStream = new ANTLRInputStream(input);
        MyGrammarLexer lexer = new MyGrammarLexer(inputStream);
        CommonTokenStream tokenStream = new CommonTokenStream(lexer);
        MyGrammarParser parser = new MyGrammarParser(tokenStream);
        parser.expr();
    }
}


这将解析字符串"1 + 2 * 3",并调用expr规则。

9 打开命令行,导航到MyParser项目的根目录,并运行以下命令:

jar cvf MyParser.jar com/myparser/*.class com/myparser/grammars/*.class

这将创建一个名为MyParser.jar的jar包,并将所有编译后的class文件打包进去。

10 在其他项目中,将MyParser.jar文件添加到项目的classpath中,并使用com.myparser.MyParser类来实例化词法分析器和语法分析器,以进行解析操作。
希望以上步骤对你有所帮助。

如果已参考 @lverson1022 实现成功打包,在其他项目中引用 .jar 包,仍然飘红提示,多为没有在项目中成功识别到。请参考以下 添加

img


img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
打包ANTLR生成的词法分析器和语法分析器需要使用命令行或者通过构建工具,比如Maven或Gradle进行打包。
以下是通过命令行打包的步骤:

  1. 确定你的antlr4的jar包路径
  2. 将antlr4的jar包和你生成的语法和词法分析器的class文件放在同一个文件夹下
  3. 进入该文件夹
  4. 编写Manifest文件,确定Main类和打包库的classpath。在文件夹中新建名为Manifest.txt的文件,并写入以下内容:

Main-Class: org.antlr.v4.gui.TestRig
Class-Path: antlr-runtime-4.7.2.jar

  1. 开始打包。在命令行中执行以下命令:

jar cfm mygrammar.jar Manifest.txt *

其中mygrammar.jar为你的打包jar包的名称

  1. 运行打包后的jar包。在命令行中执行以下命令:

java -jar mygrammar.jar

其中mygrammar.jar为你的打包jar包的名称

注意,上述步骤中的jar包名称,Main类名称和classpath需要根据你的实际情况进行修改。

另外参考该篇博客,我个人认为没有必要将生成的语法和词法分析器代码放到指定的包中,可以直接在命令行或者构建工具中指定该包。
如果我的回答解决了您的问题,请采纳!