Skip to content

Latest commit

 

History

History
27 lines (17 loc) · 1.94 KB

clone.md

File metadata and controls

27 lines (17 loc) · 1.94 KB

クローン・類似性

C0. 与えられたソースファイルを字句解析せよ.

C1. 与えられたファイル対がType-1クローンであるか判定せよ.

空白やタブ等のコーディングスタイルを除くと一致するプログラム対をType-1クローンという. 字句列の一致とみなしてよい.

C2. ソースプログラムから得られた字句のうち,変数名を特殊シンボルV,リテラルを特殊シンボルLに置換して出力せよ.これを用いて,与えられたファイル対がType-2クローンか判定せよ.

Type-1に加え,変数名やリテラル等の字句単位での違いを除くと一致するソースプログラム対をType-2クローンという.

C3. 与えられた2つの文字列の最長共通部分列 (longest common subsequence; LCS) を求めよ.

C4. 与えられた2つのソースプログラムの行差分(diff)を求めよ.

ここでdiffは,ソースプログラムを行の並び(列)とみなしたうえで,最長共通部分列に含まれなかった行を追加・削除された行とみなす.

C5. 文脈長2として,hunkの列としてdiffを出力せよ(diff -u -c2を模倣せよ).

C6. 与えられたファイル対がType-3クローンを含むか判定せよ.

Type-3クローンは,Type-2に加え,字句単位よりも大きな違いを含むものを許容する.

(この問題が曖昧でつらそう.もう少し限定してあげたい.)

C7. Type-1クローン関係を含むような同値関係をなす,ソースプログラム$s$からのハッシュ関数$h(s)$を設計せよ.

これを用いて,(大きめの例題)からすべてのType-1クローン関係を特定せよ.

C8. コード片に対するメトリクス値に基づくベクトル空間を構成し,ベクトルの類似性に基づきクローンを検出せよ.