发布的准备工作花费了近一年的时间。 一如既往,大部分时间都花在开发理论框架和写作上
文章“
文章中描述的算法在实验库libre2c中实现
(默认情况下禁用构建库和性能测试,并通过配置选项“—enable-libs”启用)。 该库并不是作为 RE2 等现有项目的竞争对手,而是作为开发新项目的研究平台
算法(然后可以在 re2c 或其他项目中使用)。 从测试、测量性能和创建与其他语言的绑定的角度来看,它也很方便。
re2c 1.2版本主要创新:
- 添加了一种新的简化方法来检查输入数据的结尾(“EOF 规则”)。 为此,添加了“re2c:eof”配置,
允许您选择终端字符,
和一个特殊规则“$”,如果词法分析器会触发该规则
成功到达输入数据的末尾。
从历史上看,re2c 提供了多种验证方法的选择
输入端的限制、效率和简单性各不相同
应用程序。 新方法旨在简化代码编写,同时
同时保持有效和广泛适用。 老办法
仍然有效,并且在某些情况下可能是首选。 - 添加了使用指令包含外部文件的功能
"/*!include:re2c "file.re" */",其中“file.re”是要包含的文件的名称。 Re2c在包含文件目录中查找文件,
以及使用“-I”选项指定的路径列表中。
包含的文件可能包含其他文件。
Re2c 在“include/”目录中提供“标准”文件
项目 - 预计有用的定义将在那里积累
正则表达式,类似于标准库。
到目前为止,应工作人员的要求,已添加了一个包含 Unicode 类别定义的文件。 - 添加了生成任意头文件的功能
使用“-t --type-header”选项(或适当的
配置)和新指令“/*!header:re2c:on*/”和
“/*!标头:re2c:关闭*/”。 这在以下情况下可能很有用:
当re2c需要生成变量、结构体和宏的定义时,
用于其他翻译单元。 - Re2c 现在可以理解正则表达式中的 UTF8 文字和字符类。
默认情况下,re2c 将“∀x ∃y”等表达式解析为
1 位 ASCII 字符序列“e2 88 80 78 20 e2 88 83 79”
(十六进制代码),用户必须手动转义 Unicode 字符:
“\\u2200x \\u2203y。” 这对于很多人来说是非常不方便和意想不到的
用户(不断的错误报告证明了这一点)。 所以现在
re2c 提供了选项“--input-encoding {ascii | ” utf8}”,
它允许您更改行为并将“∀x ∃y”解析为
“2200 78 20 2203 79。” - Re2c 现在允许在“-r --reuse”模式下使用常规 re2c 块。
如果输入文件包含许多块并且仅包含其中的一些块,这会很方便
需要重复使用。 - 现在您可以设置警告和错误消息的格式
使用新选项“--location-format {gnu | msvc}”。 显示 GNU 格式
为“文件名:行:列:”,MSVC 格式为“文件名(行,列)”。
此功能对于 IDE 爱好者可能很有用。
还添加了“--verbose”选项,如果成功,则会显示简短的胜利消息。 - 与 Flex 的“兼容性”模式已得到改进 - 一些解析错误已得到修复并且
在极少数情况下,运算符优先级不正确。
从历史上看,“-F --flex-suppor”选项允许您编写代码
混合了flex风格和re2c风格,这使得解析有点困难。
Flex兼容模式在新代码中很少使用,
但 re2c 继续支持它以实现向后兼容性。 - 现在应用字符类减法运算符“/”
在扩展编码之前,这允许它在更多情况下使用,
如果使用可变字符长度编码(例如 UTF8)。 - 现在,输出文件是自动创建的:re2c 首先创建一个临时文件
并将结果写入其中,然后将临时文件重命名为输出
一次操作。 - 文档已完成并重写; 特别是添加了新的
关于的章节http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
и关于检查输入数据结尾的方法 .
新文档以以下形式收集
全面的单页指南
带有示例(手册页和在线文档中提供了相同的来源)。
在提高网站在手机上的可读性方面做出了一些糟糕的尝试。 - 从开发者的角度来看,re2c获得了更完整的子系统
调试现在在发布版本中禁用调试代码,并且
可以使用配置选项“--enable-debug”启用。
来源: opennet.ru