面向C语言的源代码克隆检测方法技术

技术编号:22054495 阅读:39 留言:0更新日期:2019-09-07 15:00
本发明专利技术公开了一种面向C语言的源代码克隆检测方法。本发明专利技术的技术方案为:采用上下文五官文法对C语言语法进行定义,用于实现对源程序的解析,生成源程序的解析树,再对整个解析树进行转化,得到转化后的解析树,然后再还原为文本形式的源代码。此外还包括对得到的文本形式的源代码进行格式化规范化处理。对得到的C函数通过LCS算法进行克隆检测,得到当前待检测函数的克隆函数检测结果,在克隆检测时,仅将函数的代码序列长度落入其允许的克隆函数的长度范围作为当前待检测函数的克隆比较对象。本发明专利技术能够实现对Type3类型克隆的检测,且在一定程度上控制检测的计算量。

C Language Oriented Source Code Cloning Detection Method

【技术实现步骤摘要】
面向C语言的源代码克隆检测方法
本专利技术属于克隆代码检测
,具体涉及面向C语言的源代码克隆检测。
技术介绍
目前对于克隆代码检测的研究普遍将克隆代码分为3类:(1)Type1:除了空格和注释,其他完全相同的克隆代码;(2)Type2:句法相同,对标识符、常量、类型进行了修改的克隆代码;(3)Type3:在Type2基础上对语句进行进一步的修改,如增加声明、移除声明修改声明语句等产生的克隆代码。早期的代码克隆检测思想很直观,直接将代码当做纯粹的文本(字符串)来处理,从文本的相似性上判断代码的相似程度。代表性的技术有Baker的Dup,它如同一般的网页相似度探查工具一样,通过词频的比较来判定代码克隆,具体可参考文献《B.Baker,Onfindingduplicationandnear-duplicationinlargesoftwaresystems,in:Proceedingsofthe2ndWorkingConferenceonReverseEngineering,WCRE1995,1995,pp.86–95.》。但由于代码结构上的特殊性,这种方法和其他技术相比,在Type本文档来自技高网...

【技术保护点】
1.面向C语言的源代码克隆检测方法,其特征在于,包括下列步骤:本专利技术的面向C语言的源代码克隆检测方法,包括下列步骤:步骤1:基于设置的语法规则定义文件分别对输入的C源代码进行从上到下的解析处理,得到输入的C源程序的解析树;其中,语法规则定义文件采用txl语言编写,以上下文无关文法对C语言语法规则进行定义,包括:定义一个C程序源文件为一个非终结符;定义表示C程序源文件的非终结符是一个非终结符语法单元,其包括一系列表示函数定义、声明语句的非终结符,其中表示函数定义的非终结符包括表示函数头和函数体的非终结符;表示声明语句的非终结符包括表示变量声明语句和表示变量初始化语句的非终结符;步骤2:基于设...

【技术特征摘要】
1.面向C语言的源代码克隆检测方法,其特征在于,包括下列步骤:本发明的面向C语言的源代码克隆检测方法,包括下列步骤:步骤1:基于设置的语法规则定义文件分别对输入的C源代码进行从上到下的解析处理,得到输入的C源程序的解析树;其中,语法规则定义文件采用txl语言编写,以上下文无关文法对C语言语法规则进行定义,包括:定义一个C程序源文件为一个非终结符;定义表示C程序源文件的非终结符是一个非终结符语法单元,其包括一系列表示函数定义、声明语句的非终结符,其中表示函数定义的非终结符包括表示函数头和函数体的非终结符;表示声明语句的非终结符包括表示变量声明语句和表示变量初始化语句的非终结符;步骤2:基于设置的C函数提取文件提取C源代码中的C函数:基于C函数提取文件转化步骤1得到的解析树,再对转化后的解析树进行C源程序文件还原处理,还原得到的C源程序文件以XML文件形式保存,包括所有提取出的C函数,每个C函数都标注其所属的源文件名、开始与结束的源代码行号;其中,C函数提取文件采用txl语言编写,引用语法规则定义文件对C语言语法的定义,并重写表示C程序源文件与表示函数的非终结符定义:定义表示C程序源文件的非终结符由一系列表示函数定义和表示声明语句的非终结符组成;在表示函数定义的非终结符定义中添加伪非终结符,用于记录函数所属源文件名、开始行和结束行位置信息;步骤3:LCS克隆检测处理:对于当前待比较函数F,记其代码序列长度为L,基于预设的差异率阈值T计算函数F允许的克隆函数的长度范围为:[L-L*T,L+L*T];对与函数F进行克隆检测的所有函数,根据函数的代码序列长度从大到小排序;仅对函数的代码序列长...

【专利技术属性】
技术研发人员:桂盛霖徐参语陈一凡
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1