2EVHUYDo}HV Enquanto que todas as Linguagens Regulares são reconhecíveis por utómatos 'HWHUPLQLVWDV (Finitos), nem todas as Linguagens Independentes do Contexto são reconhecíveis por utómatos 'HWHUPLQLVWDV (de Pilha); Prova-se que, toda a LIC reconhecível por um DP (por Estado Final ou por Pilha Vazia) tem uma Gramática geradora não ambígua; existência de utómatos Deterministas é vital para o Processamento automático de Linguagens. istemas como o lex são geradores automáticos de utómatos Finitos Deterministas, do mesmo modo que sistemas como o yacc são geradores automáticos de utómatos Deterministas de Pilha; É também importante, tanto para o Processamento de Linguagens como para a demonstração de propriedades, que as produções das LIC s tenham formas determinadas... 2HUDo}HV GH ³VLPOLILFDomR GH *UDPiWLFDV 1. Eliminação de produções-h : {uma produção-h tem a forma ε } Dada uma gramática G = (V, T, P, ), tal que ε ² L(G), construir G, sem produções-ε, de modo a que L(G) = L(G ).
Definição: Uma variável ± Vdiz-se anulável quando * ε. lgoritmo: { eliminação de variáveis anuláveis } Para cada produção ; 1 X 2... X n construir uma produção D 1 D 2... D n onde D i = X i X i ou ε se X i não é anulável se X i é anulável e nem todos os X i são ε; Eliminar todas as produções-ε. Exemplo: B a ε B bbb ε s variáveis anuláveis são, e B. s novas produções serão: B B a a a B bbb bb b
2. Eliminação de produções unitárias : {uma produção unitária tem a forma B, com, B ± V} Dada uma gramática G = (V, T, P, ) construir G, sem produções unitárias, de modo a que L(G) = L(G ). Definição: Ä, B Ô diz-se um par unitário quando *B, usando só produções unitárias. lgoritmo: Identificar todos os pares unitários; Para cada par unitário Ä, B Ô, e para todas as produções não unitárias de B: B juntar as produções E 1 E 2... E n ; E 1 E 2... E n Eliminar todas as produções unitárias. Exemplo: E 7 _(7 T )_7 F F, (E) I a b Ia Ib I0 I1 Os pares unitários são: Ä E, T Ô, Ä E, F Ô, Ä E, I Ô, Ä T, F Ô, Ä T, I Ô, Ä F, I Ô s novas produções serão: E T F I E + T T F (E) a b Ia Ib I0 I1 T F (E) a b Ia Ib I0 I1 (E) a b Ia Ib I0 I1 a b Ia Ib I0 I1
3. Eliminação de símbolos inúteis : {um símbolo é inútil se não for útil...} Dada uma gramática G = (V, T, P, ) construir G, sem símbolos inúteis, de modo a que L(G) = L(G ). Definição: Um símbolo X ± V ª T diz-se útil numa Gramática G = (V, T, P, ) se existir alguma derivação * D X E * w com w ± T* e D, E± (V ª T)*. Portanto, se X for um símbolo útil então: 1. * D X E para alguns D, E± (V ª T)* (X é atingível) 2. X * w para algum w ± T*. (X é gerador) lgoritmo para a determinação do conjunto dos símbolos geradores: Caso Base: Todos os símbolos terminais são geradores; Indução: e existir uma produção D, D± (V ª T)* onde todas as variáveis em D são geradoras, então é um símbolo gerador. Exemplo: $%_& %_& B _$ C $&_&
Os terminais 0 e 1 são geradores por B 1 B é gerador por 0B é gerador por B é gerador Portanto o símbolo C pode ser HOLPLQDGR, ficando: B B 0B 1 0 lgoritmo para a determinação do conjunto dos símbolos atingíveis: Caso Base: é atingível; Indução: e existir uma produção D, D± (V ª T)* onde é atingível, então todas as variáveis em D são atingíveis. Exemplo: $ a ε B b variável B não é atingível, podendo portanto ser eliminada, bem como a produção B E$. Para eliminar todos os símbolos inúteis: 1º : eliminar os símbolos QmRJHUDGRUHV; 2º : eliminar os VtPERORVQmRDWLQJtYHLV. (por esta ordem!)
Exemplo: Eliminar todos os símbolos e produções inúteis da gramática G = ( {,, B, C}, {a, b}, P, ) com P: B C a C D aa acb Os símbolos geradores são {,, B}, ficando: B a D DD e como os símbolos atingíveis são {, }, a nova gramática será G = ( {, }, {a, b}, P, ) com P : a D ³6LPOLILFDomR GH *UDPiWLFDV: Dada uma gramática G = (V, T, P, ), tal que L(G) œ, construir G, tal que L(G ) = L(G) \ {ε} e G não tem produções-ε, nem produções unitárias nem símbolos inúteis. 1º : eliminar as URGXo}HVH; 2º : eliminar as URGXo}HVXQLWiULDV; 3º : eliminar os VtPERORVe asurgxo}hvlq~whlv.
)RUPDV 1RUPDLV $ )RUPD 1RUPDO GH &KRPVN\ Prova-se que: Para toda a Linguagem Independente do Contexto L, existe uma Gramática G que gera L \ {ε}, sem símbolos inúteis, onde cada produção tem uma das formas: %& D 5HGXomR j )RUPD 1RUPDO GH &KRPVN\ 1º : eliminar as URGXo}HVH; 2º : eliminar as URGXo}HVXQLWiULDV; 3º : eliminar os VtPERORVe asurgxo}hvlq~whlv. 4º : eliminar VtPERORVWHUPLQDLV do lado direito de produções; 5º : reduzir os lados direitos das produções a GXDVYDULiYHLV; (4º) Eliminar os símbolos terminais do lado direito das produções: Para cada símbolo terminal a, b, c,... juntar novas variáveis X a,x b,x c,... bem como novas produções X a D; b E; c c,... ubstituir a por X a,b por X b,c por X c,... (quando não aparecerem isolados) nos lados direitos da produções. (5º) Reduzir os lados direitos das produções a duas variáveis: ubstituir cada produção da forma B 1 B 2 B 3... por B 1 B 23 B 23 B 2 B 34 B 34 B 3 B 45...
Exemplo: Reduzir à Forma Normal de Chomsky: B B ε D a 6b bb 1º : eliminar as URGXo}HVH; Como o único símbolo anulável é, que nunca aparece isolado num lado direito de produção, não há produções a eliminar. Basta detectar as ocorrências (anuláveis) de : B B B a a a b b b b bb ž eliminar as URGXo}HVXQLWiULDV; Como a única produção unitária é B, basta substituir: B B B a a a b b b b a a a bb 3º : eliminar os VtPERORVeasURGXo}HVLQ~WHLV. Todos os símbolos são geradores e atingíveis. 4º : eliminar os VtPERORVWHUPLQDLV do lado direito das produções, quando não ocorrerem isolados; Introduzir as variáveis C e D e as produções C D ed E:
B C D $6%_$% &$6_&$_D 6'6_'6_6'_E_&$6_&$_D_'' D E ž reduzir os lados direitos das produções a GXDVYDULiYHLV; Por fim, para reduzir as sequências B, C e D, introduzir as variáveis E, F e G. gramática pretendida, na Forma Normal de Chomsky, será então: B C D E F G E B CF C a G D D b CF C a DD a b B D $ )RUPD 1RUPDO GH *UHLEDFK Prova-se que: Para toda a Linguagem Independente do Contexto L, existe uma Gramática G que gera L \ {ε}, onde cada produção tem a forma: a D com a ± T e D± V*.
{ Um pequeno regresso às Linguagens Regulares} $ )RUPD 1RUPDO GDV *UDPiWLFDV 5HJXODUHV Prova-se que: Toda a Linguagem Regular pode ser gerada por uma Gramática onde cada produção tem uma das formas: X D Y com a ± T e X, Y ± V X ε com X ± V Este resultado permite demonstrar de modo bem simples que: 7HRUHPD: Para toda a Gramática Regular G existe um utómato Finito (FND-ε ) tal que L() = L(G). 'HPRQVWUDomR &RQVWUXomR: eja G = (V, T, P, ) uma Gramática Regular escrita na sua Forma Normal. Construímos o utómato Finito = (Q, T, G, Q 0, F), fazendo: Q = V Q 0 = F = { X ± V [X ε] ± P} G(X, a) = Y sse [X ay] ± P.
Exemplo: eja G = ( {,, B, C}, {a, b}, P, ), com P dado por: D6_E6_D$ E% B D& C ε O utómato pretendido é = ({,, B, C}, {a, b}, G,, {C} ) com cuja Expressão Regular é (a + b)* a b a. É fácil verificar que toda a palavra de L(G) é reconhecida por, bem como o inverso. Também não é difícil verificar que: 7HRUHPD: Para todo o utómato Finito Não Determinista, existe uma Gramática Regular G tal que L(G) = L().
2 /HPD GD %RPEDJHP DUD /LQJXDJHQV,QGHHQGHQWHV GR &RQWH[WR 7HRUHPD eja L uma Linguagem Independente do Contexto. Então existe um inteiro positivo n tal que, para toda a palavra ] ± Lcom ] n, existem X, Y, Z, [, \ ±È* tais que: ] = XYZ[\ YZ[ n Y[ > 0 k 0, XY k Z[ k \ ± L de modo mais formal: L Linguagem Independente do Contexto, n ± : ] ± Lcom ] n, X, Y, Z, [, \ ±È*: ] = XYZ[\ com vwx ne vx > 0 : k± 0, XY k Z[ k \ ± L. ou seja: Toda a palavra (suficientemente longa) de L pode ser dividida em cinco partes de modo a que, com um número igual de repetições da segunda e quarta partes, continue a ser uma palavra de L.
Um exemplo: G = ( {, }, {a, b, c}, P, ), na Forma Normal de Chomsky com, c $$_D_E Para uma palavra suficientemente longa tal como w = baababbaac temos a árvore de derivação: * baa aac X YZ[\ Verificamos que a parte central (a mais ORQJD) é gerada por: * ba b = YZ[ e que pode ser bombeada por forma a gerar: * (ba) k b(b) k =(Y) k Z ([) k
como por exemplo, para k = 3: (Y) 3 Z ([) 3 Ou seja, * baa (ba) k b(b) k aac = X (Y) k Z ([) k \ ± L, k 0 Por outro lado, como a Gramática está na Forma Normal de Chomsky, a Árvore de Derivação é sempre uma ÈUYRUH%LQiULD, onde: 7HRUHPD Numa Árvore Binária com n níveis, n {folhas} 2 n-1. {... Prove! }
7HRUHPD Numa Árvore Binária com 2 m folhas, o número de nós visitados pelo Caminho mais longo da raiz até às folhas, é: m + 1 C Max 2 m. 3DUDP iuyruhelqiuldwrwdo iuyruhelqiuldghjhqhudgd No caso das Árvores de Derivação de uma Gramática, na Formal Normal de Chomsky, os resultados anteriores referem apenas às Produções da forma %&Vygeradoras de variáveis). 'HPRQVWUDomR (do Lema da Bombagem para LIC s) eja L é uma Linguagem Independente do Contexto e G uma Gramática, na Formal Normal de Chomsky, tal que L(G) = L \ {ε} e seja m o número de variáveis de G. tem uma Árvore de Derivação com, pelo menos, m +1 níveis (cujos nós são variáveis). Uma palavra ] ± L de comprimento ] Q P Como só existem m variáveis, alguma variável deverá aparecer repetida.
ssim (pelo menos no caminho mais longo) existem (pelo menos) GXDV ocorrências de uma variável. Ou seja, * X \ * Y [ = YZ[ * Z O facto de * X\ (o primeiro ) garante-nos que, YZ[ n= 2 m epor * Y[ (como a Gramática não tem produções-ε), Y[ > 0. Então, por * Y [ podemos ir derivando: * Y [ * YY [[
para qualquer k, * Y [ * YY [[ * Y YY [[[... * Y k [ k e mesmo para k = 0, pois * X \ * Z. f 1RWD Comparar esta demonstração com a das Linguagens Regulares;
Exemplo: Provar que não é uma Linguagem Independente do Contexto, L= { a m b m c m m 0}. uponhamos que L é Independente do Contexto. Então, pelo Lema da Bombagem, existe um n ± para o qual todas as palavras ] ± Lcom Z n satisfazem as condições. Tomemos ] =a n b n c n. Como ] é suficientemente longa, existem X, Y, Z, [, \ ±È*, tais que: ] = XYZ[\ com YZ[ n Y[ > 0 k 0, XY k Z[ k \ ± L Ora, para que se verifique YZ[ n, a palavra YZ[ não pode conter as 3 letras. uponhamos, por exemplo, que YZ[ não contém c s: Para que se verifique Y[ > 0, pelo menos um deles é não nulo, nenhum contendo c s. Então, como XYZ[\ tem o mesmo número de a s, b s e c s, a palavra XY 0 Z[ 0 \ = XZ\ consistiria numa redução do número de a s e b s, resultando num excesso de c s. ssim, como para k = 0, XY k Z[ k \ ² L Lnãoé uma Linguagem Independente do Contexo.
([HUFtFLRV: Mostrar que QmR são Linguagens Independentes do Contexto: L= { a m b n c m d n m, n 0} L= { a n néum Quadrado Perfeito} L= { a n né um Número Primo} L= { a n! n 0} L= { a m b n m = n 2 } L= { ZZ Z ± {a, b}* }
2HUDo}HV VREUH /LQJXDJHQV,QGHHQGHQWHV GR &RQWH[WR 3URULHGDGHV GR )HFKR ejam L 1 a LIC gerada pela Gramática G 1 =(V 1,T 1,P 1, 1 ) e L 2 a LIC gerada pela Gramática G 2 =(V 2,T 2,P 2, 2 ). 8QLmR / ª / é uma Linguagem Independente do Contexto. Basta juntar a produção 6 1 2 e assegurar que V 1 «V 2 = (se necessário, mudar o nome de algumas variáveis). Gramática pretendida é G = (V, T, P, ) com: V= V 1 ª V 2 ª T= T 1 ª T 2 P= P 1 ª P 2 ª { 6 1 2 } &RQFDWHQDomR / / é uma Linguagem Independente do Contexto. Basta juntar a produção 6 1 2 (com V 1 «V 2 = ). )HFKRGH.OHHQH / é uma Linguagem Independente do Contexto. Basta juntar a produção 6 1 ε.
+RPRPRUILVPR Classe das Linguagens Independentes do Contexto também é fechada para Homomorfismos. eja G = (V, T, P, ) a Gramática geradora de L e h : T 6* um Homomorfismo. h(g) é uma Gramática com símbolos terminais em 6 e cuja produções se obtêm a partir de P, substituindo cada terminal a ± T por h(a). Não é difícil mostrar que h(g) gera h(l). ([HPOR 6_6_ε com h(0) = aba h(1) = bb h(g) tem as produções: DED6DED_EE6EE_ε Todas estas propriedades são casos particulares de um resultado mais geral... 2 7HRUHPD GD 6XEVWLWXLomR partir de uma LIC L, substituindo cada símbolo terminal a por uma LIC L a, obtemos uma linguagem da forma, { Z 1 Z 2... Z n a 1 a 2... a n ± Le Z i ± L a i } que é também Independente do Contexto.
(VTXHPDGD'HPRQVWUDomR eja G = (V, T, P, ) a gramática geradora de L e G a =(V a,t a,p a, a ) cada gramática geradora de cada L a. e os conjuntos de variáveis (V e V a s) forem disjuntos e, se em cada Produção de G, substituirmos cada ocorrência de cada símbolo a ± T pelo respectivo a, obtemos uma Linguagem Independente do Contexto. s palavras da Linguagem resultante são da forma Z 1 Z 2... Z n, em substituição de cada palavra a 1 a 2... a n ± L. ([HPOR L= {0 n 1 n n 1}, gerada pela gramática de produções: 6_ ubstituímos pela Linguagem {a n b m m n}, gerada por: D6E_$ D$_DE e substituímos pela Linguagem {ab, abc}, gerada por: ab F_ε
Nas gramáticas de substituição, a variável passa a chamar-se 0 e 1, respectivamente. Na última gramática, a variável passa a ser B. Ou seja, 0 1 B 6_ D6 0 b D$_DE abb F_ε ubstituindo, na primeira Gramática, 0 por 0 and 1 por 1, obtemos: 0 1 0 1 0 D 0 b D a b 1 ab B B F_ε ([HUFtFLR: Por aplicação directa do Teorema da ubstituição, mostre que a Classe das Linguagens Independentes do Contexto é fechada para a União, a Concatenação, o Fecho de Kleene e os Homomorfismos.,QWHUVHFomR / «/ QmRp necessariamente uma Linguagem Independente do Contexto.
Por exemplo, sejam, L 1 ={a m b m c n m, n 0} definida por, XC X axb ε C cc ε L 2 ={a m b n c n m, n 0} definida por, Y a ε Y byc ε Linguagem L 1 «L 2 ={a n b n c n n 0} não é Independente do Contexto. &RPOHPHQWDU / QmRp necessariamente uma Linguagem Independente do Contexto. Como L 1 «L 2 = L L e porque a classe das LIC s é fechada 1 2 para a União, se fosse fechada para o Complementar também o seria para a Intersecção. E como o Complementar é um caso particular da Diferença... 'LIHUHQoD /?/ QmRp necessariamente uma Linguagem Independente do Contexto.,QYHUVmRQRVHQWLGRGH5HYHUVmR / 5 é uma Linguagem Independente do Contexto.
Basta inverter a ordem dos símbolos do lado direito de cada Produção. ([HPOR L = {a m b m c n m, n 0} definida por XC X axb ε C cc ε L R ={c n b m a m m, n 0} é definida por CX X bxa ε C Cc ε +RPRPRUILVPR,QYHUVR K / é uma Linguagem Independente do Contexto. Recordemos que, dado um Homomorfismo de palavras, h : È* ** e uma Linguagem L **, se define: h -1 (L) = {Z ±6* h(z) ± L} o conjunto das palavras cuja imagem homomórfica pertence a L. Prova-se que, se L for uma Linguagem Independente do Contexto, então h -1 (L) também é Independente do Contexto.