CSE443 Compilers Dr. Carl Alphonce alphonce@buffalo.edu 343 Davis Hall http:/ /www.cse.buffalo.edu/faculty/alphonce/SP17 /CSE443/index.php https:/ /piazza.com/class/iybn4ndqa1s3ei
Lexical Phases of structure a compiler Figure 1.6, page 5 of text
Process of building lexical analyzer 5) The minimal DFA is character our lexical analyzer stream language regex NFA DFA DFA token stream lexical analyzer
Focus last time regex NFA
focus today NFA DFA
(a|b) * abb first we construct an NFA from this regular expression
(a|b) * abb a
(a|b) * abb a b
(a|b) * abb a ℇ ℇ b ℇ ℇ
(a|b) * abb ℇ a ℇ ℇ ℇ ℇ ℇ b ℇ ℇ
(a|b) * abb ℇ a ℇ ℇ a ℇ ℇ ℇ b ℇ ℇ
(a|b) * abb ℇ a ℇ ℇ a ℇ ℇ ℇ b ℇ ℇ
(a|b) * abb ℇ a ℇ ℇ a b ℇ ℇ ℇ b ℇ ℇ
(a|b) * abb ℇ a ℇ ℇ a b b ℇ ℇ ℇ b ℇ ℇ
(a|b) * abb ℇ a 2 3 ℇ ℇ a b b ℇ 0 1 6 8 7 9 10 ℇ ℇ b ℇ ℇ 4 5
Operations ℇ -closure(t) is the set of states reachable from state t using only ℇ -transitions. ℇ -closure(T) is the set of states reachable from any state t ∈ T using only ℇ -transitions. move(T,a) is the set of states reachable from any state t ∈ T following a transition on symbol a ∈ ∑ .
NFA -> DFA algorithm (set of states construction - page 153 of text) INPUT: An NFA N = (S, ∑ , 𝛆 , s 0 , F) OUTPUT: A DFA D = (S', ∑ , 𝛆 ', s 0 ', F') such that ℒ (D)= ℒ (N) ALGORITHM: Compute s 0 ' = ℇ -closure(s 0 ), an unmarked set of states Set S' = { s 0 ' } while there is an unmarked T ∈ S' mark T for each symbol a ∈ ∑ let U = ℇ -closure(move(T,a)) if U ∉ S', add unmarked U to S' add transition: 𝛆 '(T,a) = U F' is the subset of S' all of whose members contain a state in F .
NFA -> DFA algorithm (set of states construction - page 153 of text) S 0 ' = { A = {0,1,2,4,7} } Pick an unmarked set from S 0 ', A, mark it, and ∀ x ∈ ∑ let U = ℇ -closure(move(A,x)), if U ∉ S', add unmarked U to S' and add transition: 𝛆 '(A,x) = U S 1 ' = { A ✔ , B = {1,2,3,4,6,7,8} , C = {1,2,4,5,6,7}} 𝛆 '(A,a) = B 𝛆 '(A,b) = C Pick an unmarked set from S 1 ', B, mark it, and ∀ x ∈ ∑ let U = ℇ -closure(move(B,x)), if U ∉ S', add unmarked U to S' and add transition: 𝛆 '(B,x) = U S 2 ' = { A ✔ , B ✔ , C , D = {1,2,4,5,6,7,9}} 𝛆 '(B,a) = B 𝛆 '(B,b) = D Pick an unmarked set from S 2 ', C, mark it, and ∀ x ∈ ∑ let U = ℇ -closure(move(C,x)), if U ∉ S', add unmarked U to S' and add transition: 𝛆 '(C,x) = U S 3 ' = { A ✔ , B ✔ , C ✔ , D } 𝛆 '(C,a) = B 𝛆 '(C,b) = C
NFA -> DFA algorithm (set of states construction - page 153 of text) Pick an unmarked set from S 3 ', D, mark it, and ∀ x ∈ ∑ let U = ℇ -closure(move(D,x)), if U ∉ S', add unmarked U to S' and add transition: 𝛆 '(D,x) = U S 4 ' = { A ✔ , B ✔ , C ✔ , D ✔ , E = {1,2,4,5,6,7,10} } 𝛆 '(D,a) = B 𝛆 '(D,b) = E Pick an unmarked set from S 4 ', E, mark it, and ∀ a ∈ ∑ let U = ℇ -closure(move(E,a)), if U ∉ S', add unmarked U to S' and add transition: 𝛆 '(E,a) = U S 5 ' = { A ✔ , B ✔ , C ✔ , D ✔ , E ✔ } 𝛆 '(E,a) = B 𝛆 '(E,b) = C Since there are no unmarked sets S 5 ' the algorithm has reached a fixed point. STOP. F' is the subset of S' all of whose members contain a state in F: {E}
The resulting DFA DFA = ( {A, B, C, D, E}, {a, b}, A, 𝛆 ', {E}), where b 𝛆 '(A,a) = B 𝛆 '(A,b) = C b C 𝛆 '(B,a) = B 𝛆 '(B,b) = D b a a 𝛆 '(C,a) = B b b 𝛆 '(C,b) = C A B D E 𝛆 '(D,a) = B a 𝛆 '(D,b) = E a a 𝛆 '(E,a) = B 𝛆 '(E,b) = C
Recommend
More recommend