[发明专利]面向C语言的源代码克隆检测方法有效
申请号: | 201811105462.4 | 申请日: | 2018-09-21 |
公开(公告)号: | CN110209425B | 公开(公告)日: | 2022-03-15 |
发明(设计)人: | 桂盛霖;徐参语;陈一凡 | 申请(专利权)人: | 电子科技大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 电子科技大学专利中心 51203 | 代理人: | 周刘英 |
地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种面向C语言的源代码克隆检测方法。本发明的技术方案为:采用上下文五官文法对C语言语法进行定义,用于实现对源程序的解析,生成源程序的解析树,再对整个解析树进行转化,得到转化后的解析树,然后再还原为文本形式的源代码。此外还包括对得到的文本形式的源代码进行格式化规范化处理。对得到的C函数通过LCS算法进行克隆检测,得到当前待检测函数的克隆函数检测结果,在克隆检测时,仅将函数的代码序列长度落入其允许的克隆函数的长度范围作为当前待检测函数的克隆比较对象。本发明能够实现对Type3类型克隆的检测,且在一定程度上控制检测的计算量。 | ||
搜索关键词: | 面向 语言 源代码 克隆 检测 方法 | ||
【主权项】:
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进行克隆检测的所有函数,根据函数的代码序列长度从大到小排序;仅对函数的代码序列长度落入长度范围[L‑L*T,L+L*T]的函数行LCS克隆检测处理,查找当前待比较函数F的克隆函数。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201811105462.4/,转载请声明来源钻瓜专利网。