Conversão AFN para AFD Expressões Regulares Algoritmos OR em ER Conversão de ER para AFN Conversão de AFD para ER Conversão AFN → AFD Já sabemos que todo AFN tem um AFD equivalente mas como encontrá-lo? Para esse problema temos um algoritmo. Conversão AFN → AFD Algoritmo Cria-se o estado inicial do AFD com o estado inicial do AFN e os estados atingidos por transições ε. Compute para os estados criados as saídas para cada estado que faz parte dele para todas as entradas do alfabeto através da função de transição e das transições ε, una os estados resultantes e crie um novo estado. Faça isso até que não se crie mais estados novos, ou seja, o AFD está completo. Os estados finais do AFD é todo estado que possui pelo menos um estado de aceitação do AFN. Conversão AFN → AFD Exemplo AFN AFD ε 1 2 0 1,2 0 Computando δ({1,2},0) 0,1 0 3 1 0 Estado inicial que é 1 e tem transição ε para 2 1 3 2 1,2 1,2,3 Computando δ({1,2},1) 1 Conversão AFN → AFD 1 Ø 2 Ø Exemplo AFN AFD ε 1 2 0 1,2 0,1 0 3 Ø 1 1 0 1,2,3 0,1 Computando δ({1,2,3},0) 0 Conversão AFN -> AFD Exemplo AFN AFD ε 1 2 0 1,2 0 0,1 0 3 1 1 Ø 0,1 1 3 2 1,2 3 Ø 1,2,3 1,2,3 0 Computando δ({1,2,3},1) 1 Conversão AFN → AFD Exemplo AFN AFD ε 1 2 0 1,2 0 1,2,3 3 1 1 1 Ø 0,1 Ø 2 Ø 3 2,3 2,3 0,1 0 1 0 Computando δ({2,3},0) 0 Conversão AFN → AFD 2 1,2 3 Ø Exemplo AFN AFD ε 1 2 0 0 1,2 1,2 1,2,3 0,1 0 3 1 1 0 Ø 0,1 1 2,3 0 Computando δ({2,3},1) 1 Conversão AFN → AFD 2 Ø 3 2,3 Exemplo AFN AFD ε 1 2,3 2 0 0 1,2 0 1,2,3 0,1 0 3 1 1 0 Ø 0,1 Não há mais estado sem transição definida 1 2,3 1 Conversão AFN → AFD Exemplo AFN AFD ε 1 2 0 0 1,2 0 1,2,3 0,1 0 3 1 1 0 Ø 0,1 Onde houver estado de aceitação, no caso 2, também será estado de aceitação 1 2,3 1 Exercícios AFN → AFD 1. 2. Expressão Regular Definição É uma forma de definir uma Linguagem Regular como uma expressão. Definição Indutiva Base ε, Ø e os elementos do alfabeto Indução: Sejam A e B ERs A∪B também é ER. A∘B ou AB, também é. A* também é ER Expressão Regular Teoremas Toda ER gera uma LR. Toda LR tem uma ER que a reconhece univocamente. Toda ER tem um AFN equivalente Operações Regulares União A união de duas ERs, representada por A∪B Concatenação A concatenação de duas ERs, representada por A∘B ou AB Estrela A estrela de uma ER, representada por A* Conversão LR → ER Semelhante a conversão LR -> AFD só que tem que pensar na ER não mais no AFD, não há algoritmo. Exemplos L = {w| w tem tamanho par} ER= (∑ ∑)* L = {w| w só tem 0 antes de 1} ER = 0+1*, o + significa um ou mais 0+ = 00*. L = {0, 11, 0000} ER = 0 ∪11 ∪0000 L={w| w tem um único 0} ER = 1*01* Exercícios LR → ER L = {0, 11, 000} 2. L = {w| começa e termina com a letras diferentes} 3. L = {w| termina com 101 e tem 010 como subcadeia} 4. L = {w| w não tem a subcadeia 01} 1. Conversão ER → AFN Caso ER = Ø Caso ER = ε Seja ER = a, onde a é um elemento de ∑ União, Concatenação e Estrela Iguais aos algoritmos de AFN Conversão ER → AFN Exemplos Ø∪ε 1+0* Exemplos ER → AFN 1. 0(011)*∪1 2. 0+∪(01)+ 3. ∑*000∑* 4. (((00)*11)∪01)* Conversão AFD → ER Sabemos que uma LR pode ser representada por AFD, AFN e ER que são equivalentes entre si. Já podemos converter ER → AFN → AFD, só falta converter AFD → ER, para esse processo temos algoritmo. Conversão AFD → ER Algoritmo Crie um novo estado inicial e uma transição ε para o estado inicial do AFD Crie um novo estado de aceitação e crie transições ε dos estados de aceitação do AFD para este novo estado e tire as antigas aceitações, agora temos um Autômato Finito Não-Determinístico Generalizado (AFNG). Um AFNG possui ER nas transições não só uma letra. Elimine os estados do AFD um por vez até que só fique a ER do novo estado inicial até o novo estado de aceitação. Conversão AFD → ER Algoritmo Elimine os estados do AFD um por vez segundo a regra Faça isso até eliminar todos os estados do AFD Ao fim disso tudo, só temos uma transição com a ER do AFD inicial. Conversão AFD → ER Exemplo ε 0 1 0 2 ε S ε 1 0 3 0,1 1 ε 4 1 a Conversão AFD → ER Exemplo ε 0 1 0 2 ε S ε 1 0 3 0,1 1 ε 4 a 1 Cortar um estado vazio não causa alterações no autômato Conversão AFD → ER Exemplo ε 0 1 0 2 ε S ε 0 11* ε 1 11*0 4 a 1 Neste estado passa informação de 2 → 1 e de 2 → a Conversão AFD → ER Exemplo ε 1 0 ε 2 0 ε 11*∪ ε 11* S 11*0 União a Conversão AFD → ER Exemplo 00*11*0 ε 1 0 2 0 ε 00*(11*∪ ε) 11*∪ ε S a 11*0 Neste estado passa informação de 1 → 1 e de 1 → a Conversão AFD → ER Exemplo 00*11*0 ε 1 ε S (00*(11*∪ ε)) ∪ ε 00*(11*∪ ε) União a Conversão AFD → ER Exemplo 00*11*0 1 ε S (00*(11*∪ ε)) ∪ ε (00*11*0)*((00*(11*∪ ε)) ∪ ε) Neste estado passa informação de S → a a Conversão AFD → ER Exemplo S (00*11*0)*((00*(11*∪ ε)) ∪ ε) Está pronta a Expressão Regular a Exemplos AFD → ER 1. 2. Exemplo LR → AFD → ER → AFN → AFD 1. L = {w ∈ ∑ | w tem um número ímpar de 1’s} Obrigado!