Làm thế nào người ta có thể so sánh hình dạng của các cây cú pháp trừu tượng của các chương trình mã nguồn tương tự (C, C ++, Go hoặc bất cứ thứ gì được biên dịch với GCC ...)?
Tôi đoán rằng việc phát hiện đạo văn trên mã nguồn sẽ sử dụng các kỹ thuật như vậy, nhưng tôi không biết làm thế nào mà nó được gọi là ...
Ví dụ, thống nhất có thể được sử dụng để so sánh AST, nhưng nó chỉ đưa ra một câu trả lời boolean. Tôi đang tìm kiếm một số kỹ thuật đưa ra một số "khoảng cách" số, hoặc một số loại vectơ số (để sau này được cung cấp, ví dụ như thuật toán học máy hoặc phân loại, hoặc một số điều dữ liệu lớn khác).
Bất kỳ tài liệu tham khảo nào về dữ liệu lớn hoặc phương pháp tiếp cận máy học trên bộ mã nguồn lớn cũng được hoan nghênh.
(Xin lỗi vì câu hỏi rộng hoặc mờ như vậy, tôi không biết nên sử dụng thuật ngữ nào)
Tôi không chỉ đơn giản muốn so sánh hai AST hoặc chương trình. Tôi muốn xử lý một tập hợp lớn các chương trình (ví dụ một nửa mã nguồn phân phối Debian) và tìm bên trong nó các thói quen tương tự. Tôi đã có MELT để làm việc trên các đại diện nội bộ của GCC (Gimple) và tôi muốn tận dụng điều đó, do đó lưu trữ một số số liệu ( độ phức tạp nào có thể không đủ) trong một số cơ sở dữ liệu và so sánh & xử lý chúng ...
Phụ lục: Tìm thấy về hệ thống & giấy MOSS , nhưng dường như nó không quan tâm đến hình dạng cú pháp. Cũng nhìn vào khoảng cách chỉnh sửa cây .
Cũng được tìm thấy (nhờ Jérémie Salvucci) Luận án tiến sĩ của Michel Chilowicz (bằng tiếng Pháp, tháng 11 năm 2010) về Tìm kiếm sự tương đồng trong mã nguồn