Algorithm 克隆检测算法

Algorithm 克隆检测算法,algorithm,clone,Algorithm,Clone,我正在写一个算法,检测源代码中的克隆。例如,如果有类似以下的块: for(int i = o; i <5; i++){ doSomething(abc); } 用于(int i=o;i如果你要做其他事情,那么你必须至少对代码进行一点解析。例如,你可以检测方法,然后忽略散列中的方法参数。无论如何,我认为你需要你的程序更好地理解代码,而不仅仅是“文本块”,这可能会得到令人敬畏的com重复。这里有一个超级简单的方法,它可能会在删除信息方面走得太远(即,可能会产生太多误报):用某个固定的名称替换

我正在写一个算法,检测源代码中的克隆。例如,如果有类似以下的块:

for(int i = o; i <5; i++){
doSomething(abc);
}

用于(int i=o;i如果你要做其他事情,那么你必须至少对代码进行一点解析。例如,你可以检测方法,然后忽略散列中的方法参数。无论如何,我认为你需要你的程序更好地理解代码,而不仅仅是“文本块”,这可能会得到令人敬畏的com重复。

这里有一个超级简单的方法,它可能会在删除信息方面走得太远(即,可能会产生太多误报):用某个固定的名称替换每个不是关键字的标识符。这样你就可以

for (int DUMMY = DUMMY; DUMMY<5; DUMMY++) {
  DUMMY(DUMMY);
}

用于(ItimeMime=哑,哑……嗯……只是好奇,但是……为什么你想这么做?这个链接可能会帮助你:虽然它是C++,但是可以提供各种语言的软件。”t我想创建我自己的算法。这个+修剪并删除换行符,你正在寻找一些重复。你可能会把循环变量放在另一个集合中(即DUMMY1)因为它是在这个块内初始化的。哦,我的意思是0。我认为这是一个好主意……我担心它会错误地标记克隆,例如,如果一堆行没有任何关键字,它们将被检测为克隆。只有当结构相同时——相同的toksn序列除了不同的标识符名称。例如,
fOO(A,B,C);将不同于<代码> FoO(a,b);< /代码>。@ Philipp T.,我不确定您是否能真正实现这一工作。考虑,例如,您想捕获同一块代码,即使它有时发生在<<代码> < /COD> >循环中,有时不发生。