2008-12-13 4 views
9

Расширенная Backus-Наура: EBNFГде я могу получить материал для обучения EBNF?

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

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

ответ

4

Статья в Википедии является точной. Если у вас есть доступ, обязательно прочитайте Wirth's original article на EBNF.

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

Единственное место, где это немного утомительно, - это когда у вас есть язык, в котором есть инфиксные операторы со множеством разных уровней приоритета. Для этого вам нужна бумага Дейва Хэнсона Compact Recursive-Descent Parsing of Expressions. Возможно, в серии технических докладов Princeton есть бесплатная версия, и вы всегда можете посмотреть код в Hanson's C front end.

+1

Пройдите поиск по теме "Compiler Construction Niklaus Wirth", это должно вернуть ссылку на то, где вы можете свободно скачать последнюю версию своей прекрасной книги. Или проверьте его домашнюю страницу http://www.cs.inf.ethz.ch/~wirth/ – 2010-06-21 07:12:11

5

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

0

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

  • Он утверждает, наиболее важные моменты по статье
  • It имеет ссылки для дальнейшего чтения в нижней части страницы

Также я бы предложил прочитать standart BNF, чтобы ознакомиться с идеей, стоящей за ней.

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

1

Here является парсером ebnf в php.

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

 Смежные вопросы

  • Нет связанных вопросов^_^