NFA To DFA Example
NFA To DFA Example
( (a ⋅ b) | c
a
)* r 1: 1 2
r1
Step 2: construct NFA for r2.
( (a ⋅ b) | c
a
)* r 1: 1 2
r1 r2 b
r2: 3 4
Step 3: construct NFA for r3.
( (a ⋅ b) | c )*
a b
r3 r 3: 1 2 4
Step 4: construct NFA for r4.
( (a ⋅ b) | c )*
a b
r3 r4 r 3: 1 2 4
c
r4: 5 6
Step 5: construct NFA for r5.
( (a ⋅ b) | c )*
a b
r5 1 2 4
r 5: 𝜀 𝜀
7 8
𝜀 𝜀
5 c 6
Step 6: construct NFA for r5*.
𝜀
a b
1 2 4
𝜀 𝜀 𝜀 𝜀
9 7 8 10
𝜀 𝜀
5 c 6
𝜀
SUBSET CONSTRUCTION
𝜀
Add 𝜀-closure(9) as DFA start state
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A
1 2 4
𝜀 𝜀 𝜀
9 7 8 𝜀 10
𝜀
5 c
6 𝜀
𝜀
Subset construction: algorithm
𝜀
Compute 𝜀-closure(move(A, a))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B
1 2 4
{2} B
𝜀 𝜀
9 𝜀 7 8 𝜀 10
𝜀
5 c
6 𝜀
𝜀
Compute 𝜀-closure(move(A, b))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B -
1 2 4
{2} B
𝜀 𝜀
9 𝜀 7 8 𝜀 10
𝜀
5 c
6 𝜀
𝜀
Compute 𝜀-closure(move(A, c))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C
𝜀
5 c
6 𝜀
𝜀
Mark B
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C
𝜀
5 c
6 𝜀
𝜀
Compute 𝜀-closure(move(B, a))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C
𝜀
5 c
6 𝜀
𝜀
Compute 𝜀-closure(move(B, b))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C
𝜀
6 𝜀
{4,8,7,1,5,10} D
5 c
𝜀
Compute 𝜀-closure(move(B, c))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C
𝜀
6 𝜀
{4,8,7,1,5,10} D
5 c
𝜀
Mark C
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C
𝜀
6 𝜀
{4,8,7,1,5,10} D
5 c
𝜀
Compute 𝜀-closure(move(C, a))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C B
𝜀
6 𝜀
{4,8,7,1,5,10} D
5 c
𝜀
Compute 𝜀-closure(move(C, b))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C B -
𝜀
6 𝜀
{4,8,7,1,5,10} D
5 c
𝜀
Compute 𝜀-closure(move(C, c))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C B - C
𝜀
6 𝜀
{4,8,7,1,5,10} D
5 c
𝜀
Mark D
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C B - C
𝜀
6 𝜀 D
{4,8,7,1,5,10}
5 c
𝜀
Compute 𝜀-closure(move(D, a))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C B - C
𝜀
6 𝜀 D
{4,8,7,1,5,10} B
5 c
𝜀
Compute 𝜀-closure(move(D, b))
Dstates
𝜀
DFA Next State
NFA States
State a b c
a b {9,7,1,5,10} A B - C
1 2 4
{2} B - D -
𝜀 𝜀
9 𝜀 7 8 𝜀 10 {6,8,10,7,1,5} C B - C
𝜀
6 𝜀 D
{4,8,7,1,5,10} B - C
5 c
𝜀
Draw DFA