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