ii – análise léxica conversão de expressões regulares em autómatos finitos determinísticos...
TRANSCRIPT
II – Análise léxica
• 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
LFA 1999/2000 - 1Jorge Morais
Expressão regular autómato finito determinístico mínimo
• 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
LFA 1999/2000 - 2Jorge Morais
ER AF:
LFA 1999/2000 - 3Jorge Morais
ER AF: a
LFA 1999/2000 - 4Jorge Morais
ER AF: E1 + E2
LFA 1999/2000 - 5Jorge Morais
ER AF: E1 E2
LFA 1999/2000 - 6Jorge Morais
ER AF: E1*
LFA 1999/2000 - 7Jorge Morais
Propriedades do autómato final
• 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
LFA 1999/2000 - 8Jorge Morais
Exemplo: (0+1)*(1+000)
LFA 1999/2000 - 9Jorge Morais
AF AFD
• 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
LFA 1999/2000 - 10Jorge Morais
Construção de subconjuntos
• 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)
LFA 1999/2000 - 11Jorge Morais
Exemplo: (0+1)*(1+000)
• 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
LFA 1999/2000 - 12Jorge Morais
Exemplo (cont.)
• 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
LFA 1999/2000 - 13Jorge Morais
Exemplo: AFD
LFA 1999/2000 - 14Jorge Morais
Minimizar número de estados
• 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.
LFA 1999/2000 - 15Jorge Morais
Exemplo: (0+1)*(1+000)
• 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)
LFA 1999/2000 - 16Jorge Morais
Exemplo: 0*(100*)*(1+ )
LFA 1999/2000 - 17Jorge Morais
Exemplo: 0*(100*)*(1+ )
• 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
LFA 1999/2000 - 18Jorge Morais
Exemplo: 0*(100*)*(1+ )
• 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
LFA 1999/2000 - 19Jorge Morais
Exemplo: 0*(100*)*(1+ )
LFA 1999/2000 - 20Jorge Morais
Exemplo: 0*(100*)*(1+ )
• 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)
LFA 1999/2000 - 21Jorge Morais
Exemplo: 0*(100*)*(1+ )
LFA 1999/2000 - 22Jorge Morais