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

问题描述 投票:0回答:6

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

这必须在 Linux 下工作。

c text automation code-duplication
6个回答
5
投票

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

尝试:PMD

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

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

...

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


3
投票

您需要查看 Simian 相似度分析器。对于非商业项目来说它是免费的。尝试这样的事情:

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

1
投票

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


1
投票

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

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

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


1
投票

参见 CloneDR,一种用于在源代码中查找精确复制和未遂(复制粘贴编辑)克隆的工具。它使用完整的语言解析器,使其能够根据语言结构查找克隆,最大限度地减少误报,并完全独立于代码的注释或格式化方式,从而最大限度地提高真实检测率。当克隆块更改变量、插入语句或代码块时,CloneDR 将找到克隆。

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

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


-1
投票

https://github.com/hudayou/fib

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

© www.soinside.com 2019 - 2024. All rights reserved.