2

一般的なパターン認識について学びたい場合、何から始めるのが良いでしょうか (本をお勧めします)?

また、これらのアルゴリズムを適用してプログラム内の抽象化パターンを見つける方法について、経験や知識を持っている人はいますか? (繰り返されるコード、同じことを行うがわずかに異なる方法で行われるコードのチャンクなど)

ありがとう

編集: 数学の集中的な本は気にしません。実際、それは良いことです。

4

8 に答える 8

1

コンパイル中に生成された解析ツリーにアクセスできると役立ちます。このようにして、見ているものよりも深いノードを無視して、類似したツリーの断片を探すことができます。このようにして、たとえば、サブ式の内容を無視して、2 つのサブ式を乗算するノードを選択できます。式。同じロジックをノードのコレクションに適用できます。たとえば、2 つの部分式がさらに部分式の加算である 2 つの部分式の乗算を見つけたいとします。最初に乗算を探し、次に乗算の下にある 2 つのノードが加算であるかどうかを確認し、それ以上深いものは無視します。

于 2009-02-10T12:17:48.350 に答える
0

パターンの 1 つは、コピー アンド ペースト メソッドによって複製されたコードです。問題の言語の抽象構文ツリーを比較することにより、レイアウトのバリエーションやクローンの本体の変更にも関わらず、そのようなコードを自動的に検出するツールについては、 CloneDRを参照してください。

CloneDR は、C、C++、C#、Java、JavaScript、PHP、COBOL、Python など、さまざまな言語で動作します。Web サイトには、さまざまなプログラミング言語のクローン検出レポートが表示されます。

于 2010-03-23T22:47:36.530 に答える
0

あなたが話しているようなことを行うオープンソースプロジェクト(FindBugsSIMなど)のコードを見ることをお勧めします。

于 2009-02-10T12:13:31.170 に答える
0

サポートされている言語のいずれかで作業している場合、IntelliJ のアイデアには、問題に適合する非常にスマートな構造検索と置換があります。

于 2009-02-10T12:17:07.883 に答える
0

その他の興味深いプロジェクトはPMDEclipseです。

Eclipse は、あらゆるプロジェクトのすべてのソース コードに AST (抽象構文ツリー) を使用します。その後、ツールは特定のタイプの AST (Java ソースなど) に登録し、追加情報 (ドキュメントへのリンク、エラー マーカーなど) を追加できる前処理済みのビューを取得できます。

于 2009-02-10T12:17:36.383 に答える
0

これは .Net および Visual Studio に固有のものですが、プロジェクト内で重複するコードが検出されます。私が見つけたいくつかの誤検出が報告されていますが、始めるには良い場所かもしれません.

クローン探偵

于 2009-02-10T13:01:08.060 に答える
0

調べることができるもう 1 つのプロジェクトはDuploです。これはオープン ソース/GPL プロジェクトであるため、SourceForgeからコードを取得することで、彼らのアプローチを詳しく調べることができます。

于 2009-02-10T12:31:48.987 に答える