想要写个C++类的词法文法分析由来已久。一直找不到好的方法,之前尝试使用正则表达式来解析,但是有点受限,正则表达式过于复杂,而且一般是按行分析的。之所以要分析提取C++类的信息,主要还是为了解放劳动力,提高生产效率。我的目标是,以后写代码一般情况下只写类的基础框架,包含类名称,基类及其相关的类成员变量。其它的所有方法接口,都使用分析工具分析后自动生成。当然生成后的代码有些需要小改动后才可使用,有些则直接使用。开发软件时,就可以集中关注业务流程。
最近一直在学习Scala语言,偶然发现其Parser模块功能强大,乃为BNF而设计。啥是BNF,读大学的时候在课本上见过,那时候只觉得这个东西太深奥。没想到所有的计算机语言都是基于BNF而定义的一套规范。词法,语法,词法,语法。。。下面看看解析C++类声明的一个简单例子吧。
class CPlusPlusParser extends StandardTokenParsers{
//分隔符,用于repsep,和其它显示的地方
lexical.delimiters += (":","::","<",">","(",&#