Spirit 更新日志
1.8.11
- 已修复position_iterator当底层迭代器解引用运算符返回非引用类型时,形成对局部的引用。 PR#422 TRAC#9737
- 移除对已弃用boost/detail/iterator.hpp头文件的引用。 GH#432
1.8.10
1.8.9
1.8.8
1.8.7
- 将 Spirit V1.8.x 代码库与 Spirit V2 集成。Spirit V1.8.x 现在被称为 **Spirit Classic**。即使目录结构已更改(**Spirit Classic** 头文件现在移动到 '$BOOST_ROOT/boost/spirit/home/classic' 目录),我们创建了转发头文件,允许在不进行任何更改的情况下编译现有应用程序。但是,这些转发头文件已被弃用,这将导致为每个头文件生成相应的警告。预计将来会删除转发头文件。
现在,使用 Spirit Classic 的推荐方法是从 '$BOOST_ROOT/boost/spirit/include' 目录包含头文件。**Spirit Classic** 的所有文件现在都在其名称前加上 'classic_' 前缀。例如,包含
#include <boost/spirit/core/core.hpp>
现在应该写成
#include <boost/spirit/include/classic_core.hpp>
为了避免与新的 Spirit V2 库发生命名空间冲突,我们将 **Spirit Classic** 移至namespace boost::spirit::classic命名空间。每当使用已弃用的包含文件时,此更改将自动停用。这确保了对现有应用程序的完全向后兼容性。
有关此更改的更多详细信息,请参阅文档。
1.8.6
- 修复了阻止在某些大整数上解析失败的整数溢出错误。此错误由 Michael Andersen Nexø 报告并修复。
1.8.5
- 出于性能原因,leaf_node_d/token_node_d 已更改为一次性创建叶节点的隐式词素。旧的 token_node_d 仍然可用,现在称为 reduced_node_d。
- 现在可以 phoenix::bind(版本 1)symbols::add。
1.8.4
- 修复了 no_actions 错误,其中 no_action 被递归应用。
- 修复了 Boost >= V1.33.0 的 regex_p 解析器。
- 实现了针对 VC++ 对 Spirit 的 file_iterators 的命名空间问题的解决方法。
- 修复了树匹配策略中的错误,该错误阻止了 gen_pt/ast_node_d 的使用,由 Jascha Wetzel 报告。
- 使 position_iterator 可用于基于 wchar_t 的字符串。
1.8.3
- Steve Clamage 对 Sun C++ 的配置更正(请参阅 此链接)。
- 修复了 64 位平台上的 multi_pass_iterator,其中 sizeof(int) != sizeof(ptr_type)。修复了阻止在具有多个入口点的语法中使用闭包的错误,由 David Pierre 报告
- 修复了阻止嵌入具有多个入口点的语法的错误,由 David Pierre 报告
- 将 '\0' 添加到 escape_ch_p 的有效转义字符集中。
- 修复了将 phoenix::actor 用作条件表达式时 switch_p 的错误。
- __LINE__ 宏现在在 BOOST_SPIRIT_ASSERT_EXCEPTION 中展开
- 修复了交集解析器中的一个错误 由 Yusaku Sugai 报告
- 符号解析器在内部使用空字符。添加了检查,以便
- 如果字符串包含空字符,tst.add 将断言
- tst.find 不匹配输入中的空字符
- 修复了 match_attr_traits.ipp 以允许非 POD 类型通过。先前采用省略号 "..." 的版本不允许 POD 类型通过。
- 允许将对 int 的求值作为 if_p 解析器的条件。
- 根据 Stefan Slapeta 的建议,对 PT/AST 代码应用了性能改进更改。
- 修复了 AST 树节点指令(inner_node_d[]、discard_first_node[]、discard_last_node[] 和 infix_node_d[])的几个问题。
1.8.2
维护版本(几乎与 1.8.1 相同,并进行了一些修复)
- 为 str_p 和 ch_p 添加了特化,以允许 str_p('c') 和 ch_p("c"),从而修复了一些非错误
- 修复了 match<T> 是 variant 时的错误。
- 将 Jamfile/Jamrules 从 CVS 添加到 spirit-1.8.1/
- 将 boost-build.jam 从 boost 添加到 spirit-1.8.1/
- 在 libs/spirit/test/Jamfile 中禁用了模板多线程
- 在 libs/spirit/test/Jamfile 中添加了一个指向 miniboost 的 boost-header-include 规则(来自 spirit-header-include)
- 修复了 if_p 不一致问题
1.6.2
Spirit 1.6.2 版本仅是错误修复版本,没有引入新功能。
- wchar_t 友好的 graph_p 实现
- 修改了 escape_char_parser::parse() 以使用静态解析器而不是规则。这将使其更易于在树中使用。它也应该更有效率一些。
- 迁移到 Boost 软件许可证 1.0。
- 针对基类特化中的名称查找错误 322 找到类型的解决方法
- 修复了 limit_d 错误
- [numerics] aC++ 的解决方法
- 修复了 switch_p 解析器中的错误。
- 修复了 multi_pass 中的 EOI 问题
- 将 Jamfile/Jamrules 从 CVS 添加到 spirit-1.6.1/
- 将 boost-build.jam 从 boost 添加到 spirit-1.6.1/
- 在 libs/spirit/test/Jamfile 中禁用了模板多线程
- 在 libs/spirit/test/Jamfile 中添加了一个指向 miniboost 的 boost-header-include 规则(来自 spirit-header-include)
1.8.1 (与 Boost 1.32.0 一起发布)
Spirit 1.8.1 版本仅是错误修复版本,没有引入新功能。
- Spirit 现在至少需要 Boost 1.32.0 才能正确编译
- 删除了对旧迭代器适配器库的支持,并
- 迁移到使用新的 MPL 库
- Spirit 已迁移到使用 Boost 软件许可证 1.0。
- 修复了几个解析器以更正确地支持后跳过。
- 修复了 no_node_d[] 错误。
- 修复了 shortest_d[] 中的错误。
- 修复了 limit_d[] 中的错误。
- 修复了解析器遍历元代码。
- 修复了 switch_p 中的几个错误。
- 修复了 AST 生成问题,尤其是与循环相关的解析器。
- 修复了 multi_pass 迭代器中的几个错误。
- 修复了当使用的基迭代器从其解引用运算符返回 value_type 而不是引用时出现的问题。
- 修复了 iterator_traits 问题
- 修复了 EOI 问题
- 修复了与 std::cin 一起使用时的错误
- 在定义 BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE 时,在 grammar.ipp 中发现了一个错误
- 重写了 safe_bool 以使用 CRTP - 现在也适用于 MWCW,修复了实现中的几个错误。
- 修复并扩展了由解析树代码打印的调试诊断信息。
1.8.0 (与 Boost 1.31.0 一起发布;包括未发布的 1.7.1)
- 修复了 regex_p 解析器中的 wchar_t 问题。
- 删除了旧编译器(VC6/7 和 Borland)的代码和解决方法
- 将许可证更改为新的 boost 许可证。
- 修改了 escape_char_parser::parse() 以使用静态解析器而不是规则。这将使其更易于在树中使用。它也应该更有效率一些。
1.7.1 (未发布;成为 1.8.0)
- 添加了一整套预定义的动作。
- 将 rule_alias 和 stored_rule 从 core/non-terminal 移动到 dynamic。
使 as_parser 成为 meta/as_parser.hpp 中的公共 API
- 将 Core.Meta 分离到它自己的模块中
- 重构了 Utility 模块
将一些文件移动到 Utility.Parsers
- 实用程序
- 解析器
- chset、regex、escape_char
confix、list、distinct
functor_parser
- 支持
- scoped_lock
flush_multi_pass
grammar_def
- 动作
- 存储规则
- 添加了 switch_p 和 select_p 动态解析器。
- 规则的多扫描器支持。
- 规则的扫描器、上下文和标签模板参数现在可以按任何顺序指定。如果缺少模板参数,它将采用默认值。请参阅 test/rule_tests.cpp。
- 引入了从语法指定多个起始规则的可能性。
- 添加了基于新的 Boost iterator_adaptors 的 file_iterator 迭代器的实现(最初由 Thomas Witt 提交)。
[向新 iterator_adaptors 的过渡现在应该完成了。]
- 添加了基于新的 Boost iterator_adaptors 的 fixed_size_queue 迭代器的实现。
- wchar_t 友好的 graph_p 实现
- 将 parser_error_base 的复制构造函数和赋值运算符公开,以清除 VC7.1 C4673 警告。为了清楚起见,向 parser_error 添加了复制构造函数和赋值运算符。
1.7.0
- assign(string) 语义动作现在可以在 VC6 中工作
- 解析器不需要默认可构造
- 简化了二元和一元解析器的聚合(对编译器更友好)
- VC++ 的 epsilon 解决方法
- match 的属性现在使用 boost.optional
- 子规则现在可以有闭包
- 项目范围的 64 位兼容性
- dynamic_parser_tag,重新发布 rule.set_id(id);
- 对有问题的编译器进行了大量改进和解决方法
- 单字符解析器原语和字符集的正确补集 (~)
- 对 lexeme_d 的直观处理
- wide_phrase_scanner_t typedef
- 动态解析器改进(更好地支持更多编译器)
- 完全重写了 file_iterator(使用 boost.iterator_adapters)。 支持任何可用的内存映射
- multi_pass 更新(与更多编译器(例如 VC7)等的兼容性)
- position_iterator 改进
- 更好的 phoenix 支持,适用于更多编译器
- phoenix new_(...) 构造
- 新的 lazy_p 解析器
- utility.distinct 解析器(未记录)
- chset 运算符改进
- confix_p 简化和改进
- 大量 Boost 集成改进
错误修复(1.7.0 和 1.6.0)
- 已修复。使用 MSVC++6 (SP5),在使用 file_iterator 的解析器上使用字符串值调用 assign 动作将不起作用。
- 已修复:在应用于 std::istream_iterator 的 multi_pass 迭代器适配器的语法中使用 assign 语义动作会导致在 msvc 7.0 下编译失败。
- 已修复:“boost\spirit\utility\impl\chset\range_run.ipp”中的“range_run<CharT>::set (range<CharT> const& r)”函数中存在错误。
- 已修复:处理尾随空格错误(与 ast_parse/pt_parse 相关)
- 已修复:comment_p 和数据结束错误
- 已修复:大多数尾随空格错误
- 已修复
chset<>::operator~(range<>) 错误
operator&(chset<>, range<>) 错误
operator&(range<>, chset<>) 错误
- 已修复:impl::detach_clear 错误
- 已修复:不匹配闭包返回类型错误
- 已修复:access_node_d[] 和 access_match_d[] 迭代器错误
- 修复了关于 Phoenix/Spirit 闭包线程安全性的错误。
- 向 miniboost 添加了缺少的包含文件
版权所有 © 1998-2005 Joel de Guzman, Hartmut Kaiser
使用、修改和分发受 Boost 软件许可证 1.0 版的约束。(请参阅随附文件 LICENSE_1_0.txt 或访问 https://boost.ac.cn/LICENSE_1_0.txt 获取副本)