0

コードを比較して一致を見つけること、つまり、2 つの異なるコードが同等かどうかを確認することに興味があります。たとえば、(Java で) 2 つの数値の合計を返すメソッドの 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; 
}

2 つのソース コードのテキストを比較するのは簡単ですが、上記の一致を認識するコードを記述するのは困難です。これはパーサーまたはコンパイラーの仕事のようですが、一致を探すだけなので、「完全」である必要はありません。

これは Rails の Web サイト用なので、理想的には Ruby 内で動作できるはずですが、別のサービスを実行することもできます。Treetopは文法を記述するための言語ですが、文法を記述することも困難です。複数の言語 (Java、C++、Ruby、Python など) のソース コードを比較する既存のツールはありますか?

一度に 1 つの言語のソース コード間で一致を見つける必要があるだけですが、異なる言語のソース コード間でも一致を見つけることができればすばらしいでしょう。

更新: 一致は、同じ結果を生成するコードではなく、同じプロセスと手順を使用して同じ結果を得るコードです。このツールは、可能なすべての一致を見つける必要はありませんが、変数名や順序 (上記の例のように) などの小さな違いを除いて同一のコードを認識できる必要があります。

4

3 に答える 3

3

この問題は関数問題として知られており、2 つのプログラムが同じ関数を計算するかどうかを判断します。つまり、そのようなツールが存在する可能性はありません。

基本的に、そのようなツールがあれば、次のように尋ねることができます:Pこのプログラムと同等のプログラムはありますか:

while (true);

そして、停止問題を解決したでしょう。(これは実際の証明方法ではありません。それよりもはるかに複雑ですが、それが基本的な考え方です。)

于 2013-11-14T16:24:42.153 に答える