Пред.Страница
След.Страница
Раздел
Содержание
1.5.8. Грамматики, описывающие условные
операторы и операторы цикла
Допустим, что рассматриваются условные операторы, аналогичные используемым
в языке Паскаль, с разделителями 'if', 'then',
'else'. В качестве условия в таких операторах разрешается
использовать отношения, состоящие из двух идентификаторов, соединенных
знаками = и <. Структура такого оператора определяется двумя видами
последовательностей фиксированной длины, для описания которых можно воспользоваться
простым перечислением компонентов. Первая последовательность определяет
полный и сокращенный условные операторы, а вторая - конструкцию "отношение".
Схема грамматики, задающая эти последовательности, может быть изображена
так:
Г1. 28 : R = { <V>
® .if.<R4><C2>,
<C2> ® .then.<S><C3>,
<C3> ® .else.<S>,
<C3> ® $,
<R4> ® <I><R3>,
<R3> ® <
<I>,
<R3> ® = <I>
} .
В этой грамматике <S> определяется
схемой грамматики Г1. 27 . Рассмотрим описание операторов
цикла, подобных используемым в языке Паскаль, с разделителями 'while',
'do', 'repeat', 'until'. Каждый оператор может
быть описан в виде простой последовательности ограниченной длины, в которой
используются построенные ранее грамматика Г1. 28 и
грамматика Г1. 27 . На практике часто встречаются ситуации,
когда удобнее работать с грамматикой, правая часть правил которой
начинается терминальным символом. Построение подобных грамматик сводится
к тому, что для каждого терминального символа заданной конструкции языка
строится отдельное правило. Для рассматриваемых операторов цикла такие
схемы грамматик с использованием определенных ранее нетерминальных символов
имеют вид:
Г1. 29: R = {
<W> ® .while. <R4><C4>,
Г1. 30: R = { <W1>
® .repeat.<S><C5>,
-
Пред.Страница
След.Страница
Раздел
Содержание