语法解析工具LLnextgen、Quex、ANTLR Ruby、BYACC/J介绍

以下为你介绍的语法解析工具都可用在Linux系统上:LLnextgen(解析器生成器)、Quex(词法分析器生成工具)、ANTLR Ruby(词法分析工具)、BYACC/J(语法分析器生成工具)。

1、LLnextgen(解析器生成器)

语法解析工具LLnextgen、Quex、ANTLR Ruby、BYACC/J介绍

LLnextgen 部分实现了 LLgen 扩展-LL(1) 解析器生成器,是 Amsterdam Compiler Kit 的一部分。使用类 EBNF 的语法描述以及使用 C 作为输入的联合语义行为,并生成 C 代码。生成的代码是严格的 ANSI C,可使用各种流行的 C 编译器进行编译。

LLgen以及LLnextgen通过允许在静态和动态条件下都可以解决FIRST/FIRST冲突和FIRST/FOLLOW冲突,扩展了解析器生成器的LL(1)类。

LLnextgen实现了LLgen缺少的许多功能,从而大大提高了其可用性。此类功能的示例包括:

冲突跟踪–LLgen仅可以指示检测到冲突的位置,而不能指示引起冲突的位置。由于原因可能在看似无关的规则中,因此很难找到冲突。LLnextgen可以跟踪冲突的原因,从而更容易解决冲突。

符号表–如果提供了所需的信息,则可以自动生成符号表。

通用代码生成–生成用于报告错误和包装词法分析器的代码。该代码是LLnextgen和LLgen所必需的,并且对于使用LLnextgen/LLgen创建的所有解析器来说都是相似的。默认代码也可以用作创建自己的代码的起点。

返回值–非终端的返回值。

下载地址:https://os.ghalkes.nl/LLnextgen/

2、Quex(词法分析器生成工具)

语法解析工具LLnextgen、Quex、ANTLR Ruby、BYACC/J介绍

该项目的目的是为词法分析器提供一个生成器,以最大的计算效率和最大的应用范围。这包括对Unicode(UTF8,UTF16等)的支持,以及直接和通过嵌套转换器(例如ICU(tm)和IConv)进行的多种其他编码。先进的缓冲区处理功能允许对纯文件流,套接字或手动输入的缓冲区内容进行操作。

特征:

支持Unicode和许多其他字符编码。

具有继承关系和过渡规则的模式。

先进的缓冲区管理。

包括堆栈。

自定义令牌类。

模板压缩以减少代码大小。

路径压缩以减少代码大小。

基于缩进的词法分析的可能性,也称为越位规则(INDENT,DEDENT,NODENT)。

产生直接编码的词法分析器。

可调的隐式行数和列数计数。

推出DFA代数。

模糊匹配/编辑距离,Levenshtein和PseudoDamerau自动机。

下载地址:https://sourceforge.net/projects/quex/

3、ANTLR Ruby(词法分析工具)

ANTLR Ruby 是 Java 项目 ANTLR 的 Ruby 移植版本。

4、BYACC/J(语法分析器生成工具)

语法解析工具LLnextgen、Quex、ANTLR Ruby、BYACC/J介绍

BYACC/J 是扩展和兼容自 Berkeley v 1.8 YACC 的Java的语法分析器生成工具。

标准YACC会获取一个YACC源文件,并从中生成一个或多个C文件,如果正确编译它们,将生成LALR语法解析器。这对于表达式解析,交互式命令解析和文件读取很有用。这些年来,已经编写了许多兆字节的YACC代码。

BYACC/J与其他解析器生成器相比如何?

当然,最初的YACC设计大约已有20年的历史了,并且目前有更新更好的技术可用。我认为Jacc很棒,Java Cup也很棒。与古老的YACC相比,这两种语法都提供了对LALR和LL语法的更全面的解析。在我看来,针对Java的YACC的想法非常有价值。这种Java解析器生成器有几个好处:

可以从现有的Makefile和IDE中执行BYACC/J。

BYACC/J用C编码,因此Java代码的生成非常快。

产生的字节码很小,从大约11 KB开始。

仅包含一个或两个类文件。如果只需要单个类型或对象类,那么将生成一个类文件。如果您需要简单的泛型类型,则会为您生成一个简单的数据类,从而生成另一个小文件。

不需要其他运行时库。生成的源代码是整个解析器。

它可以解析现有的YACC语法,从而为大量已安装的YACC源代码。

许多开发人员已经非常熟悉YACC的工作原理。

它是完全免费的。没有许可证,没有使用费。

下载地址:https://sourceforge.net/projects/byaccj/

注明

以上就是语法解析工具LLnextgen、Quex、ANTLR Ruby、BYACC/J的介绍内容,这些语法解析工具都能使用在Linux操作系统中。

栏目相关文章