关于有限状态机正确性的验证问询:含指定正则语言FSM校验
关于你的有限状态机正确性的判断建议
首先得明确:你提到的两个问题都需要你提供具体的FSM状态转移图/状态表才能准确判断正确性哦!不过先给你拆解一下目标正则表达式的逻辑,你可以先对照自己的FSM自查:
目标正则表达式的语义拆解
正则表达式 ((00)(0+1)^*)+((0+1)^*(110)) 其实是两个语言的并集,拆分来看:
- 第一部分:
(00)(0+1)^*的闭包:本质等价于00(0+1)^*,也就是所有以连续两个0开头,后面跟任意长度(包括0)的0或1的字符串——哪怕重复这个模式(比如0000),也依然属于这个范围。 - 第二部分:
(0+1)^*(110):所有以连续的110结尾的字符串,前面可以是任意长度(包括0)的0或1。
所以正确的FSM需要满足:只要字符串属于上述两部分中的任意一种,就能被接受。
自查你的FSM是否正确的关键点
你可以从这几个维度检查自己的FSM:
- 针对第一部分匹配:是否存在路径,从起始状态出发,读入两个0后进入接受状态,且后续读任意0/1都能保持在接受状态?
- 针对第二部分匹配:是否存在路径,从起始状态出发,不管前面读了多少0/1,只要最后依次读入
1->1->0,就能进入接受状态? - 边界情况验证:
- 纯
00是否被接受? - 仅
110是否被接受? - 同时满足两部分的字符串(比如
00110)是否被接受? - 只满足第二部分的字符串(比如
0110)是否被接受? - 只满足第一部分的字符串(比如
000)是否被接受?
- 纯
- 错误情况排查:像
01、11、010这类既不以00开头也不以110结尾的字符串,是否被FSM拒绝?
如果你能把你的FSM的状态转移图或者状态表贴出来,我就能帮你做更精准的判断啦!
内容的提问来源于stack exchange,提问作者Bleeeaa
相关产品推荐
相关产品推荐

