Парсинг разных файлов одной и той же грамматики и вычисление файла для сходства файлов

У меня есть куча файлов с исходным языком ACPI, и я хочу вычислить сходство между ними. Я думал об использовании чего-то вроде Parse::RecDescent, но я застрял на:

1) Перевод грамматики ACPI (www.acpi.info/DOWNLOADS/ACPIspec40a.pdf) во что-то Parse::RecDescent поймет 2) Есть метрика для сравнения 2 проанализированных файлов

Есть идеи?

2 ответа

Решение

Итак, у вас есть две проблемы:

  • Разбор ACPI для построения AST. Обычно возникают проблемы с тем, чтобы у вас была четко определенная грамматика, чтобы ваш механизм синтаксического анализа мог анализировать в соответствии с этой грамматикой (часто вам нужно согнуть хорошее определение грамматики, чтобы механизм обработки разбирал ее для обработки), и создать соответствующий AST, У вас будут проблемы с парсинговым механизмом Perl, просто потому что это парсинговый движок.

  • Сравнение структуры AST и получение разумного ответа. Здесь вы, вероятно, найдете то, что есть некоторая литература, подробно описывающая, как это сделать (используя, например, расстояние Левенштейна), но что детали для AST имеют значение. ( Изменение дистилляции: древовидная разность для извлечения мелкозернистых изменений исходного кода. Наконец, определив расстояние, вы должны распечатать дельты в некоторой читаемой форме.

Однако, AFAIK, моя компания - единственная, которая сократила это на практике. Смотрите наш инструмент Smart Differencer. SmartDifferencers анализирует, создает AST и формирует отчеты с точки зрения элементов AST, перемещаемых, вставляемых, удаляемых, заменяемых или изменяемых путем подстановки согласованного идентификатора. Они зависят от любого лежащего в основе очень сильного механизма синтаксического анализа GLR, который сводит к минимуму проблемы принятия новых грамматик. Они работают для многих распространенных языков, но не в настоящее время для ACPI.

  1. Чтобы начать работу с Parse::RecDescent, вы можете взглянуть на Pro Perl Parsing, Ch. 5 или в Advanced Perl Programming, Ch. 2
  2. Инструменты Xml Diff должны подходить для сравнения иерархически структурированных данных; возможно, вы можете применить такой инструмент к AST, сохраненным в формате XML
Другие вопросы по тегам