书中提供了一个分析 C 声明的程序(点此查看该程序)。这是一个非常实用的程序,如果将其嵌入到代码阅读工具中,肯定会为读代码的人提供很大的帮助,因为有些 C 代码中的声明确实够看代码的人喝一壶的了。然而遗憾的是,这个程序并不完美。按照作者的说法,这个程序有以下不完备的地方: 1、没有错误处理; 2、处理结构,枚举和联合不到位; 3、忽略了函数的参数列表; 实际上这个程序还有一些 BUG, 比如它无法分析书中做为例子的 UNIX signal 函数声明:
更进一步的,我们希望这个程序能分析 C++ 的声明,能理解成员函数指针,名字空间等内容。再有,作为一个中国人,我希望它能给出中文的描述。
以上这些理由足够使我重新写一个程序来分析声明了。当然我不想那么原始的去一个字符一个字符分析了。时至今日,我们有更多的工具和库可以使用,正则表达式就是一个不错的选择,但我们还有更好的方法,那就是 boost 的 spirit 库。原来的程序是模拟人分析 C 声明过程来实现的。这次我们从C++ 的语法入手,直接解析语法。
首先,我们需要得到 C++ 声明的 EBNF 语法表达式,有了 EBNF 表达式就可以直接将其交给 boost::spirit 库去解析了。