Конечный автомат, управляемый событиями

редактировать

В вычислении, конечный автомат (FSM) управляется событиями, если переход из одного состояния в другой запускается событием или сообщением . Это контрастирует с происхождением термина конечный автомат в теории синтаксического анализа, где машина описывается как потребляющая символов или токенов .

. Часто эти машины реализованы как потоки или процессы, взаимодействующие с друг друга как часть более крупного приложения. Например, телекоммуникационный протокол в большинстве случаев реализуется как конечный автомат, управляемый событиями.

Пример на C

Этот код описывает конечный автомат для очень простой автомобильной радиосистемы. По сути, это бесконечный цикл, который считывает входящие события. У конечного автомата всего 2 состояния: режим радио или режим CD. Событие - это либо смена режима с радио на CD вперед и назад, либо переход к следующему (следующая предустановка для радио или следующая дорожка для CD).

/ ********************************************* ********************** / #include / ********************* ********************************************* / перечисление typedef СОСТОЯНИЯ {ST_RADIO, ST_CD}; 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 (); / * Переключаем состояние и событие, чтобы выполнить правильный переход. * / переключатель (состояние) {case ST_RADIO: переключатель (событие) {case EVT_MODE: / * изменение состояния * / state = ST_CD; перемена; case EVT_NEXT: / * Увеличиваем номер станции * / stationNumber ++; перемена; } перемена; case ST_CD: switch (событие) {case EVT_MODE: / * Изменить состояние * / state = ST_RADIO; перемена; case EVT_NEXT: / * Перейти к следующей дорожке * / trackNumber ++; перемена; } перемена; }}}
См. Также
Дополнительная литература
  • Питман, Джон Б. (1977). Дизайн на базе микрокомпьютера. Нью-Йорк: McGraw-Hill, Inc. ISBN 0-07-049138-0.
  • Brookshear, J. Glenn (1989). Теория вычислений: формальные языки, автоматы и сложность. Редвуд-Сити, Калифорния: Benjamin / Cummings Publish Company, Inc. ISBN 0-8053-0143-7.
Последняя правка сделана 2021-05-19 08:35:26
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте