Разработка компиляторов

       

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


При определении синтаксиса языков Pascal и Modula-2 Вирт использовал расширенную форму Бэкуса-Наура (EBNF):

  • Нетерминалы записываются как отдельные слова
  • Терминалы записываются в кавычках, например, " BEGIN "
  • Вертикальная черта (|), как и прежде, используется для определения альтернатив
  • Круглые скобки используются для группировки
  • Квадратные скобки используются для определения возможного вхождения символа или группы символов
  • Фигурные скобки используются для определения возможного повторения символа или группы символов
  • Символ равенства используется вместо символа ::=
  • Символ точка используется для обозначения конца правила
  • Комментарии заключаются между символами (* … *)
  • эквивалентно [ ]

Пример.

Integer = Sign UnsignedInteger. UnsignedInteger = digit {digit}. Sign = ["+"|"-"]. digit = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".

В 1981 году Британский институт стандартов (British Standards Institute) опубликовал стандарт EBNF. BSI стандарт получился более наглядным, чем расширенная форма Бэкуса-Наура, предложенная Виртом.

  • Элементы правил разделяются запятыми
  • Правила заканчиваются точкой с запятой
  • Пробелы не являются значащими

Пример.

Constant Declaration = "CONST", Constant Identifier , "=", Constant Expression, ";", {Constant Identifier, "=", Constant Expression, ";"}; Constant Identifier = identifier; Constant Expression = Expression;



Содержание раздела