8
Расширенные формы Бэкуса-Наура
Повсюду в этом документе, где в описании языка UniPascal используется имя
Pascal, речь идет о возможностях, обладаемых языками Pascal и UniPascal. Там, где
используется имя UniPascal, речь идет о возможностях, которыми обладает только
UniPascal или которые дополнены по сравнению с теми же в языке Pascal.
С формальной точки зрения язык представляет собой множество предложений.
Каждое предложение состоит из слов. Слова образуют словарь языка. Словарь
каждого языка представляет собой конечное множество. Но предложения, которые
можно составить на этом языке, бесконечно много. Следовательно, слова можно
описать простым перечислением, но для предложений этого нельзя применить. Для их
описания используются правила, при помощи которых можно создать все предложения
языка.Для описания синтаксиса языка UniPascal будет использован модифицированный
вариант форм Бэкуса-Наура (БНФ), называемый Расширенными Формами Бэкуса-
Наура (РБНФ). Ниже следует краткое описание РБНФ.
Описание синтаксиса языка программирования с помощью РБНФ состоит из
набора правил, еще называемых "продукциями". Каждое правило состоит из
нетерминального символа и РБНФ-выражения, разделенных знаком равенства.
Правило завершается точкой. Нетерминальный символ представляет собой "метаимя",
которое определяется РБНФ-выражением.
РБНФ-выражение может быть пустым или содержать множество терминальных
символов, нетерминальные символы и следующие метасимволы:
Метасимвол
Значение
=
Равно по определению
|
Или (альтернатива)
.
Конец правила
{A}
0 или более вхождений A в правило
[A]
0 или 1 вхождение A в правило
(A|B)
Группирование: или A, или B
"ABC" или 'ABC'
Терминальный символ ABC
метаимя
Нетерминальный символ с именем "метаимя".
Метасимвол = служит для разделения правой от левой части синтаксического
правила. Альтернативы разделяются метасимволом |.
Нетерминальные символы представляют собой набор из букв, цифр и символа
подчеркивания '_'. Терминальные символы в РБНФ заключаются в " или '. В конце
каждого правила ставится точка (.). Через { A } обозначается, что А может иметь ноль
или более вхождений в правило. Через [ A ] обозначается, что А входит ноль или один
раз. Использование круглых скобок - традиционное для математических выражений -
показано на примере: выражение S = A X B | A Y B можно записать : S = A ( X | Y ) B.
В качестве примера использования РБНФ опишем ими их собственный синтаксис:
Production =
NonTerminal '=' Expression '.'.
Expression =
Term { '|' Term }.
Term =
Factor { Factor }.
Factor =
NonTerminal        |
Terminal           |
<<  <  GO  >  >>

Вернуться к началу сайта