论文摘要
c/c++被广泛地应用于控制、通讯以及大型操作系统等软件的开发。编译c/c++程序的时候,需要经过预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking)等四个阶段。预处理在编译过程中发挥着不可替代作用,可以改善程序结构、完善程序功能、增强可扩展性、自动生成专为特定体系结构配置而调整的代码等。 通过对现有预处理器指令的目标功能、语义特征的分析以及现有改进方案的优缺点进行综合考虑,我们发现现有预处理主要在C++文本子替换、名称连接、条件编译、名称空间、代码冗余等很多方面存在文法以及语义上的缺陷,从而导致所开发的软件系统重用性不高,难以对软件进行维护配置等。 为了克服这些缺陷,本文以Frame技术为基础、基于高级配置语言XVCL(XML-based Variant Configuration Language)的系统核心模型来改进原来的预处理机制。从提高软件重用性的角度出发,结合解释器模式和迭代器模式的思想对解决方案进行实施,合理分割系统模块、指令集交互模块以及文法模型设计。通过对原有元数据语义模型添加可配置信息,扩展原有指令集语义,并从语法语义上支持程序结构重构。文件结构处理上应用Frame技术中变量配置的思想将工程文件按需求以及功能点组织成树形结构,并定义用以提高重用性的变量作用域机制。同时根据工程需求特性的不同采用不同粒度的配置点,并由全局配置信息进行控制。通过面向重用的变量作用域,文件的树形组织形式,以及改进的文法模型可以有效地解决原有预处理机制存在的问题,例如交叉引用、代码的重用性不高、大量重复代码等缺陷。 对C++STL库基于代码级使用自动化工具CCFinder进行分析,且基于设计级对领域模型进行分析,可以发现在文档说明、属性定义、构造方法及方法定义几个方面都不同程度存在代码克隆现象。运用本文的XVCL配置思想与改进手段,将代码重构并重新分块,各个独立的构造单位被配置成可重用的形式。从有效降低LOC(LineOfCode),提高STL库的可扩展性与重用性,对源代码级别的多粒度的变量配置提供支持,且改进后的代码兼容原有代码等方面来验证了本方法的有效性。