从NFA到DFA

例:

NFA:
从NFA到DFA_第1张图片

对应的转换表:

状态\输入 a b c
A {A,B} ∅ \emptyset ∅ \emptyset
B ∅ \emptyset {B,C} ∅ \emptyset
C ∅ \emptyset ∅ \emptyset {C,D}
D ∅ \emptyset ∅ \emptyset ∅ \emptyset

如果转成DFA,那么根据NFA的转换图,遇到字符a既可以进入B状态,也可以留在A状态,即:

在这里插入图片描述

DFA的每个状态都是一个由NFA中的状态构成的集合,即NFA状态集合的一个子集。

那状态{A,B}遇到字符a时又会进入哪个状态呢?因为状态{A,B}是状态A和状态B的并集,那么状态{A,B}遇到字符a后进入的状态就是状态A和状态B分别遇到字符a进入的状态的并集。那么就还是{A,B}

从NFA到DFA_第2张图片

同理,状态{A,B}遇到字符b的时候则会进入状态{B,c}。以此类推,最终结果为:

从NFA到DFA_第3张图片

从带有 ϵ \epsilon ϵ-边的NFA到DFA的转换

例:

NFA:

从NFA到DFA_第4张图片

转换表:

状态\输入 0 1 2
A {A,B,C} {B,C} {C}
B ∅ \emptyset {B,C} {C}
C ∅ \emptyset ∅ \emptyset {C}

结果:

从NFA到DFA_第5张图片

因为带有 ϵ \epsilon ϵ边,所以从初态A可以不用任何字符就可到达状态B或状态C。所以可以认为,初态就是状态A,B,C。剩下的做法与上面相同。

你可能感兴趣的:(编译原理)