Gramática Livre de Contexto Prof. Yandre Maldonado - 1 Árvore de derivação Ambigüidade Simplificação de Gramática Forma Normal de Chomsky (FNC) Forma Normal de Greibach (FNG) Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br
Árvore de Derivação Prof. Yandre Maldonado - 2 Uma maneira de representar a derivação de uma sentença a partir de uma GLC; Particularmente útil em algumas aplicações, como compiladores; Em uma árvore de derivação: A raiz é o símbolo de partida da GLC; Os nós internos são símbolos de V; Os nós folha são símbolos de T (ou λ);
Árvore de Derivação Prof. Yandre Maldonado - 3 Exemplo: árvore de derivação para a sentença x+x*x a partir da seguinte GLC; 1) E E+E 2) E E*E 3) E (E) 4) E x 1 4 2 4 4 E E+E x+e x+e*e x+x*e x+x*x E x E + E x E * E x
Ambigüidade Prof. Yandre Maldonado - 4 Uma sentença é dita ambígua, quando existir pelo menos dois caminhos de derivação para ela; Assim, existe mais do que uma árvore de derivação associada a uma sentença ambígua; Uma gramática é dita ambígua, se ela produzir pelo menos uma sentença de forma ambígua;
Ambigüidade 1) E E+E 2) E E*E 3) E (E) 4) E x Exemplo: dois caminhos para x+x*x E E E + E E * E Prof. Yandre Maldonado - 5 x E x * E x 1 4 2 4 4 E E+E x+e x+e*e x+x*e x+x*x E x + E x 2 1 4 4 4 E E*E E+E*E x+e*e x+x*e x+x*x x
Simplificação de GLC Prof. Yandre Maldonado - 6 É possível simplificar algumas produções de uma GLC sem reduzir o seu poder de geração; Tipos de simplificação: Exclusão de símbolos inúteis; Exclusão de produções vazias; Exclusão de produções da forma A B;
Simplificação de GLC Exclusão de símbolos inúteis: Prof. Yandre Maldonado - 7 Variáveis (não-terminais) ou terminais que não contribuem com a produção de sentenças; Etapas: Exclusão de símbolos improdutivos; Exclusão de símbolos inacessíveis;
Simplificação de GLC Exclusão de símbolos inúteis: Prof. Yandre Maldonado - 8 É importante por vários motivos Em gramáticas grandes, como gramáticas de linguagens de programação, pode acontecer de se esquecer de definir regras relativas a alguma variável, ou então, uma variável, apesar de ter suas regras já definidas, pode não ter sido utilizada na formação de novas regras.
Simplificação de GLC EXEMPLO: Seja a Gramática ({S, A, B, C}, {a, b, c}, P,S} onde P contém as regras: Prof. Yandre Maldonado - 9 1) S AB a 2) B b 3) C c 1) S a C é inútil (não é acessível) A é inútil (não está definido) B é inútil (não usado em palavras da linguagem) Eliminando-se as variáveis inúteis e as regras que as referenciam, além dos terminais b e c que não ocorrem em nenhuma regra (não são usados para formar palavras da linguagem gerada) tem-se esta regra A Gramática equivalente é dada por ({S}, {a}, S a, S}
Simplificação de GLC Etapa 1: garante que qualquer não terminal gera terminais; Algoritmo: parte de G(V,T,P,S) e dá origem a G 1 (V 1,T,P 1,S); Construção de V 1 : Prof. Yandre Maldonado - 10 V 1 = repita V 1 = V 1 {A A α e α ϵ (T V 1 ) * } até que o cardinal de V 1 não aumente; Conjunto P 1 : P menos as produções cujos não terminais não pertencem a V 1 ;
Simplificação de GLC Prof. Yandre Maldonado - 11 Qqr não terminal gera terminal Exemplo: 1) S aaa 2) S bbb 3) A a 4) A S 5) C c 6) B bb 1) S aaa 2) A a 3) A S 4) C c V 1 = repita V 1 = V 1 {A A α e α ϵ (T V 1 ) * } até que o cardinal de V 1 não aumente; iteração início 1 2 3 V 1 {A, C} {A, C, S} {A, C, S}
Simplificação de GLC Etapa 2: garante que qualquer símbolo é atingível a partir do símbolo inicial; Algoritmo: parte de G 1 (V 1,T 1,P 1,S) e dá origem a G 2 (V 2,T 2,P 2,S); Prof. Yandre Maldonado - 12 T 2 = ; V 2 = {S}; repita V 2 = V 2 {A X αaβ ϵ P 1, X ϵ V 2 }; T 2 = T 2 {a X αaβ ϵ P 1, X ϵ V 2 }; até que os cardinais de V 2 e T 2 não aumentem; Conjunto P 2 : P 1 menos as produções cujos símbolos não pertencem a V 2 ou T 2 ;
Simplificação de GLC Prof. Yandre Maldonado - 13 Exemplo: 1) S aaa 2) A a 3) A S 4) C c 1) S aaa 2) A a 3) A S T 2 = ; V 2 = {S}; repita V 2 = V 2 {A X αaβ ϵ P 1, X ϵ V 2 }; T 2 = T 2 {a X αaβ ϵ P 1, X ϵ V 2 }; até que os cardinais de V 2 e T 2 não aumentem; iteração início 1 2 variáveis {S} {S, A} {S, A} terminais {a} {a}
Simplificação de GLC Exclusão de produções vazias: Prof. Yandre Maldonado - 14 Produções vazias são produções da forma A λ; Etapas: Variáveis que constituem produções vazias; Exclusão das produções vazias; Inclusão da geração da palavra vazia, se necessário;
Simplificação de GLC Prof. Yandre Maldonado - 15 Etapa 1: conjunto de variáveis que constituem produções vazias; Considera inicialmente todas as variáveis que geram diretamente λ; A seguir, sucessivamente são determinadas as variáveis que indiretamente geram λ; Algoritmo: V λ = { A A λ }; repita V λ = V λ { X X X 1 X n ϵ P X 1,, X n ϵ V λ } até que o cardinal de V λ não aumente;
Simplificação de GLC Prof. Yandre Maldonado - 16 Exemplo: 1) S axa 2) S bxb 3) S λ 4) X a 5) X b 6) X Y 7) Y λ V λ = { A A λ }; repita V λ = V λ { X X X 1 X n ϵ P X 1,, X n ϵ V λ } até que o cardinal de V λ não aumente; iteração início 1 2 V λ {S, Y} {S, Y, X} {S, Y, X}
Simplificação de GLC Etapa 2: conjunto de produções sem produções vazias; Algoritmo: parte de G(V,T,P,S) e dá origem a G 1 (V,T,P 1,S); Prof. Yandre Maldonado - 17 P 1 = {A α α λ}; repita até para toda A αϵp 1 e X ϵ V λ α =α 1 Xα 2 e α 1 α 2 λ faca P 1 = P 1 { A α1α2 } que o cardinal de P 1 não aumente;
Simplificação de GLC Prof. Yandre Maldonado - 18 Exemplo: 1) S axa 2) S bxb 3) S λ 4) X a 5) X b 6) X Y 7) Y λ 1) S axa 2) S bxb 3) S aa 4) S bb 5) X a 6) X b 7) X Y Resultado da etapa 1: V λ = {S, Y, X} iteração inicial 1 2 P 1 = {A α α λ}; repita até produções {S axa bxb, X a b Y} {S axa bxb aa bb, X a b Y} {S axa bxb aa bb, X a b Y} para toda A αϵp 1 e X ϵ V λ α =α 1 Xα 2 e α 1 α 2 λ faca P 1 = P 1 { A α1α2 } que o cardinal de P 1 não aumente;
Simplificação de GLC Etapa 3: quando a palavra vazia pertencer à linguagem gerada pela gramática, uma regra do tipo S λ deve ser incluída em P; Prof. Yandre Maldonado - 19 Etapa 1: 1) S axa 2) S bxb 3) S λ 4) X a 5) X b 6) X Y 7) Y λ Resultado: V λ = {S, Y, X} Etapa 2: 1) S axa 2) S bxb 3) S aa 4) S bb 5) X a 6) X b 7) X Y Etapa 3: 1) S axa 2) S bxb 3) S aa 4) S bb 5) S λ 6) X a 7) X b 8) X Y Note que Y se tornou inútil
Simplificação de GLC Exemplo: 1) P APB C 2) A AaaA λ 3) B BBb C 4) C cc λ iteração início 1 V λ {A, C} {A, C, P, B} Prof. Yandre Maldonado - 20 1) P APB AB AP PB A B C λ 2) A AaaA aaa Aaa aa 3) B BBb Bb b C 4) C cc c
Simplificação de GLC Exemplo: 1) P BPA A 2) A aa λ 3) B Bba λ iteração início 1 V λ {A, B} {A, B, P} Prof. Yandre Maldonado - 21 1) P BPA PA BP BA B A λ 2) A aa a 3) B Bba ba
Simplificação de GLC Exclusão de produções da forma A B: Prof. Yandre Maldonado - 22 Produções da forma A B não adicionam informação sintática alguma; Etapas: Construção do fecho de cada variável; Exclusão das produções da forma A B;
Simplificação de GLC Etapa 1: construção do fecho de cada variável; Algoritmo: para toda A ϵ V Prof. Yandre Maldonado - 23 faça FECHO-A = { B A B e A *B} usando exclusivamente produções da forma X Y;
Simplificação de GLC Exemplo: Prof. Yandre Maldonado - 24 1) S axa 2) S bxb 3) X a 4) X b 5) X S 6) X λ para toda A ϵ V faça Fecho-S Fecho-X {S} FECHO-A = { B A B e A *B} usando exclusivamente produções da forma X Y;
Simplificação de GLC Etapa 2: exclusão das produções da forma A B; Algoritmo: parte de G(V,T,P,S) e dá origem a G 1 (V,T,P 1,S); Prof. Yandre Maldonado - 25 P 1 = { A α α V }; para faça toda A ϵ V e B ϵ FECHO-A se B αϵ P e α V então P 1 = P 1 {A α};
Simplificação de GLC Prof. Yandre Maldonado - 26 Exemplo: 1) S axa 2) S bxb 3) X a 4) X b 5) X S 6) X λ 1) S axa 2) S bxb 3) X a 4) X b 6) X λ 7) X axa 8) X bxb iteração Inicial S X Etapa 1: Fecho-S= e Fecho-X={S} produções {S axa bxb, X a b λ} {S axa bxb, X a b λ} {S axa bxb, X a b λ axa bxb} P 1 = { A α α V }; para faça toda A ϵ V e B ϵ FECHO-A se B αϵ P e α V então P 1 = P 1 {A α};
Simplificação de GLC Prof. Yandre Maldonado - 27 Simplificações combinadas: A eliminação de produções vazias pode gerar símbolos inúteis; A eliminação de produções unitárias (X Y) também pode gerar símbolos inúteis; Por isso, em simplificações combinadas recomenda-se a seguinte seqüência: Exclusão de Produções Vazias; Exclusão de Produções Unitárias; Exclusão de Símbolos Inúteis;
Formas Normais Prof. Yandre Maldonado - 28 As formas normais estabelecem restrições rígidas a formação das regras em uma GLC sem diminuir o poder de representação deste tipo de gramática; Muito utilizadas em algoritmos de reconhecimento, transformações e prova de teoremas;
Formas Normais Prof. Yandre Maldonado - 29 As mais conhecidas são: Forma Normal de Chomsky (FNC); Forma Normal de Greibach (FNG); Na FNC, as regras devem ser da forma: A BC ou A a Na FNG, as regras devem ser da forma: A aα Sendo A, B e C V, a T e α V*
Forma Normal de Chomsky Prof. Yandre Maldonado - 30 Chomsky, 1928 As regras devem ser da forma: A BC ou A a O algoritmo é dividido em três etapas: Simplificação da gramática: exclusão de produções vazias e de produções unitárias, opcionalmente pode-se excluir símbolos inúteis; Transformação do lado direito de regras que tenham um comprimento maior ou igual a 2; Transformação do lado direito de regras que tenham um comprimento maior ou igual a 2 em produções com exatamente 2 variáveis;
Forma Normal de Chomsky Prof. Yandre Maldonado - 31 Etapa 1: simplificação da gramática; Excluir produções vazias; Excluir produções unitárias; Excluir símbolos inúteis (opcional); Exemplo: 1) E E+E 2) E E*E 3) E (E) 4) E x A gramática já está simplificada.
Forma Normal de Chomsky Prof. Yandre Maldonado - 32 Etapa 2: transformação do lado direito de regras com tamanho maior ou igual a 2; Faz com que esses lados direitos apresentem apenas não terminais; Algoritmo: parte de G 1 (V 1,T,P 1,S) e dá origem a G 2 (V 2,T,P 2,S); V 2 = V 1 ; P 2 = P 1 ; Para toda A X 1 X 2..X n ϵ P 2 tal que n >= 2 faça se 1) E E+E 2) E E*E 3) E (E) 4) E x para r ϵ {1,.., n}, X r é terminal então (suponha Xr = a ) V 2 = V 2 {C a }; susbstitui a por C a em A X 1 X 2 X n ϵ P 2 ; P 2 = P 2 {C a a}; 1) E EC + E 2) E EC * E 3) E C ( EC ) 4) E x 5) C + + 6) C * * 7) C ( ( 8) C ) )
Forma Normal de Chomsky Prof. Yandre Maldonado - 33 Etapa 3: transformação do lado direito das produções com tamanho maior ou igual a 3 em produções com exatamente 2 variáveis; Faz com que esses lados direitos apresentem exatamente 2 variáveis; Algoritmo: parte de G 2 (V 2,T,P 2,S) e dá origem a G 3 (V 3,T,P 3,S); V 3 = V 2; P 3 = P 2; Para toda A B 1 B 2..B n ϵ P 3 tal que n >= 3 faça P 3 = P 3 {A B 1 B 2.. B n }; V 3 = V 3 {D 1,, D n-2 }; P 3 = P 3 {A B 1 D 1, D 1 B 2 D 2,, D n-3 B n-2 D n-2, D n-2 B n-1 D n-1 }; 1) E EC + E 2) E EC * E 3) E C ( EC ) 4) E x 5) C + + 6) C * * 7) C ( ( 8) C ) ) 1) E ED 1 2) E ED 2 3) E C ( D 3 4) E x 5) C + + 6) C * * 7) C ( ( 8) C ) ) 9) D 1 C + E 10) D 2 C * E 11) D 3 EC )
Forma Normal de Chomsky Exemplo: Seja uma GLC G = ({L,S,E},{a, (,)}, P, L), onde P consta das regras: 1) L (S) Prof. Yandre Maldonado - 34 2) S SE λ 3) E a L
Forma Normal de Chomsky Exemplo: Prof. Yandre Maldonado - 35 1) L (S) 2) S SE λ 3) E a L Observando-se que S é a única variável anulável, tem-se as seguintes regras após a eliminação de regra λ 1) L (S) ( ) 2) S SE E 3) E a L
Forma Normal de Chomsky Prof. Yandre Maldonado - 36 Exemplo: 1) L (S) ( ) 2) S SE E 3) E a L Obtem-se as seguintes regras após a eliminação de regras unitárias: 1) L (S) ( ) 2) S SE a (S) ( ) 3) E a (S) ( ) Observando-se os fechos Fecho(L)={} Fecho(S)={E,L} Fecho(E)={L}
Forma Normal de Chomsky Exemplo: 1) L (S) ( ) 2) S SE a (S) ( ) 3) E a (S) ( ) Substituindo os terminais por variáveis nas regras cujo lado direito é maior ou igual a 2: Prof. Yandre Maldonado - 37 1) L C ( SC ) C ( C ) 2) S SE a C ( SC ) C ( C ) 3) E a C ( SC ) C ( C ) 4) C ( ( 5) C ) )
Forma Normal de Chomsky Prof. Yandre Maldonado - 38 Exemplo: 1) L C ( SC ) C ( C ) 2) S SE a C ( SC ) C ( C ) 3) E a C ( SC ) C ( C ) 4) C ( ( 5) C ) ) 1) L C ( D 1 C ( C ) 2) S SE a C ( D 1 C ( C ) 3) E a C ( D 1 C ( C ) 4) C ( ( 5) C ) ) 6) D 1 SC ) Quebrando as regras com lado direito maior que 2, obtem-se:
Forma Normal de Chomsky Exercício: Coloque a seguinte gramática na FNC: Prof. Yandre Maldonado - 39 G=(V, T, P, S), onde: V={S, A, B, C} T={a, b, c} P={ S ASCA S ABCA A a B bbb B λ C c }
Forma Normal de Greibach Uma GLC G = (V, T, P, S) é dita estar na Forma Normal de Greibach (FNG) se todas as suas regras são da forma: A aα Sendo A V, a T e α (V T) * Prof. Yandre Maldonado - 40 Greibach??? A maioria dos autores definem α V*, o fato é que a transformação daquela forma para esta, mais restritiva, é trivial. Sheila Greibach, 1939
Forma Normal de Greibach Prof. Yandre Maldonado - 41 Depois de simplificada, a transformação de uma GLC para FNG envolve as etapas que serão descritas na seqüência: Etapa 1: renomeação das variáveis para uma ordem crescente qualquer; As variáveis da gramática são renomeadas em uma ordem crescente qualquer; Exemplo: A 1, A 2, A n V; onde n é um cardinal de Diferentes critérios de renomeação podem resultar em diferentes gramáticas na FNG;
Forma Normal de Greibach Nesta etapa, a partir de uma gramática G 1 =(V 1, T 1, P 1, S), obtêm-se a gramática G 2 conforme descrito a seguir: Gramática resultante: G 2 = (V 2, T 1, P 2, S) Prof. Yandre Maldonado - 42 Suponha que o cardinal de V 1 é n Construção de V 2 e P 2 V 2 = { A 1, A 2,, A n } é V 1 renomeando os elementos em uma ordem qualquer Inicialmente, P 2 é P 1 renomeando as variáveis na produção
Forma Normal de Greibach Exemplo: Prof. Yandre Maldonado - 43 1) S AA 2) S a 3) A b 4) A SS Renomeando as variáveis S e A para A 1 e A 2 respectivamente * Note que a gramática já está simplificada. 1) A 1 A 2 A 2 2) A 1 a 3) A 2 b 4) A 2 A 1 A 1
Forma Normal de Greibach Prof. Yandre Maldonado - 44 Etapa 2: transformação das produções para a forma A r A s α onde r s; Produções são modificadas garantindo que a primeira variável do lado direito é maior ou igual que a do lado esquerdo; A r A s α onde r > s são modificadas; Substitui a variável A s pelas suas respectivas produções; O conjunto de variáveis é finito: existe um limite para as produções crescentes;
Forma Normal de Greibach Exemplo: Prof. Yandre Maldonado - 45 1) A 1 A 2 A 2 2) A 1 a 3) A 2 b 4) A 2 A 1 A 1 Substituindo A 1 no lado direito da regra 1) A 1 A 2 A 2 2) A 1 a 3) A 2 b 4) A 2 aa 1 5) A 2 A 2 A 2 A 1
Forma Normal de Greibach Prof. Yandre Maldonado - 46 Etapa 3: exclusão das recursões da forma A r A r α; Podem existir originalmente na gramática ou serem geradas pela etapa anterior; Eliminação da recursão à esquerda: introduzindo variáveis auxiliares e incluindo recursão à direita (B r αb r );
Forma Normal de Greibach Exemplo: Prof. Yandre Maldonado - 47 1) A 1 A 2 A 2 2) A 1 a 3) A 2 b 4) A 2 aa 1 5) A 2 A 2 A 2 A 1 Introduzindo uma variável B 2 e incluindo recursão a direita 1) A 1 A 2 A 2 2) A 1 a 3) A 2 b 4) A 2 aa 1 5) A 2 bb 2 6) A 2 aa 1 B 2 8) B 2 A 2 A 1 9) B 2 A 2 A 1 B 2
Forma Normal de Greibach Prof. Yandre Maldonado - 48 Etapa 4: garante que o lado direito das produções iniciem com um terminal; Todas as produções da forma A r A s α onde r<s; Consequentemente, as produções da maior variável A n só podem iniciar por terminais no lado direito; Assim, se em A n-1 A n α for substituído A n pelas suas correspondentes produções (ex: A n aβ), o lado direito das produções de A n-1 também iniciará por terminal (ex: A n-1 aβα); A repetição do algoritmo para A n-2,, A 1 resultará em produções exclusivamente da forma A r aα;
Forma Normal de Greibach Prof. Yandre Maldonado - 49 Exemplo: 1) A 1 A 2 A 2 2) A 1 a 3) A 2 b 4) A 2 aa 1 5) A 2 bb 2 6) A 2 aa 1 B 2 8) B 2 A 2 A 1 9) B 2 A 2 A 1 B 2 Substituindo as variáveis no início dos lados direitos 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) A 1 ba 2 A 1 aa 1 A 2 A 1 bb 2 A 2 A 1 aa 1 B 2 A 2 A 1 a A 2 b A 2 aa 1 A 2 bb 2 A 2 aa 1 B 2 B 2 ba 1 B 2 aa 1 A 1 B 2 bb 2 A 1 B 2 aa 1 B 2 A 1 B 2 ba 1 B 2 B 2 aa 1 A 1 B 2 B 2 bb 2 A 1 B 2 B 2 aa 1 B 2 A 1 B 2
Forma Normal de Greibach Prof. Yandre Maldonado - 50 Algoritmo das etapas 2 e 3: Gramática resultante G 3 = (V 3, T 1, P 3, S) Suponha que o cardinal de V 2 é n P 3 = P 2 para r variando de 1 até n faça para s variando de 1 até r-1 faça para toda A r A s α P 3 faça excluir A r A s α de P 3 ; para toda A s β P 3 faça P 3 = P 3 { A r βα} para toda A r A r α P 3 faça excluir A r A r α de P 3 ; V 3 = V 3 {B r } P 3 = P 3 {B r α} {B r αb r } para toda A r Φ P 3 tq Φ não inicia por A r e alguma A r A r α foi excluída faça P 3 = P 3 { A r ΦB r }; Garante variável da esquerda menor ou igual a da direita Elimina recursão a esquerda
Forma Normal de Greibach Algoritmo da etapa 4: Gramática resultante G 4 = (V 3, T 1, P 4, S) Construção de P 4 Prof. Yandre Maldonado - 51 P 4 = P 3 ; para r variando de n-1 até 1 e toda A r A s α P 4 faça excluir A r A s α de P 4 ; para toda A s β de P 4 faça P 4 = P 4 {A r βα}; para toda B r A s β r faça excluir B r A s β r de P 4 para toda A s aα faça P 4 = P 4 { B r aαβ r }; Também é necessário garantir que as produções relativas às variáveis auxiliares B r iniciam por um terminal do lado direito.
Forma Normal de Greibach Exercício: transforme a seguinte GLC para FNG; Prof. Yandre Maldonado - 52 S AB SCB SB bb b A aa a cc c B bb b C cc c A 1 A 2 A 3 A 1 A 4 A 3 A 1 A 3 ba 3 b A 2 aa 2 a ca 4 c A 3 ba 3 b A 4 ca 4 c Renomeando as variáveis (Etapa 1) A produções já estão na forma A r A s α onde r s (Etapa 2)
Forma Normal de Greibach Exercício (continuação): Prof. Yandre Maldonado - 53 A 1 A 2 A 3 A 1 A 4 A 3 A 1 A 3 ba 3 b A 2 aa 2 a ca 4 c A 3 ba 3 b A 4 ca 4 c A 1 A 2 A 3 ba 3 b A 2 A 3 B 1 ba 3 B 1 bb 1 A 2 aa 2 a ca 4 c A 3 ba 3 b A 4 ca 4 c B 1 A 4 A 3 A 3 A 4 A 3 B 1 A 3 B 1 Eliminando recursão a esquerda: A r A r α (Etapa 3)
Forma Normal de Greibach Exercício (continuação): Prof. Yandre Maldonado - 54 A 1 A 2 A 3 ba 3 b A 2 A 3 B 1 ba 3 B 1 bb 1 A 2 aa 2 a ca 4 c A 3 ba 3 b A 4 ca 4 c B 1 A 4 A 3 A 3 A 4 A 3 B 1 A 3 B 1 Garantindo que todo lado direito inicie com terminal (Etapa 4) A 1 aa 2 A 3 aa 3 ca 4 A 3 ca 3 ba 3 b aa 2 A 3 B 1 aa 3 B 1 ca 4 A 3 B 1 ca 3 B 1 ba 3 B 1 bb 1 A 2 aa 2 a ca 4 c A 3 ba 3 b A 4 ca 4 c B 1 ca 4 A 3 ca 3 ba 3 b ca 4 A 3 B 1 ca 3 B 1 ba 3 B 1 bb 1
Bibliografia Prof. Yandre Maldonado - 55 MENEZES, Paulo Blauth. Linguagens Formais e Autômatos. Porto Alegre: Editora Sagra-Luzzatto, 1998; DELAMARO, Márcio Eduardo. Linguagens Formais e Autômatos. UEM, 1998; VIEIRA, Newton José. Introdução aos Fundamentos da Computação. São Paulo: Editora Thomson Learning, 2006.