Você está na página 1de 7

Linguagens Formais Captulo 5: Linguagens e gramticas livres de contexto

Jos Lucas Rangel, maio 1999 5.1 - Introduo Vimos no captulo 3 a definio de gramtica livre de contexto (glc) e de linguagem livre de contexto (llc). As regras de uma glc so da forma A , onde uma cadeia qualquer de terminais e noterminais, possivelmente vazia. Como vimos, o que caracteriza a gramtica livre de contexto a propriedade de que o smbolo no terminal A pode ser substitudo pela cadeia do lado direito da regra, onde quer que A ocorra, independentemente do contexto, isto , do resto da cadeia que est sendo derivada. Por essa razo, possvel representar derivaes em glc's atravs de rvores de derivao: para usar a regra A , acrescentamos rvore, como filhos de A, ns correspondentes aos smbolos de . 5.2 - rvores de derivao Uma rvore de derivao uma rvore composta da seguinte maneira: a raiz tem como rtulo o smbolo inicial S da gramtica. a cada n rotulado por um noterminal A corresponde uma regra de A. Se a regra for A X1X2 ... Xm, os filhos do n so rotulados, da esquerda para a direita, por X1, X2, ..., Xm. (cada um dos Xi pode ser um terminal ou um noterminal.) um n rotulado por um terminal sempre uma folha da rvore, e no tem filhos.

Os ns interiores da rvore so sempre (rotulados por) noterminais. Se a um n rotulado pelo noterminal A for aplicada a regra A , considera-se o n como interior, embora ele tenha zero filhos. Na representao grfica da rvore, costume indicar, neste caso, os zero filhos atravs de um n , que no contribui para o resultado da rvore. Uma sub-rvore de uma rvore de derivao um n da rvore com todos seus descendentes, as arestas que os conectam e seus rtulos. Uma sub-rvore sempre corresponde a uma derivao parcial, a partir do smbolo que rotula a raiz da subrvore. O resultado de uma rvore de derivao a cadeia formada pelos terminais (que aparecem como folhas da rvore), lidos da esquerda para a direita. Note que a ordenao dos filhos de cada n fundamental para que se possa definir a ordenao das folhas da rvore. Exemplo 5.1: Seja a gramtica G, dada por suas regras:
S AB A aaA | B Bbb |

A rvore de derivao para a sequncia aaaabb est representada na Fig. 1. O resultado da rvore aaaabb, sendo as regras escolhidas de acordo com a derivao
S B aaAB aaaaAB aaaaB aaaaBbb aaaabb.
J. L. Rangel Linguagens Formais 5-1

S A a a a A a A Fig. 1 - rvore de derivao de aaaabb Teorema 5.1: Seja G = (N, , P, S) uma glc. Ento, para qualquer cadeia x *, x L(G) se e somente se existe uma rvore de derivao A na gramtica G, cujo resultado x. Demonstrao: Basta observar a correspondncia entre a substituio de noterminais pelos lados direitos de suas regras na derivao e a criao dos filhos correspondentes na rvore. Usando essa correspondncia possvel construir uma rvore de derivao cujo resultado x a partir de uma derivao S * x; possvel tambm construir uma derivao S * x a partir de uma rvore de derivao cujo resultado x. Os detalhes da demonstrao so deixados como exerccio. Observao. A partir de uma derivao. s possvel construir uma rvore; entretanto, na direo oposta, possvel construir vrias derivaes, dependendo da ordem em que os ns so considerados. O Exemplo 5.2 mostra algumas das vrias derivaes que correspondem mesma rvore. Derivaes esquerdas e direitas. Diz-se que uma derivao uma derivao esquerda (leftmost derivation) se a cada passo da derivao o noterminal A escolhido para aplicao de uma regra A for sempre aquele que fica mais esquerda. Simetricamente, fala-se em derivao direita (rightmost derivation) se o noterminal escolhido sempre o que estiver mais direita. Exemplo 5.2: Seja a gramtica G0 abaixo, dada por suas regras. (Esta gramtica ser usada em vrios exemplos, no que se segue.
E E + T | T T T * F | F F ( E ) | a

B B a b b

Considere a cadeia x = a*(a+a)+a. Temos abaixo trs derivaes de:


E E+T T+T T*F+T F*F+T a*F+T a*(E)+T a*(E+T)+T a*(T+T)+T a*(F+T)+T a*(a+T)+T a*(a+F)+T a*(a+a)+T a*(a+a)+F a*(a+a)+a E E+T E+F E+a T+a T*F+a T*(E)+a T*(E+T)+a T*(E+F)+a T*(E+a)+a T*(T+a)+a T*(F+a)+a T*(a+a)+a F*(a+a)+a a*(a+a)+a E E+T T+T T+F T*F+F T*F+a F*F+a F*(E)+a a*(E)+a a*(E+T)+a a*(T+T)+a a*(T+F)+a a*(F+F)+a a*(a+F)+a a*(a+a)+a
J. L. Rangel Linguagens Formais 5-2

Note que a primeira derivao uma derivao esquerda, e a segunda uma derivao direita. Todas as trs derivaes correspondem mesma rvore de derivao, apresentada na Figura 2. Como se pode observar, em todas elas aparecem as mesmas regras, aplicadas nos mesmos lugares, variando apenas a ordem em que as regras so aplicadas. E E T T F a * ( E T F a Fig. 2- rvore de derivao de a*(a+a)+a Como todas as derivaes correspondentes mesma rvore de derivao descrevem a mesma forma de construo da cadeia derivada - as mesmas regras aplicadas nos mesmos lugares - consideramos que a forma de construo da cadeia pode ser representada pela rvore ou por uma derivao esquerda, ou por uma derivao direita. Entretanto, se existem duas ou mais rvores de derivao (duas ou mais derivaes esquerdas, duas ou mais derivaes direitas), para a mesma cadeia, consideramos que a gramtica no define de forma nica a maneira pela qual a cadeia derivada, e dizemos que a gramtica ambgua. Exemplo 5.3: Seja a gramtica G1, dada por suas regras:
E E + E | E * E | ( E ) | a

T F

F E + T F a )

Pode-se verificar que G1 equivalente a G0, vista no exemplo 5.2 acima. Entretanto, diferentemente de G0, G1 uma gramtica ambgua. Considere, por exemplo a cadeia a+a*a. As duas derivaes (esquerdas) abaixo correspondem a duas rvores de derivao distintas.
E E+E a+E a+E*E a+a*E a+a*a E E*E E+E*E a+E*E a+a*E a+a*a

A construo das duas rvores fica como exerccio. Uma linguagem livre de contexto cujas gramticas so todas ambguas chamada uma gramtica inerentemente ambgua. Exemplo 5.4: Sejam L1 = {ai bj ck| i=j } e L2 = {ai bj ck| j=k }. A linguagem L definida por L = L1 L2 inerentemente ambgua. As linguagens L1 e L2 no so inerentemente ambguas, como se pode ver pelas suas respectivas gramticas G1 e G2.
J. L. Rangel Linguagens Formais 5-3

G1:

S1 T C T a T b | C c C | S S1 | S2 S1 T C T a T b | C c C |

G2:

S2 A V A a A | V b V c |

fcil construir um exemplo G de gramtica ambgua para L, a partir de G1 e G2: G:


S2 A V A a A | V b V c |

Para verificar que G ambgua, basta observar que todas as cadeias pertencentes interseo M = L1 L2 = {ai bj ck | i=j=k } podem ser derivadas de duas formas distintas, dependendo da regra inicial escolhida para a derivao. Por exemplo, aabbcc pode ser obtida por uma das duas derivaes esquerdas abaixo:
S S1 TC aTbC aaTbbC aabbC aabbcC aabbccC aabbcc S S2 AV aAV aaAV aaV aabVc aabbVcc aabbcc

Naturalmente, isto prova apenas que G ambgua, e no que todas as gramticas de L so ambguas. Esta demonstrao no ser includa aqui. Observamos tambm que M no uma llc. Isto ser visto no Exemplo 5.7. 5.3 - Simplificao de gramticas livres de contexto No existe a possibilidade de simplificao de gramticas livres de contexto, no mesmo sentido da minimizao de automatos finitos vista anteriormente. , entretanto possvel fazer uma simplificao que elimina todos os smbolos e regras inteis da gramtica. Podemos dizer que um smbolo terminal intil quando no aparece em alguma cadeia da linguagem; podemos dizer que um smbolo no terminal intil quando no aparece em alguma derivao de alguma cadeia da linguagem. Uma regra intil contm algum smbolo intil. Em alguns casos, a gramtica ambgua, e algumas regras podem ser removidas sem que a linguagem se altere, mas pode no ficar claro qual regra deve ser considerada intil. Por exemplo, se tivermos 1, 2. S A X | Y C 3. X B C 4. Y A B h duas maneiras de gerar ABC a partir de S. Quais as regras que devem ser retiradas? 1 e 3 ou 2 e 4? Tanto faz. Todas as simplificaes que podem ser feitas, entretanto, no alteram a essncia de uma gramtica: apenas a tornam mais limpa. Algumas transformaes de gramticas visam obter uma gramtica equivalente inicial que tem alguma forma particular, por exemplo, que simplifique a demonstrao de algum teorema. Para ver alguns algoritmos para simplificao ou transformao de gramticas sugerimos a mesma referncia citada anteriormente.
J. L. Rangel Linguagens Formais 5-4

O exemplo a seguir procura esclarecer alguns dos conceitos mencionados. Exemplo 5.5: Uma gramtica com regras e smbolos inteis. Seja a gramtica 1, 2, 3: 4, 5: 6, 7: 8, 9: 10, 11: 12, 13:
S A B C Y Z A a b c y z B A B D | | | | | | z y A C | B D a b d C Z Y

Smbolos no terminais acessveis: Em derivaes a partir de S podem aparecer S A B C D (regras 1, 2, 3). Smbolos no terminais produtivos: Derivaes que levam a cadeias de terminais: A (regra 5), B (regra 7), Y (regra 10), Z (regra 11), S (regra 1, j que A e B so produtivos.) Logo, todos os noterminais, exceto S A B so inteis. Retirando todas as regras que fazem referncia a noterminais inteis, temos: 1: S A B 4, 5: A a A | a 6, 7: B b B | b Os smbolos restantes podem ser considerados inteis: C D Y Z c d y z. 5.4 - O lema do bombeamento para linguagens livres de contexto. Vamos examinar agora um resultado que nos permitir provar que algumas linguagens no so livres de contexto. O resultado conhecido como Lema do Bombeamento, ou Pumping Lemma, e semelhante ao resultado correspondente visto para linguagens regulares. Teorema 5.2: Lema do Bombeamento. Seja L uma llc. Ento, existe um nmero n, que s depende de L, tal que qualquer cadeia z de L com comprimento maior ou igual a n pode ser decomposta de maneira que z = uvwxy e |vx| 1 |vwx| n para todo i 0, uviwxiy pertence a L. Demonstrao (simplificada). Se L uma llc, existe uma glc G tal que L(G)=L. Se z tem um comprimento suficientemente longo, no ser possvel gerar z sem que na derivao de z ocorra um no terminal A repetido, de forma que a partir de A derivada uma cadeia que contm outra ocorrncia de A. Para que isto ocorra, as duas ocorrncias de A devem estar num mesmo caminho da raiz da rvore de derivao at as folhas. (Cadeias mais curtas podem ser geradas sem que essa repetio acontea.) Atravs (possivelmente) de uma rearrumao dos passos da derivao, temos S * uAy * uvAxy * uvwxy ou seja,
J. L. Rangel Linguagens Formais 5-5

S * uAy, A * vAx, A * w Portanto, podemos derivar i=0: i=1: i=2: i=3: uwy uvwxy uvvwxxy uvvvwxxxy S * uAy * uwy S * uAy * uvAxy * uvAxy * uvwxy S * uAy * uvAxy * uvvAxxy * uvvwxxy S * uAy * uvAxy * uvvAxxy * uvvvAxxxy* uvvvwxxxy Uma demonstrao completa do Lema do Bombeamento pode ser encontrada na referncia citada. Observao. A recproca do Lema do Bombeamento no verdadeira, isto , existem linguagens que no so livres de contexto, mas que tem a propriedade da decomposio. Exemplo 5.6: Considere a gramtica G0, a cadeia z = a*(a+a)+a, e a rvore de derivao correspondente a z (Exemplo 5.2), reproduzida na Figura 3. Podemos ver que existem vrios casos de repetio de noterminais da forma indicada no teorema acima. Por exemplo, vamos considerar as duas ocorrncias de T indicadas pelas setas: E E T T F a * ( E T F a Fig. 3- rvore de derivao de a*(a+a)+a Temos: E * T+a, T * a*(T+a), T * a. Ou seja, u = , v = a*(, w = a, x = +a), y=+a. Ou seja, as seguintes cadeias devem ser da linguagem:
J. L. Rangel Linguagens Formais 5-6

T F

F E + T F a )

i=0: i=1: i=2: i=3:

uwy uvwxy uv2wx2y uv3wx3y

a a*( a +a) a*( a*( a +a) +a)

+a +a +a

a*( a*( a*( a +a) +a) +a)+a

Exerccio 5.2: (Ver Exemplo 5.3) 1. Construa rvores de derivao para as cadeias uviwxiy, para i=0, 1, 2, 3, observando que essas rvores so construdas de pedaos da rvore de derivao de x. (Nem todos esses pedaos so sub-rvores.) 2. Verifique todas as combinaes de noterminais repetidos que satisfazem as condies do teorema, e quais as decomposies possveis para a cadeia z. 3. Estime o valor de n para a linguagem considerada. Exerccio 5.3: Considere a llc L={ x xR | x {a, b}* } { aaaab } e a cadeia z = aabaabaa. Estime n para essa linguagem. Determine todas as decomposies possveis de z, de acordo com o teorema. Exemplo 5.7: Vamos agora mostrar que L = { ambmcm | n0 } no livre de contexto, usando o teorema acima. A demonstrao por contradio: suporemos que L livre de contexto, e deduziremos um absurdo. Se L llc, L satisfaz o teorema acima para algum n. Suponha que a cadeia z=akbkck suficientemente longa: | z | n. Ento z pode ser decomposta, z = uvwxy, de forma que para qualquer i, zi = uviwxiy pertence a L. A contradio est em que qualquer decomposio, existem cadeias zi que no pertencem a L: ou tem o nmero errado de a's, b's, e c's, ou aparecem smbolos fora da ordem a - b - c: as combinaes ba, cb e ca no podem ocorrer em L. Para eliminar todas as decomposies: se v e x no tem o mesmo nmero de a's, b's e c's, algum zi ter nmeros diferentes dos trs smbolos; se v e x tem o mesmo nmero de a's, b's e c's, devemos ter v = aj e x = bjcj, ou v = ajbj e x=cj . No primeiro caso, z2 contm x2 = bjcjbjcj, que contm a combinao cb, que no ocorre em L; no segundo caso, de forma semelhante, ocorre a combinao ba.

Logo, L no uma llc. Exerccio 5.4: Mostre que a linguagem { x x | x {a, b}* } no uma llc.
Nota: a primeira verso deste captulo contou com a colaborao de Luiz Carlos Castro Guedes (maio 1999)

J. L. Rangel Linguagens Formais 5-7

Você também pode gostar