我正在爲CS課程開展反剽竊項目。這涉及通過所描述的技術檢測計算機科學課程(編程作業)中的剽竊。基本上,我正在進行一組編程任務。比方說,在任務之一是這樣的:如何在變換中跟蹤字符串中的原始字符位置?
public class MyClass
{
public static void main(String[] args)
{
// declare a variable called someVar
int someVar = 0;
}
}
這就需要打通前端運行,詞法分析部分剝離出來,我們不想要的代碼的功能。在這種情況下,我想要將所有標識符名稱重命名爲常量「V」,並從代碼中將所有註釋全部重命名。
要做到這一點,我們將使用ANTLR和現有的語法各種語言生成相應的詞法分析器。
最終的結果是這樣的:
public class V
{
public static void V(String[] V)
{
int V = 0;
}
}
然後我們去除所有的空白得到:然後
publicclassV{publicstaticvoidV(String[]V){intV=0;}}
這個字符串被分解成K-克預設的大小。例如說K = 5(實際上這將是更大的):
publi ublic blicc liccl iccla ... =0;}}
這裏的問題是:
每個k克被散列與滾動散列函數,並假定要記錄與他們的源文本中的原始字符位置。 k-gram散列和字符位置一起形成指紋。
我怎麼可以跟蹤跨越的標識,評論和白色空間中的所有前端剝離源文本中的K-克原來的位置?
這對於你突出的比賽中對原始出處文本文檔的程序的最後階段是必不可少的。爲了突出k-gram哈希值的匹配,我需要知道k-gram從哪裏開始並在原始源中結束。
另請參閱此類似的問題:http://stackoverflow.com/questions/2303924/how-can-i-keep-track-of-character-positions-after-i-remove-elements-from-a-string – Miles 2010-02-27 08:08:19