Наш SD Smart Differencer делает именно то, что вы хотите. Он использует парсеры качества компилятора для чтения исходного кода и построения AST для двух выбранных вами файлов. Затем он сравнивает деревья, руководствуясь синтаксисом, поэтому его не смущают пробелы, макет или комментарии. Поскольку он нормализует значения констант, его не смущает изменение основ или того, как вы выражали escape-последовательности!
Дельты сообщаются на уровне конструкций языка (переменная, выражение, оператор, объявление, функция, ...) с точки зрения намерения программиста (удаление, вставка, копирование, перемещение), завершенного определением того, что идентификатор имеет был последовательно переименован в измененном блоке.
У SmartDifferencer есть версии, доступные для C (на нескольких диалектах; если вы разбираете с точностью до компилятора, язык диалекта имеет значение), также как и для C ++, Java, C #, JavaScript, COBOL, Python и многих других языков. 1007 *
Если вы хотите понять, как набор файлов связан друг с другом, наш SD CloneDR примет очень большой набор файлов и расскажет, что у них общего. Он находит код, который был отредактирован копированием-вставкой во всем наборе. Вам не нужно указывать, что искать; он находит это автоматически. Используя AST (как выше), это не одурачено изменениями пробела или переименованием идентификаторов. На сайте есть несколько примеров отчетов об обнаружении клонов для разных языков.