УДК 004.89
DOI: 10.18101/2304-5728-2018-4-22-36
МЕТОД ОПИСАНИЯ СИСТЕМ СО СЛОЖНЫМ ПОВЕДЕНИЕМ НА ПРИНЦИПАХ ОБОБЩЕННЫХ АВТОМАТОВ
© Федорченко Людмила Николаевна
кандидат технических наук, доцент, старший научный сотрудник,
Санкт-Петербургский институт информатики и автоматизации Российской академии наук
Россия, 199178, г. Санкт-Петербург, 14 Линия В.О., 39 E-mail:[email protected]
© Афанасьева Ирина Викторовна
ведущий инженер,
Специальная астрофизическая обсерватория Российской академии наук Россия, 369167, Карачаево-Черкесская Республика, п. Нижний Архыз E-mail:riv@, sao.ru
Автоматные модели наиболее удобны для проектирования систем со сложным поведением, но имеют ряд ограничений, таких как отсутствие поддержки асинхронности и параллельности. Для описания таких моделей часто используют специальные языковые средства, как графические, так и текстовые. В предлагаемой статье представлен метод описания систем со сложным поведением с использованием языка программирования высокого уровня CIAO (Cooperative Interaction of Automata Objects), из программы которого генерируется система автоматов, симулирующих функционирование исходной реагирующей системы.
Ключевые слова: асинхронные параллельные реагирующие системы; граф переходов состояний; синтаксическая граф-схема; грамматика в регулярной форме.
Введение
Большой класс технологических инструментов для производства программ обработки данных использует принцип синтаксического управления. В типичных приложениях, таких как трансляция языков программирования, этот принцип давно и успешно используется. Управление процессом трансляции определяется синтаксической структурой предложений входного языка.
Особенность таких программ состоит в том, что структура входных данных (входного языка) и система управления обработкой данных такой программы определяется сходным образом: одной и той же формальной грамматикой, или системой конечных автоматов, или же управляющей таблицей. Главная часть логики такой программы сосредоточена в схеме взаимодействующих автоматов, а сама программа обращается к ней на каждом шаге ее работы. Управляющая таблица, в частности, определяет порядок вызова семантических процедур, осуществляющих обработку данных в процессе анализа входного текста.
Цель исследования, которому частично посвящена статья, разработать методику автоматизированного формирования событийно-управляемой программной системы с помощью языка CIAO (Cooperative Interaction of Automata Objects) [1-3] для проектирования асинхронных параллельных реагирующих систем.
Краткая историческая справка
Методы разработки сложных программных систем определяются используемой моделью поведения. В известной классификации поведенческих моделей программ Д. Харела выделяются реагирующие и трансформационные системы [4]. Большинство систем управления техническими средствами являются реагирующими.
Разработанное специальное программное обеспечение сбора и обработки данных от астрономических фотоприемных устройств (СПО ФПУ) взаимодействует с внешней средой посредством обмена сообщениями [2]. Оно может выполнять одновременно несколько независимых операций, поэтому рассматривается как параллельное приложение. Эффективность достигается за счет использования компьютера с несколькими или многоядерными процессорами. Сложность использования многоядерных и многопроцессорных структур заключается в необходимости применения специальных средств программирования, так как первоначально программы не являются параллельным представлением алгоритмов решения задач.
С целью преодоления этих трудностей создан графический язык CIAO [3], который предназначен прежде всего:
для наглядного описания и визуализации систем со сложным поведением;
реализации взаимодействия параллельных программных объектов;
построения моделей систем со сложным поведением, исследования их и верификации;
быстрого создания прототипов параллельных реагирующих
систем.
Язык CIAO показал хорошие результаты применительно к СПО ФПУ, в связи с чем возникла идея расширить область применения этого языка. Далее, будем рассматривать посылку и прием сигналов как абстрактные операции, которые выполняются системой взаимодействующих параллельных автоматов. Отсюда и интерес к языку CIAO, на котором можно писать программы для сети взаимодействующих автоматных объектов с возможным расширением языка за счет добавления новых конструкций, специфических для конкретных предметных областей.
Для применения в широком классе предметных областей с возможностью настройки языка на предметную область (кастомизация) предпочтительнее текстовая форма языка, поскольку она открывает возможность построения синтаксически управляемых программ обработки входных
структурированных данных (процессоров), о которых шла речь выше. В качестве перспективной формальной базы для построения процессоров разработана методика, основанная на использовании грамматик с обобщенными регулярными выражениями и атрибутами в виде специальных символов, семантик, для представления контекстных ограничений в синтаксической граф-схеме [6; 7].
Формальными моделями методики построения языковых процессоров, моделирующих кооперативное взаимодействие автоматных объектов, являются регулярные выражения — как средство описания языка, конечный автомат — в качестве адекватного средства его обработки и его обобщения в виде диаграмм переходов состояний.
Теоретическим обоснованием этих моделей являются теорема С. Кли-ни и ее следствия о том, что класс регулярных множеств является минимальным классом, содержащим все конечные множества, замкнутым относительно операций объединения, конкатенации и замыкания [8].
Регулярные множества распознаются конечными автоматами и представляются регулярными выражениями.
Использование этой модели ограничено ее применением лишь к регулярным языкам, поэтому модель обобщена до класса контекстно-свободных языков в регулярной форме (КСР-языков) с использованием специальных автоматов [5]. КСР-язык порождается КСР-грамматикой — обобщением контекстно-свободной грамматики (КС-грамматики).
Основные определения даны в работах [6-8]. Напомним их неформально.
Как известно, формальным языком является набор цепочек языковых токенов (лексем или терминалов) в соответствии с грамматикой языка [8]. Грамматика языка состоит из контекстно-свободной части в виде КС-правил и контекстно-зависимой части (ограничений). КС-правила представлены в форме с обобщенными регулярными выражениями. Обобщение конечно-автоматной модели обработки языков сводится к следующе-
• вводится итерация, обозначаемая знаком «диез» (#) или обобщенная итерация, которая не расширяет множество регулярных слов и может быть определена через традиционную (одноместную) операцию Клини (*) как (Р#0) = Р, (О, Р)*. Она удобна при работе со стеком и частично решает задачу минимизации регулярного выражения по числу вхождений символов из объединенного алфавита всех символов грамматики;
• язык описывается с помощью КСР-грамматики — обобщения КС-грамматики. Класс языков не расширяет, но снимает лишнюю структурированность грамматического описания языка, в частности, простые конструкции, например, последовательности, списки с разделителями описываются без рекурсивных правил, только с применением итерации;
• строится синтаксическая граф-схема (СГС) — графический аналог КСР-грамматики, стартовый объект для синтеза распознавателя (анализатора) языка.
Грамматическое описание языка ОАО
Правила грамматики записываются следующим образом: Нетерминал : Регулярноевыражение, где Нетерминал — одно из вышеперечисленных обозначений для нетерминалов, а Регулярное выражение задается следующим синтаксисом в формализме Наура — Бэкуса:
Регулярное_выражение ::= {
Пусто | Лексема | Нетерминал | Семантика |
Регулярное_выражение1 Регуляр-ное_выражение2 | Регулярное_выражение1';' Регуляр-ное_выражение2 | Регулярное_выражение1 '#' Регуляр-ное_выражение2 | '[' Регулярное_выражение ']'
'(' Регулярное_выражение ')' } ■
В фигурных скобках через вертикальную черту перечислены альтернативы. В строке (1) перечислены базовые элементы, составляющие регулярное выражение: Пусто — пустое выражение (отсутствие чего-либо), Лексема, Нетерминал и Семантика. Строка (2) представляет операцию конкатенации, не имеющую специального знака для своего обозначения; строка (3) — это операция альтернативного выбора, знаком которой является точка с запятой; строка (4) задает операцию итерации, знаком которой является диез, строка (5) задает необязательную конструкцию, то есть [Р] = (Р ; ), а строка (6) позволяет заключать регулярное выражение в круглые скобки, чтобы рассматривать его как один операнд в операциях конкатенации, альтернативного выбора и итерации. Для обозначения комментария используется комбинация символов //.
Ниже описан конкретный синтаксис языка ОАО с минимумом разделителей. Ради краткости считается, что тип идентификаторов определяется на лексическом уровне. Интенсивно используется итерация, рекурсивные правила в явно выписанной части грамматики не используются.
Нетерминалы
В текущей версии грамматики языка ОАО выделяются следующие 15 нетерминалов для обозначения отдельных языковых структур: Р (описание одного автоматного объекта на языке ОАО), N (номер и имя автоматного объекта), V (раздел переменных), Е (раздел событий — входных команд), А (раздел действий — выходных команд), Я (раздел выходных запросов), 0 (раздел входных запросов), и (раздел устойчивых состояний), (раздел неустойчивых состояний), Б (раздел состояний выбора),
//Базовые элементы (1) //Конкатенация (2)
//Альтернативный выбор
(3)
//Итерация (4)
//Необязательный элемент (5) //Выражение в скобках (6)
G (раздел групповых состояний), L (раздел внешних связей), В (булевское выражение), S (общий нетерминал для всех видов состояний), Action (список действий и/или выражений на переходе). Начальным нетерминалом, из которого порождается текст любой синтаксически правильной программы, является нетерминал Р. Полная программа на CIAO является последовательностью разделов в фиксированном порядке.
Терминалы
Лексический анализатор преобразует цепочку символов из входного файла в последовательность лексем: несколько лексем общего вида: '<char>' (литера), '<number>' (целое), ' <operation>' (знак операции), '<string>' (строка), '<tag>' (идентификатор) и ряд «частных» лексем — ключевых слов, перечень которых определяется грамматикой входного языка CIAO. Лексемы выступают в роли терминалов и заключены в кавычки. В языке CIAO можно выделить следующие группы лексем:
1) лексемы-названия разделов:
'VAR', 'EVENT', 'ACTION', 'REQUEST', 'QUERY', 'STATE', 'WAGGLY', 'DECISION', 'GROUP', 'LINK';
2) лексемы общего вида (в их обозначениях присутствуют угловые скобки < и >):
• '<p_num>' — уникальный номер автоматного объекта в пространстве имен, записывается так: #целое;
• ' <p_nm>' — имя автоматного объекта, один или несколько произвольных идентификаторов;
• ' <v_nm>' — имя локальной переменной, произвольный идентификатор;
• ' <type>' — идентификатор встроенного типа, то есть один из идентификаторов 'string', 'Real', 'Integer', 'Boolean', или идентификатор внешней структуры (класса);
• ' <ехрг>' — логическое или арифметическое выражение;
• ' <е_шп>' — имя события — входной команды (часть предоставляемого интерфейса), произвольный идентификатор;
• '<а_шп>' — имя действия — выходной команды (часть требуемого интерфейса), произвольный идентификатор;
• '<r_nm>' — имя выходного запроса (часть требуемого интерфейса), произвольный идентификатор;
• '<q_nm>' — имя входного запроса (часть предоставляемого интерфейса), произвольный идентификатор;
• '<u_nm>' — имя устойчивого состояния, произвольный идентификатор;
• '<w_nm>' — имя неустойчивого состояния, произвольный идентификатор;
• ' <d_nm>' — имя состояния выбора, идентификатор, записывается так: (Зсвпцелое. Под целым числом подразумевается номер, указанный в состоянии;
• '<g_nm>' — имя группового состояния, произвольный идентификатор, записывается так: угрцслос. Под целым числом подразумевается номер, указанный в состоянии;
• '<f_num>' — номер вызывающего автоматного объекта, которому данный автомат предоставляет указанный интерфейс, записывается так: #целое;
• '<t_num>' — номер вызываемого автоматного объекта, чей указанный интерфейс требуется, записывается так: #целое;
• '<val>' — самоопределенное значение: либо «строка», либо истинностное значение Т, 'F', либо натуральное число, либо число с плавающей точкой;
3) лексемы-метасимволы языка, изображаемые одним или двумя специальными символами:
• ':' — после двоеточия указывается тип определяемой переменной или возвращаемого значения, для входного запроса указывается имя локальной переменной;
• ',' — соединяет последовательно;
• — разделяет альтернативы;
• '['']' — выделяет сторожевое условие на переходе;
• '('')' — группирует;
• '=' — оператор присвоения значения;
• '->' — признак начала или окончания перехода;
• '/' - признак начала действий на переходе.
4) лексемы — зарезервированные слова: 'Real' — тип число с плавающей точкой, 'Integer' — целочисленный тип, 'Boolean' — булевский тип, 'after' — выход из состояния по прошествии указанного интервала времени, 's' — размерность в секундах, 'ms' — размерность в миллисекундах, 'entry' — начальное состояние, 'exit' — заключительное состояние, Т — значение «истина» для булевского типа, 'F'— значение «ложь» для булевского типа.
Для учета неформализованных контекстных зависимостей в правила грамматики в виде регулярных выражений введены следующие 39 семан-тик-процедур, которые исполняются, если в процессе распознавания входного текста очередная распознанная лексема является той, которая в грамматическом правиле следует за данной семантикой; причем эта семантика имеет доступ ко всем параметрам данной лексемы; название каждой семантики начинается со знака "$": $after, $actionl, $action2, $action3 $action4, $attrl, $attr2, $attr3, $close, $commal, $comma2, $condl, $cond2, $d nml, $d nm2, $else, $event, $g nm, $linkl, $link2, $open, $query, $r nm, $request, $signl, $sign2, $sign3, $sign4, $start, $statel,
$state2, $state3, $state4, $state5, $state6, $u nml, $u nm2, $var, $w nm.
Правила грамматики языка CIAO:
P : N [V] E [A] [R] [Q] U W [D] [G] L .
N : '<p num>' '<p nm>' $open .
V : 'VAR' ( '<v_nm>' ':' '<type>' [ '=' '<expr>' ] Svar )# •
E : 'EVENT' ( ' <e_nm> ' Sevent '(' [ ( '<tag>' ':' '<type>'
Sattrl )#( ',' Scommal ) ] ')' Scomma2 ) # .
A : 'ACTION' ( ' <a_nm> ' Sactionl '(' [ ( '<tag>' ':' '<type>'
Sattrl )#( ',' Scommal ) ] ')' Scomma2 ) # .
R : 'REQUEST' ( '<r_nm>' '(' ')' ':' '<type>' Srequest ) # •
Q : 'QUERY' ( '<q_nm>' Squery '(' ')' ':' '<v_nm>' ) #
U : 'STATE' ( ( ' <u_nm> ' Sstatel ( '->' ( ( ( ( '<e nm>' Su nml
'С I ( ' <val> ' Sattr2 )#( ',' Scommal ) ] ')' Scomma2 )# )
[ '[' В ']' ] ; ( 'after' '(' '<val>' ( 's' ; ' ms '
) ' ) '
Safter ) ) [ Action ] Saction4 '->' S ) ) )# ) Su nm2 .
"w : 'WAGGLY' ( 'entry' '->' [ '<e_nm>' Sw_nm '(' [ ( '<val>'
Sattr2 )#( ',' Scommal ) ] ')' Scomma2 ] [ Action ] Saction4
'->' '<u_nm>' Sstart ) #( '<w_nm>' Sstate2 '->' [ 'after' '(' '<val>' ('s' ; 'ms') ')' Safter ] [ Action ]
Saction4 '->' S Sstate4 ) .
D : 'DECISION' ( '<d_nm>' Sd_nml '->' '(' ( '[' В ']' [ Action ]
Saction4 '->' S Sstate5 )#( *| * Seise ) ( *| * Seise [ '[' В ']' ] [ Action ] Saction4 '->' S Sstate5 ) ') ' )# •
G : 'GROUP' ( '<g_nm>' Sg_nm '->' [ Action ] Saction4 '->' S Sstate6 )#( Sd_nm2 ) .
L : 'LINK' ( ( '<f_num>' '<p_num>' ( '<e_nm>' '<q_nm>' )
Slinkl ) ; #( '<p_num>' '<t_num>' ( '<a_nm>' '<r_nm>' )
Slink2 ) )#( Sclose ) .
В : Scondl ((['!' Ssignl ] ( ( '<v_nm>' ( '<' ; '<=' ; '>' ;
'>=' ; '==' ; '!=' ) Ssign2 '<expr>' Scond2 ) ; ( '<r nm>'
'С ')' Sr_nm ) ) )#( '&&' Ssign3 [ '!' Ssignl ] ) ) # ( 'II'
Ssign4 [ '!' Ssignl ] ) . Action : '/' ( ( ' <v_nm>' ' = ' '<expr>' Saction2 ) ; ( '<a_nm>'
Saction3 '(' [ ( ( '<v_nm>' ; '<val>' ; '<tag>' ) Sattr3 )#( ',' Scommal ) ] ')' $comma2 ) )#( ',' )
S : ( '<u_nm>' ; '<w_nm>' ; '<d_nm>' ; '<g_nm>' 'exit') $state3 .
Для проверки правильности записи регулярных выражений использовалось инструментальное средство SynGT (Syntax Graph Transformations) [6; 7]. На рис. 1 показано графическое представление правил грамматики языка CIAO.
N
^-»{~<p_nurn> )—*f <p_nm> }
Sopen
►{ VAR <v_nm> j—1H^ : )—1H^ <1уре> j—г-*-;
$var
EVENTW4 <e_i
i $ event
4I>
. KjSiEMIHlv^E}1^
Ücommal j" ^_
<D
ícomma2_
АСТ10ТГ)-г-»Г<а
I $action1
<L>
43t¡¡E><>GM¡E}ieal-
ícommal j" ^_
<D
$comma2
И REQUEST МТ^ГНТНТ^^ "e[|ue5t ^
►Х^ШКёёНЗ-
Щ1®
реозюи)т*(<рт>)~Ч^1"ЧТ1тЧТУ*ГвТ*(Т]~г*''_т»Г^И^ЬгКТУ"-, _.Ч^Ч^КУУН
Ч АсИоп Н 1 'Д ' Щ 'Д 1 Ч МОП Н
кг>-
^-Ч ОВОЦР Ьг-»ЖГ.пт>
ШК. '
«( <^пит> ")-»( <р_пит>~)-р-*(~<е_пт> ] $с1оае ^ <д_пт> ]-
-»( <р_пит> )-♦{ <1_пит»"^)—г—»( <а_пт>
В
>
-*( <с!_пт> -*( <д_пт>
!-*( ехИ )-АсИоп
ИСТУ
-рЧ <у_пт> М^М <гв1ааопГ) $асНоп2 <а_пт> ^Н*( ( )■
фасйоМ
>
-»( <уа|Г~)~
-»( <1ад> )-
$сотта1 | ^
ФаНгЗ
I $сотта2. $ас!юпЗ
Ч1К
Рис. 1. Синтаксические графы для нетерминалов грамматики
Алгоритм метода создания реагирующей системы
Для проектирования и реализации параллельных реагирующих систем предлагается метод ReSyD (Reactive Systems Design), в основу которого положена модель взаимодействующих автоматных объектов (рис. 2). Алгоритм метода создания реагирующей системы состоит из семи шагов:
(1) проводится анализ предметной области, строятся диаграммы использования с учетом функциональных требований к системе; (2) выделяются сущности со сложным поведением (автоматные объекты), составляется список команд и запросов, параллельные операции назначаются разным объектам; (3) определяются состояния и переходы между ними для каждого объекта, строятся диаграммы состояний; (4) по списку команд и запросов устанавливаются связи между автоматными объектами, на схеме связей указываются контракты предоставляемых и требуемых интерфейсов; (5) анализируется схема связей: сильно связанные или сходные по функциональному назначению объекты группируются в компоненты, строится архитектура системы в виде диаграммы компонентов; (6) по диаграммам состояний определяются классы программных объектов и классы интерфейсов; функции и переменные, декларированные на диаграммах, имплементируются в программный код на целевом языке; (7) в случае необходимости код дополняется деталями, не отображенными на диаграммах.
Рис. 2. Алгоритм метода ReSyD
В качестве примера описания метода выбрана система управления работой лифта. Рассмотрим текстовую постановку задачи в несколько упрощенной форме по сравнению с фундаментальной книгой [9].
Простой лифт в многоэтажном доме должен перевозить пассажиров с этажа на этаж. Лифт имеет кнопки вызова на каждом этаже и кнопки отправления на этажи в кабине. Система управления лифтом не принимает новых вызовов, пока не закончит обслуживание принятого вызова. Двери шахты и двери лифта открываются и закрываются системой управления, причем падение пассажиров в шахту лифта через несвоевременно открытые двери шахты или лифта должно быть исключено. В пол лифта встроен датчик давления. Система управления должна исключить движение с перегрузкой или недогрузкой лифта. В кабине лифта имеется освещение. Система управления должна включать и выключать освещение так, чтобы экономить электричество, но не пугать пассажиров несвоевременным выключением света.
Вначале по словесному описанию строится граф переходов состояний, отражающий поведение лифта (рис. 3). Методика явного выделения состояний для краткости опускается, в основных чертах она следует парадигме автоматного программирования [10].
jrl I «query» [«i
-/ lisOkO; Boolean 1is
A1 Elevator
query» isEmptyO ; Boolean
[else] / move(y); llghtOn(); open(y)
call(y)
Ф
[isFloor(y)] / lightOnO; open(y)
U
Service
[isEmptyO] I close(y); lightOffQ
[elsep
after(15s)
goTo(y)
[else]
[else]
«command» call(y)
«command» goTo(y)
«query»
isFloor(y): Boolean
«command» lightOnQ
«command» lightOffO
«command» open(y)
«command» close(y)
«command» move(y)
Рис. 3. Диаграмма состояний автоматного объекта Elevator
Графической диаграмме переходов состояний соответствует текстовое представление на языке CIAO (листинг 1).
1 #1 Elevator a EVENT
a call(y : Integer) 4 goTo(y : Integer) = ACTION « lightOnO t lightOff() » open(y : Integer) • close(y : Integer) it «ove(y : Integer) uREQUEST
ia isFloor(y) : Boolean is isOk () : Boolean h isEmptyO : Boolean STATE
» idle -> callCy) -> dcsnl it service -> after(15 s) -> dcsn2 i» service -> goTo(y) -> dcsn3 ,» WAGGLY
20 entry -> -> idle si DECISION
¡a dcsnl -> ( LisFloor(y)J /
lightOnO, open(y) -> service I / move(y), lightOnO, open(y ) -> service ) aa dcsn2 -> ( [isEmptyO] / close(y ), lightOff() -> idle I -> service ) aj dcsn3 -> ( [isFloor(y)] ->
service I -> dcsn4 ) aa dcsn4 -> ( [isOkO] / close (y) , move(y) , open(y) -> service I -> service ) » LINK
ar #2 #1 call a. #2 #1 goTo a.j #1 #2 isFloor so #1 #2 lightOn 3i #1 #2 lightOff aa #1 #2 open 33 #1 #2 close aj #1 #2 move
Листинг 1. Текстовое представление поведения автоматного объекта Elevator
на языке CIAO
После применения кодогенератора БупОТ к тексту в листинге 1 получена заготовка текста для языка С++ (листинг 2).
1 typedef emim { >
idle , service 41 >
3 > Statel; 4a break ;
« 4a >
class 11 44 case service :
а { {
т public : 4« if (event==goTo(y)) {
s void callCilit y) ; 47 if (isFloor(y)) {
» void goTo(int y); y_ = service ;
io >; 4» >
1, ao else {
13 class A1 public 11 51 if (isOkO) {
13 { a3 out.->close Cy) ;
14 private : out_->move(y);
is State 1 y_; 54 out_->open(y);
1с 12 tout.; fifi y_=service;
it bool i sOk () ; 5« >
1. bool isEmptyO ; *t else {
1» ft* y_=service;
зо public : в» >
31 void run O { «о >
33 y_ «idle; «1 >
за int y; «2 if (eventtiner
34 while (1) { (15000)) {
event ■ wait CI) ; i f (isEmpty C) ) {
3« switch ( y _ ) { «4 out_->close(y);
3- case idle: es out.->lightOff O ;
3« { <ш y_=idle;
3« if (event = =call (y) ) -C ®7 >
з<> if (isFloor(y)) { «Ut else -{
31 out.->lightOnO; «и» y_-service;
»3 out_->open(y); то >
33 y_=service; ri >
34 > та break ;
m else { та >
out_->move(y); т4 >
зт out_->lightOn(); та >
33 out_->openCy); те >
3» y_=service; 77 > ;
Листинг 2. Программа на языке С++ для автоматного объекта Elevator
Отличительным свойством данной методики является то обстоятельство, что полученное решение является доказательно верным. Действительно, требование безопасности «исключить падение пассажиров в шахту через несвоевременно открытые двери» выполнено, поскольку из диаграммы на рис. 2 видно, что действие ореп(у) выполняется в любом случае только при выполнении предусловия Р1оог(у). Все дальнейшие преобразования сохраняют это и другие свойства диаграммы переходов состояний.
Заключение
Описаны структура и текущее состояние грамматики языка ОАО для компиляции и проведения экспериментов с программами на языке ОАО для моделирования поведения сетей взаимодействующих автоматных объектов. Особенностью данной разработки является использование языка С++ с набором инструментальных средств для создания и отладки всех компонентов данной программы.
Дальнейшая работа будет состоять в расширении функциональности созданных компонентов (прежде всего кодогенератора и программы имитационного моделирования сгенерированного кода), в уточнении грамматики и семантики входного языка ОАО и в проведении экспериментов по программированию и исполнению реальных приложений.
Построенная автоматная модель таких расширенных диаграмм реализована в языке CIAO и обеспечивает модульность описания поведения программной системы, а также задает интерфейс взаимодействия как автоматов, так и любых других программных компонентов. Язык CIAO превосходит известные аналоги в части предоставления механизмов кооперативного взаимодействия, асинхронности и параллельности для широкого класса реагирующих систем.
Литература
1. Attribute-Based Approach of Defining the Secure Behavior of Automata Objects / F. A. Novikov [et al.] // Proceedings of SIN 2017 conference (SIN 2017). NY., 2017. P. 67-72. DOI: https://doi.org/10.1145/3136825.3136887
2. Афанасьева И. В., Новиков Ф. А. Архитектура программного обеспечения систем оптической регистрации // Информационно-управляющие системы. 2016. № 3. С. 51-63. DOI: 10.15217/issue 1684-8853.2016.3.51
3. Новиков Ф. А., Афанасьева И. В. Кооперативное взаимодействие автоматных объектов // Информационно-управляющие системы. 2016. № 6. С. 50-63. DOI: 10.15217/issnl684-8853.2016.6.50
4. Harel D. Statecharts: a Visual Formalism for Complex Systems // Science of Computer Programming. 1987. V. 8. P. 231-274.
5. Шалыто А. А. Парадигма автоматного программирования // Научно-технический вестник СПбГУ ИТМО. 2008. Вып. 53. С. 3-24.
6. Fedorchenko L. Regularization of Context-Free Grammars. Saarbrucken: LAP LAMBERT Academic Publishing, 2011. 180 p.
7. Fedorchenko L., Baranov S. Equivalent Transformations and Regularization in Context-Free Grammars // Cybernetics and Information Technologies (CIT). Sofia, 2015. V. 14, No. 4. P. 11-28.
8. Aho A., Sethi R., Ullman J. Compilers: Principles, Techniques and Tools. Addison-Wesley, 1986. 796 p.
9. Кнут Д. Искусство программирования для ЭВМ. Т. 1 Основные алгоритмы: пер. с англ. М.: Мир, 1976. 736 с.
Ю.Поликарпова Н. И., Шалыто А. А. Автоматное программирование. СПб.: Питер, 2011. 176 с.
A METHOD FOR DESCRIBING SYSTEMS WITH COMPLEX BEHAVIOR BASED ON THE PRINCIPLES OF GENERALIZED AUTOMATA
Ludmila N. Fedorchenko
Cand. Sei. (Engineering), Senior Researcher,
St. Petersburg Institute for Informatics and Automation RAS (SPIIRAS) 39, 14th Line of V. 0., St. Petersburg 199178, Russia E-mail: [email protected]
Irina V. Afanasyeva Leading Engineer,
Special Astrophysical Observatory RAS (SAO RAS) Nizhny Arkhyz 396167, Russia E-mail: [email protected]
Automata-based models are most convenient for designing systems with complex behavior, but they have a number of limitations, such as the lack of support for asynchrony and concurrency. Special language tools, both graphic and textual are often used to describe such models. The article presents a method for describing systems with complex behavior using the high-level programming language CIAO (Cooperative Interaction of Automata Objects). The program of this language generates a system of automatic machines, which simulate the functioning of the initial reactive system.
Keywords: asynchronous parallel reactive systems; state-transition graph; syntactic flowgraph in regular form.
References
1.Novikov F. A., Fedorchenko L. N., Vorobiev V. I., Fatkieva R. R., and Levonevskiy D. K. Attribute-Based Approach of Defining the Secure Behavior of Automata Objects. Proceedings of the 10th International Conference on Security of Information and Networks (SIN 2017), J. B. Sartor, Th. D'Hondt, and W. De Meuter (Eds.). New York, USA: ACM, 2017. Pp. 67-72 DOI: https://doi.Org/10.l 145/3136825.3136887
2.Afanasyeva I. V., Novikov F. A. Arkhitektura programmnogo obespecheniya sistem opticheskoi registratsii [Software Architecture of Optical Registration Systems]. Informatsionno-upravlyayushchie sistemy — Information Management Systems. 2016. No. 3. Pp. 51-63. DOI: 10.15217 /issue 1684-8853.2016.3.51
3.Novikov F. A., Afanasyeva I. V. Kooperativnoe vzaimodeistvie avtomatnykh ob"ektov [Cooperative Interaction of Automaton Objects]. Informatsionno-upravlyayushchie sistemy —Information Management Systems. 2016. No. 6. Pp. 50-63. DOI: 10.15217/issnl684-8853.2016.6_50
4. Harel D. Statecharts: A Visual Formalism for Complex Systems. Science of Computer Programming. 1987. V. 8. Pp. 231-274.
5. Shalyto A. A. Paradigma avtomatnogo programmirovaniya [Paradigm of Auto-mata-Based Programming], Nauchno-tekhnicheskii vestnik Sankt-Peterburgskogo go-sudarstvennogo universiteta informalsionnykh tekhnologii, mekhaniki i optiki — Scientific and Technical Bulletin of St. Petersburg State University of Information Technologies, Mechanics and Optics. 2008. V. 53. Pp. 3-24.
6. Fedorchenko L. Regularization of Context-Tree Grammars. Saarbrucken: Lap Lambert Academic Publ., 2011. 180 p.
7. Fedorchenko L., and Baranov S. Equivalent Transformations and Regularization in Context-Free Grammars. Cybernetics and Information Technologies (CIT). 2015. V. 14. No 4. Pp. 11-28.
8. Aho A., Sethi R., Ullman J. Compilers: Principles, Techniques and Tools. Addison-Wesley, 1986. 796 p.
9.Knuth D. The Art of Computer Programming. V. 1. Fundamental Algorithms. Massachussets, USA: Addison-Wesley, 1968. 634 p.
10. Polikarpova N. I., Shalyto A. A. Avtomatnoe programmirovanie [Automata-Based Programming], St Petersburg: Piter Publ., 2011. 176 p.