В вычислении , А конечный автомат (FSM) являются управляемыми событиями , если переход из одного состояния в другой инициируются посредством события или сообщения . Это контрастирует с происхождением термина конечный автомат в теории синтаксического анализа, где машина описывается как потребляющие символы или токены .
Часто эти машины реализуются как потоки или процессы, взаимодействующие друг с другом как часть более крупного приложения. Например, телекоммуникационный протокол в большинстве случаев реализуется как конечный автомат, управляемый событиями.
Пример на C [ править ]
Этот код описывает конечный автомат для очень простой автомобильной радиосистемы. По сути, это бесконечный цикл, который читает входящие события. У конечного автомата всего 2 состояния: режим радио или режим CD. Событие представляет собой либо смену режима с радио на CD вперед и назад, либо переход к следующему (следующая предустановка для радио или следующая дорожка для CD).
/ *********************************************** ******************* / #include <stdio.h>/ *********************************************** ******************* / typedef enum { ST_RADIO , ST_CD } STATES ;typedef enum { EVT_MODE , EVT_NEXT } СОБЫТИЯ ;СОБЫТИЯ readEventFromMessageQueue ( void );/ *********************************************** ******************* / int main ( void ) { / * Состояние по умолчанию - радио * / STATES state = ST_RADIO ; int stationNumber = 0 ; int trackNumber = 0 ; / * Бесконечный цикл * / while ( 1 ) { / * Прочитать следующее входящее событие. Обычно это функция блокировки. * / СОБЫТИЯ event = readEventFromMessageQueue (); / * Переключаем состояние и событие, чтобы выполнить правильный переход. * / switch ( состояние ) { case ST_RADIO : switch ( событие ) { case EVT_MODE : / * изменить состояние * / state = ST_CD ; перерыв ; case EVT_NEXT : / * Увеличиваем номер станции * / stationNumber ++ ; перерыв ; } перерыв ; case ST_CD : переключатель ( событие ) { case EVT_MODE : / * Изменить состояние * / state = ST_RADIO ; перерыв ; case EVT_NEXT : / * Перейти к следующей дорожке * / trackNumber ++ ; перерыв ; } перерыв ; } } }
См. Также [ править ]
Дальнейшее чтение [ править ]
- Питман, Джон Б. (1977). Дизайн на базе микрокомпьютера . Нью-Йорк: ISBN McGraw-Hill, Inc. 0-07-049138-0.
- Брукшир, Дж. Гленн (1989). Теория вычислений: формальные языки, автоматы и сложность . Редвуд-Сити, Калифорния: ISBN Benjamin / Cummings Publish Company, Inc. 0-8053-0143-7.