我有兴趣比较代码以找到匹配项,即查看两个不同的代码是否等效。例如,对于返回两个数字之和的方法(在 Java 中),这里有 4 个匹配项。
int sum(int a, int b){
return a + b;
}
int sum(int a, int b){
return b + a;
}
int sum(int a, int b){
int sum = a + b;
return sum;
}
int sum(int a, int b){
int total = a + b;
return total;
}
虽然很容易对两段源代码进行文本比较,但很难编写能够识别上述匹配项的代码。这似乎是解析器或编译器的工作,但它不需要“完美”,因为它只是在寻找匹配项。
这是针对 Rails 网站的,因此理想情况下它应该能够在 Ruby 中工作,但我也可以运行单独的服务。Treetop是一种描述语法的语言,但描述语法也很困难。是否有现有工具可以比较多种语言(如 Java、C++、Ruby 和 Python)的源代码?
它只需要一次找到一种语言的源代码之间的匹配项,但如果它也能找到不同语言的源代码之间的匹配项,那就太酷了。
更新:匹配不是任何产生相同结果的代码,而是使用相同过程和步骤来获得相同结果的代码。该工具不需要找到所有可能的匹配项,但它应该能够识别除了小的差异之外的相同代码,例如变量名称或顺序(如上例所示)。