我的问题是,state3也可以命名为state2,或者一般来说。为什么我们可以命名具有相同名称的州。
对于表达式ab+a*a
第一个州采取'a'。
然后它会转到state2 / state3。
答案 0 :(得分:2)
有限状态机被定义为包含(除此之外)状态的集,因此有意义地对每个状态进行唯一标识。国家的命名与他们可能被命中的命令毫无关系。
FSM涉及一个周期并不罕见。一个例子是FSM接受偶数个0的二进制字符串,由下面的状态表表示:
Input --> | 0 | 1 | \/--State | | | ----------|--------|--------| state0 | state1 | state0 | state1 | state0 | state1 | States: {state0, state1} Start state: state0 Accepting states: {state0}
在这种情况下,机器可能会从state0
移动到state1
并多次返回。如果我们每次都必须有一个新的状态,那么机器的复杂性会爆炸到无穷大。
答案 1 :(得分:1)
如果状态没有区别,那么它们首先不应该是两个独立的状态
您的特定示例没有任何or
,因此您的正则表达式永远不会使用像这样分支的DFA。
但是,假设你有像
这样的正则表达式 a(bb | cc)
,可以匹配abb
或acc
ab
和ac
是不同的状态,它们必须彼此区分,并且它们的输出会得出不同的结论。
如果你在ab
并且你得到c
而不是你必须回到起点,但如果你在州ac
并得到{{1}而不是你前往c
并完成。