Formas Normais de Gramáticas Livres de Contexto 1 Forma Normal de Chomsky Todas as produções têm a forma: A BC variável e variável Aa terminal 2 Exemplos: S AS S a S AS S AAS A SA Ab A SA A aa Forma Normal de Chomsky Não Forma Normal de Chomsky 3 Conversão para Forma Normal de Chomsky Exemplo: S ABa A aab B Ac Não Forma Normal de Chomsky 4 Introduza variáveis para terminais: Ta , Tb , Tc S ABTa S ABa A aab B Ac A TaTaTb B ATc Ta a Tb b Tc c 5 Introduza variável intermediária: V1 S ABTa A TaTaTb B ATc Ta a Tb b Tc c S AV1 V1 BTa A TaTaTb B ATc Ta a Tb b Tc c 6 Introduza variável intermediária: S AV1 V1 BTa A TaTaTb B ATc Ta a Tb b Tc c V2 S AV1 V1 BTa A TaV2 V2 TaTb B ATc Ta a Tb b Tc c 7 Gramática Final na Forma Normal de Chomsky: S AV1 V1 BTa Gramática inicial S ABa A aab B Ac A TaV2 V2 TaTb B ATc Ta a Tb b Tc c 8 Em geral: De qualquer gramática livre de contexto que não esteja na Forma Normal de Chomsky podemos obter: Uma gramática equivalente na Forma Normal de Chomsky 9 O Procedimento Primeiro remova: Variáveis nulas Produções Unitárias Variáveis inatingíveis 10 Para cada símbolo a: Adicione a produção Ta a Nas produções: substitua Nova variável: a por Ta Ta 11 Substitua toda produção A C1C2 Cn por A C1V1 V1 C2V2 Vn2 Cn1Cn Novas variáveis intermediárias: V1, V2 , ,Vn2 12 Teorema: Para toda gramática livre de contexto existe uma gramática equivalente na Forma Normal de Chomsky 13 Observações • Formas normais de Chomsky são boas para parsing e para a prova de teoremas • É muito fácil encontrar a Forma Normal de Chomsky para qualquer gramática livre de contexto 14 Forma Normal de Greinbach Todas as produções têm a forma: A a V1V2 Vk terminal k 0 variáveis 15 Exemplos: S cAB A aA | bB | b Bb Forma Normal de Greinbach S abSb S aa Não Forma Normal de Greinbach 16 Conversão para a Forma Normal de Greinbach: S abSb S aa S aTb STb S aTa Ta a Tb b Forma Normal de Greinbach 17 Teorema: Para qualquer gramática livre de contexto existe uma gramática equivalente na Forma Normal de Greinbach 18 Observações • Formas normais de Greinbach são muito boas para parsing • É difícil obter a Forma Normal de Greinbach para qualquer gramática livre de contexto 19 Uma Aplicação de Forma Normal de Chomsky 20 O Algoritmo CYK Entrada: • Gramática G na Forma Normal de Chomsky • String w Saída: se w L(G ) ou não 21 Algoritmo CKY Exemplo de entrada: • Gramática G: S AB A BB Aa B AB Bb • String w : aabbb 22 aabbb a a b b aa ab bb bb aab abb bbb aabb abbb b aabbb 23 S AB A BB Aa B AB Bb a A a A b B b B aa ab bb bb aab abb bbb aabb abbb aabbb b B 24 S AB A BB Aa B AB Bb a A a A b B b B aa bb A bbb bb A aab ab S,B abb aabb abbb aabbb b B 25 S AB A BB Aa B AB Bb a A a A b B b B aa bb A bbb S,B bb A aab S,B ab S,B abb A aabb A abbb S,B aabbb S,B b B 26 Portanto: aabbb L(G) Complexidade deTempo : 3 | w| Observação: O algoritmo CYK pode ser facilmente convertido em um parser 27 Autômatos de Pilha PDAs 28 Autômato de Pilha -- PDA String de entrada Pilha Estados 29 Símbolo Marcador de Fundo de Pilha Pilha Pilha $ z fundo de pilha símbolo especial 30 Os Estados Símbolo na entrada Símbolo desempilhado Símbolo empilhado a, b ® c q1 q2 31 q1 a, b ® c q2 entrada a a pilha b h e $ topo Substitua c h e $ 32 q1 a, l ® c q2 entrada a pilha b h e $ topo a Push c b h e $ 33 q1 a, b ® l q2 entrada a a pilha b h e $ topo Pop h e $ 34 q1 a, l ® l q2 entrada a a pilha b h e $ topo Não Muda b h e $ 35 Não Determinismo a, b ® c q2 q1 a, b ® c q1 q3 l, b ® c q2 l - transição 36 NPDA: PDA Não Determinista Exemplo: a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 37 Exemplo de Execução: Instante 0 Entrada a a a b b b Pilha estado corrente q0 a, l ® a b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 38 Instante 1 Entrada a a a b b b $ Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 39 Instante 2 Entrada a a a b b b a $ Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 40 Instante 3 Input a a $ a a a b b b Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 41 Time 4 Entrada a a a b b b a a a $ Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 42 Instante 5 Entrada a a a b b b a a a $ Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 43 Instante 6 Entrada a a $ a a a b b b Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 44 Instante 7 Entrada a $ a a a b b b Pilha a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 45 Instante 8 Entrada a a a b b b Pilha a, l ® a b, a ® l aceita q0 l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 46 Um string é aceito se: • Toda a entrada é consumida • O último estado é um estado final Neste exemplo, a pilha está vazia no final. 47 O string de entrada é aceito pelo NPDA: a, l ® a q0 aaabbb b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 48 Em geral, L {a b : n 0} n n é a linguagem aceita pelo NPDA: a, l ® a q0 b, a ® l l, l ® $ q b, a ® l q l, $ ® l q 3 2 1 49 Autômato de Pilha - convenções • Adotamos a convenção de que um autômato de pilha M aceita um string w se algum caminho de computação de w em M, iniciando no estado inicial, com a pilha vazia, termina em um estado final (possivelmente com a pilha vazia). • Todo autômato começa com a pilha contendo apenas o marcador de fundo de pilha. Se toda transição que leva a um estado final desempilha esse marcador, garante-se que a computação termina c/ pilha vazia. 50 Outro Exemplo de NPDA NPDA M L( M ) {ww } R a, a b, b q0 a, a b, b l, l ® l q1 l, $ ® $ q 2 51 Exemplo de Execução: Instante 0 Entrada a b b a $ a, a b, b q0 l, l ® l a, a b, b q1 Pilha l, $ ® $ q 2 52 Instante 1 Entrada a b b a a, a b, b q0 l, l ® l a $ a, a b, b q1 Pilha l, $ ® $ q 2 53 Instante 2 Entrada b a $ a b b a a, a b, b q0 l, l ® l a, a b, b q1 Pilha l, $ ® $ q 2 54 Instante 3 Entrada b a $ a b b a a, a b, b q0 l, l ® l a, a b, b q1 Pilha l, $ ® $ q 2 55 Instante 4 Entrada b a $ a b b a a, a b, b q0 l, l ® l a, a b, b q1 Stack l, $ ® $ q 2 56 Instante 5 Entrada a b b a a, a b, b q0 l, l ® l a $ a, a b, b q1 Pilha l, $ ® $ q 2 57 Instante 6 Entrada a b b a $ a, a b, b q0 l, l ® l a, a b, b Pilha aceita q1 l, $ ® l l, $ ® $ q 2 58