
- •Введение
- •Вводные замечания
- •Спецификации (Specifications)
- •Объявления (Declarations)
- •3.3.1. Определение абстрактных типов (Sort Definitions)
- •3.3.2. Определение вариантов (Variant Definitions)
- •3.3.3. Определение объединений (Union Definitions)
- •3.3.4. Определение сокращенной записи (Short Record Definitions)
- •3.3.5. Определение абревиатур (Abbreviation Definitions)
- •3.4.1. Прокомментированное указание типа (Commented Typing)
- •3.4.2. Явное определение констант (Explicit Value Definitions)
- •3.4.3. Неявное определение констант (Implicit Value Definitions)
- •3.4.4. Явное определение функций (Explicit Function Definitions)
- •3.4.5. Неявное определение функций (Implicit Function Definitions)
- •Variable
- •Описание классов (Class Expressions)
- •Описание типов (Type Expressions)
- •Value Expressions (выражения)
- •6.7.1. Множества, заданные диапазоном (Ranged Set Expressions)
- •6.7.2. Множества, заданные перечислением (Enumerated Set Expressions)
- •6.7.3. Сокращенные множественные выражения (Comprehended Set Expressions)
- •6.8.1. Списки, заданные диапазоном (Ranged List Expressions)
- •6.8.2. Списки, заданные перечислением (Enumerated List Expressions)
- •6.8.3. Сокращенные выражения для списков (Comprehended List Expressions)
- •6.9.1. Отображения, заданные перечислением (Enumerated Map Expressions)
- •6.9.2. Сокращенные выражения для отображений (Comprehended Map Expressions)
- •6.16.1. Операторные инфиксные выражения (Statement Infix Expressions)
- •6.16.2. Аксиоматические инфиксные выражения (Axiom Infix Expressions)
- •6.16.3. Инфиксные выражения (Value Infix Expressions)
- •6.17.1. Аксиоматические префиксные выражения (Axiom Prefix Expressions)
- •6.17.2. Универсальные префиксные выражения (Universal Prefix Expressions)
- •6.17.3. Префиксные выражения (Value Prefix Expressions)
- •Initialise
- •6.23.1. Локальные выражения (Local Expressions)
- •6.23.2. Let-выражения (Let Expressions)
- •6.23.3. If- выражения (If Expressions)
- •6.23.4. Case-выражения (Case Expressions)
- •6.23.5. While-выражения (While Expressions)
- •6.23.6. Until-выражения (Until Expressions)
- •6.23.7. For-выражения (For Expressions)
- •Связывания (Bindings)
- •Указания типа (Typings)
- •Patterns (образцы)
- •9.7.1. Образцы списки, заданные перечислением (Enumerated List Patterns)
- •9.7.2. Образцы списки, заданные конкатенацией (Concatenated List Patterns)
- •9.8.1. Идентификаторы или операции (Identifiers or Operators)
- •9.8.2. Образцы равенства (Equality Patterns)
- •Идентификаторы и операции
- •Инфиксные комбинаторы (Infix Combinators)
- •Interlocked-композиция (Interlocked composition):
- •Литература для дополнительного чтения
- •Приложение 1. Приоритет операций
- •Приложение 2. Таблица соответствия rsl символов и их ascii представления
- •Приложение 3. Ключевые слова rsl
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
Связывания (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.