Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Операторы. Описанные переменные считаются локальными в теле предиката



БЛОК::= { ОПЕРАТОР }

ОПЕРАТОР::= [ОПИСАНИЕ-ПЕРЕМЕННЫХ;]{ ЗАМКНУТЫЙ-ОПЕРАТОР |

[ОПИСАНИЕ-ПЕРЕМЕННЫХ;] ПАРАЛЛЕЛЬНЫЙ-ОПЕРАТОР |

[ОПИСАНИЕ-ПЕРЕМЕННЫХ;] ОПЕРАТОР-СУПЕРПОЗИЦИИ

Описанные переменные считаются локальными в теле предиката. Тип локальной переменной может быть также определен описателем 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; Прочитано: 244 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...