Вы могли бы рассмотреть наши SmartDifferencer инструменты.
Эти инструменты сравнивают файлы исходного кода компьютера по-разному.В отличие от diff, ориентированного на строки, эти инструменты видят изменения в соответствии со структурой кода (имя переменной, выражение, оператор, блок, функция, класс и т. Д.) Как правдоподобные правки («перемещать, вставлять, удалять, заменять, копировать, переименовывать»).), производя ответы, которые имеют смысл для программистов.
Эти компьютерные исходные коды имеют именно ту структуру «иерархии», которую вы предлагаете;Гнездо различных конструкций.Специально для вашей темы, как правило, блоки кода могут вкладываться в блоки кода.Инструменты SmartDifferencer используют точные парсеры целевого языка для «деконструкции» исходного текста в эти иерархические объекты.У нас есть Smart Differencer для XML, в котором вы можете писать вложенные теги.
Ответ не сообщается как «N-й ребенок M переместился», хотя он фактически вычисляется таким образом, работая с деревьями разбора, созданными парсерами.Скорее это сообщается как «фрагмент кода типа в строке x coly, чтобы строка colb переместилась /..."