Вопрос

Расширенная форма Бэкуса-Наура: ЕБНФ

Я очень новичок в анализе концепций.Где я могу получить достаточно простой для чтения и выполнения материал по написанию грамматики для библиотеки boost::spirit, которая использует грамматику, аналогичную EBNF?

В настоящее время я изучаю ЕБНФ из Википедии.

Это было полезно?

Решение

Статья в Википедии точная.Если у вас есть доступ, обязательно прочтите Оригинальная статья Вирта на ЕБНФ.

Еще одна вещь, которую следует знать, это то, что EBNF был разработан для того, чтобы сделать это легко писать от руки парсеры с рекурсивным спуском для языков, в которых каждая синтаксическая конструкция имеет в начале идентифицирующие ключевые слова.Фигурные скобки переводятся на while петли;квадратные скобки (необязательные) переводятся как if, а альтернативы переводятся на if-then-else или case заявления.Если у вас есть возможность спроектировать свой язык таким образом, вы можете быстро создать парсер. и выдавайте хорошие сообщения об ошибках.

Единственное, где это становится немного утомительным, — это когда у вас есть язык, в котором есть инфиксные операторы с разными уровнями приоритета.Для этого вам нужна статья Дэйва Хэнсона. Компактный анализ выражений с рекурсивным спуском.Возможно, у серии технических отчетов Принстона есть бесплатная версия, и вы всегда можете посмотреть код в Передняя часть Hanson C.

Другие советы

BNF сам по себе прост, но вам нужно привыкнуть к тому, как думают авторы компиляторов.Их не всегда легко читать, но ниже приведены конспекты лекций Калифорнийского университета в Беркли и Стэнфорда.

Здесь — это парсер ebnf в php.

Кроме того, может оказаться полезным узнать немного о том, как реализованы механизмы регулярных выражений.Пытаться: ре2.

Ну, я думаю, что Википедия — самый простой способ по двум причинам:

  • В статье излагаются наиболее важные моменты.
  • Внизу страницы есть ссылки для дальнейшего чтения.

Также я бы посоветовал прочитать стандартный БНФ просто чтобы ознакомиться с идеей, стоящей за этим.

По крайней мере, я тоже всегда начинаю с Википедии, и это почти всегда помогает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top