重新2c 1.2

2 月 2 日星期五,re2c 发布,这是一个用于 C 和 C++ 语言的词法分析器的免费生成器。 Re1993c 于 XNUMX 年由 Peter Bamboulis 编写,作为非常快速的词法分析器的实验生成器,与其他生成器的区别在于生成代码的速度和异常灵活的用户界面,允许分析器轻松有效地嵌入到现有代码库中。 从那时起,该项目一直由社区开发,并继续成为形式语法和有限状态机领域的实验和研究平台。

1.2版本主要创新点:

  • 添加了一种新的(简化的)方法来检查输入数据的结尾
    (英文“EOF 规则”)。
    为此,添加了 re2c:eof 配置,
    允许您选择终端字符,
    以及一个特殊的 $ 规则,如果词法分析器
    成功到达输入数据的末尾。
    从历史上看,re2c 提供了多种验证方法的选择
    输入端的限制、效率和简单性各不相同
    应用程序。 新方法旨在简化代码编写,同时
    同时保持有效和广泛适用。 老办法
    仍然有效,并且在某些情况下可能是首选。

  • 添加了使用指令包含外部文件的功能
    /*!include:re2c "file.re" */ 其中 file.re
    这是包含文件的名称。 Re2c在包含文件目录中查找文件,
    以及使用 -I 选项指定的路径列表中。
    包含的文件可能包含其他文件。
    Re2c 在 include/ 目录中提供“标准”文件
    项目 - 预计有用的定义将在那里积累
    正则表达式,类似于标准库。
    到目前为止,应工作人员的要求,已添加了一个包含 Unicode 类别定义的文件。

  • 添加了生成任意头文件的功能
    使用 -t --type-header 选项(或适当的
    配置)和新指令 /*!header:re2c:on*/ 和
    /*! header:re2c:off*/. 这在以下情况下可能很有用:
    当re2c需要生成变量、结构体和宏的定义时,
    用于其他翻译单元。

  • Re2c 现在可以理解正则表达式中的 UTF8 文字和字符类。
    默认情况下,re2c 解析像“∀x ∃y”这样的表达式。
    1 位 ASCII 字符序列 e2 88 80 78 20 e2 88 83 79
    (十六进制代码),用户必须手动转义 Unicode 字符:
    “u2200x u2203y”。 这对于很多人来说是非常不方便和意想不到的
    用户(不断的错误报告证明了这一点)。 所以现在
    re2c 提供了 --input-encoding 选项,
    它允许您更改行为并将“∀x ∃y”解析为
    2200 78 20 2203 79。

  • Re2c 现在允许在 -r --reuse 模式下使用常规 re2c 块。
    如果输入文件包含许多块并且仅包含其中的一些块,这会很方便
    需要重复使用。

  • 现在您可以设置警告和错误消息的格式
    使用新的 --location-format 选项。 显示 GNU 格式
    如文件名:行:列:,MSVC 格式为文件名(行,列)。
    此功能对于 IDE 爱好者可能很有用。
    还添加了 --verbose 选项,如果成功则打印一条简短的胜利消息。

  • 与 Flex 的“兼容性”模式已得到改进 - 一些解析错误已得到修复并且
    在极少数情况下,运算符优先级不正确。
    从历史上看,-F --flex-support 选项允许您编写代码
    混合了flex风格和re2c风格,这使得解析有点困难。
    Flex兼容模式在新代码中很少使用,
    但 re2c 继续支持它以实现向后兼容性。

  • 字符类减法运算符 / 现在适用
    在扩展编码之前,这允许它在更多情况下使用,
    如果使用可变字符长度编码(例如 UTF8)。

  • 现在,输出文件是自动创建的:re2c 首先创建一个临时文件
    并将结果写入其中,然后将临时文件重命名为输出
    一次操作。

  • 文档已完成并重写; 特别是添加了新的
    关于填充缓冲区
    и 关于检查输入数据结尾的方法.
    新文档以以下形式收集
    一页综合手册
    带有示例(手册页和在线文档中提供了相同的来源)。
    在提高网站在手机上的可读性方面做出了一些糟糕的尝试。

  • 从开发者的角度来看,re2c获得了更完整的子系统
    调试现在在发布版本中禁用调试代码,并且
    可以使用配置选项 --enable-debug 启用。

这个版本花了很长时间——几乎整整一年。
一如既往,大部分时间都花在开发理论框架和写作上
文章 “NFA 上的高效 POSIX 子匹配提取”.
文章中描述的算法在实验库libre2c中实现
(默认情况下禁用构建库和基准测试,并通过配置选项启用
--启用库)。 该图书馆并未被视为现有图书馆的竞争对手
像 RE2 这样的项目,但作为开发新产品的研究平台
算法(然后可以在 re2c 或其他项目中使用)。
从测试、基准测试和创建与其他语言的绑定的角度来看,它也很方便。

感谢 re2c 开发人员感谢所有帮助此版本发布的人,
并向整个社区寻求想法、错误报告、补丁、士气等。 ;]

来源: linux.org.ru

添加评论