Baixe o app para aproveitar ainda mais
Prévia do material em texto
PROPRIEDADES DAS LINGUAGENS LIVRES DE CONTEXTO II Marcelo Guerra FORMA NORMAL DE CHOMSKY Toda linguagem não vazia e sem e tem uma gramática G em que todas as produções tem uma das seguintes formas: 1. A → BC, onde todos os símbolos são variáveis. 2. A → a, onde ‘A’ é uma variável e ‘a’ um terminal. Além disso, G não tem símbolos inúteis. Dizemos, então, que tal gramática está na Forma Normal de Chomsky (FNC). FORMA NORMAL DE CHOMSKY Chomsky é o linguista que primeiro propôs as GLC como forma de descrever linguagens naturais. Provou que toda GLC poderia ser convertida para Forma Normal de Chomsky (CNF). CNF apresenta vários usos: Teste eficiente da pertinência de um string a uma LLC FORMA NORMAL DE CHOMSKY Para converter uma gramática para a FNC A gramática deve satisfazer as condições: Não tem produções unitárias; Não possui ε-produções; Nem símbolos inúteis. Toda produção terá a forma A → a, já permitida pela FNC ou terá um corpo de comprimento 2 ou mais. A. Organizar todos os corpos de comprimento 2 ou mais para que consistam apenas em variáveis. B. Desmembrar os corpos de comprimento 3 ou mais em uma cascata de produções, cada uma com um corpo que tem duas variáveis. FORMA NORMAL DE CHOMSKY A construção da etapa (A) é dada por: Para todo terminal a que aparecer em um corpo de comprimento 2 ou mais, crie uma nova variável A Essa variável terá apenas a produção A → a Usamos, então, A no lugar de a, em todos os corpos de comprimento 2 das produções onde a aparecer Nesse ponto, toda produção terá um corpo que será um único terminal ou pelo menos duas variáveis e nenhum terminal. FORMA NORMAL DE CHOMSKY Para a etapa (B), devemos desmembrar as produções A → B1B2...Bk para k 3 em um grupo de produções com duas variáveis no corpo. Introduzimos k-2 novas variáveis, C1, C2,..., Ck-2 A produção original é trocada pelas k-1 produções A → B1C1 C1 → B2C2 ... Ck-3 → Bk-2Ck-2 Ck-2 → Bk-1Bk EXEMPLO Converter a gramática abaixo para a FNC: E → E + T E → T * F E → (E) E → a | b | Ia | Ib | I0 | I1 T → T * F T → (E) T → a | b | Ia | Ib | I0 | I1 F → (E) F → a | b | Ia | Ib | I0 | I1 I → a | b | Ia | Ib | I0 | I1 EXEMPLO Existem oito terminais que não aparecem sozinhos no corpo de uma produção. Criamos oito variáveis novas e oito produções onde cada variável é substituída por seu terminal A → a B → b Z → 0 O → 1 P → + M → * L → ( R → ) EXEMPLO Se introduzirmos essas produções e substituirmos todo terminal em um corpo que seja diferente de um único terminal pela variável correspondente, obtemos: E → EPT| TMF | LER| a | b | IA | IB |IZ | IO T → TMF | LER| a | b | IA | IB |IZ | IO F → LER| a | b | IA | IB |IZ | IO I → a | b | IA | IB |IZ | IO A → a B → b Z → 0 O → 1 P → + M → * L → ( R → ) EXEMPLO Agora, todas as produções estão na FNC exceto aquelas com tamanho 3: EPT, TMF e LER Esses corpos aparecem em mais de uma produção podemos lidar com um corpo de cada vez, introduzindo uma variável extra para cada um deles Para EPT, introduzimos C1 e substituímos a única produção E → EPT por E → EC1 C1 → PT EXEMPLO Para TMF, introduzimos a nova variável C2 T → TC2 C2 → MF As duas produções que usam esse corpo E → TMF e T → TMF são substituídas por: E → TC2 T → TC2 C2 → MF O mesmo deve ser feito para LER. Ex: F → LER F → LC3 C3 → ER EXEMPLO E → EC1| TC2 | LC3| a | b | IA | IB |IZ | IO T → TC2 | LC3| a | b | IA | IB |IZ | IO F → LC3| a | b | IA | IB |IZ | IO I → a | b | IA | IB |IZ | IO A → a B → b Z → 0 O → 1 P → + M → * L → ( R → ) C1 → PT C2 → MF C3 → ER O resultado final da gramática na FNC é : TEOREMA 7.16 Se G é uma GLC cuja linguagem contém pelo menos um string diferente de ε, então existe uma gramática G1 na FNC tal que L(G1) = L(G) – {ε} EXERCÍCIO 7.1.2 S -> ASB | ε A -> aAS | a B -> SbS | A | bb a) Elimine as produções vazias b) Elimine as produções unitárias da gramática resultante. c) Elimine os símbolos inúteis da gramática resultante. d) Coloque a gramática resultante na forma normal de Chomsky.
Compartilhar