Шаблон функции, реализующей автомат
// Заменить ?_i_? на номер автомата.
void A_i_( int e )
{
int y_old = y_i_ ;
// Протоколирование запуска автомата.
#ifdef A_i__BEGIN_LOGGING
log_begin( ?A_i_?, y_old, e ) ;
#endif
switch( y_i_ )
{
case 0:
// Вызвать вложенные автоматы.
// Проверить условия на дугах и петлях,
// выполнить переход и действия на дуге или петле.
break ;
...
case n:
// Вызвать вложенные автоматы.
// Проверить условия на дугах и петлях,
// выполнить переход и действия на дуге или петле.
break ;
default:
#ifdef A_i__ERRORS_LOGGING
log_write( LOG_GRAPH_ERROR,
?Ошибка в автомате A_i_: неизвестный номер состояния!?,
0 ) ;
#endif
} ;
// Если состояние не изменилось,
// завершить выполнение функции.
if( y_old == y_i_ ) goto A_i__end ;
// Протоколирование перехода в автомате.
#ifdef A_i__TRANS_LOGGING
log_trans( ?A_i_?, y_old ) ;
#endif
switch( y_i_ )
{
case 0:
// Активизировать вложенные в новое состояние автоматы.
// Выполнить действия в новом состоянии.
break ;
...
case n:
// Активизировать вложенные в новое состояние автоматы.
// Выполнить действия в новом состоянии.
break ;
} ;
// Протоколирование завершения работы автомата
A_i__end: ;
#ifdef A_i__END_LOGGING
log_end( ?A_i_?, y_i_, e ) ;
#endif
} ;