240 likes | 352 Views
II – Análise léxica. DEI. Conversão de expressões regulares em autómatos finitos determinísticos mínimos Bibliografia aconselhada: Aho, Sethi e Ullman – secções 3.6, 3.7 e 3.9 Crespo – subsecções 3.1.2, 3.1.3 e 3.1.4 Appel – secção 2.4. Jorge Morais. LFA 1999/2000 - 1.
E N D
II – Análise léxica DEI • Conversão de expressões regulares em autómatos finitos determinísticos mínimos • Bibliografia aconselhada: • Aho, Sethi e Ullman – secções 3.6, 3.7 e 3.9 • Crespo – subsecções 3.1.2, 3.1.3 e 3.1.4 • Appel – secção 2.4 Jorge Morais LFA 1999/2000 - 1
Expressão regular autómato finito determinístico mínimo DEI • Conversão expressão regular autómato finito (Construção de Thompson) • Conversão autómato finito autómato finito determinístico (construção de subconjuntos) • Conversão autómato finito determinístico com estados supérfluos autómato finito determinístico mínimo Jorge Morais LFA 1999/2000 - 2
ER AF: DEI Jorge Morais LFA 1999/2000 - 3
ER AF: a DEI Jorge Morais LFA 1999/2000 - 4
ER AF: E1 + E2 DEI Jorge Morais LFA 1999/2000 - 5
ER AF: E1 E2 DEI Jorge Morais LFA 1999/2000 - 6
ER AF: E1* DEI Jorge Morais LFA 1999/2000 - 7
Propriedades do autómato final DEI • O autómato criado tem no máximo duas vezes o número de símbolos da expressão regular • Existem um estado inicial e um final sem transições • Para cada estado, ou existe uma transição com um símbolo de ou existem duas transições com Jorge Morais LFA 1999/2000 - 8
Exemplo: (0+1)*(1+000) DEI Jorge Morais LFA 1999/2000 - 9
AF AFD DEI • fecho-(s): conjunto de estados alcançáveis a partir do estado s com transições de • fecho-(T): conjunto de estados alcançáveis a partir de estados s T com transições de • mover(T,a): conjunto de estado para os quais existe uma transição a partir de estados s T com o símbolo a Jorge Morais LFA 1999/2000 - 10
Construção de subconjuntos DEI • fecho-(i) é o primeiro estado não marcado • enquanto houver estados T não marcados • marcar T • para cada símbolo a • U = fecho-(mover(T,a)) • se U não pertence ao conjunto de estados • inserir U não marcado • adicionar transição (T,a,U) Jorge Morais LFA 1999/2000 - 11
Exemplo: (0+1)*(1+000) DEI • fecho-(0) = {0,1,2,4,7,8,10} = A • fecho-(mover(A,0)) = fecho-({3,11}) = {1,2,3,4,6,7,8,10,11} • fecho-(mover(A,1)) = fecho-({5,9}) = {1,2,4,5,6,7,8,9,10,14} = C • fecho-(mover(B,0)) = fecho-({3,11,12}) = {1,2,3,4,6,7,8,10,11,12} = D • fecho-(mover(B,1)) = fecho-({5,9}) = C Jorge Morais LFA 1999/2000 - 12
Exemplo (cont.) DEI • fecho-(mover(C,0)) = fecho-({3,11}) = B • fecho-(mover(C,1)) = fecho-({5,9}) = C • fecho-(mover(D,0))=fecho-({3,11,12,13}) = {1,2,3,4,6,7,8,10,11,12,13,14} = E • fecho-(mover(D,1)) = fecho-({5,9}) = C • fecho-(mover(E,0))=fecho-({3,11,12,13}) = E • fecho-(mover(E,1)) = fecho-({5,9}) = C Jorge Morais LFA 1999/2000 - 13
Exemplo: AFD DEI Jorge Morais LFA 1999/2000 - 14
Minimizar número de estados DEI • Partição inicial do conjunto de estados S em F e F\S • Em cada partição vai-se, sucessivamente, fazer novas partições, mantendo juntos os estados que têm transições iguais entre partições • Os novos estados são: • estados iguais aos iniciais; • conjunto de estados com transições iguais entre partições. Jorge Morais LFA 1999/2000 - 15
Exemplo: (0+1)*(1+000) DEI • Partição inicial: (ABD)(CE) • Em (CE): o estado E tem a transição ((CE),0,(CE)), enquanto C tem a transição ((CE),0,(ABD)) (ABD)(C)(E) • Em (ABD): A e B têm a transição ((ABD),0,(ABD)), enquanto D tem a transição ((ABD),0,(E)) (AB)(C)(D)(E) • Em (AB): A tem a transição ((AB),0,(AB)), enquanto B tem a transição ((AB),0,(D)) (A)(B)(C)(D)(E) Jorge Morais LFA 1999/2000 - 16
Exemplo: 0*(100*)*(1+ ) DEI Jorge Morais LFA 1999/2000 - 17
Exemplo: 0*(100*)*(1+ ) DEI • fecho-(0) = {0,1,3,4,10,11,13,14,15} = A • fecho-(mover(A,0)) = fecho-({2}) = {1,2,3,4,10,11,13,14,15} = B • fecho-(mover(A,1)) = fecho-({5,12}) = {5,12,15} = C • fecho-(mover(B,0)) = fecho-({2}) = B • fecho-(mover(B,1)) = fecho-({5,12}) = C Jorge Morais LFA 1999/2000 - 18
Exemplo: 0*(100*)*(1+ ) DEI • fecho-(mover(C,0)) = fecho-({6}) = {4,6,7,9,10,11,13,14,15} = D • fecho-(mover(C,1)) = fecho-() = • fecho-(mover(D,0)) = fecho-({8}) = {4,7,8,9,10,11,13,14,15} = E • fecho-(mover(D,1)) = fecho-({5,12}) = C • fecho-(mover(E,0)) = fecho-({8}) = E • fecho-(mover(E,1)) = fecho-({5,12}) = C Jorge Morais LFA 1999/2000 - 19
Exemplo: 0*(100*)*(1+ ) DEI Jorge Morais LFA 1999/2000 - 20
Exemplo: 0*(100*)*(1+ ) DEI • Como todos os estados são finais, vamos ter inicialmente uma única partição (ABCDE) • Como C não tem transição com 1 para nenhum estado (ABDE) (C) • Em (ABDE) todos os estados têm as mesmas transições: ((ABDE),0,(ABDE)) e ((ABDE),1,(C)) não são feitas mais partições (ABDE) (C) Jorge Morais LFA 1999/2000 - 21
Exemplo: 0*(100*)*(1+ ) DEI Jorge Morais LFA 1999/2000 - 22