이벤트 구동 유한 상태 기계
Event-driven finite-state machine계산에서, 한 상태에서 다른 상태로의 전환이 사건이나 메시지에 의해 촉발되는 경우 유한 상태 기계(FSM)는 사건을 구동한다.이는 기계가 문자나 토큰을 소비하는 것으로 묘사되는 유한 상태 기계라는 용어의 파싱 이론적 기원과는 대조적이다.
종종 이러한 기계들은 더 큰 애플리케이션의 일부로 서로 통신하는 스레드나 프로세스로 구현된다.예를 들어, 통신 프로토콜은 대부분 사건 주도형 유한 상태 기계로서 구현된다.
C의 예
이 코드는 매우 기본적인 자동차 라디오 시스템을 위한 주 기계를 설명한다.기본적으로 들어오는 사건을 읽는 무한 루프다.상태 기계는 라디오 모드 또는 CD 모드 중 두 가지 상태일 뿐이다.이벤트는 라디오에서 CD로 앞뒤로 모드를 변경하거나 다음(라디오의 다음 사전 설정 또는 CD의 다음 트랙)으로 이동한다.
/********************************************************************/ #include <stdio.h> /********************************************************************/ 타이피프 열거하다 { ST_라디오, ST_CD } 미국.; 타이피프 열거하다 { EVT_MODE, EVT_NEXT } 이벤트; 이벤트 readEventFromMessageQueue(공허하게 하다); /********************************************************************/ 인트로 본래의(공허하게 하다) { /* 기본 상태는 라디오 */ 미국. 주 = ST_라디오; 인트로 스테이션 번호 = 0; 인트로 트랙 번호 = 0; /* 무한 루프 */ 하는 동안에 (1) { /* 다음 수신 이벤트를 읽으십시오.보통 이것은 차단 기능이다.*/ 이벤트 사건 = readEventFromMessageQueue(); /* 상태와 이벤트를 전환하여 올바른 전환을 실행하십시오.*/ 바꾸다 (주) { 케이스 ST_라디오: 바꾸다 (사건) { 케이스 EVT_MODE: /* 상태 변경 */ 주 = ST_CD; 부숴뜨리다; 케이스 EVT_NEXT: /* 스테이션 번호 증가 */ 스테이션 번호++; 부숴뜨리다; } 부숴뜨리다; 케이스 ST_CD: 바꾸다 (사건) { 케이스 EVT_MODE: /* 상태 변경 */ 주 = ST_라디오; 부숴뜨리다; 케이스 EVT_NEXT: /* 다음 트랙으로 이동 */ 트랙 번호++; 부숴뜨리다; } 부숴뜨리다; } } } 참고 항목
추가 읽기
- Peatman, John B. (1977). Microcomputer-based Design. New York: McGraw-Hill, Inc. ISBN 0-07-049138-0.
- Brookshear, J. Glenn (1989). Theory of Computation: Formal Languages, Automata, and Complexity. Redwood City, California: Benjamin/Cummings Publish Company, Inc. ISBN 0-8053-0143-7.