JavaCC2025年3月29日 | 阅读 6 分钟 与 YACC 类似,JavaCC 也是一个解析器。JavaCC 是 Java Compiler-Compiler 的缩写。它是由 Oracle Corporation 开发的一个开源的流行解析器生成器和词法分析器生成器工具。它使用 Java 编程语言 编写。它根据 BSD 许可证授权。它被广泛用于 Java 应用程序。它生成自顶向下的解析器。它主要用于 LL(K) 文法。它还生成由 lex 生成的词法分析器。 JavaCC 通过 Java 语言扩展提供了对编程语言语法的定义。 ![]() 解析器生成解析器和词法分析器是处理字符序列输入的两个软件组件。编译器和解释器集成词法分析器和解析器。解析器用于解析包含程序的源文件。换句话说,解析器读取语法规范,并将它们转换为能够识别语法匹配的 Java 程序。 词法分析器将字符序列分解成称为标记 (tokens) 的子序列,并对这些标记进行分类。因此,词法分析器和解析器可用于各种程序。 ![]() JavaCC 还能执行标准的解析器功能,如树构建、调试和动作。树构建功能由 JavaCC 内置的名为 JJTree 的工具执行。 JavaCC 的设计让我们通过下图了解 JavaCC 的设计。 下图描述了 JavaCC 生成的词法分析器(也称为标记管理器)和 JavaCC 生成的解析器之间的关系。只要我们向 JavaCC 描述了语言的规则,JavaCC 解析器就可以处理任何编程语言。但在下图,我们使用了 C 编程语言作为输入。 ![]() 在上面的图中,我们看到标记管理器读取输入并生成一个称为标记 (tokens) 的对象序列。标记的生成取决于我们用来分解字符序列的语言规则。规则由用户提供,作为正则表达式的集合。 解析器消耗由标记管理器生成的标记。它分析标记的结构并生成用户定义的输出。 JavaCC 的特性
下载和安装 JavaCCJavaCC 的最新版本是 7.0.9。所以,我们将下载并安装最新版本,并在本节中一直使用它。 注意:我们也可以将 JavaCC 与 Eclipse 和 IntelliJ IDEA 等 IDE 一起使用。如果将 JavaCC 与 IDE 一起使用,则需要下载 JavaCC 插件。步骤 1:从 https://bit.ly/39C5tGZ 下载 JavaCC 工具。它将开始下载文件 javacc-javacc-7.0.9.zip。 ![]() 步骤 2:将文件解压到您想要的目录。在本例中,我们将其解压到 F:\javacc 文件夹。 ![]() 步骤 3:创建一个 target 目录。我们在 F:\javacc\javacc-javacc-7.0.9\target 位置创建了一个 target 目录。 ![]() 步骤 4:从 https://bit.ly/3nKU3G4 下载 javacc-7.0.9.jar 文件。 步骤 5:将 JAR 文件复制到新创建的 target 目录。 ![]() 步骤 6:将 JAR 文件重命名为 javacc.jar。 ![]() 现在,是时候验证安装了。 步骤 7:打开命令提示符,导航到目录 F:\javacc\javacc-javacc-7.0.9。 步骤 8:执行以下命令 执行上述命令后,我们会看到很多与 JavaCC 相关的内容,如下所示。 ![]() 从源代码构建 JavaCC源目录包含 JavaCC、JJTree 和 JJDoc 的源代码、启动脚本、示例语法和文档。它还包含构建 JavaCC 所需的引导程序版本的 JavaCC。 构建 JavaCC 的先决条件
使用 JavaCC 的步骤步骤 1:编写 JavaCC 规范。这意味着我们需要创建一个 .jj 文件。在此文件中定义语法和动作。假设我们生成了 demo.jj。 步骤 2:运行 JavaCC,它会生成解析器和扫描器。我们使用 javacc 命令来执行 .jj 文件。 上述命令生成标记、扫描器和解析器。 步骤 3:创建一个使用解析器的 Java 程序。假设我们创建了一个名为 DemoParser.java 的程序。 步骤 4:最后,编译并运行我们在上一步中创建的 Java 程序。使用以下命令运行程序 JavaCC 的用途JavaCC 已用于开发基于正式和专有规范的各种类型的解析器。
使用 JavaCC 构建的软件以下软件是使用 JavaCC 开发的
请记住
JavaCC 生成的文件JavaCC 是一个程序生成器工具。它读取 .jj 文件,如果没有错误,则生成多个 .java 文件。它使用默认选项生成以下文件。 模板文件
上表中描述的文件仅在它们尚未生成时才生成。如果需要更改文件,我们应该在运行 JavaCC 之前进行更改。另外,请确保 JavaCC 不会覆盖它们。 自定义文件
注意:在上表中,除了 Demo,您还可以选择任何名称。JavaCC 默认选项JavaCC 提供以下选项:
标记管理器标记管理器是一个词法分析器,它分析输入的字符,并将它们分解成称为标记的块。它还为每个标记分配类型。例如,考虑以下代码片段 上面的代码被标记管理器分解成如下标记 标记管理器不处理注释和空格。所以我们考虑它们。因此,在删除注释和空格后,我们得到以下标记 如上所述,每个标记都有一个类型。因此,上述标记可以分类如下 每个标记由 Token 类的对象表示。标记序列随后被传递给解析器进行进一步处理。 下一个主题Java 中的回车符 |
Java 中的量词是至关重要的概念,尤其是在正则表达式的上下文中。它们指定了输入中必须存在的字符、组或字符类的实例数量才能找到匹配项。在本节中,我们将…
阅读 4 分钟
随着多线程和异步编程的出现,Java 提供了一种执行并行任务的强大方法,称为 ExecutorService。但是,在管理多个线程和处理任务执行过程中出现的错误时,您可能会遇到 ExecutionException。在本节中,我们将探讨…
5 分钟阅读
在并发编程领域,线程安全在确保软件应用程序的稳定性和正确性方面起着至关重要的作用。Java 作为开发并发应用程序的流行语言,提供了各种实现线程安全的机制。在本节中,我们将探讨概念…
阅读 6 分钟
命令模式将请求封装为一个对象,从而允许我们使用不同的请求、队列或日志请求来参数化其他对象,并支持可撤销的操作。这个定义一开始可能有点令人困惑,但让我们一步步来。通过类比我们上面的遥控器问题…
阅读 3 分钟
在 Java 程序中使用 JavaBeans 允许我们将许多对象封装到一个称为 Bean 的单个对象中。Java 是一种面向对象的编程语言,它使得“一次开发,随处运行和重用”变得最为重要。然而,JavaBeans 通过… 为 Java 程序增加了可重用性。
阅读 2 分钟
Sylvester 序列是一个数学序列,其中每一项都源自所有之前项的乘积加一。它以 2 开始,后续项迅速增长。该序列在数论和组合学中有应用。在 Java 中实现它涉及递归或迭代…
阅读 8 分钟
哈希函数是一个键值映射函数。当两个或多个键通过这些哈希方法映射到相同值时,就会存在重复值。链式哈希的使用可以解决冲突。每个哈希表单元都应该指向条目链表…
阅读 6 分钟
在 Java 中,有多种方法可以创建和访问文本文件。在处理大量应用程序时,执行此操作非常必要。Java 有多种读取纯文本文件的方法,例如 FileReader、BufferedReader 和 Scanner。每种实用程序都提供独特的功能;例如,…
阅读 4 分钟
在 Java 编程世界中,开发人员经常会遇到“容器”和“组件”这两个术语。这两个术语是 Java 图形用户界面(GUI)开发的基础,理解它们的区别对于创建健壮且模块化的应用程序至关重要。在本节中,我们将探讨关键区别…
阅读 4 分钟
与 Red-Black Tree 类似,AVL 树是 Java 中另一种自平衡 BST(二叉搜索树)。在 AVL 树中,所有节点的左右子树高度差不超过一。它需要 O(h) 时间来执行搜索、最大、最小…
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India