有限状态自动机(FSM):是一种表达某一状态到另一状态发生转化的数学模型。
例如:在长跑比赛开始时 我处于等待的状态下,待裁判喊 预备 时,我就会从等待状态转换到预备状态。听到裁判的枪声时,我就从预备状态转换到奔跑状态 。
这个过程就相当于有限状态自动机。
FSM的状态就是一个事件当前所处于的情况。
有限状态自动机在编程中的应用十分广泛
例如:对输入的字符进行判断 判断字符串组成的数字属于整型还是浮点型。 同时它也是词法分析的核心 可用于分析一串字符中给的组成词的含义。
因为最近在学习编译原理,所以想实现一个简单的FSM。 计划使用java语言。希望能做一个分析所输入的字符串,解析出字符串组成的字串属于什么数据类型。
准备
在编写FSM程序之前需要先画出状态转化图,在我的构想里:
1.整数是只由0~9的数字组成。
2.浮点数比整数多了一个小数点,并且小数点不能出现在数字的第一位和最后一位。
3.增加科学计数法数字,例如:1.2e2 其中用e2代替10的二次方 e的左边必须是小数,并且小数点只能出现在紧跟着第一位数字的后面。
4.可以对一行字符串进行解析。
基于上面4点,我大致画了一下状态转换图: