Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПО_теория / ТРПО / RSL14_1p (Восстановлен).doc
Скачиваний:
37
Добавлен:
11.04.2015
Размер:
893.95 Кб
Скачать

6.23.3. If- выражения (If Expressions)

Синтаксис.

if_expr ::=

if logical-value_expr then

value_expr

opt-elsif_branch-string

opt-else_branch

end

elsif_branch ::=

elsif logical-value_expr then value_expr

else_branch ::=

else value_expr

Контекстно-независимые расширения. If-выражение if_expr, содержащее ветви elsif_branch, представляет собой сокращенную форму записи некоторого числа вложенных if-выражений if_expr без ветвей elsif_branch. Выражение if_expr вида:

if value_expr1 then value_expr1

elsif value_expr2 then value_expr2¢

elsif value_exprn then value_exprn¢

opt-else_branch

end

является сокращенной формой записи выражения:

if value_expr1 then value_expr1else

if value_expr2 then value_expr2¢ else

if value_exprn then value_exprn¢ opt-else_branch end

end

end

Выражение if_expr вида:

if value_expr1 then value_expr2 end

является краткой записью выражения:

if value_expr1 then value_expr2 else skip end

Контекстные условия. В выражении if_expr вида:

if value_expr1 then value_expr2 else value_expr3 end

максимальным типом выражения value_expr1 должен быть тип Bool и максимальные типы выражений value_expr2 и value_expr3 должны иметь наименьшую верхнюю границу.

Атрибуты. Для if-выражения вида:

if value_expr1 then value_expr2 else value_expr3 end

атрибуты определяются следующим образом. Максимальным типом указанного выражения является наименьшая верхняя граница максимальных типов выражений value_expr2 и value_expr3.

Рассматриваемое выражение if_expr статически обращается к тем переменным и каналам, к которым статически обращаются выражения value_expr1, value_expr2 и value_expr3.

Семантика. Результирующее воздействие выражения if_expr состоит в том, чтобы определить применимую альтернативу и получить эффект от ее применения. Выражение if_expr вида:

if value_expr1 then value_expr2 else value_expr3 end

вычисляется путем вычисления выражения value_expr1, которое возвращает некоторое булевское значение — тестовое значение. Если полученное тестовое значение равно true, вычисляется выражение value_expr2. В противном случае (значение тестового выражения равно false) вычисляется выражение value_expr3.

6.23.4. Case-выражения (Case Expressions)

Синтаксис.

case_expr ::=

case value_expr of case_branch-list end

case_branch ::=

pattern value_expr

Контекст и правила видимости. В ветви case_branch контекстом образца pattern является выражение value_expr.

Контекстные условия. В выражении case_expr максимальные типы выражений value_expr, содержащихся в ветвях case_branch, должны иметь наименьшую верхнюю границу.

Атрибуты. Максимальным типом case-выражения case_expr является наименьшая верхняя граница максимальных типов выражений value_expr в соответствующих ветвях case_branch.

В выражении case_expr максимальным контекстным типом образцов pattern в ветвях case_branch является максимальный тип выражения value_expr.

Выражение case_expr статически производит доступ к тем переменным и каналам, к которым статически обращаются содержащиеся в нем выражение value_expr и ветви case_branch.

Ветвь case_branch статически производит доступ к тем переменным и каналам, к которым статически обращается входящее в ее состав выражение value_expr.

Семантика. Результирующее воздействие выражения case_expr состоит в том, чтобы вычислить выражение value_expr, определить соответствующую ветвь case_branch и затем вычислить выражение value_expr, содержащееся в этой ветви. Выражение value_expr вычисляется и возвращает некоторое значение — тестовое значение. Затем просматриваются слева направо ветви case_branch до тех пор, пока данное тестовое значение не совпадет с каким-либо образцом pattern. Такое успешное сопоставление образца с тестовым значением дает в результате некоторый набор определений. В завершении в контексте этих определений вычисляется соответствующее выражение value_expr, содержащееся в ветви case_branch, на которой произошло отождествление образца и тестового значения.

Если ни на одной ветви case_branch не было достигнуто успеха в сопоставлении тестового значения с соответствующими образцами, результирующим воздействием выражения case_expr является недетерминированный выбор между результирующими воздействиями в пустом множестве, т.е. swap.

Соседние файлы в папке ТРПО