Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
11.04.2015
Размер:
849.92 Кб
Скачать

6.23.5. While-выражения (While Expressions)

Синтаксис.

while_expr ::=

while logical-value_expr do unit-value_expr end

Контекстные условия. Максимальным типом первого выраженияvalue_exprдолжен быть типBool.

Максимальным типом второго выражения value_exprдолжен быть типUnit.

Атрибуты. Максимальным типом выраженияwhile_exprявляетсяUnit.

Выражение while_exprстатически обращается к тем переменным и каналам, к которым статически обращаются составляющие его выраженияvalue_expr.

Семантика. Результирующее воздействие выраженияwhile_exprсостоит в том, чтобы повторять вычисление второго выраженияvalue_expr, пока вычисление первого булевского выраженияvalue_exprвозвращает значениеtrue. Значением, возвращаемым выражениемwhile_expr, являетсяUnitзначение.

Имеет место следующая эквивалентность:

while value_expr1 do value_expr2 end

if value_expr1 then

value_expr2 ; while value_expr1 do value_expr2 end

else skip end

6.23.6. Until-выражения (Until Expressions)

Синтаксис.

until_expr ::=

do unit-value_expr until logical-value_expr end

Контекстно-независимые расширения. Выражениеuntil_exprвида:

do value_expr1 until value_expr2 end

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

value_expr1 ; while  value_expr2 do value_expr1 end

6.23.7. For-выражения (For Expressions)

Синтаксис.

for_expr ::=

for list_limitation do unit-value_expr end

Контекстные условия. Максимальным типом выраженияvalue_exprдолжен быть типUnit.

Контекстно-зависимые расширения. Выражениеfor_exprвида:

for list_limitation do value_expr end

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

let id =  value_expr ½ list_limitation in skip end

  1. Связывания (Bindings)

Синтаксис.

binding ::=

id_or_op ½

product_binding

product_binding ::=

( binding-list2 )

Терминология. Значение может бытьсопоставленосо связываниемbindingдля получения некоторого набора определений значений.

Контекстные условия. Максимальный контекстный тип для связыванияbinding, представляющего собой операциюop, должен быть каким-либо функциональным типом, различимым с максимальным типом (типами) предопределенного значения (значений) операцииop. Если операцияopявляется инфиксной операциейinfix_op, то типом параметра данного функционального типа должен быть тип декартова произведения длины 2.

Максимальным контекстным типом конструкции product_bindingдолжен быть тип декартова произведения той же длины, что и списокbinding‑list2.

В конструкции product_bindingсоставляющие ее связыванияbindingдолжны быть совместимы.

Атрибуты. Контекст связыванияbindingопределяетмаксимальный контекстный типдля данного связыванияbinding. Для конструкций, содержащих в своем составе связыванияbinding, этот максимальный контекстный тип указывается в соответствующих разделах.

В качестве максимального типа конструкции id_or_op, представляющей собой связываниеbinding, принимается максимальный контекстный тип данного связыванияbinding.

В конструкции product_bindingвида (binding1,…, bindingn) , контекстный тип которой имеет видt1´…´tn, максимальными контекстными типами связыванийbinding1,…, bindingnявляются типыt1, …,tnсоответственно.

Семантика. Совпадение некоторого значенияvмаксимального контекстного типаtсо связываниемbindingвидаid_or_opдает следующее определение:

id_or_op : t = v

Совпадение значения некоторого декартова произведения (v1,…,vn) максимального контекстного типаt1´…´tnсо связываниемproduct_bindingвида (binding1,…, bindingn) дает набор определений, полученных при совпадении каждого значенияvi максимального контекстного типаtiсо связываниемbindingi.

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