Мансуров Н. Н., Майлингова О. Л. - Методы формальной спецификации программ (1184226), страница 10
Текст из файла (страница 10)
С каждым направлением может быть связан свой списокдопустимых сигналов.Графический синтаксис:<channel definition area> ::= <channel symbol>is associated with { <channel name><signal list area>[ <signal list area> ] }is connected to { <block area>{ <block area> | <frame symbol> }<channel symbol> ::=<channel symbol 1>| <channel symbol 2>| <channel symbol 3>58<channel symbol 1> ::=<channel symbol 2> ::=<channel symbol 3> ::=6.4.4. Межпроцессный каналГрафический синтаксис:<signal route definition area> ::= <signal route symbol>is associated with <name>{ <signal list area> [ <signal list area>] }is connected to { <process area>{<process area | <frame symbol> }<signal route symbol> ::= <signal route symbol 1>| <signal route symbol 2><signal route symbol 1> ::=<signal route symbol 2> ::=6.5.
Поведение6.5.1. Определение переменныхКаждый процесс (и процедура) могут статически определять локальныепеременные. Дополнительно, процесс (и процедура) могут иметь формальныепараметры. Все переменные создаются при порождении экземплярапроцесса (вызове процедуры) и уничтожаются при остановке процесса(возврате из процедуры).Графический синтаксис:<variable definition> ::= dcl <name> <sort>[:= <expression>] ;Примечание:При определении переменной можно указать выражение для инициализациипеременной при создании.6.5.2.
Стартовый символ59Стартовый символ определяет стартовый переход процесса, т.е.последовательность действий, выполняемую при порождении экземпляра данногопроцесса (статически или динамически).Графический синтаксис:<start area> ::= <start symbol>is followed by <transition area><start symbol> ::=6.5.3. СостояниеСостояние определяет набор реакций на сигналы (переходы). Каждоесостояние имеет имя. Состояние с именем «*» является особым: это способопределить переходы, общие для всех обычных состояний.<state area> ::=<state symbol> contains <state name> is associated with{ <input association area>| <save association area> } *<state name> ::=<asterisk> ::= *<name> | <asterisk><state symbol> ::=<input association area> ::= <solid association symbol>is connected to<input area><save association area> ::= <solid association symbol>is connected to<save area>6.5.4.
Прием сигналаСимвол приема сигнала определяет реакцию на данный сигнал (вданном состоянии). Непосредственно при получении сигнала переменные,указанные в символе приема сигнала, получают значения параметровсигнала.60Графический синтаксис:<input area> ::= <input symbol> contains { <stimulus> }is followed by <transition area><stimulus> ::= { <signal name> | <timer name> }[ ( <variable> { , <variable> }* ) ]<input symbol> ::=6.5.5. Сохранение сигналаСигналы, указанные в символе сохранения сигнала в некоторомсостоянии, игнорируются процессом в данном состоянии.
Эти сигналыостаются во входном порте процесса (в порядке поступления) дляпоследующей обработки в другом состоянии. Наличие механизма сохранениясигналов является важным, потому что в каждом состоянии определенастандартная реакция на любой сигнал, которая состоит в том, что сигнализымается из очереди и уничтожается, тогда как процесс остается в старомсостоянии.Графический синтаксис:<save area> ::= <save symbol> { contains <save list> }<save list> ::= { <signal list> | <asterisk> }<save symbol> ::=616.5.6.
МеткиМетки позволяют определять участки переходов, общие для несколькихсостояний.Графический синтаксис:<in-connector area> ::= <in-connector symbol>contains <connector name>is followed by <transition area><connector name> ::= <name><in-connector symbol> ::=6.5.7. ПереходПереход определяет последовательность действий, выполняемую процессом вкачестве реакции на получение некоторого сигнала в некотором состоянии. Вовремя выполнения перехода процесс может осуществлять доступ к переменным,посылать сигналы, а также порождать экземпляры процессов. Переходзаканчивается либо тем, что процесс попадает в новое состояние и ожидает тамследующего сигнала, либо остановкой процесса (возврат в случае процедуры), либопередачей управления на другой переход.Графический синтаксис:<transition area> ::= [<transition string area>] is followed by{ <state area>| <nextstate area>| <decision area>| <stop symbol>| <merge area>| <out-connector area>| <return area> }<transition string area> ::={ <task area>| <output area>| <set area>| <reset area>| <create request area>| <procedure call area> }[ is followed by <transition string area> ]626.5.8.
Терминаторы переходов6.5.8.1. Символ перехода в состояниеСимвол перехода в новое состояние определяет, в каком состоянии процессбудет ожидать следующего сигнала. <dash nextstate> означает, что изменениясостояния не происходит. Конструкция <dash nextstate> оказывается особенноценной при организации помеченных участков графа.Графический синтаксис:<nextstate area><nextstate body><dash nextstate><state name> ::=::= <state symbol> contains <nextstate body>::= { <state name> | <dash nextstate> }::= <name>6.5.8.2.
Символ перехода на меткуСимвол перехода на метку осуществляет передачу управления на новыйучасток перехода. Заметим, что явная передача управления на текущий переходявляется единственным средством организации циклов.Графический синтаксис:<merge area> ::= <merge symbol> is connected to<flow line symbol><merge symbol> ::= <flow line symbol><flow line symbol> ::=<out-connector area> ::= <out-connector symbol> contains<connector name><out-connector symbol> ::= <in-connector symbol>6.5.8.3. Символ остановкиВыполнение остановки процесса приводит к уничтожению всех переменныхпроцесса и всех необработанных сигналов из входного порта процесса.Графический синтаксис:<stop symbol> ::=636.5.8.4. Символ возврата из процедурыВозврат из процедуры означаеткотором произошел вызов процедуры.продолжение того перехода, наГрафический синтаксис:<return area> ::= <return symbol>[ is associated with <expression> ]<return symbol> ::=6.5.9.
Действия6.5.9.1. ПрисваиваниеГрафический синтаксис:<task area> ::= <task symbol> contains <assignment statement><task symbol> ::=6.5.9.2. Создание процессаГрафический синтаксис:<create request area> ::= <create request symbol>contains <create body><create request body> ::= <name> [ <actual parameters> ]<actual parameters> ::= ( <expression> { , <expression> }* )<create request symbol> ::=Динамическое поведение SDL системы описывается внутри процессов.Процессы могут создаваться при запуске системы, а также могут создаватьсяи уничтожаться динамически во время выполнения системы.
Можетсуществовать более одного экземпляра одного и того же процесса. Каждыйэкземпляр процесса имеет уникальный идентификатор PId. Это делаетвозможным посылку сигнала конкретному экземпляру процесса.Формальные параметры процесса получают свои значения при егосоздании. У экземпляров процессов, которые создаются статически, значенияформальных параметров неопределены.64У каждого процесса есть четыре стандартные переменные типа PId:- Собственный идентификатор процесса (переменная self);- Идентификатор родительского процесса (переменная parent);- Идентификатор последнего процесса, порожденного данным процессом(переменная child);- Идентификатор процесса, от которого был получен последнийполученный сигнал (переменная sender).При попытке создания лишних экземпляров процесса (т.е. больше чем<maximum number>, новый экземпляр не создается, переменная offspringполучает значение Null, а выполнение перехода продолжается.6.5.9.3.
Вызов процедурыГрафический синтаксис:<procedure call area> ::= <procedure call symbol> contains<procedure call body><procedure call body> ::= <name> [ <actual parameters> ]<procedure call symbol> ::=6.5.9.4. Посылка сигналаПри посылке сигнала можно явно указать маршрут, по которому долженбыть направлен сигнал (конструкция via), либо процесс-получатель(конструкция to) в одной из двух форм: либо имя процесса-получателя, либоуникальный PId процесса-получателя. Если при посылке сигнала указаноимя процесса-получателя, то сигнал попадет к произвольному экземплярупроцесса с данным именем (если таковые вообще существуют).Графический синтаксис:<output area> ::= <output symbol> contains <output body><output body> ::= <signal name> [ <actual parameters> ][ to <destination> ] [ via <via path> ]<destination> ::= <Pid expression> | <name><via path> ::= <channel name>| <signal route name><signal name> ::= <name><channel name> ::= <name><signal route name> ::= <name><output symbol> ::=656.5.10.