论文部分内容阅读
程序的分析技术在许多领域有广泛的应用前景。例如,对学生程序的自动分析评价;利用程序分析比较工具来辅助软件版权的分析鉴别。但是目前程序分析评价技术主要停留在程序输出结果的比较,并不能发现那些通过编译但语义上有问题的程序的错误;曾有个别学者尝试过在语义上分析评价程序,但是分析的目标语言并不是国内外计算机教育普遍采用的编程语言。相关的研究,如程序理解、程序度量和程序转换,虽然和程序分析评价的研究有一定的联系,但是国内外鲜有将其综合起来用于程序分析评价的研究。本文研究基于转换的程序分析技术及其在程序评价上的应用,并讨论了在其他方面的应用前景。在研究编译器转换技术和代码优化相关技术的基础上,提出了用于分析评价C语言程序的AnalyseC框架,并实现了其软件原型。AnalyseC对程序分别进行结构相似性分析和语义分析评价,实现了程序度量及其可视化、程序转换及其可视化、程序分析评价等功能。在AnalyseC中,使用ANTLR构造一个以抽象语法树为中间代码的C语言分析器。在结构层次上,AnalyseC基于程序的抽象语法树,应用传统的软件度量对程序进行分析和可视化,并提出将数据结构的使用列为程序度量的元素之一,实现程序的结构相似性分析。在语义层次上,使用在编译器当中用于代码优化的程序依赖图作为程序的表现形式。编译器使用代码优化相关技术的目的是使程序运行得更加快,AnalyseC使用该技术的目的是借助程序依赖图用于程序比较。应用编译器的转换技术、内联扩展技术、前向替换等代码优化相关技术,对程序进行保留语义的标准化转换、控制流分析和数据流分析,形成可以在语义上进行比较的程序依赖图,最终通过程序划分、比较,实现程序的分析评价。程序以源代码的形式提供给AnalyseC,AnalyseC在结构层次和语义层次对程序进行分析,得出结构分析结果和语义分析结果,可以辅助教师评改编程作业,同时也给予学生一定的上机辅导,提示程序可能出错的地方。AnalyseC已经应用于数据结构算法设计作业的分析与评价,能够分析评价部分学生作业。但是AnalyseC目前还是个软件原型,需要更多的努力使其完善,实际应用于程序的自动分析评价和其他的应用领域。