Все события, состояния и функция переходов описываются в файле конфигурации семейства era. Путь к файлу указывается в конфигурации экземпляра семейства. Каждому событию соответствует таймер, записывающий время с момента последнего наступления этого события.
Конфигурация экземпляра семейства
<family-configuration> ::= <era-cfg-path>
Элементы конфигурации экземпляра семейства
|
Путь к файлу описания автомата. |
Синтаксис файла конфигурации семейства era
<era-cfg> ::= <events> ","
<initial> ","
[<final> ","]
<scale> ","
{<state-declare> ","}
<events> ::= "events" ":" "[" <event> {"," <event>} "]"
<initial> ::= "initial" ":" <state>
<final> ::= "final" ":" <state>
<scale> ::= "scale" ":" <scale-value>
<state-declare> ::= <state> ":" "{"
<transition-func>
{"," <transition-func>}
"}"
<transition-func> ::=
<event> ":" <state> ["if" <condition>]
Элементы файла конфигурации семейства era
|
Список возможных событий. |
|
Имя события. |
|
Начальное состояние. |
|
Конечное состояние. |
|
Имя состояния. |
|
Размерность таймера (множитель). Используется при вычислении условия ( |
|
Объявление состояния и переходов из этого состояния. |
|
Функция переходов. Описывается событием, состоянием и необязательным условием. При наступлении события будет осуществлен переход в указанное состояние. Если указано условие, то переход будет осуществлен только если условие возвращает |
|
Условие, при котором будет осуществлен переход. Условие может содержать зарезервированные слова В условии могут использоваться таймеры и числа. При вычислении условия значения чисел будут помножены на размерность таймера, указанную в элементе |
Пример
security.cfg
...
#include "kss/server/era.cfg"
/* era0 – пример экземпляра семейства "era". */
use family era0 = era "test.era";
...
test.era
events : [request, response],
initial : start,
final : stop,
scale : 10 msec,
start : {
/* при наступлении события "request" будет
осуществлен переход в состояние process */
request : process
},
process : {
/* Переход в состояние stop будет осуществлен,
если значение таймера события "request" больше
20 msec, т.е. последнее событие "request" произошло
более 20 msec назад. */
response : stop if request > 2
}