论文部分内容阅读
随着计算机和互联网的发展,社会对软件开发人员的需求量逐年增加,但庞大的代码量使得人工审核代码变得不可能,同时便捷的互联网使得代码抄袭情况越来越严重,而源代码的同源性分析能比较两个软件从源代码到软件功能之间的差别,找出它们之间的相似之处或相同之处,从而有效分辨代码抄袭情况,因此源代码的同源性分析对于代码的知识产权保护显得特别重要。常见的同源性分析主要有三种:基于文本的同源性分析、基于令牌(token)的同源性分析以及基于语法树的同源性分析。其中基于语法树的同源性分析被广泛采用。本文提出一种基于抽象语法树和改进粒子群算法的代码同源性分析方法。该方法先对程序代码进行预处理得到中间代码,然后进行词法语法分析并利用抽象语法树存储语法结构信息,最后利用改进后的粒子群算法进行迭代优化。具体做了以下几个方面的工作。一、基于ANTLRV4工具,研究了 ANTLRV4构造词法分析器和语法分析器的过程。词法分析主要读入源代码,把构成源程序的字符流进行识别并转化成记号流作为语法分析的输入。语法分析主要接受来自词法分析器输出的记号流并将其转化为抽象语法树。二、针对C++语言特性,进行了表达式抽象语法树结构的描述以及语句的抽象语法树结构的描述。为了避免语法分析时匹配失败提出了增加虚拟节点的改进思路,利用ANTLR自带的Listener监听器进行语法树的遍历以及遍历完将其写入文件进行存储,从而为粒子群算法的应用提供了数据来源。三、针对基本粒子群算法容易陷入局部最优的缺点提出了三点改进思路,即粒子编码方式的改进、通过变异策略增加粒子的多样性以及收敛因子的优化。四、建立和分析了反抄袭检测系统的开发环境和开发平台,该系统主要是由输入模块、预处理模块、AST分析模块、相似度计算模块和输出模块构成。输入模块主要实现源文件和对比文件的输入;预处理模块的主要功能是删除程序代码中不影响程序代码生成AST的部分;AST分析结果模块是将所有树节点信息,包括哈希值,节点类型,节点名称,节点信息量输出出来;相似度计算模块是将每次迭代中得到的哈希值,节点类型和节点信息量的相似度值展示,输出模块是将最后得到的相似度值进行展示。五、基于JAVA和springMVC设计了代码的同源性分析的实验过程。实验证明,利用改进后的粒子群算法可以提高识别源代码抄袭的准确率和效率。