我需要一个工具来在单个文本文件或一组文本文件中查找重复文本或类似的文本块

时间:2009-12-15 15:17:31

标签: c text automation code-duplication

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

这必须在Linux下运行。

6 个答案:

答案 0 :(得分:4)

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

尝试:PMD

  

重复的代码很难找到,特别是在大型项目中。但是PMD的复制/粘贴检测器(CPD)可以为您找到它! CPD经历了三个主要的变化:

     
      
  • 首先我们使用Michael Wise的Greedy String Tiling算法的变体编写它(我们的变体在这里描述)
  •   
  • 然后它被Brian Ewins使用Burrows-Wheeler变换完全重写
  •   
  • 最后,Steve Hawkins重写了它使用Karp-Rabin字符串匹配算法。
  •   
     

...

     

请注意,CPD适用于Java,JSP,C,C ++,Fortran和PHP代码。

答案 1 :(得分:1)

您需要查看 Simian 。它对于非商业项目是免费的。尝试类似:

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

答案 2 :(得分:1)

Simian(前面提到过)是一个很好的工具。我一直在我的项目中使用CloneDetective并且效果很好。 CloneDetective是免费的,所以尝试一下就不会有什么坏处。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

请参阅CloneDR,这是一种在源代码中查找精确复制和近似遗漏(复制粘贴编辑)克隆的工具。它使用完整的语言解析器使其能够根据语言结构查找克隆,最大限度地减少误报,并完全忽略代码的评论或格式化,从而最大限度地提高真实检测能力。当克隆块更改了变量,插入状态或代码块时,CloneDR将查找克隆。

它具有C,C ++,COBOL,C#,Java,PHP和许多其他语言的语言前端。

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

答案 5 :(得分:0)

https://github.com/hudayou/fib

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