3

私は自分の大学のグループ プロジェクトに取り組んでおり、これはコンピュータ サイエンスの剽窃検出に使用される予定です。

私のグループは主に、次のジャーナル記事で説明されているハッシュ/フィンガープリント手法から離れています: Winnowing: Local Algorithms for Document Fingerprinting . これは、 MOSS盗作検出システムの仕組みと非常によく似ています。

私たちは基本的に、仲間の学生のソース コードの k-gram ハッシュを取得し、関連する一致をデータベースで検索します (ドキュメントのフィンガープリントとして選択するハッシュを決定する方法の多くの最適化と共に)。

私たちのプロジェクトの最初の側面は、検出システムが処理できる各ファイル形式に関するセマンティックな知識を保持する「フロントエンド」部分です。これにより、剽窃検出の目的で不要になったドキュメントから詳細を取り除くことができます。基本的に、さまざまなプログラミング言語のすべての変数の名前を定数文字列または文字に変更できるようにしたいと考えています。

さまざまな言語のソース コード ファイル内のすべての変数の名前を定数に変更するために使用できる軽量のソリューション (レクサー ジェネレーターなど) は何ですか?

私たちのプロジェクトはJavaで書かれています。

理想的には、言語ごとに文法を定義できるようにしたいだけで、フロント エンドはその言語のソース ファイル内のすべての識別子の名前を何らかの定数に変更できるようになります。次に、サポートしたいファイル形式 (Java、C++、Python など) ごとにこれを行います。

4

4 に答える 4

3

レクサー/パーサー ジェネレーターについては、ANTLR を参照してください。テキスト変換インタープリターである TXL も一見の価値があります。既製の文法は両方で利用できるはずです。

于 2010-01-22T19:56:41.273 に答える
1

すでに提案されている ANTLR とは別に、JFlexも参照してください。

于 2010-01-22T20:10:57.977 に答える
0

acacia-lexlexerにはメソッドreplaceがあります。

レクサートークン定義では、識別子のように見えます。たとえば、「ident1」->「[a..d]」、「ident2」->「[e..h]」です。

replaceメソッドの入力マップで、「ident1」->「ident1」、「ident2」->「ident2」など、どの識別子タイプをどの定数(オブジェクト)に置き換えるかを指定します。

于 2012-11-11T23:56:37.740 に答える
0

実行しようとしていることが実際には不可能な言語がいくつかあることに注意してください。具体的には、文法に基づいて変数であるかどうかを判断できないものです。Tcl はその一例ですが、同じ問題を抱えている動的言語がいくつかあります (Lisp?)。

于 2010-01-22T20:00:34.273 に答える