Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
БЛОК::= { ОПЕРАТОР }
ОПЕРАТОР::= [ОПИСАНИЕ-ПЕРЕМЕННЫХ;]{ ЗАМКНУТЫЙ-ОПЕРАТОР |
[ОПИСАНИЕ-ПЕРЕМЕННЫХ;] ПАРАЛЛЕЛЬНЫЙ-ОПЕРАТОР |
[ОПИСАНИЕ-ПЕРЕМЕННЫХ;] ОПЕРАТОР-СУПЕРПОЗИЦИИ
Описанные переменные считаются локальными в теле предиката. Тип локальной переменной может быть также определен описателем var (см. разд. 6.3.3) в случае, когда тип легко определяется из контекста дальнейшего использования переменной.
ЗАМКНУТЫЙ-ОПЕРАТОР::=
ОПЕРАТОР-ПРИСВАИВАНИЯ | ВЫЗОВ-ПРЕДИКАТА-ФУНКЦИИ |
ВЫЗОВ-ПРЕДИКАТА-ГИПЕРФУНКЦИИ [ОПЕРАТОР-ОБРАБОТКИ-ВЕТВЕЙ] |
УСЛОВНЫЙ-ОПЕРАТОР | БЛОК [ОПЕРАТОР-ОБРАБОТКИ-ВЕТВЕЙ] |
ОПЕРАТОР-ВЫБОРА | ОПРЕДЕЛЕНИЕ-ЛОКАЛЬНОГО-ПРЕДИКАТА
ОПЕРАТОР-ПРИСВАИВАНИЯ::= ПЕРЕМЕННАЯ = ВЫРАЖЕНИЕ
В результате исполнения оператора присваивания переменной присваивается значение выражения. Типы выражения и переменной должны быть совместимы (см. разд. 6.7).
УСЛОВНЫЙ-ОПЕРАТОР::=
ОПЕРАТОР-ЕСЛИ else ЗАМКНУТЫЙ-ОПЕРАТОР [ОПЕРАТОР-ПЕРЕХОДА]
ОПЕРАТОР-ЕСЛИ::= if ( ВЫРАЖЕНИЕ ) ОПЕРАТОР [ОПЕРАТОР-ПЕРЕХОДА]
В операторе перехода указывается либо метка ветви гиперфункции, либо метка ветви обработчика, следующего за блоком, содержащим данный условный оператор.
if (x > 0) s = 1
else if (x < 0) s = -1
else s = 0
Пример 3. Использование условного оператора
ПАРАЛЛЕЛЬНЫЙ-ОПЕРАТОР::=
ЗАМКНУТЫЙ-ОПЕРАТОР (|| ЗАМКНУТЫЙ-ОПЕРАТОР)+
Операторы, образующие параллельный оператор, должны иметь непересекающиеся наборы результирующих переменных. Исполнение параллельного оператора слагается из исполнения входящих в него операторов. Операторы выполняются независимо друг от друга; они могут исполняться параллельно.
ОПЕРАТОР-СУПЕРПОЗИЦИИ::= ОПЕРАТОР (; ОПЕРАТОР)+
В цепочке операторов, составляющих оператор суперпозиции, каждый следующий оператор использует значения локальных переменных, присвоенных предыдущими операторами. Каждая пара соседних операторов в цепочке должна быть связана хотя бы одной локальной переменной; если такой связи нет, их композиция должна быть оформлена параллельным оператором.
ЗАГОЛОВОК-ОПЕРАТОРА-ВЫБОРА::= switch ( ВЫРАЖЕНИЕ )
ОПЕРАТОР-ВЫБОРА::= ЗАГОЛОВОК-ОПЕРАТОРА-ВЫБОРА
{ ОПЕРАТОР-АЛЬТЕРНАТИВЫ+
[ default: ОПЕРАТОР [ОПЕРАТОР-ПЕРЕХОДА]]
}
ОПЕРАТОР-АЛЬТЕРНАТИВЫ::=
case АЛЬТЕРНАТИВА (, АЛЬТЕРНАТИВА)*: ОПЕРАТОР [
ОПЕРАТОР-ПЕРЕХОДА]
АЛЬТЕРНАТИВА::= ВЫРАЖЕНИЕ | ОПРЕДЕЛЕНИЕ-КОНСТРУКТОРА
Выполняется тот оператор альтернативы, для которого значение АЛЬТЕРНАТИВЫ совпадает со значением выражения в заголовке оператора выбора. Оператор после default выполняется в случае, когда нет ОПЕРАТОРА-АЛЬТЕРНАТИВЫ с требуемым значением
АЛЬТЕРНАТИВЫ. Трактовка операторов перехода та же, что и для условного оператора.
Если в позиции выражения в заголовке оператора выбора находится переменная типа объединения, то в качестве АЛЬТЕРНАТИВЫ указывается ОПРЕДЕЛЕНИЕ-КОНСТРУКТОРА. Особенности выполнения ОПЕРАТОРА-АЛЬТЕРНАТИВЫ определены в разд. 6.7.
ОПЕРАТОР-ОБРАБОТКИ-ВЕТВЕЙ::=
(case [МЕТКА-ВЕТВИ-ОБРАБОТЧИКА: ] ОПЕРАТОР)+
МЕТКА-ВЕТВИ-ОБРАБОТЧИКА::= МЕТКА
Оператор обработки ветвей следует за вызовом гиперфункции либо за блоком, содержащем операторы перехода. Если предыдущий оператор нормально завершается, то оператор обработки ветвей игнорируется. Нормальное завершение возможно и для вызова гиперфункции, когда на одной из ветвей гиперфункции опущена метка перехода, что означает суперпозицию (или параллельную композицию) с последующим оператором, а на другой ветви имеется переход на метку ветви обработчика или на метку ветви гиперфункции, в теле которой находится данный оператор.
Исполнение оператора обработки ветвей инициируется оператором перехода, находящимся в предыдущем операторе. При этом исполняется оператор, помеченный соответствующей меткой, после чего исполнение оператора обработки ветвей и предыдущего оператора считается завершившимся.
В вызове гиперфункции могут быть опущены переходы, а в последующем операторе обработки ветвей - метки ветвей обработчика. В этом случае порядок ветвей обработчика соответствует порядку ветвей вызова гиперфункции.
A(i: y #1: #2)
case 1: B(y, i: u)
case 2: D(i: u);
Пример 4. Вызов гиперфункции с обработчиком ветвей
ОПРЕДЕЛЕНИЕ-ЛОКАЛЬНОГО-ПРЕДИКАТА::= ОПРЕДЕЛЕНИЕ-ПРЕДИКАТА
Определение локального предиката допускает использование параметров и локальных переменных предиката, в теле которого это определение находится. Локальный предикат доступен лишь в теле предиката, внутри которого он описан.
Дата публикования: 2014-11-18; Прочитано: 245 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!