我對比較代碼以找到匹配感興趣,即查看兩個不同的代碼塊是否相同。例如,這裏有4個匹配的方法返回兩個數字的總和(以Java表示)。有沒有可以比較或解析多種語言的工具?
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)的源代碼?
它只需要一次在一種語言的源代碼之間找到匹配,儘管如果它能夠在不同語言的源代碼之間找到匹配,它也會很酷。
更新:匹配不是產生相同結果的任何代碼,而是使用相同過程和步驟獲得相同結果的代碼。該工具不需要找到所有可能的匹配,但它應該能夠識別除了小差異之外相同的代碼,如變量名稱或順序(如上例所示)。
你可以編寫單元測試並針對不同的實現運行它們。如果你想從Ruby測試Java方法,你需要使用JRuby。這可能值得一讀:https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby –
@plly,我希望它能夠找到沒有運行代碼的匹配。另外,匹配不是具有相同結果的任何代碼,而是具有相同方法的代碼(沒有文本完全匹配)。 – Ari
可能的重複:http://stackoverflow.com/q/3450907/120163 –