Языки и методы формальной спецификации (1158803), страница 18
Текст из файла (страница 18)
(((x := c? ; c! value_expr) ▌ (c! value_expr ; x := c?))
▌ (x := value_expr))
úù (x := value_expr)
-
Interlocked-композиция (Interlocked composition):
value_expr1 ╫ value_expr2
Два указанных выражения value_expr выполняются, блокируя друг друга по отношению к внешним взаимодействиям (т.е. взаимодействиям с другими какими-то выражениями), до тех пор, пока одно из них не завершится, в то время как другое будет продолжать свое выполнение. Эти выражения могут предложить осуществить взаимодействие посредством каналов, в частности они могут предложить взаимодействие друг с другом (если одно из них производит ввод по какому-то каналу, а другое вывод по тому же каналу). Если выражения будут в состоянии взаимодействовать друг с другом, они выполнят это взаимодействие. Если выражения будут в состоянии взаимодействовать с другими параллельно выполняющимися выражениями, но только не друг с другом, они попадут в тупиковую ситуацию, где и будут пребывать, пока одно из них не сможет завершиться.
Единицей interlocked-композиции является skip, нулем — chaos. Interlocked-композиция обладает свойствами коммутативности и дистрибутивности по отношению к внутреннему выбору:
value_expr ╫ skip º value_expr
value_expr ╫ chaos º chaos
value_expr1 ╫ value_expr2 º value_expr2 ╫ value_expr1
value_expr1 ╫ ( value_expr2 úù value_expr3 ) º
( value_expr1 ╫ value_expr2 ) úù ( value_expr1 ╫ value_expr3)
Заметим, что в отличие от параллельной композиции ║ interlocked-композиция ╫ не является ассоциативной.
Если выражение value_expr сходится и не вызывает взаимодействия и если c1 c2, то справедливы следующие две эквивалентности:
x := c1? ╫ c2! value_expr º stop
x := c? ╫ c! value_expr x := value_expr
Комбинатор interlocked-композиции иллюстрирует различие между внешним и внутренним выборами. Если выражения value_expr1 и value_expr2 сходятся и не вызывают взаимодействия и если c1 ¹ c2, то имеют место следующие две эквивалентности:
(x := c1? ▌ c2! value_expr2) ╫ c1! value_expr1 º x := value_expr1
(x := c1? ▌ c2! value_expr2) ╫ c1! value_expr1 º (x := value_expr1) úù stop
-
Последовательная композиция:
value_expr1 ; value_expr2
Второе выражение value_expr принуждается к выполнению после выполнения первого выражения value_expr. В качестве результата выполнения последовательной композиции возвращается значение второго выражения value_expr.
Единицей последовательной композиции является skip, кроме того, данная композиция ассоциативна и обладает свойством дистрибутивности по первому аргументу по отношению к внутреннему выбору:
value_expr ; skip º value_expr
skip ; value_expr º value_expr
value_expr1 ; (value_expr2 ; value_expr3) º
(value_expr1 ; value_expr2) ; value_expr3
(value_expr1 úù value_expr2) ; value_expr3 º
(value_expr1 ; value_expr3) úù ( value_expr2 ; value_expr3)
Литература для дополнительного чтения
[ADL] http://www.sun.com/960201/cover/language.html
[Eiffel] http://www.eiffel.com
[iContract] R.Kramer. iContract – The Java Design by Contract Tool. Fourth conference on OO technology and systems (COOTS), 1998.
[IFAD] http://www.ifad.dk
[ISPRAS] http://www.ispras.ru/
[Jones] C.B. Jones. Systematic Software Development Using VDM. Prentice Hall International, 1986.
[Larch] J.Guttag et al. The Larch Family of Specification Languages. IEEE Software, Vol. 2, No.5, September 1985, pp.24-36.
[OMG] http://www.omg.org
[RAISE-language] The RAISE Language Group. The RAISE Specification Language. Prentice Hall Europe, 1992.
[RAISE-method] ftp://ftp.iist.unu.edu/pub/RAISE/method_book
[RUP] http://www.rational.com
[VDM_SL] N.Plat, P.G.Larsen. An Overview of the ISO/VDM-SL Standard. SIGPLAN Notes, Vol. 27, No. 8, August 1992.
[VDM++] http://www.csr.ncl.ac.uk/vdm/
[MSC] Message Sequence Charts. ITU recommendation Z.120.
[SDL] Specification and Design Language. ITU recommendation Z.100.
[Z] J.M.Spivey. The Z Notation: A Reference Manual. Prentice Hall, 2nd edition, 1992.
Приложение 1. Приоритет операций
| Приоритет операций над значениями (по возрастанию) | ||
| Приоритет | Операции | Ассоциативность |
| 14 | □ | Правая |
| 13 | post | |
| 12 | ▌ ║ ╫ | Правая |
| 11 | ; | Правая |
| 10 | := | |
| 9 | | Правая |
| 8 | | Правая |
| 7 | | Правая |
| 6 | | |
| 5 | \ ^ † | Левая |
| 4 | | Левая |
| 3 | | |
| 2 | : | |
| 1 | ~ prefix_op | |
| Приоритет типовых операций (по возрастанию) | ||
| Приоритет | Operator(s) | Ассоциативность |
| 3 | Правая | |
| 2 | | |
| 1 | -set -infset | |
Приложение 2. Таблица соответствия RSL символов и их ASCII представления
| ASCII | RSL | ASCII | RSL | ASCII | RSL |
| >< | | isin | | ~isin | |
| || | ║ | ++ | ╫ | -\ | |
| |=| | ▌ | |^| | | -list | |
| ** | | -inflist | | ~= | |
| /\ | | \/ | | +> | ↦ |
| >= | | exists | | all | |
| <= | | union | | !! | † |
| inter | | << | | always | □ |
| -m-> | <<= | | => | | |
| -~-> | >> | | is | | |
| -> | | >>= | | <-> | |
| # | | <. | | .> | |
| :- | • |
Используемые в ASCII представлении символов RSL слова all, exists, union, inter, isin, always являются зарезервированными и не могут использоваться в качестве идентификаторов.
Приложение 3. Ключевые слова RSL
| Ключевые слова RSL | |||
| Bool | class | inds | skip |
| Char | do | initialise | stop |
| Int | dom | int | swap |
| Nat | elems | len | then |
| Real | else | let | tl |
| Text | elsif | local | true |
| Unit | end | object | type |
| abs | extend | of | until |
| any | false | out | use |
| as | for | post | value |
| axiom | forall | pre | variable |
| card | hd | read | while |
| case | hide | real | with |
| channel | if | rng | write |
| chaos | in | scheme | |
Указанные в таблице ключевые слова не могут использоваться в качестве идентификаторов.
Содержание
ВВЕДЕНИЕ 3
1. Вводные замечания 7
1.1. Структура изложения материала 7













