парсинг разных файлов одной и той же грамматики и вычисление файла для сходства файлов - PullRequest
2 голосов
/ 02 мая 2011

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

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

Есть идеи?

Ответы [ 2 ]

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

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

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

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

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

...