论文部分内容阅读
程序的等价转换技术在程序的分析评价中有着广泛的应用前景。由于目前程序分析评价主要停留在程序输出结果的比较阶段,未深入到程序的结构层次分析,以发现程序之间存在的语义差异。另外,在已有相关方面的研究中,程序分析评价的目标语言仅限于函数式语言或命令式语言,尚未涉及到面向对象语言的等价转换研究。本文研究基于面向对象程序的等价转换技术及其在程序分析评价中的应用。程序的等价转换技术是以程序语义等价性为理论基础,程序语义的等价性包括执行语义等价、结构语义等价和似结构语义等价。具有等价似结构语义的源程序之间可以作相互转换。由于使用面向对象语言设计的程序具有明显的层次性,在对这类程序进行等价转换时,分以下三个层次进行:程序级等价转换、类级等价转换和方法级等价转换。程序级等价转换主要是针对程序中类之间存在继承关系而进行的程序标准化处理过程,通过对继承关系的消除,可以显式地表达每个类所包含的所有信息。类级等价转换主要是针对每个类中的成员方法之间的相互调用关系进行的程序标准化处理过程,通过对调用关系的消除,可以直观表达每个成员方法中所包含的所有信息,同时,还需要消除类中存在的冗余方法,简化类的构成。方法级等价转换主要是针对程序在语句表达上的多样化而进行的程序标准化处理过程,通过对程序中的语句进行赋值标准化、表达式标准化和控制结构标准化来消除每个方法中语句表达的多样化问题。在面向对象程序等价转换技术的基础上,提出了一个JAVA程序自动测评系统的框架,并实现了系统原型。在该系统中,使用ANTLRWORKS构造一个以AST为中间代码的JAVA语言解析器。在AST基础上,对程序结构进行分析,并引入C&K和MOOD等著名的面向对象的度量体系对程序进行度量,并生成用于分析程序的各种图形表示。然后按程序级保留语义的等价转换、类级保留语义的等价转换和方法级保留语义的等价转换共三个层次对程序进行保留语义的等价转换,最终生成在语义上可以比较的程序依赖图,应用相关算法实现对程序的比较与评价。