Статья в Википедии является точной. Если у вас есть доступ, обязательно прочитайте Wirth's original article на EBNF.
Другая вещь, которую нужно знать, - это то, что EBNF был разработан для того, чтобы сделать удобными для ручного анализа рекурсивно-спусками парсеров для языков, на которых каждая синтаксическая конструкция идентифицирует ключевые слова в начале. Кудрявые скобки переводятся на while
петли; квадратные скобки (необязательный материал) переводится в if
, а альтернативы переводятся на if-then-else
или case
заявления. Если у вас есть роскошь разработки вашего языка таким образом, вы можете быстро выбить парсер и, чтобы получить хорошие сообщения об ошибках.
Единственное место, где это немного утомительно, - это когда у вас есть язык, в котором есть инфиксные операторы со множеством разных уровней приоритета. Для этого вам нужна бумага Дейва Хэнсона Compact Recursive-Descent Parsing of Expressions. Возможно, в серии технических докладов Princeton есть бесплатная версия, и вы всегда можете посмотреть код в Hanson's C front end.
Пройдите поиск по теме "Compiler Construction Niklaus Wirth", это должно вернуть ссылку на то, где вы можете свободно скачать последнюю версию своей прекрасной книги. Или проверьте его домашнюю страницу http://www.cs.inf.ethz.ch/~wirth/ – 2010-06-21 07:12:11