9

Spirit(Boost C++ 库的一部分)可以用来解析来自流的二进制数据吗?例如,它能否用于将来自套接字的数据解析为结构、字节和单个位标志?谢谢!

4

2 回答 2

12

Boost Spirit 允许使用带有模板元编程的 Extended Backus-Naur Form (EBNF)语法来定义解析器。它非常灵活,在解析过程的所有阶段都使用抽象类,可以自定义。为了处理二进制数据流,您需要实现自定义扫描器类,因为默认类型是为文本输入量身定制的。您可以在Spirit 用户指南的扫描器和解析部分进一步阅读。

在我看来,二进制数据流最好使用手动序列化代码来处理。Spirit 更适合格式良好的语法,例如标记或脚本语言。例如,EBNF 中提供了 Lua 的完整语法。因此,使用 Spirit 构建自定义解析器可能是有意义的。另一方面,带有同步字节和 CRC 括号消息的专有串行数据链路将需要更多的工作来定义 EBNF,如果它甚至存在上下文无关语法的话。

附录

最新版本的 Boost Spirit 包括处理二进制数据的功能。

于 2008-11-12T22:30:54.097 回答
9

Spirit2 刚刚发布,具有解析二进制文件的功能。看看这个

于 2009-11-19T16:09:24.747 回答