首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重复程序

重复程序
EN

Stack Overflow用户
提问于 2017-12-25 09:04:41
回答 1查看 40关注 0票数 -1

我想写一段代码,可以找到代码文件之间的相似性(可能是通过百分比找到相似性,或者至少“猜测”哪些文件可能被复制),我对30个文件运行它,每个文件最多500行。我想识别重复的文件(或疑似重复的文件)。

我遇到了几个问题:

  • spacing:一个代码可以有多个空格或换行符
  • comments :带注释的文件不带注释或不同的注释

这两个问题我想我可以通过从代码中删除所有的空格、换行符和注释来解决,但是我遇到了以下问题

对于试图“隐藏”相似性的

  • 文件,请考虑以下2 C文件作为

的示例

代码1:

代码语言:javascript
复制
void main()
{
    int x;
    int y;
    scanf("%d", &x);
    switch(x)
    {
        case 1:
        //some code
        break;

        case 2:
        //some code
        break;
    }
}

代码2:

代码语言:javascript
复制
#define ONE 1
#define TWO 2
void main()
{
    int a, b;
    scanf("%d", &a);
    switch(a)
    {
        case ONE:
        //some code
        break;

        case TWO:
        //some code
        break;
    }
}

我愿意提供任何帮助(可能是使用现有的工具,也可能是通过建议算法)

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-25 11:26:52

您可能会对MOSS感兴趣,这是斯坦福大学开发的一个系统,它试图准确地解决您的问题。

但是,如果你对开发自己的方法很好奇,这里有一些想法来解决你到目前为止提到的问题:

  1. 将代码解析成AST,这样您就可以轻松地将代码作为数据结构来操作,并忽略诸如whitespace.
  2. You可以通过自己重命名变量来检测变量名称中的更改的问题,使用某种方案来保证基于声明和作用域的顺序的唯一命名。要获得一些灵感,请参阅De Bruijn indices.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47965008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档