Конечный автомат, управляемый событиями - Event-driven finite-state machine

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

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

Пример на C

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

/********************************************************************/#включают <stdio.h>/********************************************************************/typedef перечислить {        ST_RADIO,        ST_CD} СОСТОЯНИЯ;typedef перечислить {        EVT_MODE,        EVT_NEXT} СОБЫТИЯ;СОБЫТИЯ readEventFromMessageQueue(пустота);/********************************************************************/int основной(пустота){  / * Состояние по умолчанию - радио * /    СОСТОЯНИЯ штат = ST_RADIO;  int stationNumber = 0;  int номер дорожки = 0;  /* Бесконечный цикл */  в то время как (1)  {    / * Прочитать следующее входящее событие. Обычно это функция блокировки. * /    СОБЫТИЯ мероприятие = readEventFromMessageQueue();    / * Переключаем состояние и событие, чтобы выполнить правильный переход. * /    переключатель (штат)    {      кейс ST_RADIO:        переключатель (мероприятие)        {          кейс EVT_MODE:            / * Изменить состояние * /            штат = ST_CD;            перемена;          кейс EVT_NEXT:            / * Увеличиваем номер станции * /            stationNumber++;            перемена;        }        перемена;      кейс ST_CD:        переключатель (мероприятие)        {          кейс EVT_MODE:            / * Изменить состояние * /            штат = ST_RADIO;            перемена;          кейс EVT_NEXT:            / * Перейти к следующему треку * /            номер дорожки++;            перемена;        }        перемена;    }  }}

Смотрите также

дальнейшее чтение

  • Питман, Джон Б. (1977). Дизайн на базе микрокомпьютера. Нью-Йорк: McGraw-Hill, Inc. ISBN  0-07-049138-0.
  • Брукшир, Дж. Гленн (1989). Теория вычислений: формальные языки, автоматы и сложность. Редвуд-Сити, Калифорния: Benjamin / Cummings Publish Company, Inc. ISBN  0-8053-0143-7.