<<
>>

Расширенная BNF

Несмотря на элегантность и мощность BNF-грамматики, она не является идеальным средством для передачи правил конкретного языка программирования программисту-практику. Основная причина такой «неидеальности» заключается в простоте правил BNF, которая приводит к достаточно громоздкому представлению синтаксиса необязательных, альтернативных и повторяющихся элементов.
Например, чтобы выразить простую мысль о том, что «целое со знаком» является последовательностью цифр, начинающейся с необязательного символа плюс или минус, в BNF приходится создавать сложный ряд рекурсивных правил:

::= + | -

::= |

Рассмотрим некоторые расширения BNF, упрощающие запись типовых синтаксических ситуаций.

Для записи контекстно-свободной грамматики могут использоваться различные метаязыки. EBNF (Extended BNF) — один из них [52].

EBNF — расширение BNF, ориентированное на облегчение описания списков и необязательных элементов. EBNF не предоставляет дополнительных возможностей, поэтому все, что определяется в EBNF, может быть также определено в BNF.

Для представления списков важны следующие характеристики: нулевая длина, роль разделителя элементов. Разделитель отделяет элементы, если он появляется между ними. Разделитель завершает элементы, если он появляется после каждого элемента. Разделитель «завершения» более универсален.

В EBNF скобки { } представляют нуль или более повторений заключаемой в них строки. Поэтому конструкция {;} представляет нуль или более операторов, завершаемых точкой с запятой.

Правило подстановки EBNF

::= {; }

эквивалентно паре правил подстановки в BNF

174

Глава 6. Средства представления синтаксиса языков программирования

::=

| ;

Такие расширения BNF являются сокращениями, они могут уменьшить количество правил подстановки и нетерминалов, но они не изменяют то, что может быть определено.

Другим общепринятым расширением является использование скобок [ и ] для заключения в них необязательной конструкции. Например, необязательная целая часть в вещественном числе может быть описана так:

::= [] .

Эквивалентом этого правила является пара BNF-правил:

::= .

| .

Характерный состав метасимволов EBNF:

? фигурные скобки { и } обозначают нуль и более повторений;

? квадратные скобки [ и ] обозначают необязательную конструкцию;

? вертикальная черта | обозначает выбор;

? скобки ( и ) обозначают группировку.

EBNF имеет больше метасимволов, чем BNF. Кроме того, эти же символы могут также появляться в синтаксисе языка — индекс i в элементе A[i] вовсе не является необязательным — таким образом, требуется осторожность в различении обычных символов и метасимволов. Путаницу можно устранить заключением лексем в одиночные апострофы '('.

Пример. Грамматику арифметических выражений в BNF:

можно переписать в EBNF:

ПОЯСНЕНИЯ к примеру грамматики в EBNF

1. Здесь {(+ | -) } представляет последовательность одного или более термов, отделяемых символами + или -. Круглые скобки вокруг + | - гарантируют, что вертикальная черта представляет выбор между + и -.

2. В правой части правила для фактора скобки взяты в апострофы, так как это обычные символы.

В качестве дополнительного примера приведем правило EBNF для условного оператора языка Ada, который допускает многократное вложение в then-часть ветвей с условиями, а также имеет необязательную else-часть:

Синтаксические схемы

175

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------------------------------

В фигурные скобки заключается часть, которая может повторяться нуль и более раз. В квадратные скобки заключается необязательная часть.

Как видим, это синтаксическое правило тоже имеет очень лаконичную форму.

<< | >>

Еще по теме Расширенная BNF:

  1. ВАРИКОЗНОЕ РАСШИРЕНИЕ ВЕН
  2. Расширение графического метода
  3. Самовоспитание как "расширение" сознания
  4. 3.1. РАСШИРЕНИЕ НЕЙРОЛОГИЧЕСКОГО КОНТАКТА
  5. 3.12.2. Техника расширенного восприятия
  6. Расширение внутреннего кругозора
  7. 7.2.2. Расширение полноты ответа
  8. 7.2.2. Расширение полноты ответа
  9. Метод расширения сознания
  10. 2. Расширение круга наследников по закону в российском наследственном праве
  11. 2. Расширение сети вольной русской прессы в 1860-е годы
  12. Развивающие вопросы призваны способствовать расширению поля беседы в сторону уточнения деталей, эмоциональных переживаний героя, включая ее в более широкий контекст.
  13. VC16 - расположена на уровне 5-го межреберья.