Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我需要一个工具,以找到重复或类似的文本块在一个单一的文本文件或文本文件集_C_Text_Automation_Code Duplication - Fatal编程技术网

C 我需要一个工具,以找到重复或类似的文本块在一个单一的文本文件或文本文件集

C 我需要一个工具,以找到重复或类似的文本块在一个单一的文本文件或文本文件集,c,text,automation,code-duplication,C,Text,Automation,Code Duplication,我想自动将重复的或类似的C代码移动到函数中 这必须在Linux下工作。问题的一个子集:检测重复代码: 尝试: 重复的代码可能很难找到,尤其是在大型项目中。但PMD的复制/粘贴检测器(CPD)可以为您找到它!持续专业发展经历了三个主要阶段: 首先,我们使用Michael Wise贪婪字符串平铺算法的一个变体编写了它(我们的变体在这里描述) 然后Brian Ewins使用Burrows-Wheeler变换完全重写了它 最后,由Steve Hawkins重写,以使用Karp-Rabin字符串匹配算法

我想自动将重复的或类似的C代码移动到函数中


这必须在Linux下工作。

问题的一个子集:检测重复代码:

尝试:

重复的代码可能很难找到,尤其是在大型项目中。但PMD的复制/粘贴检测器(CPD)可以为您找到它!持续专业发展经历了三个主要阶段:

  • 首先,我们使用Michael Wise贪婪字符串平铺算法的一个变体编写了它(我们的变体在这里描述)
  • 然后Brian Ewins使用Burrows-Wheeler变换完全重写了它
  • 最后,由Steve Hawkins重写,以使用Karp-Rabin字符串匹配算法

注意,CPD使用java、JSP、C++、Fortran和PHP代码工作。


您将要查看。对于非商业项目是免费的。尝试以下方法:

# Find all C source files and identify similarities/duplicate code.
simian -includes=**/*.c -excludes=**/*_test.c

Simian(前面提到过)是一个很好的工具。我一直在我的项目中使用,效果非常好。CloneDetect是免费的,所以不妨尝试一下。

请注意,您不能只比较文本行。您必须解析代码,以这种方式,您还可以检测语义正确但可能具有不同命名标识符的段

例如,给定两个等价但使用不同标识符的函数,文本搜索不会将它们视为相同的,但解析器可以

还注意到,即使在给出语法时,编写C++解析器也不是一项简单的任务。我建议别人的建议,并为此寻找一个工具。还可以搜索重构工具。

请参阅,这是一个在源代码中查找精确复制和未遂(复制粘贴编辑)克隆的工具。它使用完整的语言解析器,使它能够根据语言结构查找克隆,最大限度地减少误报,并且完全不依赖于代码的注释或格式,从而最大限度地实现真实检测。当克隆的块已更改变量、插入的状态或代码块时,克隆器将查找克隆

<> P>语言有C、C++、COBOL、C、java、PHP和其他一些语言的前端,

您可以在网站上查看克隆检测报告样本。


用于在文件或目录中查找相同代码块的工具。

我在Java代码中使用CPD执行类似任务。输出可以是xml,因此很容易实现自动化。我主张使用一种工具来简单地识别代码的类似部分。自动化这种重构会带来问题。可能的重复:C++也是如此:Thomas是正确的:您需要一个解析器,而构建解析器对于真正的语言来说是相当困难的。参见克隆检测工具的克隆答案,它解析并处理C和C++。