Итак, у вас есть две проблемы:
Разбор ACPI для построения AST.Обычно возникают проблемы с тем, чтобы у вас была четко определенная грамматика, чтобы ваш механизм синтаксического анализа мог анализировать в соответствии с этой грамматикой (часто вам нужно согнуть хорошее определение грамматики, чтобы механизм синтаксического анализа мог ее обрабатывать), и построить соответствующий AST,У вас возникнут эти проблемы с механизмом парсинга Perl, просто потому, что это двигатель синтаксического анализа.
Сравнение структуры AST и получение разумного ответа.Здесь вы, вероятно, найдете то, что есть некоторая литература, подробно описывающая, как это сделать (например, с использованием расстояние Левенштейна ), но что детали для AST имеют значение.( Изменение дистилляции: разность деревьев для детального извлечения изменения исходного кода Наконец, определив расстояние, вам необходимо распечатать дельты в некоторой читаемой форме.
Однако, AFAIK, моя компания - единственная, которая сократила это на практике. См. Наш инструмент Smart Differencer . SmartDifferencers анализируют, создают AST и изменяют отчеты с точки зрения перемещения, вставки, удаления элементов AST., заменен или изменен путем подстановки согласованного идентификатора. Они зависят от любого лежащего в основе очень сильного механизма синтаксического анализа GLR, который сводит к минимуму проблемы принятия новых грамматик. Они работают для многих распространенных языков, но в настоящее время не для ACPI.