Bagaimana kita bisa membandingkan bentuk pohon sintaksis abstrak dari program kode sumber serupa (C, C ++, Go, atau apa pun yang dikompilasi dengan GCC ...)?
Saya kira deteksi plagiarisme pada kode sumber akan menggunakan teknik-teknik seperti itu, tetapi saya tidak tahu bagaimana itu disebut ...
Misalnya, unifikasi dapat digunakan untuk membandingkan AST, tetapi hanya memberikan jawaban boolean. Saya sedang mencari beberapa teknik yang memberikan beberapa "jarak" numerik, atau semacam vektor numerik (untuk kemudian diumpankan misalnya untuk pembelajaran mesin atau algoritma klasifikasi, atau beberapa hal big data lainnya).
Referensi apa pun untuk big data atau pendekatan pembelajaran mesin pada set besar kode sumber juga diterima.
(Maaf untuk pertanyaan yang luas atau kabur, saya tidak tahu terminologi apa yang digunakan)
Saya tidak hanya ingin membandingkan dua AST atau program. Saya ingin memproses serangkaian besar program (misalnya setengah dari kode sumber distribusi Debian) dan menemukan di dalamnya rutinitas yang sama. Saya sudah memiliki MELT untuk mengerjakan representasi internal GCC (Gimple) dan saya ingin meningkatkannya, karenanya menyimpan beberapa metrik ( kompleksitas siklomatik mana yang mungkin tidak cukup) dalam misalnya beberapa database dan membandingkan & memprosesnya ...
Tambahan: Ditemukan tentang sistem MOSS & kertas, tetapi tampaknya tidak peduli tentang bentuk sintaksis sama sekali. Juga melihat ke jarak edit pohon .
Ditemukan juga (terima kasih kepada Jérémie Salvucci) Tesis PhD Michel Chilowicz (dalam bahasa Prancis, November 2010) tentang Mencari Kesamaan dalam Kode Sumber