Создать код Delphi, который будет анализировать файл с заданным форматом BNF - PullRequest
8 голосов
/ 23 февраля 2012

Существует ли код анализатора или компонент синтаксического анализа для Delphi или программа, которая будет принимать нотацию BNF (форма Бэкуса-Наура) в качестве входных данных и генерировать код Delphi (или паскаль) для анализа?

Причина этого в том, что я собираюсь попытаться идеально разобрать наборы данных после различных версий стандарта GEDCOM (используется для генеалогии), и мне нужно будет обрабатывать файл из состояния в состояние как токены достигнуты. Я бы предпочел, чтобы автоматизированная программа выполняла основную работу по настройке основного кода паскаля, чтобы выполнить состояние для обработки состояния для меня.

В противном случае мне придется самостоятельно строить государственные структуры.

Я видел следующий вопрос (и TinyPG выглядит хорошо, но мне нужен код Delphi): Генератор синтаксического анализатора, который выводит C # с учетом грамматики BNF?

Если такого зверя нет, есть ли другие доступные инструменты, которые облегчат эту задачу?

1 Ответ

6 голосов
/ 23 февраля 2012

Я рекомендую вам систему парсинга GOLD .GOLD-грамматики основаны на форме Бэкуса-Наура и регулярных выражениях.

Ресурсы

Двигатели

Двигатели для Delphi особенноперечисленные здесь .

Этот один для Object Pascal от Роб ван ден Бринк может представлять интерес.

Цитата:

Роб ван ден Бринк обновил свой движок для языка программирования Object Pascal.Его реализация использует шаблон программы для создания полнофункциональной программы.Этот подход встраивает таблицы разбора непосредственно в исходный код.В результате вам не нужно загружать файл таблицы скомпилированной грамматики.Загружаемый файл содержит шаблон программы, а также несколько примеров.

Пример проекта с использованием GOLD

GOLD мощный, он используется в качестве механизма синтаксического анализа dcu2pas , декомпилятор Delphi Compiled Unit (dcu files), который размещен здесь (bitbucket.org).Вместо этого обратите внимание, что оно написано в .

...