1BBFA09B.tmp

Animated Conversion of
Regular Expressions to C Code
On the regular expression:
((a⋅ b)|c)*
THOMPSON’S CONSTRUCTION
Convert the regular expression to an NFA.
Step 1: construct a parse tree for the expression ((a⋅ b)|c)*
giving each nested expression a unique name.
r6
r5
r3
|
r1
⋅ r2
a
b
*
r4
c
Step 2: construct NFA for r1.
1
r6
r5
r3
|
r1
⋅ r2
a
b
*
r4
c
a
2
Step 3: construct NFA for r2.
1
r6
r5
r3
|
r1
⋅ r2
a
b
*
r4
c
3
a
b
2
4
Step 4: construct NFA for r3.
1
r6
r5
r3
|
r1
⋅ r2
a
b
*
r4
c
a
2
b
4
Step 5: construct NFA for r4.
1
r6
r5
r3
|
r1
⋅ r2
a
b
*
r4
c
a
5
2
c
b
6
4
Step 6: construct NFA for r5.
r6
r5
r3
|
*
r4
𝜀
1
a
2
b
4
7
8
𝜀
r1
⋅ r2
a
b
c
𝜀
5
c
6
𝜀
Step 7: construct NFA for r6.
𝜀
1
9
𝜀
a
2
b
4
𝜀
𝜀
8
7
𝜀
5
c
𝜀
6
𝜀
𝜀
10
SUBSET CONSTRUCTION
Convert the NFA to a DFA.
Draw transition table for DFA
𝜀
NFA States
1
𝜀
𝜀
9
7
𝜀
a
2
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
DFA
State
Next State
a
b
c
Add 𝜀-closure(9) as DFA start state
𝜀
NFA States
1
𝜀
𝜀
9
7
𝜀
a
2
b
{9, 7, 1, 5, 10}
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
DFA
State
A
Next State
a
b
c
Mark state A
𝜀
1
𝜀
𝜀
9
7
𝜀
a
2
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
NFA States
DFA
State
{9, 7, 1, 5, 10}
A
Next State
a
b
c
Compute 𝜀-closure(move(A, a))
𝜀
1
a
2
𝜀
9 𝜀 7
𝜀
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
Next State
NFA States
DFA
State
a
{9, 7, 1, 5, 10}
A
B
{2}
B
b
c
Compute 𝜀-closure(move(A, b))
𝜀
1
a
2
𝜀
9 𝜀 7
𝜀
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
Next State
NFA States
DFA
State
a
b
{9, 7, 1, 5, 10}
A
B
-
{2}
B
c
Compute 𝜀-closure(move(A, c))
𝜀
1
a
2
𝜀
9 𝜀 7
𝜀
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
Next State
NFA States
DFA
State
a
b
c
{9, 7, 1, 5, 10}
A
B
-
C
{2}
B
{6, 10, 7, 1, 5}
C
Mark state B
𝜀
1
a
2
𝜀
9 𝜀 7
𝜀
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
Next State
NFA States
DFA
State
a
b
c
{9, 7, 1, 5, 10}
A
B
-
C
{2}
B
{6, 10, 7, 1, 5}
C
Compute 𝜀-closure(move(A, c))
𝜀
1
a
2
𝜀
9 𝜀 7
𝜀
b
4
𝜀
5
c
𝜀
6 𝜀
8 𝜀 10
Next State
NFA States
DFA
State
a
b
c
{9, 7, 1, 5, 10}
A
B
-
C
{2}
B
{6, 10, 7, 1, 5}
C