УНИВЕРСИТЕТ ИТМО
Кафедра «Технологии программирования»



Главная

Новости
 Новости науки
 Важное
 Почетные доктора
 Инновации
 Культура
 Люди
 Разное
 Скартел-Yota
 Стрим
 Смольный
Учебный процесс
 Образование
 Дипломы
 Курсовые проекты
 Лабораторные работы
 Учебные курсы
 Визуализаторы
 Unimod-проекты
 Семинары
 Стипендии
Наука
 События и факты
 Госконтракты
 Статьи
 Диссертации
 Книги
 Презентации
 Свидетельства
 Сотрудничество
Исследования
 Автоматы
 Верификация
 Биоинформатика
 Искусственный интеллект
 Генетические алгоритмы
 Движение
 UniMod
 Роботы и агенты
 Нейронные сети
 ФЦП ИТМО-Аалто
 Разное

О нас
 Премии
 Сертификаты и дипломы
 Соревнования по программированию
 Прорыв
 Автографы
 Рецензии

Беллетристика
 Мотивация
 Мысли
Медиа
 Видео
 Фотографии
 Аудио
 Интервью

English
 Home

 Articles
 Posters
 Automata-Based Programming
 Initiatives
 Projects
 Presentations
 UniMod
 UniMod Projects
 Visualizers


Поиск по сайту

Яndex



   Главная / Статьи / SWITCH-технология — автоматный подход к созданию программного обеспечения «реактивных» систем (версия для печати)


SWITCH-технология — автоматный подход к созданию программного обеспечения «реактивных» систем



[ << | 1 | 2 | 3 | 4 | Литература | Приложение 1 | Приложение 2 | Приложение 3 | >> ]

Приложение 1. Шабон для реализации графа переходов

#include "photon_stuff.h"
#include "dg.h"
#include "log.h"
#include "defines.h"

void A_i_( int e, dg_t *dg )
{
  int y_old = dg->y_i_ ;
  
  // Протоколирование запуска автомата
  #ifdef A_i__BEGIN_LOGGING
    log_begin( dg, "A_i_", y_old, e ) ;
  #endif

  switch( dg->y_i_ )
  {
    case 0:
      // Вызвать вложенные автоматы
      // Проверить условия на дугах и петлях, 
      // выполнить переход и действия на дуге или петле
    break ;

    ...

    case n:
      // Вызвать вложенные автоматы
      // Проверить условия на дугах и петлях, 
      // выполнить переход и действия на дуге или петле
    break ;

    default:
      #ifdef A_i__ERRORS_LOGGING
        log_write( LOG_GRAPH_ERROR, dg->number,
          "Ошибка в автомате A_i_: неизвестный номер состояния!", 0 ) ;
      #endif
  } ;
  
  // Проверка изменения текущего состояния автомата
  if( y_old == dg->y_i_ ) goto A_i__end ;  
  
  {
    // Протоколирование перехода в автомате
    #ifdef A_i__TRANS_LOGGING
      log_trans( "A_i_", y_old, dg->y_i_ ) ;
    #endif
  } ;
  
  switch( dg->y_i_ )
  {
    case 0:
      // Произвести активизацию вложенных в новое состояние автоматов
      // Выполнить действия в новом состоянии
    break ;

    ...

    case n:
      // Произвести активизацию вложенных в новое состояние автоматов
      // Выполнить действия в новом состоянии
    break ;
  } ;
  
  // Протоколирование завершения работы автомата
  A_i__end: ;
  #ifdef A_i__END_LOGGING
    log_end( dg, "A_i_", dg->y_i_, e ) ;
  #endif
} ;

[ << | 1 | 2 | 3 | 4 | Литература | Приложение 1 | Приложение 2 | Приложение 3 | >> ]



© 2002—2017 По техническим вопросам сайта: vl.ulyantsev@gmail.com