秘笈18 解析简单的输入(1)
解析一个小的文本是一项常见的任务。在这种情况下总会遇到一个难题:我们应该使用一些第三方专业解析工具如Bison或ANTLR,还是尝试使用C++和STL手工编写它?第三方工具善于处理复杂文本的解析,并且使用它们编写解析器很容易,但若要从它们的语法创建C++或C代码,还需要额外的工具,并将更多的依赖关系添加到你的项目。虽然手工编写的解析器通常是难以维护的,但它们只需要C++编译器。

让我们从一个非常简单的任务开始,解析如下一个ISO格式的日期:

以下是可能的输入的例子:

让我们从地址http://www.ietf.org/rfc/rfc3339.txt来查看解析器的语法:

准备
需要熟悉占位符的概念或阅读了秘笈8和秘笈9。最好具备分析工具的基础知识。
做法
下面介绍一下Boost.Spirit库。它允许直接用C++代码的格式编写解析器(以及词法分析器和代码生成器),它是可以立即执行的(也就是说不需要额外的C++代码生成工具)。Boost.Spirit的语法与扩展巴科斯范式(Extended Backus-Naur Form, EBNF)非常接近,很多标准都用它来表达语法,并且其他流行的解析器都理解它。在本章开头的语法就是EBNF。
1. 需要包括以下头文件:

2. 现在制作一个date结构来保存解析出的数据:

3. 现在,让我们来查看解析器(下一节将一步一步地描述它是如何工作的) :

4. 现在,可以在任何地方使用这个解析器:
