Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В вычислении , А конечный автомат (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.