有限状态机(FSM)或有限状态自动机或简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

FSM状态机的组成

状态这个词有些难以定义,状态存储关于过去的信息,就是说它反映从系统开始到现在时刻的输入变化。

如CPU的标志寄存器(比如6502里的PS寄存器)或程序里的Flag。

转换指示状态变更,并且用必须满足来确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。

如CPU累加以后进位需要在CF标志位设置1,当减去一个数字以后再将CF设为0。

检测器出现的原因是为了检测是否满足从一个状态切换到另外一个状态的条件。

CPU里应该没有相对的概念,但如果要说的话可能就相当于CPU执行时的一些自检操作吧。

事件,又见事件,笼统说来,对系统重要的某件事情被称为事件。

从一个状态切换到另外一个状态被称为状态转换,而引起它的事件称为触发事件。

事件起到改变当前状态的作用,但并不是所有事件都会改变当前状态。如CPU里发生进位则是一个事件,进位被处理以后的设置CF为1是一个动作转换,动作产生的结果就是当前状态。

事件生命周期

FSM状态机与传统分支流区别

状态机处理的状态是一个或多个flag的共同结果,与传统分支流并无差异。只是状态机内的状态更注重于理解为一个整体,后者则比较随意。

状态机的生命周期

初始状态 -事件A-> (执行动作与转换为)状态A -事件B-> (执行动作与转换为)状态B -事件关闭-> (执行动作与转换为)关闭

如上所示状态机的生命周期是全自动的。

假设设计一个机器人满足下面三个条件:

那么其中当xxx时就是事件,后面部分则是动作。同时攻击,反击与休眠也是一种状态。

本文小结

对于状态机里的事件我暂时还未能理解,但是网上查到的事件都是由枚举实现的状态,但我想的事件是由多个flag组成的复杂事件,不过目前来看是没必要的。

注:因为条件限制我没有系统的学过编译原理以及语法分析等,文章属于个人见解如文章,如有错欢迎指正。