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
© Copyright 2025 Paperzz