Come si può confrontare la forma degli alberi di sintassi astratta di programmi di codice sorgente simili (C, C ++, Go o qualsiasi cosa compilata con GCC ...)?
Immagino che il rilevamento di plagio sul codice sorgente userebbe tali tecniche, ma non ho idea di come si chiamerebbe ...
Ad esempio, l'unificazione potrebbe essere utilizzata per confrontare AST, ma fornisce solo una risposta booleana. Sto cercando una tecnica che fornisca una certa "distanza" numerica, o qualche tipo di vettori numerici (da inserire successivamente ad esempio per algoritmi di apprendimento automatico o di classificazione, o qualche altra cosa sui big data).
Anche i riferimenti ai big data o agli approcci di machine learning su un ampio set di codice sorgente sono i benvenuti.
(Ci scusiamo per una domanda così ampia o confusa, non so quale terminologia usare)
Non voglio semplicemente confrontare due AST o programmi. Voglio elaborare un ampio set di programmi (ad esempio la metà di un codice sorgente di distribuzione Debian) e trovare al suo interno routine simili. Ho già MELT per lavorare su rappresentazioni interne GCC (Gimple) e voglio sfruttare al di sopra di questo, quindi memorizzare diverse metriche (quali? complessità ciclomatica probabilmente non è sufficiente) ad esempio alcuni database e confronta & elaborali ...
Addenda: trovato sul MOSS system & carta, ma non sembra affatto interessata alla forma sintattica. Anche esaminando distanza di modifica dell'albero .
Trovato anche (grazie a Jérémie Salvucci) tesi di dottorato di Michel Chilowicz (in francese, novembre 2010 ) in Ricerca di similarità nel codice sorgente