Escolar Documentos
Profissional Documentos
Cultura Documentos
22 de abril de 2008
Sumrio
3 Linguagens Regulares 67
3.1 Gramticas Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2 Conjuntos e Expresses Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.3 Autmatos Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.4 Equivalncia entre Gramticas Regulares e Conjuntos Regulares . . . . . . . . . 118
3.5 Equivalncia entre Gramticas Regulares e Autmatos Finitos . . . . . . . . . . . 129
3.6 Minimizao de Autmatos Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . 140
3.7 Transdutores Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.8 Linguagens que no so Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.9 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
3.10 Questes Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8 Concluses 375
8.1 Uma Hierarquia de Classes de Linguagens . . . . . . . . . . . . . . . . . . . . . . 375
8.2 Decidibilidade e Complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
1.1 Conjuntos
Um conjunto uma coleo de smbolos, tambm denominados tomos ou elementos,
em que no so consideradas ocorrncias mltiplas dos mesmos nem h relao de ordem
entre eles.
Exemplo 1.1 A incluso do smbolo no conjunto {, , , } resulta no prprio conjunto
{, , , }, pois o mesmo j faz parte do conjunto e, portanto, no deve ser considerado no-
vamente. Por outro lado, o conjunto {, , , } igual ao conjunto {, , , }, uma vez que
no existe relao de ordem entre os elementos que os compem. 2
Exemplo 1.16 {a, b, c} {c, d } = {a, b}. {a, b} {a, b, c} = . {a, b, c} {d , e} = {a, b, c}.
{c, d } {a, b, c} = {d }. {a, b, c} {a, b} = {c}. {d , e} {a, b, c} = {d , e}. 2
Complementao: Define-se a complementao de um conjunto A em relao
ao conjunto B , A B , como sendo o conjunto de todos os elementos de B que no
pertencem a A. Denota-se este conjunto como:
AB = B A
Muitas vezes esta operao definida para um conjunto A em relao a um outro
conjunto B subentendido e, neste caso, escreve-se simplesmente:
A=B A
Diz-se, neste caso, que o conjunto subentendido o conjunto universo da operao.
O resultado da operao conhecido simplesmente como complemento de A.
8 Linguagens Formais - Teoria, Modelagem e Implementao
{(a, 0), (a, 1), (b, 0), (b, 1), (c, 0), (c, 1)}
e
|A B | = |A | | B | = 3 2 = 6
2
Exemplo 1.19 Seja A = {a, b, c, d }. Ento, {{a, b}, {c, d }} uma partio de A. Da mesma
forma, o conjunto {{a}, {b}, {c}, {d }}, bem como {{a, b, c, d }}, entre vrios outros. 2
Na Figura 1.2, da esquerda para a direita, as reas hachuradas dos diagramas re-
presentam, respectivamente, A, B , A B e A B .
Justificativa
() Se A = B , ento (A B ) (A B ) = (A A) (A A) = = .
() Se (A B ) (A B ) = , ento as duas seguintes condies devem ser simultanea-
mente satisfeitas:
1. (A B ) = ;
2. (A B ) = .
i A 6= B e A B 6= . Logo, A B 6= ;
ii A 6= B e A B = . Logo, A B 6= ;
iii A = B . Logo, A B = .
Portanto, a nica relao possvel entre A e B que satisfaz condio (1) a relao
(iii). Da mesma forma, pode-se facilmente mostrar que (iii) tambm a nica relao
que satisfaz condio (2), e isso completa a demonstrao do teorema.
10 Linguagens Formais - Teoria, Modelagem e Implementao
1.2 Relaes
Uma relao R sobre dois conjuntos A e B definida como um subconjunto de AB .
Relaes representam abstraes de conceitos matemticos fundamentais, como,
por exemplo, as operaes aritmticas, lgicas e relacionais, alm de constiturem a base
terica para o estudo sistemtico das funes. O conjunto de todas as relaes definveis
sobre AB dado por 2AB .
Exemplo 1.20 A relao R1 = {(a, b) | a, b N e a > b}, sobre N N, contm, entre infinitos
outros, os elementos (2, 1), (7, 4) e (9, 3). A relao R2 = {(x , y, z ) | x , y, z Z e x 2 = y 2 + z 2 },
sobre Z Z Z, contm os elementos (0, 0, 0), (1, 1, 1), (1, 1, 1), (5, 4, 3), (10, 8, 6) etc. 2
O conceito de relao pode ser generalizado para mais de dois conjuntos, consis-
tindo, sempre, em subconjuntos definidos sobre o produto cartesiano dos conjuntos par-
ticipantes da relao. A relao, nesse caso, dita uma relao n-ria, e corresponde
a um subconjunto do produto cartesiano dos conjuntos envolvidos. Sejam n conjuntos
A1 , A2 , ...An . Os elementos pertencentes ao conjunto definido por uma relao n-ria
sobre A1 , A2 , ...An so, portanto, elementos de A1 A2 ... An , e tm a seguinte
forma:
(a1 , a2 , a3 , ..., an )
onde a1 A1 , a2 A2 , ...an An .
1 Elementos de Matemtica Discreta 11
Reflexiva: se aRa, a A;
Se (a, b) R, ento a Ai , b Aj e i = j ;
Se (a, b) 6 R, ento a Ai , b Aj e i 6= j .
Q : {(a, b) Z Z | a 2 = b 2 }
Q = {(0, 0), (1, 1), (1, 1), (1, 1), (1, 1)...(n, n), (n, n), (n, n), (n, n)...}
fcil verificar que Q reflexiva, simtrica e transitiva. Logo, uma relao de equivalncia.
Q induz partio {A0 , A1 , ...} de Z, onde:
A0 = {0, 0}
A1 = {1, 1}
A2 = {2, 2}
...
An = {n, n}
...
Quaisquer que sejam os nmeros a, b Z considerados, se (a, b) Q, ento a e b pertencem
necessariamente ao mesmo conjunto Ai , para algum valor de i 0. Se (a, b) 6 Q, a e b pertencero
sempre a conjuntos distintos desta partio de Z. 2
12 Linguagens Formais - Teoria, Modelagem e Implementao
Exemplo 1.25 Considerem-se os conjuntos dos nmeros inteiros Z, dos nmeros naturais N e as
operaes binrias de soma e subtrao. Ento, as seguintes afirmativas so verdadeiras:
1.3 Funes
Uma funo um mapeamento que associa elementos de um conjunto denominado
domnio a elementos de um outro conjunto, chamado co-domnio ou contradomnio.
Essa associao deve ser tal que cada elemento do domnio esteja associado a no mximo
um elemento do conjunto co-domnio.
Formalmente, uma funo entre um conjunto A (domnio) e um conjunto B (co-
domnio) definida como uma relao R entre esses conjuntos, de modo que:
f :X Y
f1 = {(1, 5), (2, 3), (4, 5), (8, 1), (7, 3)}
f2 = {(6, 7), (9, 0), (6, 3), (4, 3), (3, 1)}
A relao f1 aderente definio de funo, ao passo que f2 uma relao mas no uma
funo, devido presena simultnea dos pares (6, 7) e (6, 3), que associam o mesmo elemento
6 do domnio a dois elementos distintos do co-domnio (7 e 3). As Figuras 1.3 e 1.4 ilustram,
respectivamente, as relaes f1 e f2 .
1 Elementos de Matemtica Discreta 13
f (x ) = y
If = {y Y | y = f (x )}
Uma funo se diz uma funo total (denotada pelo smbolo ) quando especi-
fica associaes para todos os elementos do conjunto domnio, sem exceo. Formalmente:
x X , y Y | y = f (x )
Quando uma funo no definida para todos os elementos de seu domnio, ela
recebe a denominao de funo parcial (denotada pelo smbolo ).
7 Formalmente:
x X | f (x ) no definida
Exemplo 1.32 Seja X = {0, 1, 2}, Y = {a, b, c} e f2 = {(0, b), (2, b)}. A funo f2 : X 7 Y
parcial, pois no h associao do elemento 1 pertencente ao conjunto domnio a qualquer elemento
do conjunto co-domnio. O conjunto imagem para essa funo {b}. 2
x1 , x2 X , x1 6= x2 f (x1 ) 6= f (x2 )
y Y , x X | y = f (x )
Dito de outra forma, uma funo sobrejetora se todo elemento do conjunto co-
domnio estiver associado a pelo menos um elemento do conjunto domnio.
Exemplo 1.34 As funes das Figuras 1.5 e 1.6 no so sobrejetoras. A Figura 1.7 ilustra uma
funo sobrejetora.
Exemplo 1.35 Seja X = {0, 1, 2}, Y = {a, b, c} e f4 = {(0, c), (1, b), (2, a)}. A funo f4 : X Y
sobrejetora, pois Y = If = {a, b, c}. Em adio, pode-se observar que f4 simultaneamente uma
funo total, injetora e sobrejetora, e tambm que as funes f1 (Exemplo 1.30), f2 (Exemplo 1.32)
e f3 (Exemplo 1.33) anteriormente definidas no so sobrejetoras. 2
Uma funo que seja simultaneamente total, injetora e sobrejetora recebe a deno-
minao de funo bijetora.
16 Linguagens Formais - Teoria, Modelagem e Implementao
Exemplo 1.36 As funes das Figuras 1.5, 1.6 e 1.7 no so bijetoras. Em particular, a da Figura
1.5 total, no-injetora e no-sobrejetora; a da Figura 1.6 parcial, injetora e no-sobrejetora; e a
da Figura 1.7 parcial, injetora e sobrejetora. A Figura 1.8 ilustra uma funo bijetora.
Exemplo 1.37 Seja f5 = {(0, a), (1, b), (2, c)}. A funo f5 : X Y , assim como a funo
f4 definida no Exemplo 1.35, bijetora. As funes f1 (Exemplo 1.30), f2 (Exemplo 1.32) e f3
(Exemplo 1.33) no so bijetoras. 2
Exemplo 1.38 Considerem-se as funes adio, sobre o conjunto dos nmeros naturais, diviso,
sobre o conjunto dos nmeros reais, e raiz quadrada, sobre o conjunto dos nmeros inteiros:
1.4 Grafos
Um grafo um par ordenado (V , A), em que V denota o conjunto de vrtices (ou ns)
do grafo e A denota uma relao binria sobre V , atravs da qual so especificados os
arcos do grafo. Os arcos indicam associaes entre os vrtices do grafo. Dois vrtices
vi , vj V tais que (vi , vj ) A so ditos vrtices adjacentes.
A estrutura de um grafo pode ser melhor entendida com o auxlio de uma repre-
sentao grfica. Neste caso, os ns so denotados por crculos e os arcos por linhas que
unem pares de vrtices.
Exemplo 1.39 Sejam G1 , V1 e A1 conforme abaixo:
G1 = (V1 , A1 )
V1 = {0, 1, 2, 3}
A1 = {(0, 1), (0, 2), (0, 3), (1, 3), (2, 3)}
O grafo G1 possui quatro vrtices, respectivamente numerados de 0 a 3, e cinco arcos, que
conectam pares de vrtices, conforme especificado em A1 . Graficamente, G1 pode ser ilustrado
conforme a Figura 1.9.
0 1 3
0 1 3
Um grafo orientado dito ordenado quando houver uma relao de ordem pr-
convencionada sobre todos os arcos que emergem dos diversos vrtices do grafo. Essa
relao de ordem tem por objetivo estabelecer uma seqncia entre os diversos arcos que
partem de um mesmo vrtice, e no costuma ser definida explicitamente, uma vez que
conjuntos no incorporam o conceito de seqncia.
Quando se deseja ordenar os arcos que emergem de cada vrtice, comum que se
leve em conta como referncia a seqncia em que os arcos comparecem na representao
algbrica da funo A. Eventualmente pode-se considerar uma seqncia diferente, desde
que devidamente explicitada na representao do grafo.
Exemplo 1.41 Sejam:
G2 = (V2 , A2 )
V2 = {a, b, c, d }
A2 = {(a, b), (b, a), (a, c), (a, d ), (c, b), (d , c), (c, d )}
Suponha-se, para efeito didtico, que A2 fosse constituda de uma seqncia de pares ordenados
(e no de um conjunto de pares ordenados), redigida de maneira anloga representao do conjunto,
porm sem as chaves:
(a, b), (b, a), (a, c), (a, d ), (c, b), (d , c), (c, d )
Suponha-se, ainda, que um mesmo par ordenado no figure mais de uma vez na mesma
seqncia, e que exista uma relao de ordem implcita entre os pares ordenados, de tal forma que
(a, b) < (b, a) < (a, c) < ... < (c, d ). Isso facilita a percepo de uma relao de ordem definida
para os arcos de G2 , conforme mostrado a seguir:
Vrtice d : apenas (d , c)
Essa ordenao pode ser representada graficamente numerando-se os arcos do grafo, indicando-
se assim a ordenao relativa dos arcos que partem de um mesmo vrtice:
1 Elementos de Matemtica Discreta 19
1
a b
2
3 1
1
d c
Trs importantes conceitos esto relacionados a grafos orientados, sejam eles orde-
nados ou no. O nmero NS de ramificaes de sada (ou fan-out ) de um dado
vrtice de um grafo orientado indica a quantidade de arcos que partem do mesmo. De
modo similar, o nmero NE de ramificaes de entrada (ou fan-in) de um determi-
nado vrtice refere-se quantidade de arcos do grafo que possuem o vrtice em questo
como destino. Vrtices com NE = 0 so denominados vrtices-base ou vrtices-raiz,
e vrtices com NS = 0 so denominados vrtices-folha.
Um caminho entre dois arcos, respectivamente denominados arcos inicial e final,
em um grafo, uma seqncia ordenada de arcos, de tal forma que o vrtice prede-
cessor de cada arco, exceo do arco inicial, corresponde ao vrtice sucessor do arco
imediatamente anterior na seqncia ordenada.
O comprimento de um caminho o nmero de arcos que o formam. Por definio,
um caminho de comprimento zero aquele que inicia e termina no mesmo vrtice sem
percorrer nenhum arco.
Um caminho denominado ciclo se o vrtice predecessor do primeiro arco coincidir
com o vrtice sucessor do ltimo arco que o define. Grafos orientados que possuem
pelo menos um ciclo so ditos grafos cclicos. Caso contrrio, so denominados grafos
acclicos.
Exemplo 1.42 Para o grafo G2 da Figura 1.11 (Exemplo 1.41):
A seqncia (a, c)(c, b) constitui um caminho, pois o vrtice predecessor do segundo arco (c
em (c, b)) idntico ao vrtice sucessor do arco anterior (c em (a, c)), e seu comprimento 2. A
seqncia (a, d )(c, d )(d , c) no constitui um caminho, pois o vrtice predecessor do segundo arco
((c)) diferente do vrtice sucessor do arco anterior ((d )). O grafo G2 do tipo cclico, pois possvel
identificar inmeros ciclos, dentre os quais (a, b)(b, a) ou (a, d )(d , c)(c, d )(d , c)(c, b)(b, a). 2
Muitas vezes pode ser til associar aos vrtices de um grafo, aos arcos de um grafo,
ou, eventualmente, a ambos, rtulos que representem informao adicional para a sua
interpretao. Nesses casos, diz-se que o grafo rotulado. Conforme o caso, caracteriza-
se a rotulao de vrtices ou ento a rotulao de arcos do grafo.
20 Linguagens Formais - Teoria, Modelagem e Implementao
Uma rotulao de vrtices definida como sendo uma funo fV que associa os
elementos de V a elementos de um conjunto RV , denominado alfabeto de rotulao de
vrtices. De modo anlogo, uma rotulao de arcos realizada atravs de uma funo
fA que associa elementos de A a elementos de um conjunto RA , denominado alfabeto de
rotulao de arcos.
Exemplo 1.43 Sejam:
G3 = (V3 , A3 )
V3 = {0, 1, 2}
A3 = {(0, 1), (1, 2), (0, 2)}
Uma possvel rotulao simultnea de vrtices e arcos em G3 seria:
0/ 1/
2/
Esquematicamente, essa rotulao pode ser representada conforme mostra a Figura 1.12. 2
Quanto sua natureza, os grafos podem ser classificados em grafos orientados ou
grafos no-orientados, e tambm em grafos rotulados ou grafos no-rotulados. Os grafos
orientados podem ainda ser classificados em grafos ordenados ou grafos no-ordenados,
e ainda como grafos cclicos ou grafos acclicos:
Ordenados / No-ordenados
Orientados / No-orientados
Cclicos / Acclicos
Grafos
Rotulados / No-rotulados
1.5 rvores
So especialmente importantes, no estudo das linguagens formais, e muito aplicados na
prtica, para a anlise e construo de compiladores, os grafos acclicos orientados e as
rvores. Estas, por sua vez, constituem um caso particular dos grafos acclicos orientados
ordenados.
Uma rvore ordenada, ou simplesmente uma rvore, um grafo acclico orientado
e ordenado que possui as seguintes caractersticas adicionais:
Para cada vrtice h sempre um nico caminho que o liga raiz da rvore.
Para vrtices a e b que fazem parte de um mesmo caminho em uma rvore, diz-se
que a ancestral de b se for possvel atingir b a partir de a. Nesse caso, b dito
descendente de a. Quando entre a e b no houver nenhum vrtice intermedirio, diz-se
que a e b so adjacentes. Nessa situao, diz-se ainda que o vrtice a ancestral direto,
ou pai, do vrtice b, e que este descendente direto, ou filho, do vrtice a. O ancestral
mnimo comum de dois vrtices a e b corresponde ao (nico) antecessor de ambos que
seja tambm descendente de todos os antecessores comuns de a e b.
Vrtices tais que NS = 0 so denominados folhas da rvore. Os demais so deno-
minados vrtices internos. Inclui-se, por essa definio, entre os vrtices internos de
uma rvore, o vrtice-raiz dessa rvore.
A profundidade de um vrtice em uma rvore o comprimento do caminho ini-
ciado em sua raiz, e que termina no referido vrtice. A profundidade de uma rvore
definida como sendo a maior dentre as profundidades de seus vrtices.
rvores costumam ser representadas esquematicamente com a raiz na parte superior
da figura, e com os arcos e demais vrtices crescendo para baixo. Normalmente, as
representaes esquemticas das rvores no incorporam indicaes sobre a orientao e
a ordenao dos arcos, as quais neste caso se tornam implcitas, podendo ser inferidas a
partir da prpria figura, de acordo com as seguintes convenes, usualmente adotadas:
todos os arcos apontam para baixo e so implicitamente ordenados da esquerda para a
direita.
Exemplo 1.44 Considere-se a rvore da Figura 1.13:
Raiz
V0 V1
Neste exemplo, o vrtice V1 ancestral direto (pai) de V11 . Este, por sua vez descendente
direto (filho) de V1 . O vrtice Raiz ancestral de V00 e o vrtice V01 descendente de Raiz.
Raiz tambm o mnimo ancestral comum dos vrtices V00 e V11 , que por sua vez so folhas dessa
rvore e apresentam profundidade igual a 2. V0 e V1 so vrtices internos, e possuem profundidade
1. A profundidade desta rvore igual a 2. 2
22 Linguagens Formais - Teoria, Modelagem e Implementao
Induo Matemtica
O princpio da induo matemtica foi estabelecido com o intuito de permitir a genera-
lizao de uma propriedade P para um conjunto infinito de elementos X. Informalmente,
induo definida como uma operao mental que consiste em se estabelecer uma ver-
dade universal ou proposio geral com base no conhecimento de certo nmero de dados
singulares ou de proposies de menor generalidade (Novo Dicionrio Aurlio da Lngua
Portuguesa).
Formalmente, o princpio da induo estabelecido da seguinte forma:
Exemplo 1.45 Deseja-se provar que a propriedade P0 abaixo vlida para todos os nmeros naturais
maiores que 1:
P0 (n) : 1 + 2n < 3n , n 2.
Base da induo:
n = 2.
P0 (2) = 1 + 22 = 5 < 9. Portanto, P0 vlida para n = 2.
Hiptese indutiva:
P0 (k ) vlida para k 2, ou seja, 1 + 2k < 3k , k 2.
Passo indutivo:
P0 (k ) implica P0 (k + 1), k 2.
Prova:
Pela hiptese indutiva: P0 (k ) = 1 + 2k < 3k , k 2.
Multiplicando-se ambos os membros da desigualdade por 2 : 2 + 2k+1 < 2 3k .
Subtraindo-se 1 de ambos os membros da desigualdade: 1 + 2k+1 < 2 3k 1.
Como 2x 1 < 3x , x 1 (porque 3x = (2 + 1)x = 2x + 2, logo 2x 1 < 2x + 2 e 1 < 2
verdadeiro), ento 1 + 2k+1 < 2 3k 1 < 3 3k = 3k+1 .
Portanto, 1 + 2k+1 < 3k+1 = P0 (k + 1), ou seja, P0 (n), n 2.
A ttulo de complementao deste exemplo, pode-se demonstrar, tambm por induo, que
a propriedade 2n 1 < 3n, n 1, empregada na demonstrao acima, verificada no intervalo
especificado. Na prtica, a necessidade de se demonstrar passos ou hipteses intermedirias em geral
varia, conforme seja ou no intuitivo aceitar as afirmaes apresentadas.
P1 (n) = 2n 1 < 3n, n 1.
Base da induo:
n = 1.
P1 (1) = 2 1 1 = 1 < 3.
Hiptese indutiva:
P1 (k ) vlida para k 1, ou seja, 2k 1 < 3k , k 1.
Passo indutivo:
P1 (k ) implica P1 (k + 1), k 1.
Prova:
Pela hiptese indutiva: P1 (k ) = 2k 1 < 3k , k 1.
Somando-se 2 a ambos os membros da desigualdade: 2k + 1 < 3k + 2.
Como: 3x < 3x + 1, x 1
Ento: 2k + 1 < 3k + 2 < 3k + 3, ou seja, 2k + 1 < 3k + 3
Logo: 2(k + 1) 1 < 3(k + 1) = P1 (k + 1), ou P1 (n), n 1. 2
n
X n(n + 1)
Exemplo 1.46 Demonstrar, por induo, que P2 (n) : i= .
2
i =0
Base da induo:
n = 0.
0
X 0(0 + 1)
P2 (0) : i= =0
2
i =0
Hiptese indutiva:
k
X k (k + 1)
P2 (k ) : i= ,k 0
2
i =0
Passo indutivo:
P2 (k ) implica P2 (k + 1), k 0.
Prova:
k
X k (k + 1)
Pela hiptese indutiva: i= ,k 0
2
i =0
Somando-se (k+1) a ambos os membros da igualdade:
k k+1
X X k (k + 1)
i + (k + 1) = i= + (k + 1)
2
i =0 i =0
k (k + 1) k 2 + k + 2k + 2 k 2 + 3k + 2
Desmembrando: + (k + 1) = =
2 2 2
k 2 + 3k + 2 (k + 1)(k + 2) (k + 1)((k + 1) + 1)
Fatorando: = =
2 2 2
24 Linguagens Formais - Teoria, Modelagem e Implementao
k+1
X (k + 1)((k + 1) + 1)
Logo: i= = P2 (k + 1)
2 2
i =0
n n
!2
X 3
X
Exemplo 1.47 Demonstrar, por induo, que P3 (n) = i = i ,n 0
i =0 i =0
Base da induo:
n = 0. !2
0
X 0
X
3
i = i =0
i =0 i =0
Hiptese indutiva:
k k
!2
X 3
X
i = i ,k 0
i =0 i =0
Passo indutivo:
P3 (k ) implica P3 (k + 1), k 0.
Prova: !2
k k
X 3
X
Pela hiptese indutiva: i = i ,k 0
i =0 i =0
Somando-se (k + 1)3 a ambos os membros da igualdade:
k k
!2 k+1
X 3 3
X X
i + (k + 1) = i + (k + 1)3 = i3
i =0 i =0 i =0
n
X n(n + 1)
De acordo com o exemplo anterior: i= ,n 0
2
i =0
k
!2 2
X
3 k (k + 1)
Logo: i + (k + 1) = + (k + 1)3
2
i =0
2
k (k + 1) k 2 (k + 1)2
Desmembrando: + (k + 1)3 = + (k + 1)(k + 1)2
2 4
k 2 (k + 1)2 k 2 + 4k + 4
Fatorando: + (k + 1)(k + 1)2 = (k + 1)2
4 4
Fatorando novamente: 2
2
k + 4k + 4 k +2 k +2 2
(k + 1)2 = (k + 1)2 = (k + 1)
4 2 2 !
2 k+1 2
k + 2 2 (k + 1) + 1 X
Como: (k + 1) = (k + 1) = i
2 2
i =0
k k+1 k+1
!2
X 3 3
X 3
X
Ento: i + (k + 1) = i = i = P3 (k + 1)
i =0 i =0 i =0 2
Contradio
Uma outra tcnica bastante popular utilizada na demonstrao de teoremas a demons-
trao por contradio.
1 Elementos de Matemtica Discreta 25
Exemplo 1.52 Considere-se o conjunto dos nmeros inteiros Z e o subconjunto de Z composto apenas
pelos nmeros mpares. Trata-se, naturalmente, de dois conjuntos infinitos, sendo o segundo um
subconjunto prprio do primeiro. Porm, de acordo com a definio, embora isso parea paradoxal,
os dois conjuntos possuem a mesma cardinalidade, j que a funo bijetora 2 i + 1, onde i Z,
mapeia univocamente cada elemento de Z em um nico elemento do conjunto dos nmeros mpares.2
Z 0 1 -1 2 -2 3 -3 ...
N 0 1 2 3 4 5 6 ...
Exemplo 1.54 O conjunto formado pelos pares ordenados (x , y) N N, com x > y, tambm
constitui um exemplo de conjunto infinito enumervel. Isso pode ser percebido com o auxlio da
Tabela 1.3, em que um arranjo bidimensional permite visualizar a seqencializao desses pares, de
modo que seja possvel estabelecer a sua associao com os elementos de N.
1 Elementos de Matemtica Discreta 27
A associao com N pode ser feita imaginando-se uma linha que percorra todos os elementos
desta matriz a partir do canto superior esquerdo, conforme a seqncia geomtrica mostrada na
Tabela 1.3. Desse modo, a seguinte seqncia de pares obtida:
(1, 0), (2, 0), (3, 0), (2, 1), (3, 1), (4, 0), (5, 0), (4, 1), (3, 2)...
Tal seqncia pode ser facilmente colocada em correspondncia com os elementos de N, con-
forme ilustrado na Tabela 1.4.
Tcnica semelhante pode ser usada para demonstrar que o conjunto N N e o conjunto dos
nmeros racionais tambm so enumerveis. Neste ltimo caso, em particular, basta considerar o
elemento (x , y) N N como uma representao da frao x /y (a fim de evitar o denominador
zero, a primeira coluna do arranjo deve ser omitida). 2
Exemplo 1.55 O conjunto R, composto pelos nmeros reais, constitui um exemplo de conjunto
infinito no-enumervel, uma vez que, como demonstrado a seguir, |R| 6= |N|. Para efetuar essa
demonstrao, ser considerado o seguinte subconjunto de R:
S = {x R | 0 < x < 1}
A prova de que R no-enumervel efetuada em dois passos: inicialmente demonstra-se
que S possui a mesma cardinalidade que R, e a seguir demonstra-se que S um conjunto no-
enumervel. O fato de que |S | = |R | pode ser constatado pela existncia da funo bijetora f ,
apresentada a seguir, a qual permite associar univocamente elementos de S com elementos de R:
1 1, 0 < x < 0, 5
f (x ) = 2x
1
+ 1, 0, 5 x < 1
2(x 1)
A prova de que S um conjunto no-enumervel feita por contradio, ou seja, mostrando-se
que, qualquer que seja a seqencializao proposta para os elementos de S , sempre ser possvel
identificar um novo elemento de S que no pertence seqncia apresentada. Desse modo, a
hiptese original de que S um conjunto enumervel deve ser considerada invlida.
Admita-se que exista uma seqencializao de S de tal modo que seja possvel associar cada
elemento desse conjunto univocamente a elementos de N. Assim, seria obtida uma associao do
tipo ilustrado pela Tabela 1.5.
R R0 R1 R2 R3 ...
N 0 1 2 3 ...
Suponha-se, sem perda de generalidade, que todos os elementos de S sejam denotados atravs
de representaes com um nmero infinito de casas de decimais significativas. Assim, por exemplo,
em vez de escrever 0, 1, adota-se a representao equivalente 0, 099999999999999999999999...
Se cada elemento Ri S pode ser escrito como sendo uma seqncia infinita do tipo:
0, di0 di1 di2 di3 ...din ..., ento a construo do novo elemento:
0, x0 x1 x2 x3 ...xn ..., xj 6= djj , xj 6= 0
suficiente para provar que o mesmo no pertence seqncia originalmente proposta, uma vez
que esse novo elemento difere em pelo menos uma casa decimal de cada um dos elementos ini-
cialmente considerados, sendo, portanto, diferente de todos eles. Logo, S no enumervel e,
conseqentemente, R tambm no. 2
Como est mostrado no Exemplo 1.55, nem todos os conjuntos infinitos possuem
a mesma cardinalidade. Assim, apesar de N e R possurem uma quantidade infinita de
elementos, intuitivo que R possui uma quantidade muito maior de elementos que N, ou
seja, |R| > |N|, impedindo que seja estabelecida uma funo bijetora entre ambos.
Esses so alguns dos resultados da Teoria dos Nmeros Transfinitos ([57]), desenvol-
vida no final do sculo XIX pelo matemtico russo Georg Cantor (1845-1918), de acordo
com a qual os nmeros transfinitos representam quantidades no-finitas ordenadas de
forma crescente. Tais quantidades so representadas por 0 , 1 ...n ... 1 , de tal forma que
i1 < i < i+1 , para i 1. Alm disso, 0 = |N| e 1 = |R|.
Outros exemplos de conjuntos infinitos enumerveis so o conjunto dos nmeros
racionais e o conjunto de todas as cadeias que podem ser formadas pela concatenao de
smbolos de um conjunto finito . J o conjunto formado por todos os subconjuntos de
N, ou seja, o conjunto 2N , no-enumervel.
Formalmente, um conjunto X dito infinito se for possvel identificar um subcon-
junto prprio de X , por exemplo, Y , tal que |X | = |Y |.
Exemplo 1.56 No Exemplo 1.55, o fato de que S R e |S | = |R| suficiente para garantir que R
um conjunto infinito. 2
Exemplo 1.57 Considere-se o conjunto dos nmeros naturais N. Deseja-se demonstrar que N
infinito com o auxlio do subconjunto prprio N{0}. No difcil perceber que esses dois conjuntos
possuem a mesma cardinalidade, uma vez que a funo n + 1, n N mapeia univocamente cada
elemento de N em elementos do subconjunto prprio N {0} : 0 1, 1 2, 2 3, 3 4, 4
5, 5 6, 6 7...
Assim, apesar de N {0} possuir um elemento a menos que N, na verdade ambos possuem a
mesma cardinalidade, o que confirma N como conjunto infinito. 2
De acordo com a hiptese formulada (de que existe uma bijeo entre os conjuntos),
esperado que S = f (xi ) para algum xi A. Tal concluso, se verdadeira, acarretaria
as seguintes conseqncias, de forma exclusiva:
Qualquer que seja o caso, resulta uma contradio. Logo, a hiptese inicialmente
formulada falsa e disso conclui-se no existir qualquer bijeo entre A e 2A . Portanto,
|A| < |2A |.
O Teorema 1.3 demonstra que conjuntos infinitos de cardinalidades sucessivamente
maiores podem ser obtidos pela aplicao sucessiva da operao conjunto-potncia. Con-
sidere os conjuntos A, B = 2A , C = 2B , D = 2C etc. Ento, |A| < |B | < |C | < |D | < ...
De acordo com a teoria de Cantor, N o conjunto que possui a menor cardinalidade
entre todos os conjuntos infinitos, a qual denotada por 0 , o primeiro nmero da
sua srie transfinita. Por conseqncia, |N| < |2N |. Por outro lado, conforme foi visto
anteriormente, |N| < |R|, o que sugere a questo: ser que |R| = |2N | ?.
De fato, este resultado pode ser provado como sendo verdadeiro. Alm disso, |R| e
|2N | correspondem ao segundo nmero transfinito conhecido, na seqncia de Cantor, o
qual denotado por 1 . Por outro lado, no se sabe da existncia de algum conjunto X ,
tal que 0 < |X | < 1 .
Teorema 1.4 (|B |, B A, |A| = 0 ) Sejam A e B dois conjuntos, B A. Se
|A| = 0 , ento |B | 0 .
Justificativa Se |A| = 0 , ento existe uma funo bijetora entre o conjunto dos n-
meros naturais N e o conjunto A (e vice-versa). Logo, existe uma funo injetora e total
f1 que associa elementos de A e N, conforme a Tabela 1.6.
A: a0 a1 a2 ... an ...
f1 :
N 0 1 2 ... n ...
B: a1 ... an ...
f2 :
A: a0 a1 a2 ... an ...
A composio das funes f1 e f2 , ilustrada na Tabela 1.8, mostra que existe uma
funo injetora e total de B para N.
Logo, |B | |N|, ou seja, |B | 0 . Em outras palavras, qualquer subconjunto
(finito ou infinito) de um conjunto enumervel tambm um conjunto enumervel.
30 Linguagens Formais - Teoria, Modelagem e Implementao
B: a1 ... an ...
f2 :
A: a0 a1 a2 ... an ...
f1 :
N 0 1 2 ... n ...
Exemplo 2.1 Como exemplo de alfabeto podemos mencionar o conjunto dos dgitos hexadecimais,
em que cada elemento (dgito) desse conjunto corresponde a um determinado smbolo:
= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d , e, f }
Naturalmente, as cadeias que podem ser construdas a partir dos smbolos desse alfabeto
correspondem aos numerais hexadecimais: 123, a0b56, fe5dc, b, abc, 55efff ... 2
D-se o nome de cadeia elementar (ou unitria) a qualquer cadeia formada por
um nico smbolo, como o caso da cadeia do Exemplo 2.2. Naturalmente, toda cadeia
unitria tem comprimento 1.
Um outro importante exemplo de alfabeto corresponde ao conjunto dos smbolos
definidos em algum dicionrio da lngua portuguesa. Note que, diferentemente do al-
fabeto anteriormente considerado, em que todos os smbolos eram compostos de um
nico caractere, os smbolos deste novo alfabeto so construdos a partir da concatena-
o de um nmero varivel de caracteres (no caso, as letras do alfabeto romano). Para o
presente estudo, embora representados com diversos caracteres, tais smbolos so conside-
rados indivisveis, e as correspondentes cadeias elementares apresentam, por essa razo,
comprimento unitrio quando consideradas no contexto da lngua portuguesa.
Considerando-se ainda que tal alfabeto suficientemente extenso para conter as
conjugaes de todos os verbos, as formas flexionadas de todos os adjetivos, substantivos
etc., enfim, todas as palavras possveis de serem empregadas em nosso idioma, ento
a cadeia Exemplo de uma cadeia no novo alfabeto dever ser considerada uma cadeia
vlida, construda a partir dos smbolos desse alfabeto, e o seu comprimento igual a
7. Note que esse alfabeto da lngua portuguesa, apesar de extenso, finito, e tambm
que possvel construir uma quantidade infinita de cadeias de comprimento finito com
os smbolos dele. Observe-se que, entre estas, h cadeias que na lngua portuguesa no
fazem sentido. Por exemplo, cadeia uma exemplo errado o. As demais so empregadas
nas diversas formas de comunicao humana.
O conceito de cadeia vazia especialmente importante na teoria das linguagens
formais. Denota-se por a cadeia formada por uma quantidade nula de smbolos, isto ,
a cadeia que no contm nenhum smbolo. Formalmente,
|| = 0
Duas cadeias, sejam elas elementares ou no, podem ser anexadas, formando uma
s cadeia, atravs da operao de concatenao. Essa operao fornece como resultado
uma nova cadeia, formada pela justaposio ordenada dos smbolos que compem os seus
operandos separadamente. Observe-se que a operao de concatenao entre uma cadeia
e um smbolo realizada atravs da concatenao da cadeia em questo com a cadeia
elementar correspondente ao smbolo.
Denota-se a concatenao de duas cadeias e como ou, simplesmente, .
Exemplo 2.3 Considere o alfabeto = {a, b, c, d }, e as cadeias = abc, = dbaca e = a.
A concatenao da cadeia com a cadeia assim obtida:
= = abcdbaca, e | | = | | + | | = 3 + 5 = 8
Da mesma forma, obtm-se a concatenao de com :
2 Conceitos Bsicos de Linguagens 33
= = dbacaabc, e, || = | | + | | = 5 + 3 = 8
Note-se que, neste exemplo, 6= .
A concatenao da cadeia com a cadeia elementar dada por:
= = abca, e | | = | | + | | = 3 + 1 = 4
Finalmente, a concatenao da cadeia elementar com a cadeia obtida como:
= = adbaca, e | | = | | + | | = 1 + 5 = 6 2
Como se pode perceber, a operao de concatenao, embora associativa, no
comutativa. Dadas trs cadeias , , quaisquer, pode-se sempre afirmar que () =
().
Por outro lado, dependendo dos particulares e considerados, pode ser que ou
6= ou = (por exemplo, se e/ou forem cadeias vazias ou, ainda, se
= ).
No caso da cadeia vazia (elemento neutro em relao ao operador de concatenao)
so vlidas as seguintes relaes:
1. = =
2. || = || = ||
Diz-se que uma cadeia um prefixo de outra cadeia se for possvel escrever
como . A cadeia dita sufixo de se puder ser escrita como . Em ambos
os casos, admite-se a possibilidade de = . Nos casos em que 6= , diz-se que ,
respectivamente, prefixo prprio ou sufixo prprio da cadeia . Note que a cadeia
vazia pode ser considerada simultaneamente prefixo ou sufixo de qualquer cadeia.
Dadas quatro cadeias , , e , uma cadeia chamada subcadeia de uma cadeia
sempre que = . Note-se que, se ou ou ambos forem vazios, a definio tambm
se aplica. Note-se tambm que prefixos e sufixos so casos particulares de subcadeias.
Uma cadeia dita o reverso de uma cadeia , denotando-se o fato por = R ,
se contiver os mesmos smbolos que , porm justapostos no sentido inverso, ou seja:
se = 1 2 ...n1 n ento = n n1 ...2 1
Por definio, R = .
Exemplo 2.4 Considerem-se as cadeias = 123abc e = d . Ento, R = cba321 e R = d . 2
Finalmente, convenciona-se que i representa a cadeia formada por i smbolos
concatenados. Por definio, 0 = .
Exemplo 2.5 Considere-se o smbolo a. Ento:
a 0 = ;
a 1 = a;
a 2 = aa;
a 3 = aaa;
etc.
2
2.2 Linguagens
Uma linguagem formal um conjunto, finito ou infinito, de cadeias de comprimento
finito, formadas pela concatenao de elementos de um alfabeto finito e no-vazio. Alm
34 Linguagens Formais - Teoria, Modelagem e Implementao
das operaes previamente definidas para conjuntos, como unio, diferena, interseco
etc., outras operaes, tais como a concatenao e os fechamentos, tambm so funda-
mentais para a definio e o estudo das linguagens formais.
Antes de apresent-las, convm notar a distino que h entre os seguintes conceitos:
cadeia vazia , conjunto vazio e o conjunto que contm apenas a cadeia vazia {}.
O primeiro deles, , denota a cadeia vazia, ou seja, uma cadeia de comprimento
zero, ao passo que os dois seguintes so casos particulares de linguagens (que por sua
vez so conjuntos): denota uma linguagem vazia, ou seja, uma linguagem que no
contm nenhuma cadeia, e {} denota uma linguagem que contm uma nica cadeia, a
cadeia vazia. Observe-se que || = 0 e |{}| = 1.
Note-se a diferena conceitual que h entre alfabetos, linguagens e cadeias. Al-
fabetos so conjuntos, finitos e no-vazios, de smbolos, atravs de cuja concatenao
so obtidas as cadeias. Linguagens, por sua vez, so conjuntos, finitos (eventualmente
vazios) ou infinitos, de cadeias. Uma cadeia tambm denominada sentena de uma
linguagem, ou simplesmente sentena, no caso de ela pertencer linguagem em questo.
Linguagens so, portanto, colees de sentenas sobre um dado alfabeto.
A Figura 2.1 ilustra a relao entre os conceitos de smbolo, alfabeto, cadeia e
linguagem:
A Figura 2.2 facilita o entendimento das relaes entre os conceitos: (i) um conjunto
de smbolos forma um alfabeto, (ii) a partir de um alfabeto (finito) formam-se (infinitas)
cadeias; (iii) determinadas cadeias so escolhidas para fazer parte de uma linguagem;
(iv) uma linguagem um conjunto de cadeias, que por isso so tambm denominadas
sentenas.
Exemplo 2.6 O smbolo a elemento do alfabeto {a} e tambm um item da cadeia aaa, que por
sua vez elemento da linguagem {aaa}. Por outro lado, a linguagem {aaa} um conjunto que
contm a cadeia aaa, a cadeia aaa uma seqncia de smbolos a e o alfabeto {a} contm o
smbolo a. A Figura 2.3 ilustra esses conceitos, conforme a Figura 2.1.
Exemplo 2.7 A Figura 2.4 ilustra uma aplicao dos conceitos da Figura 2.2 ao alfabeto {a, b}. A
linguagem apresentada , naturalmente, apenas uma das inmeras que podem ser criadas a partir
desse alfabeto.
36 Linguagens Formais - Teoria, Modelagem e Implementao
0 = {}
1 = {a, b, c}
2
= {aa, ab, ac, ba, bb, bc, ca, cb, cc}
3
= {aaa, aab, aac, aba, abb, abc, ..., ccc}
etc.
2
trs, e assim por diante, ou seja, a coleo de todas as cadeias, de qualquer comprimento,
que possam ser formadas por concatenao a partir dos smbolos do alfabeto.
A definio de uma linguagem pode, portanto, ser formulada de maneira mais rigo-
rosa com o auxlio da operao de fechamento reflexivo e transitivo: sendo uma linguagem
qualquer coleo de cadeias sobre um determinado alfabeto , e como contm todas
as possveis cadeias sobre , ento toda e qualquer linguagem L sobre um alfabeto
sempre poder ser definida como sendo um subconjunto de , ou seja, L .
Diz-se que a maior linguagem que se pode definir sobre um alfabeto , observando-
se um conjunto qualquer P de propriedades, corresponde ao conjunto de todas as cadeias
w tais que w satisfaz simultaneamente a todas as propriedades pi P .
De uma forma geral, sempre que for feita uma referncia a uma determinada lingua-
gem L cujas cadeias satisfaam a um certo conjunto de propriedades P , estar implcita
(a menos de ressalva em contrrio) a condio de que se trata da maior linguagem definida
sobre L, cujas cadeias satisfaam o conjunto de propriedades P .
Um caso particular importante a se considerar a linguagem cujo conjunto P de
propriedades seja o menos restritivo possvel, considerando toda e qualquer cadeia de
qualquer comprimento (finito) como sendo vlida. Assim, a maior linguagem dentre
todas as que podem ser definidas sobre um alfabeto qualquer L = (note-se, neste
caso, que a nica propriedade a ser satisfeita pelas cadeias de L que elas sejam definidas
sobre , ou seja, obtidas a partir da simples justaposio de smbolos de ). Qualquer
outra linguagem definida sobre esse mesmo alfabeto corresponder obrigatoriamente a
um subconjunto (eventualmente prprio) de .
Por outro lado, a menor linguagem que pode ser definida sobre um alfabeto
qualquer , ou seja, a linguagem vazia ou a linguagem composta por zero sentenas.
Finalmente, como o conjunto de todos os subconjuntos possveis de serem obtidos
a partir de 2 , tem-se que 2 representa o conjunto de todas as linguagens que
podem ser definidas sobre o alfabeto .
Em resumo:
Exemplo 2.9 Seja = {a, b, c} e P o conjunto formado pela nica propriedade todas as cadeias
so iniciadas com o smbolo a. Ento:
L0 2 , L1 2 , L2 2 , L3 2 ;
Alm de L0 , L1 , L2 e L3 , existem inmeras outras linguagens que podem ser definidas sobre
.
2
+ = {}, pois 6
2
L1 = LR
2 = {x
R
| x L2 }
L1 /L2 = {x | xy L1 e y L2 }
L1 = {a i b | i 0}
L2 = {a i bc i | i 0}
L3 = {b}
L4 = {a i b | i 1}
L5 = {bc i | i 0}
L6 = {c i b | i 0}
L7 = {a i | i 0}
Ento, so verdadeiras as seguintes relaes:
L1 /L3 = L7 :
L1 = {b, ab, aab, aaab...}
L3 = {b}
Para cada uma das cadeias pertencentes a L1 , possvel identificar o (nico) membro de
L3 como sufixo dos membros de L1 . Logo, atravs da remoo desse sufixo b, de todas as
cadeias de L1 , o conjunto resultante ser L7 .
L1 /L4 = L7 :
L1 = {b, ab, aab, aaab...}
L4 = {ab, aab, aaab...}
Nenhuma das cadeias pertencentes a L4 pode ser considerada sufixo de b L1 . Por outro
lado, ab L4 sufixo de ab L1 , de aab L1 etc., resultando que , a, aa... pertencem
ao quociente de L1 por L4 . O mesmo ocorre com as cadeias aab, aaab... pertencentes a L4 ,
sem no entanto modificar o resultado da operao.
L5 /L7 =
L5 = {b, bc, bcc, bccc...}
L7 = {ab, aab, aaab...}
Como nenhuma cadeia de L5 contm o smbolo a (presente em todas as cadeias de L7 ),
conclui-se no ser possvel representar nenhuma cadeia de L5 atravs da concatenao de um
prefixo com uma cadeia de L7 .
L2 /L6 = L7
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
L6 = {b, cb, ccb, cccb...}
Como nenhum dos elementos de L6 tem o smbolo c como sufixo, todas as cadeias perten-
centes a L2 que terminam com o smbolo c no possuem sufixo em L6 . No entanto, todas as
cadeias de L2 compostas apenas por smbolos a e b possuem a cadeia b L6 como sufixo.
Removido de tais cadeias esse sufixo, restam as cadeias formadas por zero ou mais smbolos
a, ou seja, a linguagem L7 .
L2 /L1 = L7
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
L1 = {b, ab, aab, aaab...}
40 Linguagens Formais - Teoria, Modelagem e Implementao
Nenhuma das cadeias da linguagem L2 que termina com o smbolo c possui sufixo em L1 ,
uma vez que nenhuma das cadeias dessa linguagem termina com o smbolo c. Por outro lado,
todas as cadeias de L2 compostas apenas pelos smbolos a e b possuem como sufixo em L1
as cadeias de mesmo formato, porm com uma quantidade menor ou igual de smbolos a (por
exemplo, aab L2 possui como sufixo as cadeias b, ab, aab), resultando que o quociente
formado por cadeias com uma quantidade maior ou igual a zero de smbolos a (no exemplo,
aa, a, ).
L5 /L2 = {}
L5 = {b, bc, bcc, bccc...}
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
No difcil perceber, neste caso, que para a cadeia b L5 , b L2 o nico sufixo da
mesma em L2 e, portanto, L5 /L2 . O mesmo raciocnio vale para a cadeia bc L5 , e
assim por diante. Logo, o quociente corresponde linguagem formada pela nica cadeia .
2
h : 1 2
s() =
s(a) = s(a)s(), a 1 , 1
s(a) = {x };
s(c) = {z , zz , zzz }.
h(a) = x ;
h(b) = x ;
h(c) = z .
h 1 (y) = {x | y = h(x )}
Exemplo 2.16 Ainda no Exemplo 2.3, a imagem homomrfica inversa de h(L) pode ser definida
atravs do homomorfismo inverso h 1 :
h 1 (x ) = {a, b};
h 1 (z ) = {c}
e, portanto, h 1 (h(L)) 6= L. 2
j (a) = c;
j (b) = dd .
42 Linguagens Formais - Teoria, Modelagem e Implementao
L2 = {c i d 2i | i 1}
A imagem isomrfica inversa de L2 , ou seja, a linguagem L1 , pode ser obtida a partir do
isomorfismo inverso:
j 1 (c) = a;
j 1 (dd ) = b.
j (0) = 0000
j (1) = 0001
j (2) = 0010
j (3) = 0011
j (4) = 0100
j (5) = 0101
j (6) = 0110
j (7) = 0111
j (8) = 1000
j (9) = 1001
j (L) mapeia os nmeros naturais na representao equivalente em BCD (Binary Coded Deci-
mal ). O isomorfismo inverso j 1 , abaixo, permite retornar ao domnio dos nmeros naturais:
j 1 (0000) = 0
j 1 (0001) = 1
j 1 (0010) = 2
j 1 (0011) = 3
j 1 (0100) = 4
j 1 (0101) = 5
j 1 (0110) = 6
j 1 (0111) = 7
2 Conceitos Bsicos de Linguagens 43
j 1 (1000) = 8
j 1 (1001) = 9
2
n
n+n
(n*n)
n*(n(n+n+n))
nn*
(n*n)))
n*-(n(+n+/))
2
Portanto:
L1 = {a, aa, ab, aaa, aab, aba, abb, aaa...}
fcil perceber que a condio (2) acima verificada, mas a condio (1) no. Por exemplo,
a cadeia ab L2 e ab L1 . Por outro lado, a cadeia aba L1 , porm aba 6 L2 . Logo, L1 L2 e
no se pode dizer que G e M sejam equivalentes. 2
2.3 Gramticas
Tambm conhecidas como dispositivos generativos, dispositivos de sntese, ou
ainda dispositivos de gerao de cadeias, as gramticas constituem sistemas formais
baseados em regras de substituio, atravs dos quais possvel sintetizar, de forma
exaustiva, o conjunto das cadeias que compem uma determinada linguagem.
Para ilustrar esse conceito, nada melhor do que a prpria noo intuitiva, adquirida
poca do ensino fundamental, do significado do termo gramtica: o livro atravs do
qual so aprendidas as regras que indicam como falar e escrever corretamente um idioma.
Como se sabe, as regras assim definidas especificam combinaes vlidas dos sm-
bolos que compem o alfabeto os diversos verbos, substantivos, adjetivos, advrbios,
pronomes, artigos etc. , e isso feito com o auxlio de entidades abstratas denomi-
nadas classes sintticas: sujeito, predicado etc. Assim, por exemplo, a frase O menino
atravessou a rua distraidamente considerada correta, do ponto de vista gramatical,
pois ela obedece a uma das inmeras regras de formao de frases, baseada no padro
sujeito + predicado + complemento.
De acordo com tais regras, um sujeito pode ser composto por um artigo (O) se-
guido de um substantivo (menino), o predicado pode conter um verbo (atravessou)
e um correspondente objeto direto (a rua), e o complemento pode modificar a ao
(distraidamente). O objeto direto, por sua vez, pode seguir o mesmo padro estru-
tural do sujeito: artigo (a) seguido de substantivo (rua).
Naturalmente, o conjunto das regras que formam uma gramtica deve ser sufici-
ente para permitir a elaborao de qualquer frase ou discurso corretamente construdo
em um determinado idioma, e no deve permitir a construo de qualquer cadeia que
no pertena linguagem. Convm notar, no exemplo do pargrafo acima, que os termos
em itlico correspondem s denominadas classes sintticas do portugus, e os termos em
negrito, aos smbolos que efetivamente fazem parte do seu alfabeto.
Assim como ocorre no caso das linguagens naturais, as linguagens formais tambm
podem ser especificadas atravs de gramticas a elas associadas. No caso das gram-
46 Linguagens Formais - Teoria, Modelagem e Implementao
ticas das linguagens formais, que constituem o objeto deste estudo, a analogia com as
gramticas das linguagens naturais muito grande. Tratam-se, as primeiras, de con-
juntos de regras que, quando aplicadas de forma recorrente, possibilitam a gerao de
todas as cadeias pertencentes a uma determinada linguagem.
Diferentemente das gramticas das linguagens naturais, que so descritas por in-
termdio de linguagens tambm naturais (muitas vezes a mesma que est sendo descrita
pela gramtica), as gramticas das linguagens formais so descritas utilizando notaes
matemticas rigorosas que visam, entre outros objetivos, evitar dvidas na sua interpre-
tao. Tais notaes recebem a denominao de metalinguagens linguagens que so
empregadas para definir outras linguagens.
Formalmente, uma gramtica G pode ser definida como sendo uma qudrupla2 :
G = (V , , P , S )
onde:
S a raiz da gramtica, S V .
P = {(, ) | (, ) V NV V }
ou seja, P um subconjunto de V NV V .
Exemplo 2.21 Seja G1 = (V1 , 1 , P1 , S ), com:
2 Dependendo da preferncia dos autores, as gramticas podem ser definidas de outras maneiras, modificando-se
a ordem dos componentes, ou explicitando/implicitando determinados conceitos. Ao ler textos sobre este
assunto, importante verificar antes qual foi a notao adotada pelo autor, para que se possa interpret-la
corretamente.
2 Conceitos Bsicos de Linguagens 47
V1 = {0, 1, 2, 3, S , A}
1 = {0, 1, 2, 3}
N1 = {S , A}
P1 = {S 0S 33, S A, A 12, A }
fcil verificar que G1 est formulada de acordo com as regras gerais acima enunciadas para
a especificao de gramticas. 2
00S 3333 e 00A3333 so formas sentenciais, pois 0S 33 00S 3333 00A3333 atravs das
produes S 0S 33 e S A, aplicadas nesta ordem;
L(G) = {w | S + w }
Exemplo 2.23 Pela inspeo das produes da gramtica G1 do Exemplo 2.21, pode-se concluir
que:
L1 (G1 ) = {0m 1n 2n 32m | m 0 e (n = 0 ou n = 1)}
So exemplos de sentenas pertencentes a L1 : , 12, 033, 01233, 003333, 00123333 etc. 2
V2 = {a, b, c, S , B , C }
2 = {a, b, c}
P2 = {S aSBC , S abC , CB BC , bB bb, bC bc, cC cc}
possvel definir uma mesma linguagem atravs de duas ou mais gramticas distin-
tas. Quando isso ocorre, diz-se que as gramticas que definem a linguagem em questo
so sintaticamente equivalentes ou, simplesmente, equivalentes uma outra.
2 Conceitos Bsicos de Linguagens 49
Finalmente, a linguagem L5 definida pelas cadeias sobre = {a, b}, de tal forma que todas
elas sejam iniciadas com o smbolo b e contenham um nico smbolo b. So exemplos b, ba, baa, baaa
etc. A linguagem L5 gerada por G5 = ({a, b, S , X }, {a, b}, {S bX , X aX , X }, S ).
Esquematicamente, a relao entre as linguagens L0 , L1 , L2 , L3 , L4 e L5 pode ser observada
na Figura 2.5 ( bom ter em mente que linguagens so conjuntos).
A maior linguagem que pode ser definida sobre {a, b} {a, b} , que, neste caso, corresponde
a L0 ;
O conjunto de todas as linguagens que podem ser definidas sobre {a, b} dado por 2{a,b} .
Assim, L0 , L1 , L2 , L3 , L4 e L5 pertencem, todas, a 2{a,b} . Em outras palavras, cada uma
dessas linguagens um elemento de 2{a,b} , que por sua vez um conjunto infinito.
2
2.5 Reconhecedores
Conhecidos tambm como dispositivos cognitivos, dispositivos de aceitao, acei-
tadores sintticos ou simplesmente autmatos, os reconhecedores so sistemas for-
mais capazes de aceitar todas as sentenas que pertenam a uma determinada linguagem,
rejeitando todas as demais. Por esse motivo, constituem uma forma alternativa s gra-
mticas para a representao finita de linguagens.
Diferentemente das gramticas, para as quais possvel definir e empregar uma
notao formal adequada para todas as classes de linguagens (notao algbrica vista
na Seo 2.3), os reconhecedores, ao contrrio, so mais convenientemente estudados
2 Conceitos Bsicos de Linguagens 51
A fita de entrada contm a cadeia a ser analisada pelo reconhecedor. Ela dividida
em clulas, e cada clula pode conter um nico smbolo da cadeia de entrada, pertencente
ao alfabeto de entrada escolhido para o reconhecedor. A cadeia de entrada disposta
da esquerda para a direita, sendo o seu primeiro smbolo colocado na posio mais
esquerda da fita.
Dependendo do tipo de reconhecedor considerado, a fita (ou o conjunto de fitas) de
entrada pode apresentar comprimento finito ou infinito. Neste ltimo caso, a fita pode
ter ou no limitao esquerda e/ou direita. A cadeia de entrada registrada na fita
de entrada pode estar delimitada por smbolos especiais, no pertencentes ao alfabeto de
entrada, sua esquerda e/ou sua direita, porm isso no obrigatrio.
A leitura dos smbolos gravados na fita de entrada feita atravs de um cabeote
de acesso, normalmente denominado cursor, o qual sempre aponta o prximo smbolo
da cadeia a ser processado. Os movimentos do cursor so controlados pela mquina
de estados, e podem, dependendo do tipo de reconhecedor, ser unidirecionais (podendo
deslocar-se para um lado apenas, tipicamente para a direita) ou bidirecionais (podendo
deslocar-se para a esquerda e para a direita). Determinados tipos de reconhecedores
utilizam o cursor no apenas para lerem os smbolos da fita de entrada, mas tambm
para escreverem sobre a fita, substituindo smbolos nela presentes por outros, de acordo
com comandos determinados pela mquina de estados.
A mquina de estados funciona como um controlador central do reconhecedor, e
contm uma coleo finita de estados, responsveis pelo registro de informaes colhidas
52 Linguagens Formais - Teoria, Modelagem e Implementao
no passado, mas consideradas relevantes para decises futuras, e transies, que pro-
movem as mudanas de estado da mquina em sincronismo com as operaes efetuadas
atravs do cursor sobre a fita de entrada. Alm disso, a mquina de estados finitos pode
utilizar uma memria auxiliar para armazenar e consultar outras informaes, tambm
coletadas ao longo do processamento, que sejam eventualmente necessrias ao completo
reconhecimento da cadeia de entrada.
A memria auxiliar opcional, e torna-se necessria apenas em reconhecedores de
linguagens que apresentam uma certa complexidade. Normalmente, ela assume a forma
de uma estrutura de dados de baixa complexidade, como, por exemplo, uma pilha (no
caso do reconhecimento de linguagens livres de contexto). As informaes registradas na
memria auxiliar so codificadas com base em um alfabeto de memria, e todas as
operaes de manipulao da memria auxiliar (leitura e escrita) fazem referncia apenas
aos smbolos que compem esse alfabeto. Os elementos dessa memria so referenciados
atravs de um cursor auxiliar que, eventualmente, poder coincidir com o prprio
cursor da fita de entrada. Seu tamanho no obrigatoriamente limitado e, por definio,
seu contedo pode ser consultado e modificado.
O diagrama abaixo resume os componentes de um reconhecedor genrico e as di-
versas formas como cada um deles pode se apresentar:
Mquina de Estados Finita
Limitada / No limitada
Fita de entrada + Cursor Leitura apenas / Leitura e escrita
Reconhecedor
Direita apenas / Direita e esquerda
No limitada
Memria auxiliar + Cursor
Leitura e escrita
A operao de um reconhecedor baseia-se em uma seqncia de movimentos que
o conduzem, de uma configurao inicial nica, para alguma configurao de parada,
indicativa do sucesso ou do fracasso da tentativa de reconhecimento da cadeia de entrada.
Cada configurao de um autmato caracterizada pela qudrupla:
1. Estado;
3. Posio do cursor;
Estado corrente;
Prximo estado;
7. possvel associar uma mesma configurao corrente a mais de uma nova confi-
gurao seguinte (uma possvel forma de no-determinismo);
(qi , (, ), ) (qj , (, ), )
O smbolo denota, portanto, uma relao binria sobre o conjunto das configu-
raes Q ( ) de cada autmato.
Exemplo 2.27 Considere-se o seguinte autmato, parcialmente definido:
Q = {q0 , q1 }; = {0, 1}; = {A, B }, com:
Supondo que a cadeia de entrada seja 0110, que o contedo corrente da memria auxiliar seja
A e que o cursor de leitura esteja apontando para o smbolo mais esquerda da cadeia de entrada,
a seguinte seqncia de movimentos poderia fazer parte do reconhecimento de tal cadeia:
(q0 , (, 0110), A)
(q1 , (0, 110), AA)
(q1 , (00, 10), BAA)
(q1 , (0, 010), ABAA)
(q0 , (, 0010), BBAA)
(q1 , (0, 010), BAA)
Tais movimentos correspondem, respectivamente, aplicao das transies 1, 3, 4, 5 e 2,
nesta ordem.
Naturalmente, outros movimentos poderiam ter sido executados partindo-se da mesma confi-
gurao inicial. Por exemplo, a transio 5 poderia ter sido executada na configurao em que se
faz uso da transio 3 e vice-versa. Neste caso, uma nova seqncia de movimentaes seria obtida,
correspondendo aplicao das transies 1, 5, 2, 3 e 4, nesta ordem:
58 Linguagens Formais - Teoria, Modelagem e Implementao
(q0 , (, 0110), A)
(q1 , (0, 110), AA)
(q0 , (, 0110), BA)
(q1 , (0, 110), A)
(q1 , (00, 10), BA)
(q1 , (0, 010), ABA)
(q1 , (, 1 ), 1 ), q1 Q, 1 , , , 1 ,
2 Conceitos Bsicos de Linguagens 59
1. (q1 , (, 1 ), 1 ) (q2 , (2 , ), 2 )
1. (q1 , (, 1 ), 1 ) (q2 , (2 , ), 2 ), ou
2. (q1 , (, 1 ), 1 ) (q3 , (3 , ), 3 )
Isso basta, neste exemplo, para constatar o carter no-determinstico desse reconhecedor.
Finalmente, suponha-se que a funo seja novamente modificada, incorporando, em adio
definio anterior, o elemento:
(q1 , , 1 ) = {(q4 , (, ), 4 )}
Isso caracteriza a coexistncia de uma transio em vazio com duas transies no-vazias,
todas aplicveis a uma mesma configurao. Como conseqncia, a quantidade de alternativas de
movimentao do reconhecedor, na configurao original, cresceria de duas para trs:
1. (q1 , (, 1 ), 1 ) (q2 , (2 , ), 2 )
2. (q1 , (, 1 ), 1 ) (q3 , (3 , ), 3 )
3. (q1 , (, 1 ), 1 ) (q4 , (, 1 ), 4 )
2
: Q ( {}) Q ( {E , D })
(q0 , (, w ), 0 )
q0 Q o estado inicial;
qF QF
F F
, N , N , ou = , de forma no exclusiva.
N
62 Linguagens Formais - Teoria, Modelagem e Implementao
, N , N , ou = , de forma no exclusiva.
V NV
| | ||
2 Conceitos Bsicos de Linguagens 63
Nem toda gramtica do tipo 2 pode ser considerada uma gramtica do tipo 1. De
fato, gramticas do tipo 2 permitem a gerao da cadeia vazia, ao passo que gramticas
do tipo 1 no prevem essa possibilidade. Nem toda gramtica do tipo 1, no entanto,
pode ser considerada uma gramtica do tipo 2. Em particular, aquelas que apresentam
produes cujo lado esquerdo seja composto por cadeias de dois ou mais smbolos.
Exemplo 2.34 As gramticas lineares G1 e G2 so tambm sensveis ao contexto. A gramtica livre
de contexto G3 , no entanto, no sensvel ao contexto, devido presena da produo S . 2
Por outro lado, possvel provar, como veremos nos prximos captulos, que toda
linguagem livre de contexto tambm uma linguagem sensvel ao contexto. O contrrio,
porm, no verdadeiro, pois existem linguagens sensveis ao contexto, inclusive lingua-
gens que no contm a cadeia vazia, que no podem ser geradas por gramticas livres de
contexto, quaisquer que sejam estas. Logo, existe uma relao de incluso prpria entre
as linguagens livres de contexto e as linguagens sensveis ao contexto.
As gramticas pertencentes ltima classe definida pela Hierarquia de Chomsky
recebem a denominao de irrestritas, ou do tipo 0. Como o prprio nome sugere, trata-
se de gramticas sobre as quais no imposta nenhuma restrio quanto ao formato de
suas produes, exceto pelo fato de que o lado esquerdo das mesmas deva sempre conter
pelo menos um smbolo no-terminal:
V NV ;
V ;
no podem ser geradas por qualquer gramtica sensvel ao contexto. Portanto, as lin-
guagens sensveis ao contexto constituem subconjunto prprio das linguagens irrestritas.
Resumidamente, a Hierarquia de Chomsky original estabelece que:
Gramticas regulares;
Autmatos finitos.
N;
Mtodo:
1. P ;
2. Se P , ( N {}), ento P ;
3. Se P , (N ), ento R P ;
Mtodo:
1. Determinar L(G1 );
2. Determinar L(G1 )R ;
S aS
S bS
S P
P cQ
Q cR
R dR
R d
S dS
S dP
P cQ
70 Linguagens Formais - Teoria, Modelagem e Implementao
Q cR
R aR
R bR
R
S S d
S P d
P Q c
Q R c
R R a
R R b
R
Como fcil observar, G2 linear esquerda e L(G2 ) = L(G1 ). Por exemplo, considerem-se
as derivaes da sentena abaccdd , respectivamente em G1 e G2 :
G G G G G G G G
S 1 aS 1 abS 1 abaS 1 abaP 1 abacQ 1 abaccR 1 abaccdR 1 abaccdd
G G G G G G G G
S 2 S d 2 P dd 2 Q cdd 2 R ccdd 2 R accdd 2 R baccdd 2 R abaccd 2
abaccdd
2
N;
Justificativa G2 pode ser obtida a partir de G1 pelo Algoritmo 3.3, o qual substitui
as regras , N , por um conjunto equivalente de novas regras ,
( {})(N {}).2
Algoritmo 3.3 ( , (N {}) , ( {})(N {}))
Desmembramento das produes de uma gramtica linear direita, na forma ,
2 Tal tipo de gramtica recebe, em alguns textos, a denominao de gramtica linear unitria direita.
3 Linguagens Regulares 71
Sada: uma gramtica linear direita G2 = (V2 , , P2 , S2 ), tal que L(G2 ) = L(G1 )
e cujas produes so todas da forma , ( {})(N {});
Mtodo:
1. N2 N1 ;
2. P2 ;
Se = , , N , ou N , ento P2 P2 { }
Se | | 2 e , ou seja, se , ento:
Se | | 3 e N , ou seja, se N , ento:
Algoritmo semelhante pode ser facilmente desenvolvido para o caso das gramticas
lineares esquerda, de forma a obter uma gramtica equivalente cujas regras sejam do
tipo , N , (N {})( {}).3
S1 abcdP
P efP
P Q
Q g
A aplicao do Algoritmo 3.3 resulta na gramtica G2 :
S2 aP1
P1 bP2
P2 cP3
P3 dP
P eP4
P4 fP
P Q
Q g
A ttulo de ilustrao, considerem-se as derivaes da sentena abcdefg, respectivamente em
G1 e G2 :
G G G G
S1 1 abcdP 1 abcdefP 1 abcdefQ 1 abcdefg
G G G G G G G G
S2 2 aP1 2 abP2 2 abcP3 2 abcdP 2 abcdeP4 2 abcdefP 2 abcdefQ 2 abcdefg
2
4. (X );
5. X Y ;
6. X Y , tambm denotado XY ;
7. X .
L1 = {0}
L2 = {1}
3 Linguagens Regulares 73
L3 = {0i | i 0}
L4 = {1i | i 0}
L5 = {0p 1q | p 0, q 0}
Os conjuntos L1 e L2 so conjuntos regulares sobre , por definio. L3 e L4 so obtidos a
partir de L1 e L2 , respectivamente, pela aplicao da operao fechamento reflexivo e transitivo, ou
seja, L3 = L1 e L4 = L2 . Por sua vez, o conjunto L5 = L pode ser expresso pela concatenao dos
conjuntos L3 e L4 , isto , L5 = L3 L4 . Dessa maneira, demonstra-se que L = {0m 1n | m 0, n 0}
um conjunto regular sobre {0, 1}. Na notao dos conjuntos regulares, L pode ser denotado por
{0} {1} . 2
Exemplo 3.4 A linguagem N formada pelos nmeros naturais decimais um conjunto regular sobre
o alfabeto dos algarismos arbicos e pode ser representada atravs do seguinte conjunto regular:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
L+ = L se L
L+ = L {} se 6 L
Como alternativa para a representao dos conjuntos regulares, visando obter maior
conciso e facilidade de manipulao, Kleene desenvolveu, na dcada 1950, a notao das
expresses regulares ([60]). Da mesma forma como ocorre para os conjuntos regulares,
as expresses regulares sobre um alfabeto podem tambm ser definidas recursivamente
como segue:
4. (x );
5. x | y ou x + y;
6. x y ou xy;
7. x
X (que composto por todas as cadeias de comprimento maior ou igual a 1 que podem
ser construdas sobre o conjunto X ).
Exemplo 3.6 Considerem-se o alfabeto = {a, b, c, d } e os dois subconjuntos A = {a}, B = {b, c}.
A seguir so apresentadas diferentes linguagens sobre , definidas atravs da notao dos conjuntos
e das expreses regulares:
Sentenas formadas por smbolos do alfabeto {a, b, c, d } contendo uma (e somente uma)
subcadeia constituda por um smbolo do conjunto A e dois (e somente dois) do conjunto B ,
nesta ordem:
(( A) B ) ABB (( A) B ) ou d a(b | c)(b | c)d
2
x |y =y |x
x | (y | z ) = (x | y) | z
x (yz ) = (xy)z
x (y | z ) = xy | xz
(x | y)z = xz | yz
x = x = x
x = x =
= =
x = x | x
(x ) = x
x |x =x
x |=x
(xy) x = x (yx )
Por se tratar de uma notao concisa, que dispensa o uso da notao dos conjuntos e
o emprego de smbolos no-terminais para a definio de linguagens, mas que, ao mesmo
76 Linguagens Formais - Teoria, Modelagem e Implementao
q0 o estado inicial, q0 Q ;
(q, ) = q;
(q, x ) = ((q, ), x ), x , .
Ao longo deste texto, a definio considerada para a funo dever variar conforme
o contexto em que estiver sendo empregada.
A configurao de um autmato finito definida pelo seu estado corrente e pela
parte da cadeia de entrada ainda no analisada (incluindo o smbolo apontado pelo
cursor). A configurao inicial de um autmato finito aquela em que o estado corrente
q0 (estado inicial) e o cursor de leitura se encontra posicionado sobre o smbolo mais
esquerda da cadeia de entrada. Uma configurao final aquela em que o cursor
aponta para a posio imediatamente alm do ltimo smbolo da cadeia (indicando com
isso j ter ocorrido a leitura do ltimo smbolo da cadeia de entrada), e o estado corrente
pertence ao conjunto F de estados finais, especificado para o autmato. Note que ambas
78 Linguagens Formais - Teoria, Modelagem e Implementao
L(M ) = {w | (q0 , w ) F }
Q = {q0 , q1 , q2 , q3 }
3 Linguagens Regulares 79
= {0, 1, 2}
= {(q0 , 0) q0 , (q0 , 1) q1 , (q0 , 2) q3 ,
(q1 , 0) q3 , (q1 , 1) q1 , (q1 , 2) q2 ,
(q2 , 0) q3 , (q2 , 1) q3 , (q2 , 2) q2 ,
(q3 , 0) q3 , (q3 , 1) q3 , (q3 , 2) q3 }
F = {q1 , q2 }
A Figura 3.1 mostra o diagrama de transio de estados para esse autmato:
0 1 2
1 2
q0 q1 q2
2 0
0, 1
q3
0, 1, 2
A linguagem aceita por esse autmato finito formada pelo conjunto de sentenas x que o
levam da configurao inicial (q0 , x ) at a configurao final (q1 , ) ou (q2 , ). A inspeo cuidadosa
desse autmato finito revela que as sentenas por ele aceitas contm, nesta ordem, uma seqncia
de smbolos 0 (incluindo nenhum), seguida de uma seqncia de smbolos 1 (no mnimo um)
e, finalmente, de uma seqncia de smbolos 2 (incluindo nenhum). Na notao das expresses
regulares, L(M ) = 0 1+ 2 .
As seguintes identidades, por exemplo, so verdadeiras:
(q0 , 00001) = q1
(q0 , 0122) = q2
(q1 , 12) = q2
(q2 , 222) = q2
A sucesso de movimentos efetuados pelo autmato finito com essa cadeia apresentada a
seguir:
(q0 , 0011222) (q0 , 011222) (q0 , 11222) (q1 , 1222) (q1 , 222) (q2 , 22) (q2 , 2)
(q2 , )
Exemplo 3.9 O autmato finito determinstico da Figura 3.4 possui funo de transio parcial, uma
vez que ela no definida para os seguintes elementos de Q : (q0 , 2), (q1 , 0), (q2 , 1) e (q2 , 0).
0 1 2
1 2
q0 q1 q2
Note-se que os autmatos das Figuras 3.1 e 3.4 definem a mesma linguagem. Os movimentos
executados pelo autmato da Figura 3.4 com as cadeias 0011222 e 0022 so apresentados abaixo:
(q0 , 0011222) (q0 , 011222) (q0 , 11222) (q1 , 1222) (q1 , 222) (q2 , 22) (q2 , 2)
(q2 , )
Q = {q0 , q1 , q2 }
= {a, b, c}
= {(q0 , a) {q1 , q2 }, (q1 , b) {q1 , q2 }, (q2 , c) {q2 }}
F = {q1 , q2 }
b c
a b
q0 q1 q2
a b c
q0 {q1 , q2 }
q1 {q1 , q2 }
q2 {q2 }
a b
qj ql
qi
a qk qm
c
b
qj ql
b
a
qi qj qk
c
qk qm
c
Fica claro, tambm, que se pelo menos um dos estados, qj ou qk , for um estado
final, o mesmo dever acontecer com o estado qj qk , j que em ambas as verses a cadeia
a deve ser aceita pelo autmato. Por outro lado, caso haja coincidncia entre os smbolos
b e c, um novo no-determinismo ser introduzido no estado qj qk . Da a necessidade de
se repetir o procedimento, removendo a cada iterao todos os novos no-determinismos
que venham a ser introduzidos.
Seja M1 = (Q1 , , 1 , q01 , F1 ) o autmato finito no-determinstico originalmente
considerado e M2 = (Q2 , , 2 , q02 , F2 ) o autmato finito determinstico correspondente
que se deseja obter. A obteno de M2 a partir de M1 pode ser efetuada atravs do
Algoritmo 3.4.
Algoritmo 3.4 (Eliminao de no-determinismos) Obteno de um autmato fi-
nito determinstico M2 a partir de um autmato finito no-determinstico M1 .
Mtodo:
1. Q2 ;
3. F2 ;
5. ;
c) Substitua, na tabela, todas as referncias a {q21 , ..., q2n } por q21 ...q2n ;
i. 2 (q21 ...q2n , ) ;
Exemplo 3.12 Considere-se uma vez mais o autmato no-determinstico M do Exemplo 3.10,
representado na Figura 3.5 e na Tabela 3.3. A aplicao do Algoritmo 3.4 a M conduz obteno
do autmato da Tabela 3.4.
3 Linguagens Regulares 87
a b c
q0 q1 q2
q1 q1 q2
q2 q2
q1 q2 q1 q2 q2
b c
a b
q0 q1 q2 q2
q1
q2 c
a
a
c
q0 q3
a
b
a, b
q1 b
a b c
q0 {q1 , q2 } {q3 }
q1 {q0 } {q0 , q1 }
q2 {q2 }
q3 {q2 } {q1 }
a b c
q0 {q1 , q2 } q3
q1 q0 {q0 , q1 }
q2 q2
q3 q2 q1
a b c
q0 q1 q2 q3
q1 q0 {q0 , q1 }
q2 q2
q3 q2 q1
q1 q2 q0 {q0 , q1 } q2
a b c
q0 q1 q2 q3
q1 q0 q0 q1
q2 q2
q3 q2 q1
q1 q2 q0 q0 q1 q2
q0 q1 {q1 q2 , q0 } q0 q1 q3
a b c
q0 q1 q2
q1 q0 q0 q1
q2 q2
q3 q2 q1
q1 q2 q0 q0 q1 q2
q0 q1 q0 q1 q2 q0 q1
q0 q1 q2 q0 q1 q2 q0 q1 {q2 , q3 }
a b c
q0 q1 q2
q1 q0 q0 q1
q2 q2
q3 q2 q1
q1 q2 q0 q0 q1 q2
q0 q1 q0 q1 q2 q0 q1
q0 q1 q2 q0 q1 q2 q0 q1 q2 q3
q2 q3 q2 q1 q2
q1
b a b
b
a
a b a
q0 q1 q2 q0 q1 q0 q1 q2
a c
b c
q2 q2 q3
a, c
a b
q0 {q1 , q2 }
q1
q2 {q0 , q2 } {q0 , q1 }
a b
q0 q1 q2
q1
q2 q0 q2 q0 q1
q1 q2 q0 q2 q0 q1
q0 q1 q1 q2
q0 q2 q1 q2 , q0 q2 q0 q1
q0 q1 q2 q0 q1 q2 q0 q1
pode ser feita trivialmente, sem alterar a linguagem aceita pelo autmato: basta, por
exemplo, incorporar um caminho adicional alternativo que aceite qualquer seqncia de
smbolos, a partir de qualquer estado, iniciada por um smbolo que j seja consumido
a partir daquele estado, sem, no entanto, permitir que alguma configurao final seja
atingida.
Exemplo 3.15 Considere-se M , o autmato determinstico da Figura 3.11:
a
q0 q1
c b
q2
a
q0 q1
c b
a
c
q2 q3 q4
Q = {q0 , q1 }
= {a, b}
= {(q0 , a) {q0 }, (q0 , ) {q1 }, (q1 , b) {q1 }}
F = {q1 }
A linguagem aceita por esse autmato a b , conforme pode ser deduzido a partir do diagrama
de estados da Figura 3.13.
a b
q0 q1
Sada: um autmato finito sem transies em vazio N , tal que L(N ) = L(M );
Mtodo:
2. Iterao
Repetir o passo anterior para os demais estados do autmato, at que todos
eles tenham sido considerados (ou seja, at que a ltima linha tenha sido
atingida).
Nos casos em que houver transies em vazio para estados que por sua vez
tambm transitam em vazio para outros estados, ser necessrio iterar o
procedimento vrias vezes sobre a tabela, at que todas as transies em
vazio tenham sido eliminadas.
O algoritmo funciona atravs da substituio de transies em vazio por cpias das
transies que partem dos estados que seriam atingidos pelas transies em vazio. As
nicas mudanas do autmato dizem respeito funo de transio , que se torna
definida para alguns elementos do domnio de anteriormente indefinidos ( , na notao
tabular, torna-se menos esparsa), e ao conjunto de estados finais F , que eventualmente
se amplia se existirem caminhos formados exclusivamente por transies em vazio que
interligam estados finais a outros estados do autmato.
Exemplo 3.17 Considere-se o autmato finito M do Exemplo 3.16, representado na Tabela 3.13.
3 Linguagens Regulares 95
a b
q0 q0 q1
q1 q1
a b
q0 q0 q1
q1 q1
a b
b
q0 q1
Sada: Fechamento-(qi );
Mtodo:
1. Fechamento-(qi ) {qi };
96 Linguagens Formais - Teoria, Modelagem e Implementao
a b c
q0 q1 q2
Fechamento-(q0 ) = {q0 , q1 , q2 }
Fechamento-(q1 ) = {q1 , q2 }
Fechamento-(q2 ) = {q1 , q2 }
2
Sada: (qi , );
Mtodo:
1. (qi , ) Fechamento-(qi );
[
2. (qi , ) Fechamento-(qk ), com qj (qi , ), qk (qj , ),
k
, .
(q0 , a) = {q0 }
(q1 , a) =
(q2 , a) =
Fechamento-(q0 ) = Fechamento-(q0 ) = {q0 , q1 , q2 }
Logo, (q0 , a) = {q0 , q1 , q2 }.
a
qj ql
qi
a
qk qm
(qi , a) (qk , )
(qj , a) (ql , )
(qk , a) =
(qm , a) =
A Figura 3.17 apresenta uma verso modificada desse mesmo trecho do autmato,
tendo a funo de transio original sido substituda pela nova funo de transio ,
acima calculada:
a
a
a
a qj ql a
a
qi
a
a qk qm
Exemplo 3.20 Dando seqncia ao Exemplo 3.19, apresenta-se a seguir o valor da funo para cada
elemento do conjunto Q . Em cada caso, so indicadas as vrias possibilidades de movimentao
que o autmato possui a partir de q Q no reconhecimento da cadeia , e que so consideradas
no clculo da funo :
(q0 , a) = {q0 , q1 , q2 }
(q0 , a) (q0 , )
3 Linguagens Regulares 99
etc.
(q1 , a) =
(q2 , a) =
(q0 , b) = {q1 , q2 }
etc.
(q1 , b) = {q1 , q2 }
(q1 , b) (q1 , )
etc.
(q2 , b) = {q1 , q2 }
etc.
(q0 , c) = {q1 , q2 }
(q1 , c) = {q1 , q2 }
etc.
(q2 , c) = {q1 , q2 }
(q2 , c) (q2 , )
L(M ) = {w | (q0 , w ) F 6= }
O Teorema 3.4, que estabelece a equivalncia dos autmatos finitos com e sem tran-
sies em vazio, est demonstrado novamente a seguir, usando desta vez como argumento
o Algoritmo 3.8, que sintetiza a segunda tcnica estudada. O teorema complementar,
acerca da existncia de autmatos com transies em vazio que sejam equivalentes a
autmatos sem transies em vazio, dispensa demonstrao, pois a adio de transies
em vazio pode ser feita com facilidade, sem alterar a linguagem aceita pelo autmato.
Teorema 3.5 (Eliminao de transies em vazio, verso 2) Todo autmato que
contenha transies em vazio gera uma linguagem que aceita por algum autmato finito
que no contm transies em vazio.
Mtodo:
1. Q2 ;
3. F2 ;
6. 2 ;
Fechamento-(q01 ) F1 6=
2 a b c
q20 {q20 , q21 , q22 } {q21 , q22 } {q21 , q22 }
q21 {q21 , q22 } {q21 , q22 }
q22 {q21 , q22 } {q21 , q22 }
Como q12 Fechamento-(q10 ), ento q20 torna-se um estado final no novo autmato cujas
transies em vazio foram eliminadas. A Figura 3.18 representa o autmato da Tabela 3.15 na forma
de um diagrama de estados.
a
b, c
a, b, c b, c
q20 q21 q22 b, c
b, c
a, b, c
(q0 , a) = {q0 }
(q0 , b) = {q1 }
(q1 , ) = {q2 }
Qualquer que seja a configurao corrente (qi , ) considerada, existe sempre, no mximo,
uma nica transio de M1 que pode ser aplicada e, portanto, no mximo, uma nica prxima
configurao possvel. Logo, a operao de M1 sempre determinstica. 2
3 Linguagens Regulares 103
Exemplo 3.23 Seja M2 = ({q0 , q1 }, {a, b}, , q0 , {q1 }) um autmato finito no-determinstico cuja
funo de transio definida como:
(q0 , a) = q0
(q0 , b) = q0
(q0 , ) = q1
Considere-se a cadeia de entrada a. As seguintes seqncias de movimentaes so vlidas em
M2 :
(q0 , a) (q0 , )
(q0 , a) (q1 , a)
Logo, a operao de M2 , nesse caso, no-determinstica. 2
Um autmato determinstico do modelo (4), por sua vez, pode operar de forma
no-determinstica, se:
c
q0 q1 q3
b
q2
Por se tratar de estados sem relevncia, no que se refere linguagem que se est
definindo, geralmente desejvel que os mesmos sejam simplesmente eliminados do aut-
mato, possibilitando assim sua simplificao.
Estados inacessveis so aqueles para os quais no existe no autmato qualquer
caminho, formado por transies vlidas, que permita atingi-los a partir do estado inicial
do autmato. Eles podem ocorrer, por exemplo, como conseqncia direta da aplicao
dos mtodos anteriormente propostos para a eliminao de no-determinismos e/ou da
remoo de transies em vazio. O mtodo a seguir apresentado permite a identificao e
a eliminao sistemtica de estados inacessveis eventualmente presentes em um autmato
M qualquer. Observe-se que o estado inicial de um autmato sempre acessvel, fato este
que ser explorado como base do raciocnio indutivo implcito no algoritmo proposto.
Seja M = (Q1 , , 1 , q10 , F1 ) um autmato finito qualquer. Formalmente, um estado
q1i Q1 dito inacessvel quando no existir caminho, formado por transies vlidas,
que conduza o autmato do seu estado inicial q10 at o estado q1i . Em outras palavras,
no existe tal que (q10 , ) = q1i . Caso contrrio, o estado q1i dito acessvel.
Estados inacessveis no contribuem para a definio da linguagem aceita por M ,
podendo ser sistematicamente identificados e eliminados do conjunto de estados, sem
prejuzo para a linguagem aceita pelo autmato. O Algoritmo 3.9, a seguir esboado,
permite construir um autmato finito N = (Q2 , , 2 , q20 , F2 ) isento de estados inacess-
veis, tal que L(N ) = L(M ).
Algoritmo 3.9 (Eliminao de estados inacessveis, verso 1) Obteno de um
autmato sem estados inacessveis equivalente a outro com estados inacessveis.
Mtodo:
1. Q20 {q20 };
2. i 1;
5. F2 {q2k Q2 | q1k F1 };
Mtodo:
2. Para cada clula, desta linha da tabela, que contiver o nome de algum
estado, marcar tal estado, na linha correspondente, como acessvel. Por
ltimo, marque-se o estado corrente como considerado.
a b c d e f g
q0 q0 q4 q3
q1 q4 q1
q2 q4 q1
q3 q4
q4 q3 q5
q5 q0 q5
Iniciando o procedimento:
Marca-se q0 como acessvel
a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X
q1 q4 q1
q2 q4 q1
q3 q4
q4 q3 q5
q5 q0 q5
a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X
q4 q3 q5 X
q5 q0 q5
a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X X
q4 q3 q5 X
q5 q0 q5
a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X X
q4 q3 q5 X X
q5 q0 q5 X
a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X X
q4 q3 q5 X X
q5 q0 q5 X X
Nada mais havendo para fazer, o algoritmo se encerra descartando as duas colunas auxiliares
e as linhas correspondentes aos estados q1 e q2 , que permaneceram sem a marca acessvel at o
final. Resulta o autmato da Tabela 3.22.
a b c d e f g
q0 q0 q4 q3
q3 q4
q4 q3 q5
q5 q0 q5
Mtodo:
2. i 1;
5. F2 {q2k Q2 | q1k F1 };
3 Linguagens Regulares 109
A aplicao deste algoritmo pode ser sistematizada de forma semelhante que foi
elaborada para o algoritmo de eliminao de estados inacessveis. Basta representar
a funo de transio na forma tabular e acrescentar duas novas colunas tabela: a
primeira, denominada til, e a segunda, denominada considerado, e executar os passos
do Algoritmo 3.12.
Algoritmo 3.12 (Eliminao de estados inteis, verso 2) Mtodo prtico para
obteno de um autmato sem estados inteis equivalente a outro com estados inteis,
porm sem estados inacessveis.
Mtodo:
3. Repita-se o passo (2) at que no reste mais nenhum estado marcado como
til, mas ainda no como considerado.
Exemplo 3.25 Considere-se o autmato da Figura 3.20, em que todos os estados so acessveis mas
nem todos so teis.
110 Linguagens Formais - Teoria, Modelagem e Implementao
q3
a c
c
q0 q1 q4
b
c c
c
q2
Q0 = {q4 }
Q1 = {q3 } {q4 }
Q2 = {q0 } {q3 , q4 }
Q3 = Q2
Logo, os estados q1 e q2 deste autmato so inteis e podem ser removidos sem prejuzo para
a linguagem por ele definida. O autmato resultante torna-se:
q3
a c
q0 q4
a b c til Considerado
q0 q3 q2 q1
q1 q2
q2 q1
q3 q4
q4 q4 X
Seleciona-se a linha correspondente ao nico estado til (caso houvesse mais de um, poder-se-
ia escolher arbitrariamente dentre eles). Verifica-se por inspeo que q4 referenciado por q4 e q3 .
Assim, marca-se q3 como til, e q4 j est marcado. Pode-se ento marcar q4 como considerado.
q4 j estava marcado;
a b c til Considerado
q0 q3 q2 q1
q1 q2
q2 q1
q3 q4 X
q4 q4 X X
a b c til Considerado
q0 q3 q2 q1 X
q1 q2
q2 q1
q3 q4 X X
q4 q4 X X
a b c til Considerado
q0 q3 q2 q1 X X
q1 q2
q2 q1
q3 q4 X X
q4 q4 X X
a b c
q0 q3
q3 q4
q4 q4
1. Dado um autmato finito qualquer, ser possvel obter uma verso determinstica,
isenta de transies em vazio e estados inacessveis ou inteis, aplicando-se uma
s vez cada um dos algoritmos descritos?
A eliminao de no-determinismos:
Logo, fcil provar que a resposta para as questes inicialmente propostas sim,
bastando para isso aplicar os algoritmos na seguinte seqncia:
Qualquer outra ordem poder, dependendo do autmato que estiver sendo mani-
pulado, acarretar a necessidade de se aplicar um mesmo algoritmo mais de uma vez.
Por exemplo, a eliminao de no-determinismos seguida da eliminao de transies em
vazio pode fazer com que o autmato se torne novamente no-determinstico, exigindo
portanto uma nova aplicao do algoritmo usado anteriormente.
De acordo com as definies previamente apresentadas, fcil perceber que os aut-
matos finitos determinsticos isentos de transies em vazio constituem casos particulares
do modelo mais geral, os autmatos finitos no-determinsticos com transies em vazio.
No entanto, apesar de se tratar de um modelo conceitualmente mais simples, pode-se
demonstrar que a todo autmato finito no-determinstico que apresente transies em
vazio corresponde um outro autmato finito determinstico que aceita a mesma lingua-
gem.
Desse modo, no-determinismos e transies em vazio no contribuem em nada
para aumentar o poder dos autmatos finitos quanto a uma eventual ampliao da classe
de linguagens por eles reconhecida. Por esse motivo, nos demais captulos, sero refe-
renciados apenas os autmatos finitos, de uma forma geral, sem preocupaes com a
existncia de eventuais no-determinismos, transies em vazio, estados inacessveis ou
estados inteis.
Exemplo 3.26 Considere-se um autmato finito M , conforme a Tabela 3.28, que apresenta transies
em vazio e no-determinismo (conseqncia, no caso, das transies em vazio existentes).
a b c d e
q0 q1 q1 q2
q1 q3 q1 q4
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0
Seleciona-se a linha q0 ;
a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 q1 q4
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0
a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 q2 q1 q4 q0
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0
a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0
a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 {q1 , q2 } {q1 , q3 } q4
a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 {q1 , q2 } {q1 , q3 } q4
2. Eliminao de no-determinismos
Atravs da inspeo da funo de transio, torna-se evidente a necessidade de criao ime-
diata de dois novos estados: um representando o conjunto {q1 , q2 } e outro representando o
conjunto {q1 , q3 }. Aps a incorporao desses novos estados ao autmato, bem como das
transies que partem de cada um dos estados individualmente considerados, obtm-se o
autmato da Tabela 3.34.
116 Linguagens Formais - Teoria, Modelagem e Implementao
a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 {q1 , q2 } {q1 , q3 } q4
{q1 , q2 } q3 {q1 , q2 } {q1 , q3 } q4
{q1 , q3 } {q3 , q4 } {q1 , q2 } q3 {q1 , q3 } q4
a b c d e
q0 q1 q2 q1 q3
q1 q3 q1 q2 q1 q3 q4
q2 q2 q3
q3 q4 q3
q4 q1 q2 q1 q3 q4
q1 q2 q3 q1 q2 q1 q3 q4
q1 q3 q3 q4 q1 q2 q3 q1 q3 q4
q3 q4 q4 q1 q2 q3 q1 q3 q4
3. Estados renomeados
Renomeando-se os estados, a fim de aumentar a legibilidade da Tabela 3.35, obtm-se a
Tabela 3.36.
3 Linguagens Regulares 117
a b c d e
q0 q5 q6
q1 q3 q5 q6 q4
q2 q2 q3
q3 q4 q3
q4 q5 q6 q4
q5 q3 q5 q6 q4
q6 q7 q5 q3 q6 q4
q7 q4 q5 q3 q6 q4
a b c d e Acessvel Considerado
q0 q5 q6 X X
q1 q3 q5 q6 q4
q2 q2 q3
q3 q4 q3 X X
q4 q5 q6 q4 X X
q5 q3 q5 q6 q4 X X
q6 q7 q5 q3 q6 q4 X X
q7 q4 q5 q3 q6 q4 X X
ou, simplesmente:
a b c d e
q0 q5 q6
q3 q4 q3
q4 q5 q6 q4
q5 q3 q5 q6 q4
q6 q7 q5 q3 q6 q4
q7 q4 q5 q3 q6 q4
Observe-se que o autmato resultante no possui estados inteis, sendo portanto desnecessria
a aplicao do algoritmo de eliminao de estados inteis. 2
tambm, inversamente, que todo e qualquer conjunto regular pode ser expresso atravs
de uma gramtica linear.
Para efeitos prticos, estudam-se aqui apenas as gramticas lineares direita, porm
os mesmos resultados se aplicam e podem ser deduzidos igualmente para as gramticas
lineares esquerda. O termo linguagem linear direita (esquerda) ser empregado
para denotar linguagens geradas por gramticas lineares direita (esquerda).
A Figura 3.22 destaca as equivalncias estudadas nesta seo.
Justificativa Deseja-se demonstrar que todo e qualquer conjunto regular define uma
linguagem que tambm pode ser gerada por uma gramtica linear direita.
Por definio, , {}, {}, , onde um alfabeto (conjunto finito e no-vazio),
so conjuntos regulares. Da mesma forma, X Y , XY e X , com X e Y conjuntos
regulares, tambm so conjuntos regulares. A equivalncia de tais conjuntos regulares
com as correspondentes gramticas lineares direita que os geram mostrada a seguir:
X = L(Gx ), Gx = (x Nx , x , Px , Sx )
Y = L(Gy ), Gy = (y Ny , y , Py , Sy )
a) Se A B Px , ento A B Pz
b) Se A Px , ento A Sy Pz
a) Se A B Px , ento A B Pz
b) Se A Px , ento A Sz Pz
Da concatenao dos conjuntos {0} e {1} resulta o conjunto regular {0} {1} , representado
atravs da gramtica linear direita G5 :
Finalmente, a linguagem obtida pela unio de L(G5 ) com L(G2 ) pode ser representada pela
gramtica linear G6 :
G6 = ({0, 1, 2, S0 , S1 , S2 , S3 , S4 , S6 }, {0, 1, 2}, P6 , S6 )
P6 = {S6 S2 , S6 S3 , S2 2,
| {z }
G2
S3 S0 , S3 S4 , S0 0S3 , S4 S1 , S4 , S1 1S4 }
| {z }
G5
Justificativa Mostra-se agora a proposio inversa, ou seja, que toda e qualquer lin-
guagem gerada por uma gramtica linear direita constitui um conjunto regular. Para
tanto, deve-se lembrar que gramticas lineares direita se caracterizam por apresentarem
apenas produes com os formatos seguintes:
Xi Xj
Xi Xj
Xi
Xi
122 Linguagens Formais - Teoria, Modelagem e Implementao
com e Xi , Xj N .
O Algoritmo 3.13, a seguir apresentado, permite a obteno, de forma sistemtica,
de uma expresso que representa o conjunto regular definido por uma gramtica linear
direita fornecida como entrada.
Inicialmente, a representao algbrica da gramtica deve ser modificada, para
permitir a representao explcita dos conjuntos denotados pelos seus smbolos no-
terminais:
Xi Xj torna-se Xi = {}Xj
Xi Xj torna-se Xi = {}Xj
Xi torna-se Xi = {}
Xi torna-se Xi = {}
onde:
Observe-se que cada equao assim obtida pode conter referncias a todos os sm-
bolos no-terminais da gramtica (X1 a Xm ) bem como a termos constantes (Bij ), em
quantidade varivel conforme a equao.
A seguir, coloca-se em evidncia o smbolo no-terminal Xi definido em cada equa-
o. Isso, e o agrupamento de todos os termos que no dependem de Xi , pela aplicao
3 Linguagens Regulares 123
Ai = Aij Xj , 1 j m, j 6= i
Xi = Aii Xi Ci
onde Ci representa todos os termos da i-sima equao que no contm referncias diretas
ao smbolo no-terminal Xi , e Aii representa o conjunto de todas as cadeias sobre que
prefixam Xi na equao em que este no-terminal definido.
possvel demonstrar, por induo, que equaes com o formato genrico Xi =
Aii Xi Ci possuem, como soluo geral, o conjunto:
Xi = Aii Ci
2. X = AX , que deve ser assim interpretada: para obter um novo valor de X , utiliza-
se algum valor j conhecido, e concatene-se-lhe um A esquerda. Aplicando-se
essa interpretao soluo obtida em (1), tem-se: X = AC , que passa a ser uma
nova soluo conhecida. Aplicando-se outra vez essa interpretao soluo X =
AC , obtm-se X = AAC , e assim por diante. Note-se que dessa forma foi obtida
uma seqncia de solues progressivamente mais longas, partindo-se da soluo
trivial, atravs da concatenao de elementos A esquerda. Generalizando-se,
tem-se a forma X = A C como soluo geral da equao X = AX C .
Uma vez obtido o sistema de equaes regulares no formato Xi = Aii Ci , a soluo
do mesmo dada pelo Algoritmo 3.13.
Algoritmo 3.13 (Equaes regulares) Resoluo de um sistema de equaes regula-
res.
Mtodo:
1. i 1;
Este algoritmo opera em dois passos. No primeiro, em que as equaes so percorri-
das em ordem crescente de ndices, eliminam-se, de cada equao relativa a uma varivel
Xi distinta, todas as referncias s demais variveis Xj , j < i. Assim, obtm-se um novo
conjunto de equaes em que, para cada varivel Xi do lado esquerdo da equao, exis-
tem referncias apenas a variveis Xj , j i, ou ento a elementos de , do lado direito.
Note-se, em particular, que a m-sima equao contm apenas referncias a elementos
de prpria varivel Xm .
No passo seguinte do algoritmo, efetuado na ordem decrescente dos ndices das
equaes, so eliminadas todas as referncias s variveis do sistema, as quais so subs-
titudas, a partir da m-sima equao, por conjuntos regulares definidos exclusivamente
sobre . Ao trmino da execuo do algoritmo, so obtidos, dessa maneira, conjuntos
regulares sobre , que definem a linguagem gerada pelas diversas variveis do sistema
de equaes (correspondentes aos smbolos no-terminais da gramtica original). Devido
ao fato de terem sido empregadas apenas operaes que preservam a regularidade dos
conjuntos manipulados, fcil demonstrar que os conjuntos i so regulares, o que mos-
tra, intuitivamente, que toda e qualquer gramtica linear direita gera uma linguagem
regular.
Exemplo 3.29 Considere-se a gramtica linear direita G0 :
G0 = ({a, b, c, X0 , X1 , X2 }, {a, b, c, d }, P0 , X0 )
P0 = {X0 aX0 , X0 aX1 , X0 b,
X1 bX1 , X1 cX1 , X1 cX2 , X1 d ,
X2 aX0 , X2 bX1 , X2 cX2 , X2 c, X2 d }
Convertendo-se as produes algbricas para a notao de conjuntos, obtm-se:
com:
e:
C0 = A0 B0 = {a}X1 {b}
C1 = A1 B1 = {c}X2 {d }
X1 = {b, c} ({c}X2 {d })
A aplicao do algoritmo de clculo dos conjuntos regulares definidos pelos smbolos no-
terminais da gramtica feita conforme apresentado a seguir.
X2 = A22 C2 , com :
A22 = ({c} ({a}{a}+ {b}){b, c} {c})
C2 = {a}{a}+ {b, c} {d } {b}{b, c} {d } {a}+ {b} {c, d }
X1 = {0}X1 {}X2
X2 = {1}X2 {1}X3
X3 = {2}X3 {22}
Pelo fato de esta gramtica no conter referncias varivel (no-terminal) X1 nas equaes
de X2 e X3 , nem tampouco referncias varivel X2 na equao da varivel X3 , torna-se prtico
em primeiro lugar resolver diretamente a equao referente varivel X3 :
X3 = {2} {22}
A seguir, substituem-se pela expresso acima todas as ocorrncias da varivel X3 nas equaes
anteriores. O sistema de equaes torna-se ento:
X1 = {0}X1 {}X2
X2 = {1}X2 {1}{2} {22}
X3 = {2} {22}
De forma anloga, obtm-se X2 = {1} {1}{2} {22} e efetua-se a substituio desta expresso
em todas as ocorrncias da varivel X2 nas equaes anteriores, que ento se tornam:
G2 = ({0 , 1 , 2 , A0 , A1 , A2 }, {0 , 1 2 }, P2 , A0 )
P2 = {A0 0 A1 , A0 0 ,
A1 1 A2 , A1 1 ,
A2 2 A0 , A2 2 }
Atravs de manipulaes, obtm-se o sistema:
A0 = {0 }A1 {0 }
A1 = {1 }A2 {1 }
A2 = {2 }A0 {2 }
128 Linguagens Formais - Teoria, Modelagem e Implementao
A0 = {0 }A1 {0 }
A1 = {1 }A2 {1 }
A2 = {2 }({0 }A1 {0 }) {2 }
A0 = {0 }A1 {0 }
A1 = {1 }A2 {1 }
A2 = {2 }({0 }({1 }A2 {1 }) {0 }) {2 }
A2 = {2 0 1 }A2 {2 0 1 , 2 0 , 2 }
= {2 0 1 } {2 0 1 , 2 0 , 2 }
A1 = {1 }{2 0 1 } {2 0 1 , 2 0 , 2 } {1 }
A0 = {0 }({1 }{2 0 1 } {2 0 1 , 2 0 , 2 } 1 }) {0 }
= {0 1 }{2 0 1 } {2 0 1 , 2 0 , 2 } 0 1 } {0 }
2
S = {0}A {1}
A = {0}S {2}
Substituindo-se a definio de S na equao de A, vem:
1. X aY
2. X Y
3. X a
4. X
com X , Y N , a .
Seja M = (Q , , , q0 , F ) o autmato que se deseja obter. O Algoritmo 3.14 mostra
como construir M (no-determinstico, com transies em vazio) a partir de G:
Algoritmo 3.14 (Gramtica autmato) Construo de um autmato finito a
partir de uma gramtica linear direita.
Mtodo:
130 Linguagens Formais - Teoria, Modelagem e Implementao
1. Conjunto de estados:
Cada estado de M corresponde a um dos smbolos no-terminais de G.
A esse conjunto acrescenta-se um novo smbolo (estado) Z 6 N , ou seja,
Q = N {Z }. O estado inicial de M S , a raiz da gramtica. O estado
final de M Z , o novo estado acrescentado.
2. Alfabeto de entrada:
O alfabeto de entrada de M o mesmo alfabeto de G.
3. Funo de transio:
;
Para cada regra de produo em P da gramtica G, e conforme seu tipo:
a) Se X aY ento {(X , a) Y };
b) Se X Y ento {(X , ) Y };
c) Se X a ento {(X , a) Z };
d) Se X ento {(X , ) Z }.
L(X ) = { | X }
L(X ) = { | (X , ) (Y , ), Y F }
G = (V , , P , S )
V = {a, b, c, S , K , L}
= {a, b, c}
P = {S a, S aK , K bK , K L, L cL, L }
Aplicando-se o algoritmo de converso a G, obtm-se o autmato da Tabela 3.39.
P
S a (S , a) = Z
S aK (S , a) = K
K bK (K , b) = K
K L (K , ) = L
L cL (L, c) = L
L (L, ) = Z
O autmato finito completo M assim especificado apresentado na Figura 3.24. Note-se que
L(G) = L(M ) = ab c .
M = (Q, , , S , F )
Q = {S , K , L, Z }
= {a, b, c}
= {(S , a) Z , (S , a) K , (K , b) K , (K , ) L, (L, c) L, (L, ) Z }
F = {Z }
b c
a
S K L Z
Mtodo:
2. Alfabeto de entrada:
O alfabeto de G o prprio alfabeto de entrada de M .
3. Produes:
P ;
Para cada elemento de da mquina M , e conforme o tipo das transies
de M :
a) Se (X , a) = Y , ento P {X aY };
b) Se (X , ) = Y , ento P {X Y }.
F
Para cada elemento de Q da mquina M :
a) Se X F , ento P {X }.
M = (Q, , , q0 , F )
Q = {q0 , q1 , q2 }
= {a, b, c}
3 Linguagens Regulares 133
b c
c
a
q0 q1 q2
G = (V , , P , q0 )
V = {a, b, c, q0 , q1 , q2 }
= {a, b, c}
P
(q0 , a) = q1 q0 aq1
(q1 , b) = q1 q1 bq1
(q1 , c) = q2 q1 cq2
(q1 , ) = q2 q1 q2
(q2 , c) = q2 q2 cq2
Q P
q2 F q2
(q0 , abbbc) (q1 , bbbc) (q1 , bbc) (q1 , bc) (q1 , c) (q2 , )
(q0 , abbbc) (q1 , bbbc) (q1 , bbc) (q1 , bc) (q1 , c) (q2 , c) (q2 , )
Assim como no caso do Exemplo 3.33, a comparao entre as configuraes assumidas por
M e as formas sentenciais geradas por G revela que h uma relao direta entre elas, expressa na
mesma idia de que a linguagem reconhecida por um certo estado de M corresponde linguagem
gerada pelo respectivo smbolo no-terminal de G. Note-se, em particular, que o nmero de formas
sentenciais obtidas por G na gerao da cadeia igual ao nmero de configuraes assumidas por M
134 Linguagens Formais - Teoria, Modelagem e Implementao
no reconhecimento da mesma cadeia, porm acrescido de um (no primeiro caso seis configuraes e
sete formas sentenciais, e no segundo caso sete configuraes e oito formas sentenciais). 2
Os resultados apresentados at este ponto so suficientes para estabelecer intuitiva-
mente a equivalncia completa dos conjuntos (expresses) regulares com as gramticas
lineares direita e tambm com os autmatos finitos, no que se refere classe de lingua-
gens que tais dispositivos so capazes de representar.
No obstante, a fim de possibilitar uma visualizao mais completa da relao de
equivalncia entre os autmatos finitos e as expresses regulares, apresentado em se-
guida um algoritmo que permite a construo sistemtica de autmatos finitos no-
determinsticos diretamente a partir de expresses regulares quaisquer.
Teorema 3.11 (Expresses regulares autmatos finitos) Seja r uma expresso
regular sobre o alfabeto . Ento existe um autmato finito M que aceita a linguagem
definida por r .
Mtodo:
1. r =
r aceita por:
2. r =
r aceita por:
3. r = ,
r aceita por:
6. r3 = r1 , com L(M1 ) = r1
136 Linguagens Formais - Teoria, Modelagem e Implementao
r3 aceita por:
a
q10 q11
L2 = L2 (M2 ), M2 =
b
q20 q21
L3 = L3 (M3 ), M3 =
3 Linguagens Regulares 137
c
q30 q31
b
q40 q41 q20 q21 q42 q43
a
q10 q11 q51
b
q40 q41 q20 q21 q42 q43
c
q30 q31
q60 q61
a
q10 q11 q51
b
q40 q41 q20 q21 q42 q43
Como se pode observar, o autmato assim construdo apresenta uma quantidade desnecessa-
riamente grande de estados, alm de diversas transies em vazio. Este fenmeno, comum quando se
aplicam mtodos cannicos de construo de autmatos, pode ser contornado atravs da aplicao
dos algoritmos de eliminao de transies em vazio e de estados inacessveis, alm da aplicao de
algoritmos de minimizao, assunto da Seo 3.6. O autmato da Figura 3.38 corresponde a uma
verso equivalente, porm mais compacta, ao autmato M6 anteriormente obtido.
q1
a
q0
c
q2
Assim como no caso dos autmatos apresentados nas Figuras 3.29 e 3.30, o autmato
da Figura 3.31 preserva as funes de transio dos autmatos originais inalteradas. O
autmato da Figura 3.39, por outro lado, exige o acrscimo de uma transio em vazio
do (ento) estado final para o (ento) estado inicial do autmato original, porm produz
resultados equivalentes aos obtidos com o autmato da Figura 3.31.
Exemplo 3.36
O autmato da Figura 3.40 reconhece a linguagem gerada pela expresso regular a b .
a
q0 q1 q2 q3
b
q4 q5 q6 q7
Para finalizar, a Tabela 3.41 apresenta um resumo que oferece uma viso abrangente
das vrias possibilidades de converso direta entre os diversos formalismos estudados para
representar as linguagens regulares, conforme discutido nas Sees 3.1 a 3.5.
140 Linguagens Formais - Teoria, Modelagem e Implementao
Expresso
regular
(3.11)
Autmato finito
Autmato finito Autmato
(3.3) (3.4) sem
determinstico finito
transies em vazio
(3.10)
(3.9)
Gramtica Gramtica
linear direita (3.1) linear esquerda
(3.7)
(3.6)
Conjunto
regular
Estados inacessveis e inteis podem ser eliminados atravs da aplicao dos algo-
ritmos apresentados anteriormente, ficando ento o autmato finito determinstico apto
a ser reduzido sua verso mnima atravs da fuso dos seus estados equivalentes.
O princpio desse mtodo consiste em se efetuar o particionamento sistemtico do
conjunto de estados do autmato em grupos de estados sucessivamente mais abrangentes,
at que cada grupo contenha o maior nmero de estados possvel, o que caracteriza a
respectiva classe de equivalncia. Uma vez esgotado o processo, ou seja, quando no
mais for possvel modificar os grupos construdos, escolhe-se um representante nico para
cada classe, descartando-se os demais estados da mesma classe, uma vez que se trata de
estados equivalentes.
A seguir sero apresentadas algumas definies e os mtodos que permitem efetuar a
identificao sistemtica das classes de equivalncia de um autmato finito determinstico
M , bem como a construo do autmato finito mnimo equivalente M a partir de M .
Considerem-se M = (Q , , , q0 , F ), um autmato finito determinstico, e dois de
seus estados, q1 , q2 Q . Diz-se que a cadeia x distingue q1 de q2 se (q1 , x )
(q3 , ), (q2 , x ) (q4 , ) e, de forma exclusiva, ou q3 F ou ento q4 F . Em outras
palavras, uma cadeia x distingue q1 de q2 , quando, para ser integralmente consumida a
partir de cada um desses dois estados, ela conduzir o autmato a um estado final em
apenas um desses casos.
k
Dois estados q1 e q2 so ditos k -indistinguveis (denotado por q1 q2 ) se e apenas
se no houver cadeia x , |x | k , que permita distinguir q1 de q2 . Finalmente, q1 e q2
so ditos indistinguveis, ou equivalentes (denotado por q1 q2 ), se e apenas se eles
forem k -indistinguveis para todo k 0.
Observe-se que, de acordo com a definio, para qualquer par de estados qi , qj Q ,
valem as duas seguintes condies:
0
1. qi qj se e apenas se ou qi , qj F , ou ento qi , qj (Q F ), e
k k 1 k 1
2. qi qj se e apenas se qi qj e (qi , ) (qj , ), .
Justificativa Este teorema afirma que, para se garantir a equivalncia de dois estados em
um autmato finito com n estados, suficiente garantir a sua (n 2)-indistinguibilidade,
ou seja, no h necessidade de se considerar cadeias de comprimento maior que n 2.
A demonstrao da condio suficiente trivial, uma vez que, por definio, se
um par de estados k1 -indistinguvel, isso implica que ele tambm k2 -indistinguvel,
k2 k1 .
A demonstrao da condio necessria, ou seja, a (n 2)-indistinguibilidade implica
indistinguibilidade total, trivial tambm no caso em que os n estados do autmato finito
so todos estados finais ou mesmo no-finais. Considere-se, portanto, o caso mais geral
em que h tanto estados finais como estados no-finais em M .
0
De acordo com o critrio , o conjunto Q pode ser particionado inicialmente em dois
grandes subconjuntos: o primeiro, formado por todos os estados finais (F ), e o segundo,
por todos os estados no-finais (Q F ). Trata-se, portanto, do primeiro de uma srie
de sucessivos refinamentos com o objetivo de determinar as classes de equivalncia de
estados no autmato M .
0
Executa-se em seguida, para cada um dos dois subconjuntos obtidos atravs de ,
i
o seu refinamento (particionamento) atravs de relaes , i = 1, 2, 3 etc. Como M
0
possui n estados, o maior subconjunto de Q criado atravs de contm no mximo
n 1 estados. Admitindo-se o pior caso, ou seja, que cada um desses estados constitua
individualmente uma classe de equivalncia distinta das demais, ento haver no mximo
0
mais n 2 refinamentos sucessivos de gerando conjuntos de classes de equivalncia,
distintas umas das outras.
Para completar a demonstrao do teorema, basta provar, conforme descrito a se-
guir, que cada um desses n 2 particionamentos distintos sucessivos (no mximo) refere-se
ao uso correspondente de cadeias de comprimento 1, 2, ..., n 2, para efetuar o teste de
distinguibilidade do par de estados. Conseqentemente, no h possibilidade de ocor-
rer um novo particionamento distinto dos anteriores para cadeias de comprimento x se
os particionamentos obtidos para cadeias de comprimento x 1 e x 2 se mostrarem
idnticos. Dito ainda de outra maneira, se um certo particionamento feito sobre cadeias
de comprimento x ainda no representa as classes de equivalncia de M , ento um novo
particionamento deve necessariamente existir quando cadeias de comprimento x +1 forem
consideradas.
Para provar essa afirmao, considere-se o conjunto de todas as classes de equiva-
k k +1
lncia de M que satisfazem simultaneamente s relaes e . No difcil perceber,
k +2 k +3
nesse caso, que essas mesmas classes de equivalncia satisfazem a , e assim suces-
sivamente.
k
Considere-se, por exemplo, uma situao hipottica em que (i) a relao parti-
k +1
ciona um certo conjunto Q em trs subconjuntos Q0 , Q1 e Q2 ; (ii) a relao preserva
k k +2
o particionamento da relao inalterado; e, finalmente, a relao produz uma
partio diferente, por exemplo, Q0 , R, S e Q2 , com Q1 = R S :
3 Linguagens Regulares 143
k
: Q0 , Q1 , Q2
k +1
: Q0 , Q1 , Q2
k +2
: Q0 , R, S , Q2
Mtodo:
justifica facilmente, j que um estado final, qualquer que seja ele, sempre
distinguvel de um estado no-final, qualquer que seja ele (condio vlida
apenas para autmatos isentos de transies em vazio): a cadeia , aceita
por um estado final e no aceita por um estado no-final, distingue um do
outro. Essa partio inicial corresponde, portanto, ao resultado da aplicao
0
da relao ao conjunto Q .
(A, ) = (B , ), ou
1
A C
2
1
2
B D
2 1
E A C
2 1
F B D
2
D A
1
C
1
2
E B
Exemplo 3.37 Considere-se o autmato da Tabela 3.42, similar ao autmato do Exemplo 3.38:
a b c d e
q0 q1 q3
q1 q3 q1 q2
(f) q2 q6
q3 q1 q3 q4
(f) q4
q5 q4
q6
b) O conjunto {q0 , q1 , q3 } pode ser particionado em {q0 } e {q1 , q3 }, pois seus elementos tran-
sitam com entradas diferentes: q0 transita com {a, b} e q1 e q3 transitam com {c, d , e}.
c) {q1 , q3 } constitui uma classe de equivalncia, pois ambos os estados transitam com as mesmas
entradas (no caso, {c, d , e}) e, alm disso:
(q1 , c) = q3 e (q3 , c) = q1 ;
(q1 , d ) = q1 e (q3 , d ) = q3 ;
O autmato resultante deste exemplo idntico ao obtido no Exemplo 3.38 (Figura 3.45) 2
Mtodo:
0 1 k
1. Construir as parties produzidas pelas relaes de equivalncia , , ..., ,
k +1
, at que, para algum valor de k , as parties produzidas pelas relaes
k k +1
e sejam idnticas.
: {([q], ) = [r ] | (q, ) = r };
Exemplo 3.38 Considere o autmato finito da Figura 3.44:
q1 q2
a e
q0 c c
b
q3 q4
e
k
As sucessivas parties do conjunto de estados Q, produzidas pelas relaes , k = 0, 1, 2,
so as seguintes:
0
: {q0 , q1 , q3 }, {q2 , q4 }
1
: {q0 }, {q1 , q3 }, {q2 , q4 }
2
: {q0 }, {q1 , q3 }, {q2 , q4 }
Logo, Q = {[q0 ], [q1 ], [q2 ]} e o autmato resultante apresentado na Figura 3.45:
a, b e
[q0 ] [q1 ] [q2 ]
q1 q2 ... qn1 qn
q0 (q0 , q1 ) (q0 , q2 ) ... (q0 , qn1 ) (q0 , qn )
q1 (q1 , q2 ) ... (q1 , qn1 ) (q1 , qn )
... ... ...
qn2 (qn2 , qn1 ) (qn2 , qn )
qn1 (qn1 , qn )
Adicionalmente, a notao (qi , qj ) (qm , qn ) usada para indicar que as duas
seguintes condies so simultaneamente verificadas por M :
1. (qi , ) = qm , e
2. (qj , ) = qn .
Mtodo:
Se (qa , ) = (qb , ), ou
Observe-se, neste algoritmo, que a exigncia de que a funo de transio seja total
dispensa a verificao de que os estados de cada par considerado aceitem exatamente as
mesmas entradas.
Observe-se tambm que, se houver um ciclo de pares para cujos membros a deciso
dependa sempre da de outro par, esses pares devem todos pertencer mesma classe de
equivalncia, pois no so distinguveis em nenhuma instncia.
Finalmente, cumpre notar que uma forma conveniente de se registrar e de se mani-
pular a dependncia de um par em relao a outros, cuja relao de equivalncia ainda
no foi estabelecida, e tambm de se concluir, posteriormente, pela equivalncia de um
par a partir da verificao da equivalncia de um outro par, atravs do uso de listas
ligadas, em que o primeiro elemento da lista representa o par em relao ao qual os
demais apresentam dependncias. Essa estrutura de dados mostra-se particularmente
conveniente na realizao, em forma de programa de computador, do referido algoritmo.
Exemplo 3.39 Considere-se o autmato finito determinstico com a funo de transio total da
Tabela 3.44.
150 Linguagens Formais - Teoria, Modelagem e Implementao
a b
q0 q1 q6
q1 q2 q3
(f) q2 q2 q3
q3 q4 q2
(f) q4 q2 q3
(f) q5 q4 q5
q6 q4 q4
A Tabela 3.45 representa todos os possveis pares de estados desse autmato, e tambm indica
a partio inicial de seu conjunto de estados (finais x no-finais).
q1 q2 q3 q4 q5 q6
q0 6 6 6
q1 - 6 6 6
q2 - - 6 6
q3 - - - 6 6
q4 - - - - 6
q5 - - - - - 6
Passa-se, ento, a considerar cada um dos pares no marcados dessa tabela (escolhidos arbi-
trariamente). 4
a
(q0 , q1 ) (q1 , q2 ) 6
Como q1 e q2 no so equivalentes (ver Tabela 3.45), marca-se o par (q0 , q1 ) como 6 e
torna-se desnecessria a anlise das transies desses estados com a entrada b.
a
(q0 , q3 ) (q1 , q4 ) 6
Similar ao item acima. O par (q0 , q3 ) marcado como 6.
a
(q1 , q3 ) (q2 , q4 ) ?
b
(q1 , q3 ) (q3 , q2 ) 6
Apesar de ainda no se dispor de nenhuma informao sobre o par (q2 , q4 ), o par (q3 , q2 ) j
foi determinado como sendo no-equivalente (ver tabela 3.45). Logo, marca-se o par (q1 , q3 )
como 6.
a
(q0 , q6 ) (q1 , q4 ) 6
Como q1 e q4 no so equivalentes (ver tabela 3.45), marca-se o par (q0 , q6 ) como 6 e
torna-se desnecessria a anlise das transies desses estados com a entrada b.
a
(q1 , q6 ) (q2 , q4 ) ?
b
(q1 , q6 ) (q3 , q4 ) 6
Apesar de ainda no se dispor de nenhuma informao sobre o par (q2 , q4 ), o par (q3 , q4 ) j
foi determinado como sendo no-equivalente (ver tabela 3.45). Logo, marca-se o par (q1 , q6 )
como 6.
4 Com base nas informaes j processadas sobre cada par de estados, o smbolo indica equivalncia, 6
indica no-equivalncia, e ? indica indefinio e dependncia.
3 Linguagens Regulares 151
a
(q3 , q6 ) (q4 , q4 )
b
(q3 , q6 ) (q2 , q4 ) ?
Neste caso, q3 e q6 transitam para o mesmo estado q4 com a entrada a. Por outro lado,
ainda no se dispe de nenhuma informao sobre o par (q2 , q4 ). Assim, a equivalncia do
par (q3 , q6 ) fica condicionada verificao da equivalncia do par (q2 , q4 ). O par (q3 , q6 ) no
recebe nenhuma marcao neste momento.
a
(q2 , q4 ) (q2 , q2 )
b
(q2 , q4 ) (q3 , q3 )
Os estados q2 e q4 transitam com as mesmas entradas para estados idnticos (com a entrada
a para q2 e com a entrada b para q3 ). Logo, esses estados so equivalentes e o par recebe
a marcao na tabela. Alm disso, conclui-se que o par (q3 , q6 ) (ver item acima)
equivalente, e o mesmo deve ser marcado como .
a
(q2 , q5 ) (q2 , q4 )
b
(q2 , q5 ) (q3 , q5 ) 6
Apesar de o par (q2 , q4 ) ser equivalente (ver os dois itens anteriores), o par (q3 , q5 ) j foi
determinado como sendo no-equivalente (ver Tabela 3.45). Logo, marca-se o par (q2 , q5 )
como 6.
a
(q4 , q5 ) (q2 , q4 )
b
(q4 , q5 ) (q3 , q5 ) 6
Similar ao item acima. O par (q4 , q5 ) marcado como 6.
q1 q2 q3 q4 q5 q6
q0 6 6 6 6 6 6
q1 - 6 6 6 6 6
q2 - - 6 6 6
q3 - - - 6 6
q4 - - - - 6 6
q5 - - - - - 6
As classes de equivalncia desse autmato so, portanto, {q0 }, {q1 }, {q2 , q4 }, {q3 , q6 } e {q5 }.
O autmato resultante (ver Tabela 3.47) possui cinco estados, denominados respectivamente [q0 ],
[q1 ], [q2 , q4 ], [q3 , q6 ] e [q5 ], e corresponde verso mnima do autmato da Tabela 3.44.
a b
[q0 ] [q1 ] [q3 , q6 ]
[q1 ] [q2 , q4 ] [q3 , q6 ]
(f) [q2 , q4 ] [q2 , q4 ] [q3 , q6 ]
[q3 , q6 ] [q2 , q4 ] [q2 , q4 ]
(f) [q5 ] [q2 , q4 ] [q5 ]
L(X ) = {w | (X , w ) (, qF ), qF F }
b
q1 q3
a a
q0
a
b
q2 q4
b
L(q0 ) = (a | b)c (a | b)
L(q1 ) = c (a | b)
L(q2 ) = c (a | b)
3 Linguagens Regulares 153
L(q3 ) =
L(q4 ) =
a, b a, b
q0 q1 q3
2. O autmato finito mnimo que aceita L nico. Isso significa que no existem
dois autmatos finitos com o mesmo nmero de estados, porm com funes de
transio distintas, que aceitam a linguagem L.
T = (Q, , , , , q0 , F )
Q = {q0 , q1 }
= {a, b, c}
= {1}
= {(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q0 }
= {q0 1, q1 }
F = {q1 }
O grafo correspondente a esse transdutor apresentado na Figura 3.48:
b
a
q0 /1 q1 /
A linguagem aceita por esse transdutor ab (cab ) , ou seja, uma seqncia de uma ou
mais cadeias ab separadas pelo smbolo c. A funo de transio , neste caso, faz com que o
transdutor emita o smbolo 1 toda vez que estiver iniciando o reconhecimento de uma nova cadeia
com o formato ab . Assim, T funciona como um contador do nmero de subcadeias ab presentes
na cadeia de entrada. Como exemplo, a Tabela 3.48 apresenta um conjunto de cadeias que so
respectivamente aceitas e geradas por T .
T = (Q, , , , , q0 , F )
Q = {q0 , q1 }
= {a, b, c}
= {a, b, c}
= {(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q0 }
= {(q0 , a) ab, (q1 , b) , (q1 , c) c}
F = {q1 }
O grafo correspondente apresentado na Figura 3.49:
b/
a/ab
q0 q1
c/c
Como se pode notar, o autmato finito que serve de base para esse transdutor o mesmo do
exemplo anterior. Assim, a linguagem aceita por ambos os transdutores a mesma. No entanto,
o transdutor deste exemplo mapeia as subcadeias ab aceitas pelo autmato finito em cadeias do
tipo ab, mantendo o smbolo c como separador na sentena de sada. Observe que a funo de
transduo foi definida, neste caso, sobre (devido utilizao da cadeia ). A Tabela 3.49
apresenta alguns exemplos de cadeias respectivamente aceitas e geradas por T :
As subcadeias de entrada xx que contiverem trs ou menos smbolos x devem ser reprodu-
zidas de forma idntica na sada (com um, dois ou trs smbolos x );
As subcadeias de entrada xx que contiverem quatro ou mais smbolos x devem ser repro-
duzidas na sada como xxxy;
Todos os smbolos - da cadeia entrada devem ser substitudos pelo smbolo # na cadeia
de sada.
x /x x /x x /x x /y
q0 q1 q2 q3 q4
/#
/#
/#
/#
q0 /
x
x
x x x x
q1 /x q2 /x q3 /x q4 /y q5 /
x
#
#
q6 /# #
#
por um autmato finito M com n estados, ocorre percorrendo-se pelo menos dois estados
idnticos entre as n + 1 configuraes assumidas por M durante o reconhecimento dos
primeiros n smbolos de x .
Seja w = a1 a2 ...am , |w | = m, m n. A seqncia abaixo ilustra a evoluo da
configurao do autmato M no reconhecimento de w :
a a a an1 a an+1 am 1 a
q0 1 q1 2 q2 3 q3 ... qn1
n
qn qn+1 ... qm1
m
qm
2. A distncia entre eles a maior possvel: (q0 , a1 ...am ) (qn , an+1 ...am ), q0 = qn .
|y | 1;
|xy | n;
Portanto, 1 |y | n, pois |y | |xy |.
Exemplo 3.44 Considere-se um autmato finito M com cinco estados distintos, e suponha-se que
M efetue a anlise de uma cadeia p L(M ), |p | = 5. Claramente, M dever percorrer seis
estados durante o reconhecimento da cadeia. No obstante, como M apresenta apenas cinco estados
distintos, evidente que pelo menos dois (eventualmente mais) dos estados assumidos por M durante
o reconhecimento de p so idnticos. Considere-se agora uma cadeia q L(M ), |q | = 20. Da mesma
forma, analisando-se os seis primeiros estados percorridos por M , constata-se que obrigatoriamente
haver pelo menos dois estados repetidos entre eles, correspondentes ao reconhecimento dos cinco
primeiros smbolos de q. 2
Exemplo 3.45 Seja M = ({q0 , q1 }, {a, b}, , q0 , F ) um autmato finito sem transies em vazio.
Se ab L(M ), ento a seqncia de configuraes assumidas por M durante a anlise dessa cadeia
deve, necessariamente, corresponder a alguma das seguintes possibilidades:
1. Se (q0 , ab) (q0 , b) (q0 , ), ento pelo menos uma das seguintes possibilidades verdadeira:
a) x = , y = ab, z = ;
b) x = a, y = b, z = ;
c) x = , y = a, z = b.
a) x = , y = a, z = b.
a) x = , y = ab, z = .
a) x = a, y = b, z = .
Portanto, qualquer que seja o caso, sempre possvel identificar, na cadeia ab, cujo compri-
mento coincide com o nmero de estados do autmato que a aceita, uma subcadeia y, de compri-
mento maior ou igual a 1 e menor ou igual a 2, que provoca um ciclo na seqncia de movimentaes
executada pelo autmato. 2
a c
q0 q1 q2
A aplicao das propriedades enunciadas atravs do Pumping Lemma a este autmato podem
ser verificadas atravs do uso de cadeias de comprimento maior ou igual a 3, uma vez que ele possui
trs estados:
Considere-se a cadeia w = abc, |w | = 3. Ento, w pode ser reescrito como xyz , |xy | 3, 1
|y | 3 e, finalmente, xy i z
L, i 0. Nesse caso, deve-se escolher x = a, y = b, z = c.
Assim, xz = ac, xyyz = abbc, xyyyz = abbbc etc. so todas cadeias que pertencem a L.
Considere-se a cadeia w = abbbc, |w | = 5. Ento, w pode ser reescrito como xyz , |xy |
3, 1 |y | 3 e, finalmente, xy i z L, i 0. Nesse caso podem-se fazer trs escolhas
distintas de subdiviso da cadeia w , todas em conformidade com os critrios do Pumping
Lemma:
Nem todas as subdivises de uma cadeia w geram cadeias que produzem cadeias que perten-
cem linguagem. Note-se, em particular, no exemplo acima, que seria possvel relacionar,
entre as subdivises possveis da cadeia de comprimento 5, as seguintes alternativas:
i) x = , y = a, z = bbbc;
Em todos esses casos, xy i z gera cadeias que no pertencem a L. Qualquer que seja a cadeia
escolhida, o Pumping Lemma garante apenas que, se ela possuir comprimento mnimo, ento ao
menos uma subdiviso xyz da mesma ser possvel de ser feita, de modo que todas as cadeias xy i z
tambm pertenam linguagem. 2
1. Admite-se inicialmente, por hiptese, que a linguagem sob anlise seja regular;
A demonstrao de que uma linguagem regular s pode ser feita atravs da apre-
sentao de uma enumerao, de uma expresso regular, de um autmato finito ou de
uma gramtica regular que defina a linguagem.
Exemplo 3.47 Seja L = {a k b k | k 0}. Supondo que L seja uma linguagem regular, tome-se a
sentena a n b n , onde n a constante definida pelo Pumping Lemma. Essa sentena pertence a L
e possui comprimento 2n, portanto maior ou igual a n. De acordo com o Lemma, essa sentena
pode ser decomposta em trs subcadeias x , y e z , tais que xyz = a n b n , |xy | n, |y | 1.
8 Linguagens trivialmente regulares so reconhecidas por autmatos finitos isentos de ciclos, e portanto a eles o
Pumping Lemma no se aplica, j que exprime uma propriedade peridica da linguagem, e em linguagens
finitas no se podem detectar periodicidades. Em outras palavras, nas cadeias xyz , y = , e isso contraria a
hiptese do Pumping Lemma
162 Linguagens Formais - Teoria, Modelagem e Implementao
1. xy 0 z = a ni b n
2. xyyz = a ni a i a i b n = a n+i b n
uma vez que as ocorrncias do smbolo a esto desbalanceadas em relao s ocorrncias dos smbolos
b. Logo, L no regular. 2
Exemplo 3.48 Seja L = {0k 10k | k 1} e considere-se uma sentena w de comprimento suficiente-
mente longo pertencente a esta linguagem, w = 0...010...0. Admitindo-se que seja possvel escrever
w como xyz , tem-se que 1 y n, onde n a constante de L, e y pode assumir uma das cinco
formas seguintes:
1. y =1
2. y 0+
3. y 0+ 1
4. y 10+
5. y 0+ 10+
Exemplo 3.50 Seja L = {a k b k c k | k 1}. Supondo que L seja uma linguagem regular, tome-
se a sentena a n b n c n , onde n a constante definida pelo Pumping Lemma. Claramente essa
sentena pertence a L. Mas, de acordo com o Lemma, essa sentena pode ser decomposta em trs
subcadeias x , y e z , tais que xyz = a n b n c n , |xy | n, |y | 1.
Logo, y = a i , 1 i n, e xyz pode ser reescrito como a ni a i b n c n . No entanto, nenhuma
das seguintes cadeias pertence a L:
1. xy 0 z = a ni b n c n
2. xyyz = a ni a i a i b n c n = a n+i b n c n
uma vez que as ocorrncias do smbolo a esto desbalanceadas em relao s dos smbolos b e c.
Logo, L no regular. Observe-se a semelhana da presente demonstrao com a que foi efetuada
para a linguagem a k b k no Exemplo 3.47. 2
3 Linguagens Regulares 163
m (1 + |y |)
Ele divisvel por m, pois = (1 + |y |);
m
m 6= 1, pois n 1 e m > n;
Logo, L no regular. 2
Justificativa Seja L(M ) a linguagem aceita por um autmato finito determinstico M =(Q ,
, , q0 , F ), sendo uma funo total, e considere-se . Como se pode perceber
pela Figura 3.53, L = ( ) ( L(M )).
164 Linguagens Formais - Teoria, Modelagem e Implementao
= ( )
Exemplo 3.52 Considere-se M o autmato finito determinstico da Figura 3.54, L(M ) = (ab |c)d e .
c d e
a b e
q0 q1 q2 q3
a, c, d , e a, b, c
b, d , e a, b, c, d
q4
a, b, c, d , e
c d e
a b e
q0 q1 q2 q3
a, c, d , e a, b, c
b, d , e a, b, c, d
q4
a, b, c, d , e
a b
q0 q1 q2
Caso o mtodo fosse aplicado a este autmato, na forma em que ele se encontra, o resultado
corresponderia ao apresentado na Figura 3.57.
166 Linguagens Formais - Teoria, Modelagem e Implementao
a b
q0 q1 q2
L1 L2 = L1 L2
3. s(L1 ) = (s(L1 ))
s(0) = a | b
3 Linguagens Regulares 167
s(1) = c d
s(2) = e
Ento, s(L) = s(0 (1 | 2 )) = s(0 )s(1 | 2 ) = (s(0)) (s(1 ) | s(2 )) = (s(0)) ((s(1)) |
(s(2)) ) = (a | b) ((c d ) | (e) ). 2
Exemplo 3.55 Seja L(M ) = (ab) ((cd ) | e ), com M definido conforme a Figura 3.58.
q5 q6
a
b
c d
a b c d
q0 q1 q2 q3 q4
e e
b a
q8 q7
h(0) = ab
h(1) = cd
h(2) = e
0 2
q0 q2 q4
2
0 1
q8
2
2. q 6 F , caso contrrio.
a
q0 q1
b
q0 q1
De fato,
Mtodo:
1. Construo de F :
a) Se 6 L, ento F = {q0 };
b) Se L, ento F = {q0 , q0 }.
2. Construo de :
a c
b
q0 q1
a c
q0 q1
b
c
b
q0
L1 = (a | b | c | d ) bb(a | b | c | d )
L1 = (a | b | c | d ) dd (a | b | c | d )
Exemplo 3.60 Considere-se a linguagem L1 definida sobre o alfabeto {a, b}, de tal forma que perten-
cem a L1 todas as cadeias que podem ser formadas com os smbolos de seu alfabeto, excetuando-se
aquelas que contm exatamente trs smbolos a. L1 regular?
No difcil perceber que L1 = L2 , onde L2 = b ab ab ab , ou seja, L1 corresponde comple-
mentao da linguagem que contm todas as cadeias com exatamente trs smbolos a (L2 ). Portanto,
L1 regular. Uma expresso regular que representa L1 b | b ab | b ab ab | b ab ab ab a(a | b)2
.
Exemplo 3.61 Considere-se o alfabeto {a, b, c} e a linguagem L definida de tal forma que suas
cadeias satisfazem todas s seguintes regras:
Para um autmato finito com n estados, cujo alfabeto de entrada tenha m smbolos,
a quantidade de cadeias que devem ser testadas dada pela frmula:
n1
X
mi
i=0
pois, conforme pode ser verificado na Tabela 3.51, essa frmula representa a quantidade
total de cadeias distintas cujos comprimentos esto entre 0 (inclusive) e n 1 (inclusive),
e que podem ser construdas a partir de um alfabeto com m smbolos.
Exemplo 3.62 Seja L uma linguagem regular sobre o alfabeto {a, b, c} e aceita por um autmato
finito M com trs estados. Ento, para determinar se L no-vazia, basta verificar se alguma das
seguintes cadeias aceita por M :
Comprimento 2 (nove cadeias): aa, ab, ac, ba, bb, bc, ca, cb, cc
Se alguma dessas 13 (= 1 + 3 + 9) cadeias for aceita por M , ento L ser no-vazia. Caso
contrrio, ser vazia. 2
Exemplo 3.63 Seja L uma linguagem regular sobre o alfabeto {a, b} e aceita por um autmato
finito M com 2 estados. Ento, para saber se L no-vazia, basta verificar se alguma das seguintes
cadeias aceita por M :
Comprimento 3 (oito cadeias): aaa, aab, aba, abb, baa, bab, bba, bbb
176 Linguagens Formais - Teoria, Modelagem e Implementao
Se alguma dessas 12 (= 4 + 8) cadeias for aceita por M , ento L infinita. Caso contrrio,
conclui-se que a linguagem finita. 2
Exemplo 3.64 Seja uma linguagem L1 sobre o alfabeto {a}, aceita por um autmato M1 com
trs estados. Para determinar se L1 vazia, basta verificar se alguma das cadeias pertencentes ao
seguinte conjunto aceita por M1 : X = {, a, aa}. Para determinar se L1 infinita, deve-se verificar
as cadeias do conjunto Y = {aaa, aaaa, aaaaa}.
Seja o autmato M1 , representado na Figura 3.64.
a a
q0 q1 q2
fcil perceber, neste caso, que L1 (M1 ) = {a, aa} finita e no-vazia. De fato, as cadeias
a, aa de X so aceitas por M1 . No entanto, nenhuma das cadeias aaa, aaaa, aaaaa de Y so
aceitas por M1 .
Suponha-se agora M2 , correspondente ao autmato da Figura 3.65:
3 Linguagens Regulares 177
a a
q0 q1 q2
a
q0 q1 q2
Mtodo:
O Algoritmo 3.21 garante que qualquer cadeia pode ser analisada em um nmero
finito de passos (ou tempo finito de processamento) em um autmato finito. Para isso,
suficiente garantir que o mesmo seja isento de transies em vazio, o que implica a ine-
xistncia de ciclos formados exclusivamente por transies desse tipo, as quais poderiam,
eventualmente, provocar um processamento interminvel da cadeia de entrada.
178 Linguagens Formais - Teoria, Modelagem e Implementao
Exemplo 3.65 Considere-se o autmato da Figura 3.67, que possui um ciclo formado por transies
em vazio.
q0 q1
b
q2 q3
q0
b
q2 q3
Esse autmato atinge a seguinte configurao de parada, para a mesma cadeia ba de entrada,
aps executar zero movimentaes:
(q0 , ba)
Portanto, por no se tratar de uma configurao final, a cadeia ba rejeitada e no pertence
linguagem definida pelos autmatos das Figuras 3.67 e 3.68. 2
(L1 L2 ) (L1 L2 ) =
Mtodo:
Mtodo:
( L2 ) L1 = L2 L1 =
Mtodo:
definio das gramticas livres de contexto por Chomsky ([61]). A notao BNF (sigla
de Backus-Naur Form) era tambm destinada representao de gramticas livres de
contexto e foi concebida especificamente para uso em linguagens artificiais, em particular
em linguagens de programao. Ela foi utilizada pela primeira vez na especificao da
linguagem de programao Algol 60 ([32], [33]), tendo seu uso se difundido bastante at
os dias de hoje.
Atualmente, graas ao grande desenvolvimento terico verificado nas ltimas dca-
das, tais problemas, longe de terem se tornado triviais, tiveram bem determinados os
limites de sua complexidade, e, como conseqncia, a diversificao de mtodos e resul-
tados tericos conhecidos permite que os mesmos possam ser tratados de forma rotineira
e sistemtica no dia-a-dia do profissional de computao.
Neste captulo ser mostrada a importncia das gramticas livres de contexto na
formalizao das linguagens de programao de alto nvel e sero definidos os conceitos
de rvores de derivao e ambigidade, entre outros. A seguir, sero apresentados e
demonstrados alguns importantes resultados referentes simplificao das gramticas
livres de contexto e sua representao em formas normais.
<frase> <sujeito><verbo><complemento>
<sujeito> O homem
<sujeito> A mulher
<verbo> leu
<verbo> escreveu
<complemento> um <adjetivo> livro
<adjetivo> timo
<adjetivo> pssimo
<adjetivo>
pode dizer que tais linguagens sejam propriamente livres de contexto. Na verdade, a
formalizao completa de sua sintaxe exigiria dispositivos mais complexos, como o caso
das gramticas do tipo 1, uma vez que a grande maioria de tais linguagens apresenta
dependncias de contexto que no podem ser representadas por gramticas do tipo 2, ou
livres de contexto.
No obstante, a simplicidade das gramticas livres de contexto as torna muito
atraentes para a representao formal, ainda que parcial, da sintaxe de tais linguagens.
As gramticas livres de contexto constituem, pois, uma soluo de compromisso em que
o rigor da definio sinttica ligeiramente sacrificado em favor do uso de uma notao
muito mais intuitiva e fcil de ser manipulada do que as gramticas do tipo 1. Desse
modo, as dependncias de contexto costumam ser representadas parte, em alguma
outra notao eventualmente em linguagem natural que sirva de complementao
gramtica do tipo 2 para a representao das dependncias de contexto. As gramticas
formais do tipo 1, devido sua elevada complexidade de manipulao, no costumam
ser utilizadas na prtica para representar dependncias de contexto em linguagens de
programao, nem mesmo de forma parcial.
A caracterstica que torna as gramticas livres de contexto especialmente adequadas
formalizao sinttica das linguagens de programao a sua capacidade de represen-
tao de construes aninhadas, que so freqentemente encontradas em linguagens
dessa categoria. Construes aninhadas costumam ocorrer em linguagens de programa-
o, por exemplo, na construo de expresses aritmticas, em que subexpresses so
delimitadas, atravs do uso de parnteses; na estruturao do fluxo de controle, em que
comandos internos so inseridos como parte integrante de outros externos; na estrutu-
rao do programa, em que blocos, mdulos, procedimentos e funes so empregados
para criar diferentes escopos, etc.
Conforme definido no Captulo 2, uma gramtica livre de contexto uma qudrupla
(V , , P , S ) com os seguintes componentes:
S : raiz da gramtica, S (V ).
{E T + E, (4.1)
E T, (4.2)
T F T, (4.3)
T F, (4.4)
F (E ), (4.5)
F a} (4.6)
Considere-se a sentena a (a + a). Ela pode ser obtida atravs da seguinte seqncia de
derivaes:
184 Linguagens Formais - Teoria, Modelagem e Implementao
E T F T a T a F a (E ) a (T + E ) a (F + E ) a (a + E )
a (a + T ) a (a + F ) a (a + a)
correspondente aplicao das produes 4.2, 4.3, 4.6, 4.4, 4.5, 4.1, 4.4, 4.6, 4.2, 4.4, 4.6, nesta or-
dem.
Observe-se que a linguagem gerada pela gramtica deste exemplo compreende as sentenas
que representam expresses aritmticas corretamente formadas sobre o operando a com os opera-
dores e +. Subexpresses delimitadas atravs de parnteses tambm so admitidas, e podem
ser compostas com base nas mesmas regras utilizadas para construir a expresso inicial. No fazem
parte da linguagem definida por esta gramtica, por exemplo, cadeias em que no haja plena cor-
respondncia do smbolo ( com seu par ). Em outras palavras, trata-se de uma linguagem que
admite o aninhamento de expresses atravs do uso de parnteses como delimitadores. 2
Y Y , com , +
Z Z , com , , 6=
{S aS ,
S bS ,
S a,
S b,
S aSa}
No entanto, a linguagem gerada por essa gramtica {a, b} , ou seja, a linguagem regular.
Na verdade, fcil observar que essa linguagem tambm pode ser gerada por um conjunto de regras
equivalente, em que a ltima produo da gramtica acima removida:
{S aS ,
S bS ,
S a,
S b}
Tal fato ocorre, neste caso particular, porque a produo S aSa no-essencial gramtica,
ou seja, a sua incluso no conjunto P de produes em nada contribui para modificar a linguagem
definida pelas demais produes. 2
Exemplo 4.5 Em BNF, a gramtica que representa expresses aritmticas aninhveis, sobre ope-
randos a, com os operadores adio e multiplicao, anteriormente apresentada no Exemplo 4.1,
torna-se:
Empregada pela primeira vez no incio da dcada de 1960, na publicao que definiu
formalmente a linguagem de programao Algol 60 ([32], [33]), a notao BNF se tornou
extremamente popular justamente por ter demonstrado na prtica, pela primeira vez,
a viabilidade de uso de uma notao formal para a representao da sintaxe de uma
linguagem de programao, representando um dos primeiros resultados prticos advindos
do interesse dos profissionais de computao pelas ento recm descobertas gramticas
livres de contexto.
Embora largamente utilizada ainda hoje, a notao BNF enfrenta atualmente a
concorrncia de outras metalinguagens igualmente importantes, como o caso de v-
rios de seus dialetos, da Notao de Wirth, dos Diagramas de Sintaxe, das Expresses
Regulares Estendidas e de inmeras outras ([24]). Apesar disso, a notao algbrica
continuar sendo empregada preferencialmente neste texto por ser a mais adequada ao
estudo terico e conceitual das linguagens formais. Eventualmente, poder ser empregada
a BNF, em exemplos de linguagens de programao.
P = {S XYZ | g
X aX | a
Y Sb
Z cdZ | eZ | f }
188 Linguagens Formais - Teoria, Modelagem e Implementao
No difcil perceber que <X> gera cadeias compostas por um ou mais smbolos a. Ento, a
regra <X> ::= a<X> | pode ser substituda pela regra <X> ::= aa . De maneira anloga, a regra
<Z> ::= cd <Z> | e<Z> | f pode ser substituda por <Z> ::= (cd | e) f . Note-se, em ambos os
casos, a substituio do uso de smbolo no-terminal no lado direito das regras, pelo uso do operador
fechamento reflexivo e transitivo () para representar a repetio de termos. O novo conjunto de
regras torna-se, portanto:
A substituio das definies dos smbolos <X>, <Y> e <Z> na regra do smbolo <S> resulta
em:
(no-estendida) que gera a linguagem definida pela gramtica. Dessa maneira, a BNF
estendida um formalismo que une as vantagens das expresses regulares s da BNF,
constituindo importante alternativa tanto para a representao de linguagens regulares
quanto para a de linguagens livres de contexto.
Diz-se que um smbolo no-terminal A de uma gramtica livre de contexto G
recursivo esquerda se A A, com V . Uma gramtica dita recursiva
esquerda se ela possuir pelo menos um smbolo no-terminal recursivo esquerda.
De maneira anloga, diz-se que um smbolo no-terminal A de uma gramtica livre de
contexto G recursivo direita se A A, com V . Uma gramtica dita
recursiva direita se ela possuir pelo menos um smbolo no-terminal recursivo
direita.
Observe-se que recurses esquerda podem ocorrer de forma direta atravs de
produes do tipo A A, V ou indireta como, por exemplo, em A B ,
B C e C A, pois A B C A, ou seja, A A, com = () .
Consideraes semelhantes so vlidas para recurses direita.
Exemplo 4.7 Considere-se a gramtica cujas regras so:
recurso direita: A A;
recurso esquerda: A A;
recurso central: A A;
termo independente: A .
A 1 A | 2 A | ... | i A |
A1 | A2 | ... | Aj |
190 Linguagens Formais - Teoria, Modelagem e Implementao
A1 A | A2 A | ... | Ak A |
1 A1 | 2 A2 | ... | m Am |
1 | 2 | ... | p
possvel demonstrar, conforme discusso a seguir, que a frmula geral que permite
representar a linguagem gerada por A, sem no entanto fazer uso de recurses esquerda
e/ou direita, :
A =
(1 | ... | i ) (1 | ... | p | 1 A1 | ... | m Am )(1 | ... | j )
(
(1 | ... | k )
(1 | ... | i ) (1 | ... | p | 1 A1 | ... | m Am )(1 | ... | j )
)
A A | A | AA | A |
cuja soluo :
A = ( | A) ( ( | A) )
Exemplo 4.8 Alguns casos simples, envolvendo apenas recurses esquerda, direita, e termos
independentes, so apresentados a seguir.
Se X aX | , ento X = a ;
4 Linguagens Livres de Contexto 191
Se X aX | b, ento X = a b;
Se X Xb | a, ento X = ab ;
Se X Xb | , ento X = b ;
Se X aX | bX | c, ento X = (a | b) c;
Se X Xa | Xb | c, ento X = c(a | b) ;
Se X aX | b | c, ento X = a (b | c);
Se X aX | Xb | , ento X = a b ;
Se X aX | Xc | b, ento X = a bc ;
Se X aX | Xd | b | c, ento X = a (b | c)d ;
Se X aX | bX | Xe | c | d , ento X = (a | b) (c | d )e ;
Se X aX | bX | Xe | Xf | c | d , ento X = (a | b) (c | d )(e | f ) .
2
Exemplo 4.9 Os casos abaixo contm, alm de recurses esquerda, direita e termos indepen-
dentes, recurses centrais, regras recursivas simultaneamente esquerda e direita, e regras com
mltiplas recurses em outros formatos. Note-se que, nos casos em que o valor de X pode ser
representado na forma de um termo independente, utilizada a notao X=... para indicar a
associao de valor ao smbolo. Nos casos em que isso no possvel, utiliza-se a notao EBNF
<X>::=....
Se X XcX | e, ento X = e(ce) ;
Se X aX | Xc | XX | b, ento X = a bc (a bc ) ;
Se X aX | bX | cXd | e,
ento <X> ::= (a | b) (c<X>d | e);
Se X aX | Xb | cXd | XeX | f ,
ento <X> ::= a fb ((e | c<X>d )a fb ) ;
Se X aX | dX | Xd | bXcc | XbbXc | e,
ento <X> ::= (a | d ) (e | b<X>cc)(d | bb<X>c) ;
A notao EBNF teve origem em um artigo publicado em 1977 ([35]). Nessa pu-
blicao, Wirth questionava a grande diversidade de notaes para a representao de
sintaxe existente naquela poca, e propunha uma nova variante da BNF como alternativa
a todas elas. Tal notao viria a ser denominada, posteriormente, Notao de Wirth.
Outras extenses foram sendo propostas e incorporadas ao longo do tempo, de tal
modo que atualmente existem inmeros dialetos daquilo que conhecemos como BNF
estendida. Uma tentativa de padronizao surgiu com a publicao de um padro inter-
nacional ISO em 1996 ([36]).
192 Linguagens Formais - Teoria, Modelagem e Implementao
1 Nestetexto, o smbolo = usado para indicar que um smbolo est ligado a um determinado valor. O seu
uso no lugar do smbolo ::=, ou mesmo do smbolo , desencorajado, uma vez que estes se empregam
na representao de regras gramaticais.
4 Linguagens Livres de Contexto 193
2. O rtulo da raiz S ;
5. Se um vrtice possui o rtulo , ento este vrtice deve ser simultaneamente uma
folha e descendente nico de seu ancestral direto.
F * T
( E )
T + E
F T
a F
Observe-se, nesta rvore, que a sentena a (a + a) pode ser obtida pela concatenao dos
rtulos dos vrtices que so folhas, e corresponde sentena cuja estrutura est sendo representada
pela prpria rvore. 2
Naturalmente, nem toda rvore necessita ter como raiz S , nem tampouco possuir
como fronteira , S . comum que se considerem subrvores cuja raiz seja
um elemento X qualquer, X N , e a fronteira, uma cadeia V , tal que X .
Exemplo 4.11 A derivao no-trivial T a (E ), segundo a gramtica do Exemplo 4.1, pode ser
representada atravs da subrvore:
T
F * T
( E )
4.4 Ambigidade
Diz-se que uma gramtica livre de contexto no-ambgua se, para toda e qualquer
cadeia pertencente linguagem por ela gerada, existir uma nica seqncia de derivaes
mais esquerda e uma nica seqncia de derivaes mais direita que a geram.
4 Linguagens Livres de Contexto 195
Diz-se que uma gramtica livre de contexto ambgua quando existir pelo menos
uma cadeia, pertencente linguagem por ela gerada, que possua mais de uma seqncia
distinta de derivaes, feitas exclusivamente atravs de substituies de no-terminais
mais esquerda ou mais direita. Na verdade, a primeira condio implica a segunda
e vice-versa, ou seja, se houver mais de uma seqncia com substituies mais es-
querda, ento haver tambm mais de uma com substituies mais direita, conforme
demonstrado no Teorema 4.2.
Teorema 4.2 (Derivaes esquerda derivaes direita) Se w L(G), com
G sendo uma gramtica livre de contexto, e existindo duas (ou mais) derivaes mais
esquerda para w em G, ento existem tambm, correspondentemente, duas (ou mais)
derivaes mais direita para w em G.
S 1 X 1 1 1 2 1 2 3
S 1 X 1 2 1 2 1 2 3
S X 3 1 3 2 3 1 2 3
S X 3 2 3 2 3 1 2 3
Exemplo 4.12 A gramtica cujo conjunto de regras est abaixo apresentado equivalente gramtica
anteriormente utilizada na definio da linguagem das expresses aritmticas sobre {a, +, , (, )} do
Exemplo 4.1. Diferentemente daquela, no entanto, apenas um smbolo no-terminal (E ) utilizado:
{E E + E,
E E E,
E a,
E (E )}
Adotando-se o critrio das derivaes mais esquerda, pode-se perceber que a sentena a +a a
pode ser derivada ao menos de duas formas distintas:
196 Linguagens Formais - Teoria, Modelagem e Implementao
Exemplo 4.13
Considere-se o fragmento de gramtica abaixo apresentado, que ilustra um problema tpico de
determinadas linguagens de programao de alto nvel a ambigidade na construo de comandos
condicionais aninhados.
<programa> . . . <comando> . . .
<comando> <condicional>
<condicional> if <condio> then <comando>
<condicional> if <condio> else <comando> else <comando>
<condio> ...
Passa-se a analisar a estrutura da seguinte forma sentencial:
if <condio> then if <condio> then <comando> else <comando>
Para se determinar uma eventual ambigidade nessa forma sentencial, escolhe-se inicialmente
e fixa-se um critrio de substituio de no-terminais por exemplo, as substituies dos no-
terminais mais esquerda. Neste caso, fcil verificar que a forma sentencial acima admite duas
seqncias distintas de derivao:
1. Primeira alternativa:
<programa> . . . <comando> . . .
. . . <condicional> . . .
. . . if <condio> then <comando> else <comando> . . .
. . . if <condio> then <condicional> else <comando> . . .
. . . if <condio> then if <condio> then <comando>
else <comando> . . .
2. Segunda alternativa:
<programa> . . . <comando> . . .
. . . <condicional> . . .
. . . if <condio> then <comando> . . .
. . . if <condio> then <condicional> . . .
. . . if <condio> then if <condio> then <comando>
else <comando> . . .
No primeiro caso, o ramo do else considerado como parte integrante do comando condicio-
nal mais externo e, no segundo, este mesmo ramo considerado como parte do comando condicional
mais interno:
if <condio> then if <condio> then <comando> else <comando>
| {z }
| {z }
4 Linguagens Livres de Contexto 197
Na prtica, apenas uma interpretao deve ser atribuda para comandos como o
apresentado acima em cada possvel implementao desta linguagem. No entanto, o
que interessa que a formalizao gramatical dessa construo ambgua, ou seja, ela
admite mais de uma interpretao para a sentena em questo, independentemente da
implementao considerada.
certo que o termo interpretao denota significado, contedo semntico, assun-
tos que no esto sendo considerados no momento. Mas, como se sabe, o significado
de uma sentena costuma estar muito associado sua estrutura, e por esse motivo a
existncia de duas ou mais seqncias distintas de derivaes para uma mesma sentena
sugere a eventual existncia de uma ambigidade semntica a partir de uma ambigidade
sinttica (ou estrutural) concreta constatada.
Ambigidades sintticas (simplesmente ambigidades, neste texto) constituem ge-
ralmente uma caracterstica indesejvel das gramticas de linguagens de programao e
das demais linguagens artificiais em geral, uma vez que comum, em casos como este,
que a construo ambgua seja implementada (isto , seja associada a interpretaes
semnticas) de formas diversas, dependendo da opo efetuada pelo projetista de cada
compilador e/ou interpretador, prejudicando, assim, a portabilidade dos programas de
aplicao entre uma implementao e outra.
Normalmente, ambigidades costumam ser eliminadas atravs da utilizao de cons-
trues gramaticais que impeam a existncia de mais de uma seqncia de derivaes
mais esquerda (e, portant,o tambm mais direita) para cada sentena pertencente
linguagem, desde que fixado e observado a priori, naturalmente, um critrio nico
para a substituio dos no-terminais nas formas sentenciais. Eventualmente, como no
Exemplo 4.14 apresentado a seguir, modificaes mnimas podem vir a ser introduzidas
na linguagem em conseqncia de tais alteraes.
Assim, por exemplo, comum, em linguagens de programao modernas, a definio
de comandos condicionais de maneira semelhante ao abaixo apresentado.
Exemplo 4.14
Seja a seguinte gramtica, inspirada na do Exemplo 4.13:
<comando> . . . <comando> . . .
<comando> <condicional>
<condicional> if <condio> then <comando> fi
<condicional> if <condio> then <comando> else <comando> fi
<condio> ...
A associao do else ao comando condicional mais externo ou mais interno feita, de
acordo com esta nova gramtica, respectivamente:
if <condio> then if <condio> then <comando> fi else <comando> fi
| {z }
| {z }
ou
if <condio> then if <condio> then <comando> else <comando> fi fi
| {z }
| {z }
2
198 Linguagens Formais - Teoria, Modelagem e Implementao
Exemplo 4.16
A linguagem {a i b j c k | i = j ou j = k } inerentemente ambgua. A demonstrao pode ser
encontrada em [49]. 2
Justificativa Pode ser encontrada em [46]. No difcil, no entanto, intuir que, para
cada forma sentencial obtida atravs de derivaes mais esquerda, a substituio do
no-terminal mais esquerda por produes distintas, sejam elas quantas forem, d ori-
gem a uma quantidade idntica de rvores distintas, as quais so diferenciadas pelos ns
que representam os filhos do n que representa esse no-terminal. De forma anloga, o
raciocnio inverso tambm se aplica.
Por outro lado, quando se consideram gramticas livres de contexto no-ambguas,
a ordem em que so feitas as substituies dos smbolos no-terminais nas formas sen-
tenciais irrelevante do ponto de vista das cadeias que podem ser geradas e das respec-
tivas rvores de derivao. Como mostra o Teorema 4.4, qualquer que seja a ordem de
substituio dos no-terminais escolhida na gerao de uma mesma cadeia, a rvore de
derivao ser sempre a mesma.
Teorema 4.4 (Mltiplas derivaes nica rvore) Seja G uma gramtica livre
de contexto no-ambgua. Para toda cadeia w L(G), toda e qualquer seqncia de
derivaes que produz w representada atravs da mesma e nica rvore de derivao.
4 Linguagens Livres de Contexto 199
possa ser derivada por duas ou mais seqncias distintas de derivaes mais
esquerda, ou
possa ser derivada por duas ou mais seqncias distintas de derivaes mais
direita, ou
Exemplo 4.17 Considere-se o fragmento de gramtica utilizado para ilustrar o problema da ambigi-
dade em comandos condicionais (Exemplo 4.13). De acordo com essa gramtica, a forma sentencial:
if <condio> then if <condio> then <comando> else <comando>
pode ser derivada segundo duas seqncias distintas de derivaes mais esquerda. Como con-
seqncia, existem tambm duas rvores de derivao distintas que possuem como fronteira essa
mesma forma sentencial:
200 Linguagens Formais - Teoria, Modelagem e Implementao
<condicional>
<condicional>
<condicional>
<condicional>
Para cada tipo de transformao ser apresentado um algoritmo que mapeia a gra-
mtica original em uma outra gramtica que exiba uma das propriedades acima enumera-
das. Em todos os casos possvel demonstrar formalmente (ver [46]) que a transformao
produz o efeito proposto sem alterar a linguagem definida pela gramtica original.
Considere-se inicialmente a definio e eliminao de smbolos inacessveis e inteis.
Dada uma gramtica livre de contexto G = (V , , P , S ), ento:
S Y , com , V ,
1. Y est presente em pelo menos uma forma sentencial derivada a partir da raiz da
gramtica, e
Justificativa A demonstrao deste teorema pode ser realizada tomando-se como base
os dois algoritmos apresentados a seguir. O Algoritmo 4.1 mostra como eliminar os
no-terminais que no geram cadeias de terminais, bem como as produes em que os
mesmos comparecem, preservando em N apenas os smbolos do conjunto N = {Y N |
Y , com }.
Algoritmo 4.1 (Eliminao de smbolos inteis) Eliminao de smbolos inteis
em gramticas livres de contexto.
Mtodo:
1. N0 ;
2. i 1;
4. Se Ni 6= Ni1 , ento:
a) i i + 1;
Caso contrrio:
a) N Ni ;
b) P {A X1 X2 . . . Xn P | A, X1 , X2 , . . . , Xn (Ni )}.
Mtodo:
1. V0 {S };
2. i 1;
4. Se Vi 6= Vi1 , ento:
a) i i + 1;
Caso contrrio:
a) N Vi N ;
b) Vi ;
c) P {A X1 X2 . . . Xn P | A, X1 , X2 . . . Xn Vi }.
Observe-se a similaridade entre as definies e os algoritmos da presente seo com
os da Seo 3.3, sobre autmatos finitos.
De fato, h uma correspondncia direta entre os conceitos de smbolo e estado aces-
svel, bem como entre os de smbolo e estado til. H, tambm, uma relao direta entre
os algoritmos para a eliminao de smbolos inteis (Algoritmo 4.1) e a para eliminao
de smbolos inacessveis (Algoritmo 4.2) com os algoritmos para a eliminao dos esta-
dos inteis e inacessveis em autmatos finitos (respectivamente, Algoritmos 3.11 e 3.9).
204 Linguagens Formais - Teoria, Modelagem e Implementao
Trata-se, como se pode perceber, essencialmente dos mesmos conceitos e dos mesmos
mtodos.
No caso do Algoritmo 4.1, trata-se da identificao sistemtica dos smbolos que
geram alguma cadeia formada apenas por terminais. No Algoritmo 3.9, trata-se da
identificao dos estados que conduzem a algum estado final do autmato. O Algoritmo
4.2 identifica os smbolos que podem ser gerados a partir da raiz S . O Algoritmo 3.11
identifica os estados que podem ser alcanados a partir do estado inicial do autmato.
Note-se tambm que os Algoritmos 4.1 e 4.2 no apenas eliminam smbolos dos
conjuntos N e da gramtica original, no caso geral, como tambm eliminam todas as
produes de P que envolvam quaisquer smbolos inacessveis ou inteis eliminados.
Smbolos inacessveis e inteis podem ser eliminados de uma gramtica livre de
contexto qualquer aplicando-se-lhes inicialmente o Algoritmo 4.1 e, ao resultado deste,
o Algoritmo 4.2, ou vice-versa. A ordem de aplicao dos algoritmos no interfere no
resultado final obtido, como demonstra o Teorema 4.6.
Teorema 4.6 (Eliminao de smbolos inacessveis e inteis) A obteno de uma
gramtica livre de contexto G3 , isenta de smbolos inacessveis ou inteis, a partir de uma
gramtica livre de contexto G1 qualquer, pode ser feita pela aplicao dos Algoritmos 4.1
e 4.2 uma nica vez cada, em qualquer seqncia.
i) Acessvel e til;
Alm disso, os Algoritmos 4.1 e 4.2 no criam novos smbolos, tampouco alteram as
caractersticas de acessibilidade ou de utilidade dos smbolos da gramtica de entrada que
foram preservados na gramtica de sada. Em funo dessas observaes, considerem-se
as duas seguintes seqncias possveis para a aplicao dos Algoritmos 4.1 e 4.2:
V = {S , A, B , C , a, b}
= {a, b}
P = {S A | B , A aB | bS | b, B AB | Ba, C AS | b}
Aplicando-se o algoritmo de eliminao de no-terminais que no geram cadeias de terminais,
obtm-se:
N0 =
N1 = {A, C }
N2 = {A, C , S }
N3 = {A, C , S }
Logo, G = {V , , P , S }, com:
V = {S , A, C , a, b}
P = {S A | A bS | b, C AS | b}
Note-se que o no-terminal B foi eliminado de N uma vez que no possvel derivar qualquer
cadeia de terminais a partir dele. Aplicando-se a G o Algoritmo 4.2, para a eliminao de smbolos
inacessveis, obtm-se:
V0 = {S }
V1 = {S , A}
V2 = {S , A, b}
e G = {V , , P , S }, com:
V = {S , A}
= {b}
P = {S A | A bS | b}
Observe-se a eliminao dos smbolos C e a de V , uma vez que eles no comparecem
em qualquer forma sentencial derivvel a partir de S . G corresponde, assim, a uma gramtica
equivalente a G, isenta de smbolos inacessveis e inteis, e L(G) = L(G ) = b + . 2
Analisa-se agora a questo da eliminao das produes em vazio. Produes em
vazio so produes da forma A , e a total eliminao de produes desse tipo de
uma gramtica G naturalmente s possvel se 6 L(G).
Teorema 4.7 (Eliminao de produes em vazio) Toda linguagem livre de con-
texto que no contm a cadeia vazia pode ser gerada por uma gramtica livre de contexto
em que no h produes em vazio.
Mtodo:
1. E0 {A | A P };
2. i 1;
3. Ei Ei1 {A | A X1 X2 . . . Xn P e X1 , X2 . . . Xn Ei1 };
4. Se Ei 6= Ei1 , ento:
a) i i + 1;
Caso contrrio:
a) E Ei1 ;
5. P ;
6. P {A P | 6= };
8. Se S E , ento:
a) P P {S S | };
b) N N {S };
4 Linguagens Livres de Contexto 207
Caso contrrio:
a) N N ;
b) S S .
Os passos (1), (2), (3) e (4) do algoritmo buscam identificar o subconjunto E dos
elementos A de N , E N , tais que A , e em muito se assemelham aos Algoritmos
4.1 e 4.2 anteriormente apresentados. Os passos (5), (6) e (7) realizam o mapeamento
acima descrito, eliminando as produes em vazio e eventualmente expandindo as demais
produes.
Observe-se que o fato de cada produo de P ser considerada no formato genrico:
A 0 B1 1 B2 2 . . . Bk k
V = {S , A, B , C }
= {a, b}
P = {S ABC , A BB | , B CC | a, C AA | b}
{C AA | A | b,
B CC | C | a,
A BB | B ,
S ABC | A | B | C | AB | AC | BC }
V = {S , B , C }
= {a, b, c, d }
P = {S aBC , B bB | , C cCc | d | }
{B bB | b,
C cCc | cc | d ,
S aBC | aB | aC }
Mtodo:
a) N0 {A};
b) i 1;
c) Ni Ni1 {C | B C P e B Ni1 };
d) Se Ni 6= Ni1 , ento:
i. i i + 1;
Caso contrrio:
i. NA Ni1 ;
2. P {A P | 6 N };
Para evitar situaes como as do Exemplo 4.21, suficiente garantir que a gramtica
em questo no possua regras em vazio, ou, alternativamente, desconsiderar derivaes
que faam uso das mesmas no clculo dos conjuntos NA (passo (1) do Algoritmo 4.4).
O conjunto P construdo nos passos (2) e (3). Ele obtido pela eliminao de
todas as produes unitrias de P , preservando-se as demais e criando novas produes
do tipo X , onde Y NX e Y P . Isso implica abreviar uma seqncia de
derivaes, substituindo cada derivao que utilize produes unitrias pela derivao
utilizando as novas produes que produz o efeito final pretendido.
{S A | B | C,
A aaAa | B | ,
B bBb | b | C ,
C cC | }
Aplicando-se o Algoritmo 4.4, obtm-se:
NS = {S , A, B , C }
NA = {A, B , C }
NB = {B , C }
NC = {C }
Assim, G = (V , , P , S ), e P torna-se:
210 Linguagens Formais - Teoria, Modelagem e Implementao
{S aaAa | | bBb | b | cC ,
A aaAa | | bBb | b | cC ,
B bBb | b | cC | ,
C cC | }
A ttulo de ilustrao, considere-se a derivao da sentena aabba. Tomando-se como base a
gramtica G, a seqncia de derivaes desta sentena :
S A aaAa aaBa aabBba aabCba aabba
ao passo que, tomando-se como base a gramtica modificada G , a seqncia de derivao desta
sentena se torna:
S aaAa aabBba aabba
(note-se como a eliminao de produes unitrias abrevia a derivao da sentena). 2
Diz-se que uma gramtica livre de contexto isenta de produes em vazio acclica
se e somente se no existir A N , tal que A A. Caso contrrio, diz-se que a
gramtica cclica. O Algoritmo 4.4 pode ser facilmente adaptado para detectar ciclos
em gramticas livres de contexto isentas de produes em vazio, conforme apresentado
no Algoritmo 4.5.
Algoritmo 4.5 (Deteco de ciclos) Deteco de ciclos em gramticas livres de con-
texto isentas de produes em vazio.
Mtodo:
a) N0 {B | A B P e B 6= A};
b) i 1;
c) Ni Ni1 {C | B C P e B Ni1 };
d) Se Ni 6= Ni1 , ento:
i. i i + 1;
Caso contrrio:
i. NA Ni1 ;
1. A BC , ou
2. A a
com A, B , C N e a .
Se L(G), ento admite-se S como nica produo em que comparece do
lado direito.
Teorema 4.9 (Forma Normal de Chomsky) Toda linguagem livre de contexto L
pode ser gerada por uma gramtica livre de contexto na Forma Normal de Chomsky.
Justificativa Seja G uma gramtica livre de contexto qualquer que gera L. Sem perda
de generalidade, considere-se que G no apresenta produes unitrias, smbolos inteis
e nem produes em vazio exceto S , se L(G). possvel demonstrar for-
malmente (ver [46]) que o mapeamento de G em G , a gramtica equivalente na Forma
Normal de Chomsky, pode ser efetuado atravs do Algoritmo 4.6.
Algoritmo 4.6 (Forma Normal de Chomsky) Obteno de uma gramtica livre de
contexto na Forma Normal de Chomsky.
Mtodo:
212 Linguagens Formais - Teoria, Modelagem e Implementao
1. P ;
2. N N ;
3. Se A BC P , com A, B , C N , ento A BC P ;
4. Se A P , com A N , , ento A P ;
5. Se S P , ento S P ;
{A X1 Z1 ,
Z1 X 2 Z2 ,
...
Zn2 Xn1 Xn }
{E E + T | T,
T T F | F,
F (E ) | a}
A , , N
Mtodo:
1. N N ;
2. P ;
3. i 1;
Xi Xi 1 | . . . | Xi m | 1 | . . . | n
Xi 1 | . . . | n | 1 Xi | . . . | n Xi
Xi 1 | . . . | m | 1 Xi | . . . | m Xi
7. Se i 6= p:
a) i i + 1;
Xi Xi i | . . . | Xi m | 1 | . . . | n
{E E + T | T,
T T F | F,
F (E ) | a}
{E T | TE ,
E +T | +TE ,
T F | FT ,
T F | FT ,
F (E ) | a}
2
Exemplo 4.25 Considere-se o conjunto abaixo de regras de uma gramtica G, e a ordenao de seus
no-terminais X1 < X2 < X3 < X4 :
{X1 X2 X3 | a,
X2 X3 X2 | X2 b | b,
X3 X4 X1 | c,
X4 X1 X3 | X3 e | d }
As produes de X1 claramente satisfazem aos requisitos dos passos (5) e (6) do Algoritmo 4.7.
As produes de X2 satisfazem ao passo (5), porm no ao passo (6). Assim, elas so substitudas
por:
X2 X3 X2 | b | X3 X2 X2 | bX2
X2 bX2 | b
Tambm as produes do no-terminal X3 satisfazem s exigncias dos passos (5) e (6), mas
o mesmo no ocorre com as produes de X4 , mais especificamente com a produo X4 X1 X3 ,
216 Linguagens Formais - Teoria, Modelagem e Implementao
que deve ser alterada conforme o determinado pelo passo (5). Substituindo-se X1 pela sua definio,
obtm-se:
X4 X2 X3 X3 | aX3 | X3 e | d
Prosseguindo, substitui-se X2 pela sua definio, obtendo-se:
X4 X4 X1 X2 X3 X3 | cX2 X3 X3 | bX3 X3 | X4 X1 X2 X2 X3 X3 |
cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | X4 X1 e | ce | d
{X1 X2 X3 | a,
X2 X3 X2 | b | X3 X2 X2 | bX2 ,
X2 bX2 | b,
X3 X4 X1 | c,
X4 cX2 X3 X3 | bX3 X3 | cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | ce | d | cX2 X3 X3 X4 | bX3 X3 X4 |
cX2 X2 X3 X3 X4 | bX2 X3 X3 X4 | aX3 X4 | ceX4 | dX4 ,
X4 X1 X2 X3 X3 | X1 X2 X2 X3 X3 | X1 e | X1 X2 X3 X3 X4 | X1 X2 X2 X3 X3 X4 | X1 eX4 }
Tendo visto que toda gramtica livre de contexto pode ser transformada em uma
gramtica equivalente, isenta de recurses esquerda, pode-se passar finalmente ao algo-
ritmo/teorema que possibilita a normalizao em relao Forma Normal de Greibach.
Teorema 4.10 (Forma Normal de Greibach) Toda linguagem livre de contexto L
pode ser gerada por uma gramtica livre de contexto na Forma Normal de Greibach.
Justificativa Pode ser desenvolvida a partir do Algoritmo 4.8, que permite a conver-
so de uma gramtica livre de contexto qualquer em outra equivalente na Forma Normal
de Greibach.
Algoritmo 4.8 (Forma Normal de Greibach) Obteno de uma gramtica livre de
contexto na Forma Normal de Greibach.
Mtodo:
2. N N ;
3. P {Xr | Xr P };
4. i r 1;
b) i i 1;
Xi A2 . . . Ak , com , Aj V , 2 j k
Com relao ao passo (1), note-se que a condio de que G seja no-recursiva
esquerda garante que seja sempre possvel estabelecer uma relao de ordem entre os
elementos de N . Em particular, pode-se utilizar a prpria relao de ordem obtida da
aplicao do algoritmo de eliminao de recurses esquerda. Observe-se, no passo (3),
que inicia necessariamente com um smbolo terminal.
Quanto aos novos smbolos no-terminais Xi criados pela aplicao do referido
mtodo, pode-se, com segurana, atribuir aos mesmos os ndices mais baixos nesta relao
de ordem, situando-os antes dos demais smbolos Xi e com qualquer relao mtua de
ordem (por exemplo, X1 < . . . < Xq < X1 < . . . < Xp ) . Isso pode ser feito uma vez
que, por construo, todas as produes de Xi so iniciadas exclusivamente com
ou Xi N .
No passo (5), cada produo de cada no-terminal Xi processada atravs de
substituies sucessivas at que ela se inicie exclusivamente com smbolos terminais.
218 Linguagens Formais - Teoria, Modelagem e Implementao
{E T | TE ,
E +T | +TE ,
T F | FT ,
T F | FT ,
F (E ) | a}
F (E ) | a
T (E ) | a | (E )T | aT
E (E ) | a | (E )T | aT | (E )E | aE | (E )T E | aT E
T F | FT
E +T | +TE
{F (E ) | a,
T (E ) | a | (E ) T | aT ,
E (E ) | a | (E ) T | aT | (E ) E | aE | (E ) T E | aT E ,
T F | FT ,
E +T | +TE ,
) )}
2
Exemplo 4.27 No que se refere ao Exemplo 4.25, a obteno da correspondente Forma Normal de
Greibach, com base na relao de ordem X2 < X4 < X1 < X2 < X3 < X4 , passa, inicialmente, pela
substituio da definio de X4 em X3 , de X3 em X2 , de X2 em X1 e, finalmente, de X1 em X4 .
exceo deste ltimo passo, omitido para no estender demais o exemplo, o resultado apresentado
a seguir. Observe-se ainda a criao do novo smbolo no-terminal e , com todas as ocorrncias
do smbolo e substitudas por e , e a adio ao conjunto de produes da regra e e.
ce X1 X2 X2 X3 | dX1 X2 X2 X3 | cX2 X3 X3 X4 X1 X2 X2 X3 |
bX3 X3 X4 X1 X2 X2 X3 | cX2 X2 X3 X3 X4 X1 X2 X2 X3 |
bX2 X3 X3 X4 X1 X2 X2 X3 | aX3 X4 X1 X2 X2 X3 | ce X4 X1 X2 X2 X3 |
dX4 X1 X2 X2 X3 | cX2 X2 X3 | bX2 X3 | bX3 | a,
X2 cX2 X3 X3 X1 X2 | bX3 X3 X1 X2 | cX2 X2 X3 X3 X1 X2 |
bX2 X3 X3 X1 X2 | aX3 X1 X2 | ce X1 X2 | dX1 X2 |
cX2 X3 X3 X4 X1 X2 | bX3 X3 X4 X1 X2 | cX2 X2 X3 X3 X4 X1 X2 |
bX2 X3 X3 X4 X1 X2 | aX3 X4 X1 X2 | ce X4 X1 X2 | dX4 X1 X2 | cX2 |
cX2 X3 X3 X1 X2 X2 | bX3 X3 X1 X2 X2 | cX2 X2 X3 X3 X1 X2 X2 |
bX2 X3 X3 X1 X2 X2 | aX3 X1 X2 X2 | ce X1 X2 X2 | dX1 X2 X2 |
cX2 X3 X3 X4 X1 X2 X2 | bX3 X3 X4 X1 X2 X2 | cX2 X2 X3 X3 X4 X1 X2 X2 |
bX2 X3 X3 X4 X1 X2 X2 | aX3 X4 X1 X2 X2 | ce X4 X1 X2 X2 |
dX4 X1 X2 X2 | cX2 X2 | bX2 | b,
X2 bX2 | b,
X3 cX2 X3 X3 X1 | bX3 X3 X1 | cX2 X2 X3 X3 X1 | bX2 X3 X3 X1 | aX3 X1 |
ce X1 | dX1 | cX2 X3 X3 X4 X1 | bX3 X3 X4 X1 | cX2 X2 X3 X3 X4 X1 |
bX2 X3 X3 X4 X1 | aX3 X4 X1 | ce X4 X1 | dX4 X1 | c,
X4 cX2 X3 X3 | bX3 X3 | cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | ce | d |
cX2 X3 X3 X4 | bX3 X3 X4 | cX2 X2 X3 X3 X4 |
bX2 X3 X3 X4 | aX3 X4 | ce X4 | dX4 ,
X4 X1 X2 X3 X3 | X1 X2 X2 X3 X3 | X1 e | X1 X2 X3 X3 X4 | X1 X2 X2 X3 X3 X4 | X1 e X4 ,
e e}
2
A pilha de um autmato de pilha pode ser entendida como uma estrutura de dados,
de capacidade ilimitada, na qual a mquina de estados capaz de armazenar, consultar
e remover smbolos de um alfabeto prprio, denominado alfabeto de pilha, segundo a
conveno usual para estruturas deste tipo (LIFO last-in-first-out). Quanto aos seus
demais componentes e caractersticas, o autmato de pilha se assemelha ao autmato
finito anteriormente estudado.
Formalmente, um autmato de pilha pode ser definido como uma stupla M :
M = (Q , , , , q0 , Z0 , F )
onde:
Q um conjunto finito de estados;
um alfabeto (finito e no-vazio) de entrada;
um alfabeto (finito e no-vazio) de pilha;
uma funo de transio Q ( {}) 2Q ;
q0 o estado inicial de M , q0 Q ;
Z0 o smbolo inicial da pilha, Z0 ;
F o conjunto de estados finais de M , F Q .
Dos sete elementos que compem este sistema formal, apenas trs merecem expli-
cao adicional , e Z0 , uma vez que os demais esto em correspondncia direta
com o que j foi estudado para o caso dos autmatos finitos.
Note-se, inicialmente, a presena de um alfabeto de pilha e de um smbolo inicial
de pilha Z0 . O alfabeto de pilha especifica os smbolos que podem ser armazenados na
pilha. Por conveno, um desses smbolos, denotado Z0 , representa o contedo inicial
da pilha toda vez que o autmato de pilha principia o reconhecimento de uma nova
sentena. Ao longo de sua operao, elementos de so acrescentados e/ou removidos
da pilha, e seu contedo total pode ser interpretado, em um dado instante, como sendo
um elemento de . Por conveno, cadeias de que representam o contedo da pilha em
um determinado instante so interpretadas considerando-se os smbolos mais esquerda
da cadeia no topo da pilha, e os smbolos mais direita da cadeia no fundo da pilha.
Observe-se que, a partir do formato geral apresentado acima para a funo de
transio em autmatos de pilha no-determinsticos e com transies em vazio,
possvel extrair os seguintes casos particulares, equivalentes aos estudados do Captulo
3, para os autmatos finitos:
viamente relacionados, sem que isso implique a perda de validade dos conceitos e dos
resultados a seguir apresentados.
Exemplo 4.28 Considere-se = {1 , 2 , 3 , 4 }. A cadeia 2 1 4 4 , por exemplo, representa o
contedo da pilha conforme ilustrado na Figura 4.5. Note-se que 2 se encontra no topo da pilha e
que 4 se encontra no fundo da mesma:
A definio de autmato de pilha neste texto considera que a sua memria auxiliar
seja uma pilha pushdown.
A configurao de um autmato de pilha definida pelo seu estado corrente,
pela parte da cadeia de entrada ainda no analisada e pelo contedo da pilha. A confi-
gurao inicial de um autmato de pilha aquela em que o autmato se encontra
no estado inicial q0 , o cursor se encontra posicionado sob a clula mais esquerda na fita
de entrada e o contedo da pilha Z0 . Algebricamente, a configurao de um autmato
de pilha pode ser representada como uma tripla:
(q, , ), com q Q , e
A primeira condio estabelece que no deve existir, para uma mesma combinao
de estado corrente e smbolo no topo da pilha, a opo de escolha entre uma movimen-
tao com consumo de smbolo na cadeia de entrada e outra sem consumo de smbolo
(transio em vazio). A segunda condio estabelece que, para cada configurao, seja
ela qual for, no deve haver mais de uma opo distinta de movimentao.
Surge, neste ponto, um aspecto de grande relevncia para o estudo dos autmatos
de pilha e das linguagens livres de contexto. Diferentemente do que foi visto para o
caso dos autmatos finitos, no que se refere equivalncia dos modelos determinstico
e no-determinstico quanto classe de linguagens que so capazes de reconhecer, os
autmatos de pilha no apresentam correspondente equivalncia. Conforme ser visto
mais adiante, os autmatos de pilha determinsticos so capazes de reconhecer apenas
um subconjunto das linguagens livres de contexto. Por esse motivo, exceto por ressalvas
em sentido contrrio, os autmatos de pilha mencionados daqui em diante sero no-
determinsticos.
Estando o autmato de pilha em uma configurao (qi , , ), com qi Q , ,
, e , sua movimentao a partir dessa configurao para a seguinte,
como decorrncia da aplicao de uma transio (qi , , ) = (qj , ), com ,
representada por:
(qi , , ) (qj , , )
A aplicao de transies em vazio, em que no h consumo de smbolo, repre-
sentada de maneira similar atravs de:
(qi , , ) (qj , , )
4 Linguagens Livres de Contexto 223
Da mesma forma que no caso dos autmatos finitos, a aplicao de zero ou mais
transies entre duas configuraes quaisquer representada atravs do smbolo , e a
aplicao de no mnimo uma transio, por intermdio do smbolo + .
A configurao final de um autmato de pilha costuma ser caracterizada de
duas maneiras distintas, porm equivalentes. Na primeira delas, exige-se o esgotamento
da cadeia de entrada e tambm que o autmato atinja um estado final. Nesta carac-
terizao, o contedo final da pilha irrelevante. Na segunda caracterizao, exige-se
o esgotamento da cadeia de entrada e tambm que a pilha tenha sido completamente
esvaziada, no importando que o estado atingido seja final ou no-final.
Dependendo do tipo de definio adotada para caracterizar a configurao final de
um autmato de pilha, possvel definir, tambm de duas maneiras distintas, a linguagem
aceita pelo dispositivo.
A linguagem aceita por um autmato de pilha M , com base no critrio de estado
final, denotada L(M ), definida como sendo o conjunto das sentenas w que satisfazem
condio:
(q0 , w , Z0 ) (q, , ), q F ,
Analogamente, a linguagem aceita por um autmato de pilha M , com base no cri-
trio de pilha vazia, denotada V (M ), definida como sendo o conjunto das sentenas
w que satisfazem condio:
(q0 , w , Z0 ) (q, , ), q Q
Assim como no caso dos autmatos finitos, convm lembrar que uma dada cadeia
w aceita por um autmato de pilha se e apenas se o autmato for capaz de atingir
uma configurao final, conforme o critrio estabelecido para o reconhecedor, a partir de
sua configurao inicial. No caso de autmatos de pilha determinsticos, a seqncia de
movimentos que os conduzem de uma configurao a outra, se existir, deve ser nica.
Sendo possvel atingir alguma configurao final, diz-se que a cadeia pertence linguagem
definida pelo autmato. Caso contrrio, que ela no pertence linguagem aceita pelo
autmato de pilha.
Autmatos de pilha no-determinsticos, ao contrrio, necessitam, no pior caso,
percorrer exaustivamente todas as seqncias possveis de configuraes, tendo a cadeia
de entrada w como referncia, at que seja possvel concluir pela sua aceitao ou rejeio.
O simples fato de no se conseguir atingir uma configurao final ao trmino de uma srie
de movimentaes s poder ser considerado como indicativo da rejeio da cadeia de
entrada se no houver novas seqncias de configuraes a serem experimentadas.
Com o intuito de facilitar a leitura do texto no restante deste captulo, as transies
de um autmato de pilha sero denotadas como:
(qi , , X ) (qj , )
indicando, com isso, o par ordenado ((qi , , X ), (qj , )) pertencente funo , ou, sim-
plesmente, (qi , , X ) = (qj , ).
Exemplo 4.29 Seja M1 o autmato de pilha determinstico abaixo discriminado, cujo critrio de
aceitao de sentenas baseado no esvaziamento da pilha.
Q = {q0 , q1 }
= {a, b, c}
= {Z0 , C }
224 Linguagens Formais - Teoria, Modelagem e Implementao
2. Sentena: abcc
Movimentos: (q0 , abcc, Z0 ) (q0 , bcc, CCZ0 ) (q1 , cc, CCZ0 ) (q1 , c, CZ0 )
(q1 , , Z0 ) (q1 , , )
3. Sentena: aabcccc
Movimentos: (q0 , aabcccc, Z0 ) (q0 , abcccc, CCZ0 ) (q0 , bcccc, CCCCZ0 )
(q1 , cccc, CCCCZ0 ) (q1 , ccc, CCCZ0 ) (q1 , cc, CCZ0 )
(q1 , c, CZ0 ) (q1 , , Z0 ) (q1 , , )
Tome-se agora como exemplo duas sentenas que no pertencem linguagem definida por este
autmato, e as correspondentes seqncias de configuraes:
1. Sentena: abccc
Movimentos: (q0 , abccc, Z0 ) (q0 , bccc, CCZ0 ) (q1 , ccc, CCZ0 ) (q1 , cc, CZ0 )
(q1 , c, Z0 )
4 Linguagens Livres de Contexto 225
2. Sentena: aabccc
Movimentos: (q0 , aabccc, Z0 ) (q0 , abccc, CCZ0 ) (q0 , bccc, CCCCZ0 )
(q1 , ccc, CCCCZ0 ) (q1 , cc, CCCZ0 ) (q1 , c, CCZ0 ) (q1 , , CZ0 )
No primeiro caso, a sentena abccc contm smbolos c em excesso, e por esse motivo ela
rejeitada ao ser atingida a configurao (q1 , c, Z0 ). No segundo caso, a sentena aabccc apresenta
quantidade insuficiente de smbolos c, e devido a isso ela rejeitada na configurao (q1 , , CZ0 ).
Observe-se que ambas as configuraes no admitem evoluo, conforme a especificao da funo
, e alm disso elas tambm no so configuraes finais do autmato. 2
Convm, neste ponto, introduzir uma extenso na nota dos Diagramas de Estado
estudados para o caso dos autmatos finitos, com o intuito de permitir a representao
grfica tambm dos autmatos de pilha. Diferentemente dos Diagramas de Estado de-
finidos para os autmatos finitos, os arcos entre dois estados p e q so rotulados com
cadeias da forma:
(, Z )/, com , Z e
para cada produo (p, , Z ) = (q, ).
Exemplo 4.30 Considere-se o autmato de pilha no-determinstico M2 a seguir apresentado, cujo
critrio de aceitao de sentenas baseado em estado final.
Q = {q0 , q1 , q2 , q3 , q4 }
= {a, c}
= {Z0 , C }
= {(q0 , a, Z0 ) {(q1 , CCZ0 ), (q2 , CZ0 )},
(q1 , a, C ) {(q1 , CCC )},
(q1 , c, C ) {(q3 , )},
(q2 , a, C ) {(q2 , CC )},
(q2 , c, C ) {(q3 , )},
(q3 , c, C ) {(q3 , )},
(q3 , , Z0 ) {(q4 , Z0 )}}
F = {q4 }
O no-determinismo deste autmato decorre do fato de que, na configurao inicial, existem
duas possibilidades de movimentao quando o smbolo presente na cadeia de entrada for a. O
fato de o critrio de aceitao ser baseado em estado final no tem qualquer vnculo com o no-
determinismo deste autmato, tendo sido introduzido apenas com o intuito de ilustrar a aplicao do
critrio. Conforme mostrado nos Teoremas 4.11 e 4.12, o critrio de aceitao pode ser facilmente
alterado sem prejuzo da linguagem sendo definida. No obstante, o no-determinismo essencial
para a aceitao da linguagem definida por este autmato.
A linguagem definida por M2 :
(a, C )/CCC
q0 q3 q4
(c, C )/ (, Z0 )/Z0
(a, Z0 )/CZ0 q2
(a, C )/CC
A determinao da linguagem aceita por este autmato pode ser feita analisando-se separada-
mente a linguagem aceita a partir de cada um dos dois ramos em que o reconhecimento se subdivide
aps o no-determinismo inicial.
Para tanto, basta notar que o ramo superior deste autmato (estados q0 e q1 ) acrescenta
dois smbolos C pilha para cada smbolo a localizado na cadeia de entrada. O ramo inferior
(estados q0 e q2 ), por sua vez, acrescenta apenas um smbolo C pilha para cada smbolo a
consumido. Da para a frente, apenas smbolos c da cadeia de entrada sero considerados. Para
cada c consumido, note-se que exatamente um smbolo C removido da pilha. Finalmente, no
estado q3 , caso todos os smbolos C da pilha j tenham sido eliminados, possvel transitar em
vazio para o estado final q4 .
Como concluso, tem-se que a configurao final ser atingida apenas para os casos de cadeias
em que a quantidade de smbolos c seja igual quantidade de smbolos a que a antecede, ou
ento exatamente igual ao dobro da quantidade de smbolos a. Formalmente,
L(M2 ) = {a i c j | i 1 e (j = i ou j = 2i)}
Observe-se que no h, a priori, como o autmato descobrir se ele deve estabelecer a cor-
respondncia de cada a encontrado com apenas um ou ento dois c subseqentes. Por esse
motivo, o no-determinismo inicial oferece duas alternativas, cada qual associada a uma hiptese
sobre a estrutura da cadeia a ser analisada. Havendo fracasso no reconhecimento iniciado por uma
das alternativas, deve-se tentar a outra. Persistindo o fracasso, pode-se ento dizer que a cadeia no
pertence linguagem definida.
A operao deste autmato exemplificada a seguir atravs do reconhecimento das seguintes
sentenas:
1. Sentena: aacc
Movimentos: (q0 , aacc, Z0 ) (q2 , acc, CZ0 ) (q2 , cc, CCZ0 ) (q3 , c, CZ0 ) (q3 , , Z0 )
(q4 , , Z0 )
2. Sentena: aacccc
Movimentos: (q0 , aacccc, Z0 ) (q1 , acccc, CCZ0 ) (q1 , cccc, CCCCZ0 ) (q3 , ccc, CCCZ0 )
(q3 , cc, CCZ0 ) (q3 , c, CZ0 ) (q3 , , Z0 ) (q4 , , Z0 )
1. Sentena: aacc
Movimentos: (q0 , aacc, Z0 ) (q1, acc, CCZ0 ) (q1 , cc, CCCCZ0 ) (q3 , c, CCCZ0 )
(q3 , , CCZ0 )
4 Linguagens Livres de Contexto 227
Como se pode perceber, atinge-se neste caso uma configurao no-final, em que no h
possibilidade de evoluo. Como conseqncia, por se tratar de um autmato no-determinstico,
dever-se-ia retornar configurao inicial e efetuar outra seqncia de movimentaes, adotando-se
a segunda alternativa, em lugar da primeira, para o caso da transio no-determinstica (ou seja,
exatamente o caso correto apresentado anteriormente).
Esquematicamente, as vrias seqncias de configuraes que podem ser percorridas em de-
corrncia da existncia de transies no-determinsticas podem ser representadas graficamente na
forma de uma rvore, conforme ilustrado na Figura 4.7:
Considere-se, agora, o caso de uma cadeia aac que no pertena linguagem definida
por este autmato. Conforme ilustrado na Figura 4.8, a rejeio desta cadeia ocorre apenas aps
o fracasso do reconhecimento em todas as seqncias possveis de movimentao (duas, para este
autmato):
Para finalizar este item, cumpre notar que, de acordo com a definio, os autmatos
de pilha so capazes de efetuar movimentos independentemente da existncia de smbolos
na fita de entrada, atravs das chamadas transies em vazio, ao passo que o esvaziamento
da pilha necessariamente impede qualquer possibilidade de movimentao futura. Ambos
estes fatos sero utilizados em seguida para demonstrar a equivalncia dos critrios de
aceitao por estado final e por pilha vazia.
228 Linguagens Formais - Teoria, Modelagem e Implementao
Mtodo:
3. Funo de transio :
a) ;
Q = {q0 , q1 , q2 }
= {a, b, c}
= {Z0 , A, B }
= {(q0 , a, Z0 ) {(q0 , AZ0 )}, (q1 , a, A) {(q1 , )},
(q0 , a, A) {(q0 , AA)}, (q1 , b, B ) {(q1 , )},
(q0 , a, B ) {(q0 , AB )}, (q1 , , Z0 ) {(q2 , )},
(q0 , b, Z0 ) {(q0 , BZ0 )}, (q0 , b, A) {(q0 , BA)},
(q0 , b, B ) {(q0 , BB )}, (q0 , c, Z0 ) {(q2 , )},
(q0 , c, A) {(q1 , A)}, (q0 , c, B ) {(q1 , B )}}
F = {q2 }
230 Linguagens Formais - Teoria, Modelagem e Implementao
(c, Z0 )/ (, Z0 )/
q2
A Figura 4.9 ilustra M na notao dos Diagramas de Estados. A linguagem definida por ele
{cR | {a, b} }. Aplicando-se o algoritmo de converso do critrio de aceitao, obtm-se o
seguinte autmato M equivalente, com aceitao baseada no esvaziamento da pilha:
M = (Q , , , , q0 , Z0 , )
Q = {q0 , q1 , q2 , qv , q0 }
= {Z0 , A, B , Z0 }
= {(q0 , a, Z0 ) {(q0 , AZ0 )}, (q1 , a, A) {(q1 , )},
(q0 , a, A) {(q0 , AA)}, (q1 , b, B ) {(q1 , )},
(q0 , a, B ) {(q0 , AB )}, (q1 , , Z0 ) {(q2 , )},
(q0 , b, Z0 ) {(q0 , BZ0 )}, (q0 , b, A) {(q0 , BA)},
(q0 , b, B ) {(q0 , BB )}, (q0 , c, Z0 ) {(q2 , )},
(q0 , c, A) {(q1 , A)}, (q0 , c, B ) {(q1 , B )},
(q0 , , Z0 ) {(q0 , Z0 Z0 )},
(q2 , , Z0 ) {(qv , )},
(q2 , , Z0 ) {(qv , )},
(q2 , , A) {(qv , )},
(q2 , , B ) {(qv , )},
(qv , , Z0 ) {(qv , )},
(qv , , Z0 ) {(qv , )},
(qv , , A) {(qv , )},
(qv , , B ) {(qv , )}}
4 Linguagens Livres de Contexto 231
(b, B )/, (a, A)/
(a, Z0 )/AZ0 , ...
qv q2
(, Z0 )/, ...
Teorema 4.12 (Estado final pilha vazia) Seja M um autmato de pilha no-
determinstico com critrio de aceitao baseado em pilha vazia. Ento, possvel defi-
nir um autmato de pilha no-determinstico M com critrio de aceitao baseado em
estado final, de modo que V (M ) = L(M ).
Mtodo:
3. Funo de transio :
a) ;
que M transite para um estado final. Dessa maneira, as sentenas que conduzem M a
uma configurao final causaro o mesmo efeito sobre M .
A fim de detectar o esvaziamento da pilha em M , M exibe, inserido no fundo de
sua pilha, logo ao incio do reconhecimento, um novo smbolo de pilha Z0 . A transio
criada no passso (3.b) do algoritmo tem por objetivo inserir na pilha, acima de Z0 , o
smbolo de pilha inicial de M , permitindo que as transies do passo (3.c) reproduzam o
comportamento de M sobre M .
Finalmente, estando M em qualquer estado, a simples presena de Z0 no topo da
pilha informao suficiente para caracterizar o esvaziamento da pilha em M , causando
a transio de M para o estado final qf . Dessa forma, como se pode perceber intuitiva-
mente, cada configurao final em M tem a sua configurao correspondente em M , e
ambos os autmatos de pilha aceitam portanto a mesma linguagem.
Exemplo 4.32 Considere o autmato de pilha da Figura 4.11, cujo critrio de aceitao baseado
em pilha vazia.
(a, Z0 )/X
q0 (a, X )/XX
(b, X )/
A linguagem aceita por este autmato constituda pelas sentenas sobre {a, b} que contm
a mesma quantidade de smbolos a e b e, alm disso, cuja quantidade acumulada de smbolos a seja
sempre maior que a quantidade de smbolos b, contando-se os smbolos que formam a sentena, da
esquerda para a direita. Exemplos de cadeias aceitas so aaababbb, ab e abaababb. Exemplos de
cadeias no aceitas so a, ba, aaabb e abbbbaaa.
Aplicando-se o Algoritmo 4.10 de converso do critrio de aceitao, obtm-se um novo aut-
mato que reconhece a mesma linguagem e cujo critrio baseado em estado final (Figura 4.12).
(a, Z0 )/X
(, Z0 )/Z0 Z0 (, Z0 )/
q0 q0 qf
(b, X )/
Mtodo:
1. Q {q};
2. N ;
3. F ;
4. Funo de transio:
a) ;
b) (q, , A) = {(q, ) | A P }, A N , , N .
S x
234 Linguagens Formais - Teoria, Modelagem e Implementao
se e somente se
(q, x , S ) (q, , )
Em outras palavras, se existe uma seqncia de derivaes em G que gera uma
cadeia x , ento existe uma seqncia de movimentaes em M que reconhece x , e vice-
versa. Portanto, G e M definem a mesma linguagem.
Observe-se, no caso geral, que os autmatos construdos conforme o algoritmo 4.11
so no-determinsticos, uma vez que a simples presena de produes do tipo A 1
e A 2 , em P , com 1 6= 2 , propicia a existncia de mais de uma movimentao
possvel a partir da configurao (q, z , A):
O Algoritmo 4.11 produz, como se pode perceber, um autmato de pilha que possui
um nico estado. A sua definio idealizada com o intuito de permitir o reconheci-
mento de sentenas atravs de movimentos que simulem a seqncia de derivaes mais
esquerda que seriam efetuadas pela gramtica correspondente na gerao das mesmas
sentenas.
De acordo com essa definio, quando lido no sentido do topo para o fundo, o
contedo da pilha composto, em qualquer instante, por uma seqncia de smbolos no-
terminais, tornados elementos do alfabeto de pilha do autmato. Mantidos nesta ordem,
eles representam os smbolos no-terminais que ainda necessitariam sofrer substituio na
correspondente forma sentencial que seria obtida atravs de derivaes mais esquerda
na gramtica fornecida. Por sua vez, as cadeias formadas pelos smbolos terminais que
compem o prefixo das formas sentenciais obtidas a partir de derivaes mais esquerda,
em vez de serem mantidas na pilha, correspondem sempre seqncia de smbolos que
formam a poro j lida da fita de entrada.
Devido prpria organizao em pilha (o primeiro elemento a entrar o ltimo a
sair), o smbolo no topo da pilha representa sempre o prximo smbolo no-terminal a
sofrer substituio em uma seqncia de derivaes mais esquerda, de acordo com a
gramtica correspondente. Como a gramtica se encontra na Forma Normal de Greibach,
todas as produes so do tipo A , com e N . Assim, a substituio
do smbolo A, presente no topo da pilha, por ocorre apenas no caso em que o prximo
smbolo na cadeia de entrada for . Nos casos em que isso no ocorre, no haver tal
possibilidade de movimentao, e a cadeia ser rejeitada, pois a pilha no estar vazia.
Ao avanar o cursor de leitura e modificar o contedo da pilha, o autmato de pilha
simula exatamente a seqncia de movimentos que seriam executados pela aplicao da
gramtica correspondente atravs de derivaes mais esquerda.
Exemplo 4.33 Tome-se como exemplo a sentena x L(G), e considere-se, em um dado momento
da derivao mais esquerda de x atravs de G, a forma sentencial yA com y , A N e
N . Seja A a prxima produo a ser aplicada:
S yA y yz
com x = yz .
Neste caso, o comportamento do autmato de pilha pode ser representado, em cada uma
dessas quatro fases, atravs das figuras apresentadas a seguir, que ilustram as seguintes seqncias
de movimentos:
(q, x , S ) (q, z , A) (q, z , ) (q, , )
Examinem-se, pois, as figuras que ilustram essas configuraes. Na configurao inicial, a pilha
contm apenas S e o cursor aponta para o primeiro smbolo da cadeia de entrada x :
4 Linguagens Livres de Contexto 235
Exemplo 4.34 Considere-se a linguagem das expresses aritmticas na notao infixa, cuja gramtica
na Forma Normal de Greibach foi obtida no Exemplo 4.26. Os no-terminais T , E e ) foram
renomeados para Y , Z e X , respectivamente:
{F (EX | a,
T (EX | a | (EXY | aY ,
E (EX | a | (EXY | aY | (EXZ | aZ | (EXYZ | aYZ ,
Y F | FY ,
Z +T | +TZ ,
X )}
Aplicando-se o Algoritmo 4.11, obtm-se o autmato de pilha no-determinstico cuja funo
de transio apresentada a seguir:
{S aSBS ,
S aB ,
B b}
A linguagem definida por esta gramtica, L(G), aceita por um autmato M que tenha a
seguinte funo de transio:
S aB ab
Logo, L(G) = {ab, aabbab, . . .}. Considerando-se a linguagem L = L {}, pode-se imedia-
tamente observar que a mera incluso da produo S em G no produziria o efeito desejado,
que o de permitir a gerao de L , uma vez que ela incluiria a gerao, por exemplo, da cadeia
aabb, originariamente no pertencente a L. Por esse mesmo motivo, a transio:
(q, , S ) = {(q, )}
Z S
Z
S aSBS
S aB
B b
2
(q, , S ) = {(q, )}
produz o efeito desejado, podendo ser includa em M sem que haja risco de se alterar a
linguagem definida pelo autmato.
Uma forma alternativa de se especificar um autmato de pilha M que reconhea
exatamente a mesma linguagem definida por uma gramtica livre de contexto qualquer,
no necessariamente na Forma Normal de Greibach, e eventualmente incluindo a cadeia
vazia, pode tambm ser obtida atravs do Algoritmo 4.12, a seguir apresentado.
Algoritmo 4.12 (Gramtica autmato de pilha, verso 2) Obteno de um aut-
mato de pilha no-determinstico a partir de uma gramtica livre de contexto qualquer.
Mtodo:
1. Q {q};
2. V ;
3. F ;
4. Funo de transio:
a) ;
b) (q, , A) = {(q, ) | A P }, A N , V ;
Por outro lado, regras iniciadas com smbolos distintos no geram no-determinismo:
Constata-se, dessa maneira, que o segundo mtodo gera uma situao de no-
determinismo para regras que se iniciam com smbolos diferentes, o que no ocorre no
primeiro mtodo. Assim, o segundo mtodo tende a apresentar mais situaes no-
determinsticas do que o primeiro, dando a este uma certa vantagem quanto potencial
eficincia do reconhecimento.
Irrelevante do ponto de vista terico, a questo da escolha de um ou outro mtodo
para a obteno de autmatos de pilha a partir de gramticas livres de contexto apre-
senta um certo interesse quando se trata da realizao fsica de reconhecedores sintticos
eficientes para linguagens livres de contexto quaisquer, uma vez que o primeiro mtodo
possibilita, no caso geral, a construo de autmatos no-determinsticos mais eficientes
do que os obtidos atravs da aplicao do segundo mtodo, em decorrncia da limitao
na quantidade de movimentos considerados vlidos em cada configurao.
Na prtica, no entanto, o maior interesse recai sobre os autmatos de pilha deter-
minsticos. Porm, conforme ser visto na Seo 4.11, a classe de linguagens por eles
reconhecida apenas um subconjunto das linguagens livres de contexto. Linguagens
livres de contexto genricas s podem ser reconhecidas atravs de autmatos de pilha
no-determinsticos, e por esse motivo o primeiro mtodo mais interessante do ponto
de vista de engenharia, quando se trata da realizao fsica de tais reconhecedores.
Exemplo 4.36 Considere-se a gramtica das expresses aritmticas utilizada no Exemplo 4.26, em-
pregada originalmente como base para a obteno da gramtica equivalente na Forma Normal de
Greibach. No conjunto de produes abaixo, os no-terminais E e T foram respectivamente reno-
meados para Z e Y .
{E T | TZ ,
T F | FY ,
240 Linguagens Formais - Teoria, Modelagem e Implementao
F (E ) | a,
Y F | FY ,
Z +T | +TZ }
Mtodo:
1. N {[qi Zqk ] | qi , qk Q e Z } {S };
2. P ;
4. P P {S [q0 Z0 q]}, q Q .
(qi , , Z0 ) (qk , , )
S A, com , V
242 Linguagens Formais - Teoria, Modelagem e Implementao
(, X )/X
q0 q1
(, X )/XX
A obteno de G, tal que L(G) = V (M ), tem como ponto de partida as duas produes do
conjunto:
{S [q0 Z0 q0 ], (4.7)
S [q0 Z0 q1 ]} (4.8)
Como se pode observar, (4.10) contm o smbolo [q1 Z0 q0 ], que, de acordo com o que foi
convencionado, representa o conjunto de cadeias que conduzem M do estado q1 ao estado q0 com
o smbolo Z0 . Atravs da inspeo do diagrama de estados de M , conclui-se no haver caminhos
com esta caracterstica, e por esse motivo antecipa-se a impossibilidade de se criarem produes
para o no-terminal [q1 Z0 q0 ]. Em outras palavras, a definio de uma produo para esse no-
terminal dependeria, antes de mais nada, da existncia de uma transio que, no estado q1 , estivesse
associada ao smbolo Z0 , o que no verdade para o autmato considerado. Desse modo, descarta-
se a produo (4.10). Como conseqncia, tambm a produo (4.9) torna-se intil, pois no h
termo independente de [q0 Z0 q0 ] que possibilite a resoluo da equao representada pela produo.
Prosseguindo com a produo (4.8), considere-se o smbolo [q0 Z0 q1 ]. As produes a ele
associadas tambm derivam da transio que vincula o smbolo Z0 ao estado q0 :
(q0 , a, Z0 ) = (q0 , XZ0 )
A seguir, obtm-se para o smbolo [q0 Xq0 ], presente na produo (4.11), o seguinte conjunto
de produes, derivado da transio:
(q0 , a, X ) = (q0 , XX )
Por motivos similares aos expostos para o caso da produo (4.10), conclui-se que no
possvel definir produes para o smbolo [q1 Xq0 ], o que implica, como conseqncia, a inutilidade
do smbolo [q0 Xq0 ] e das produes (4.14), (4.13) e (4.11).
Prosseguindo com a produo (4.12), definem-se as produes para o smbolo [q0 Xq1 ]. Nesse
caso, elas decorrem das transies:
(q0 , a, X ) = (q0 , XX ) e (q0 , , X ) = (q1 , X )
a inutilidade da produo (4.15). Continuando com a produo (4.12), define-se agora a nica
produo do smbolo [q1 Z0 q1 ], e que deriva da transio:
(q1 , b, Z0 ) = (q1 , )
[q1 Z0 q1 ] b (4.18)
Finalmente, para completar a definio dos smbolos no-terminais at aqui surgidos, resta
obter as produes de [q1 Xq1 ], utilizado nas produes (4.16) e (4.17). Note-se que estas decorrem,
respectivamente, das transies:
(q1 , b, X ) = (q1 , ) e (q1 , , X ) = (q1 , XX )
(4.8) {S [q0 Z0 q1 ],
(4.12) [q0 Z0 q1 ] a[q0 Xq1 ][q1 Z0 q1 ],
(4.16) [q0 Xq1 ] a[q0 Xq1 ][q1 Xq1 ],
(4.17) [q0 Xq1 ] [q1 Xq1 ],
(4.18) [q1 Z0 q1 ] b,
(4.19) [q1 Xq1 ] b,
(4.20) [q1 Xq1 ] [q1 Xq1 ][q1 Xq1 ]}
Renomeando-se os no-terminais, obtm-se:
(4.8) {S A,
(4.12) A aBC ,
(4.16) B aBD,
(4.17) B D,
(4.18) C b,
(4.19) D b,
(4.20) D DD}
(q0 , aabbbb, Z0 ) (q0 , abbbb, XZ0 ) (q0 , bbbb, XXZ0 ) (q1 , bbbb, XXZ0 ) (q1 , bbb, XZ0 )
(q1 , bbb, XXZ0 ) (q1 , bb, XZ0 ) (q1 , b, Z0 ) (q1 , , )
Observe-se que as formas sentenciais obtidas atravs de G, neste exemplo, esto diretamente
relacionadas s configuraes assumidas por G em cada etapa do reconhecimento da cadeia conside-
rada. Note-se, portanto, que G simula, atravs de uma seqncia de derivaes mais esquerda,
a seqncia de movimentos que conduz M de sua configurao inicial at uma configurao final.
Retornando questo da caracterizao dos no-terminais em G, conforme mencionado an-
teriormente, a incorporao dos estados na definio dos mesmos necessria para evitar a gerao
de formas sentenciais invlidas, sendo, portanto, indispensvel para garantir a equivalncia entre a
linguagem aceita e a linguagem gerada.
Este ponto pode ser melhor visualizado neste exemplo da seguinte forma: considere-se G em
que N = e P obtido simplesmente analisando-se todas as possveis substituies de smbolos
no topo da pilha e a eventual presena de elementos de na fita de entrada, sem levar em conta a
existncia dos estados.
Assim, obtm-se o conjunto de produes seguinte:
{S Z0 ,
Z0 aXX , (de (q0 , a, Z0 ) = (q0 , XZ0 ))
X aXX , (de (q0 , a, X ) = (q0 , XX ))
X X, (de (q0 , , X ) = (q1 , X ))
X b, (de (q1 , b, X ) = (q1 , ))
X XX , (de (q1, , X ) = (q1 , XX ))
Z0 b} (de (q1 , b, Z0 ) = (q1 , ))
fcil notar, neste caso, que L(G) L(G ). Considere-se, a ttulo de exemplo, a cadeia b.
Evidentemente, b 6 L(G), mas no entanto, em G , tem-se:
S Z0 b
A razo disso acontecer que a produo Z0 b convertida para uma transio de M
apenas no estado q1 . Ao ignorar a informao de estado na caracterizao dos no-terminais de
G , a substituio torna-se possvel independentemente do estado. Neste exemplo, a derivao
Z0 b corresponderia aplicao de uma transio originalmente inexistente no estado q0 . Deixa,
portanto, de haver correspondncia entre as configuraes do reconhecedor e as formas sentenciais
da gramtica, quando a informao de estado descartada na caracterizao de seus smbolos no-
terminais. 2
Y Y , com , +
Y Y , com +
Atravs desta figura, fcil perceber que rvores de altura 1 geram sentenas de
comprimento 1 (portanto 20 ), rvores de altura 2 geram sentenas de comprimento 2
( 21 ) e rvores de altura 3 geram sentenas de comprimento 3 ou 4 ( 22 ). No caso
geral, rvores com altura i geram sentenas de comprimento menor ou igual a 2i1 .
Como conseqncia desse resultado, possvel inferir que, se uma sentena tem
comprimento mnimo 2i , ento a rvore de derivao correspondente possuir altura
mnima i + 1.
Considere-se k = |N |, onde N o conjunto dos smbolos no-terminais de G,
estando esta expressa na Forma Normal de Chomsky, e faa-se n = 2k .
Se L e | | n, isto , se | | 2k , ento, face ao resultado anterior, certo que a
altura mnima da rvore de derivao correspondente sentena ser k + 1. Suponha-
se que o valor desta altura seja p (portanto, p k + 1) e considere-se um caminho
w qualquer na rvore que possua comprimento p (haver pelo menos um caminho que
satisfaa a essa condio).
Se o caminho selecionado possui comprimento p, ento este caminho formado de
q smbolos, q k + 2. Desses q smbolos, apenas um ser terminal (o ltimo smbolo do
caminho, aquele que folha da rvore) e os demais sero necessariamente no-terminais.
Ignorando o smbolo terminal e concentrando a ateno nos q 1 no-terminais,
seus antecessores, se q k + 2, ento existem r smbolos no-terminais neste caminho,
e r = q 1, ou seja, r k + 1.
Considerem-se agora apenas os primeiros k + 1 smbolos no-terminais consecutivos
que antecedem imediatamente a folha da rvore, ignorando os r (k + 1) smbolos
no-terminais situados no incio do caminho selecionado. O caminho escolhido w pode,
portanto, ser considerado como:
w = , N , | | = r (k + 1), N + , || = k + 1,
1. Para o primeiro X (aquele que est na posio mais alta da rvore, prxima da
raiz):
Ele pode ser o primeiro smbolo da cadeia (portanto, estar na altura k +1);
Ele pode ser o penltimo smbolo da cadeia (portanto, estar na altura 2),
uma vez que o segundo X comparece por ltimo nesta mesma cadeia;
2. Para o segundo X (aquele que est na posio mais baixa da rvore, prxima da
folha):
A sentena pode ser considerada como sendo composta por cinco partes, =
uvwxy;
Como w = 2 , ento 1 |w | 2k 1 ;
S uXy
X vXx
X w
S uXy uwy
S uXy uvvwxxy
S uXy uvvvwxxxy
...
S uXy uv i wx i y, i 0
Considerado de maneira informal, este Pumping Lemma para linguagens livres de
contexto pode ser interpretado da seguinte maneira:
1. vwx contm apenas smbolos a (pelo menos um); portanto, vx tambm contm apenas
smbolos a (pelo menos um);
2. vwx contm apenas smbolos b (pelo menos um); portanto, vx tambm contm apenas
smbolos b (pelo menos um);
3. vwx contm apenas smbolos c (pelo menos um); portanto, vx tambm contm apenas
smbolos c (pelo menos um);
4. vwx contm smbolos a (pelo menos um) seguidos de smbolos b (pelo menos um);
portanto, vx contm pelo menos um smbolo a ou b, porm nenhum smbolo c;
5. vwx contm smbolos b (pelo menos um) seguidos de smbolos c (pelo menos um);
portanto, vx contm pelo menos um smbolo b ou c, porm nenhum smbolo a.
Exemplo 4.39 A linguagem L2 = {wcw | w {a, b}+ } no livre de contexto. Esta linguagem sin-
tetiza uma caracterstica bastante comum nas linguagens de programao mais usuais: a necessidade
252 Linguagens Formais - Teoria, Modelagem e Implementao
3. vwx contm smbolos a (pelo menos um) seguidos de smbolos b (pelo menos um);
6. vwx se inicia com smbolos b (pelo menos um) , continua com um smbolo c e termina
com smbolos a (pelo menos um).
De maneira anloga ao que foi mostrado no Exemplo 4.38, passa-se a examinar o formato das
cadeias uwy que so geradas em cada um desses casos:
Pelo exposto, fica claro que a hiptese inicial falsa e que L2 no uma linguagem livre de
contexto. 2
So exemplos de cadeias aceitas por este autmato aa e abba, como se pode verificar nos
reconhecimentos abaixo:
(q0 , abba, Z0 ) (q0 , bba, A) (q0 , ba, BA) (q1 , ba, BA) (q1 , a, A) (q1 , , )
Assim, apesar do elevado interesse prtico exibido pelas linguagens livres de con-
texto, decorrente da relativa facilidade com que elas podem ser representadas e ma-
nipuladas, a dificuldade acima mencionada levou os pesquisadores a um estudo mais
aprofundado dessa classe de linguagens, visando fornecer aos projetistas e implementa-
dores de linguagens artificiais subsdios que permitissem o aproveitamento prtico das
caractersticas dessa classe de linguagens, sem no entanto sacrificar o desempenho dos
respectivos reconhecedores pela presena de eventuais no-determinismos.
Como conseqncia, foi identificada e caracterizada a classe das linguagens livres
de contexto determinsticas, que se provou ser subconjunto prprio das linguagens
livres de contexto genricas. Por definio, linguagens livres de contexto determins-
ticas so aquelas que podem ser reconhecidas por autmatos de pilha determinsticos.
254 Linguagens Formais - Teoria, Modelagem e Implementao
Em outras palavras, uma linguagem livre de contexto dita determinstica se for poss-
vel demonstrar a existncia de pelo menos um autmato de pilha determinstico que a
reconhea.
A linguagem para a qual se pode provar a inexistncia de quaisquer autmatos de
pilha determinsticos que a reconheam, e, simultaneamente, a existncia de pelo menos
um autmato de pilha no-determinstico que a reconhea, denominada linguagem
livre de contexto no-determinstica, e o conjunto de tais linguagens constitui uma
classe importante das linguagens livres de contexto gerais.
A classe das linguagens livres de contexto determinsticas, tambm conhecida como
LR(k ), apresenta um elevado interesse prtico, uma vez que propicia a obteno de im-
plementaes eficientes para todas as linguagens livres de contexto determinsticas. Por
outro lado, a restrio que as caracteriza felizmente no cria limitaes srias ao poder de
representao de tal classe de linguagens, quando comparado ao das linguagens do tipo
2 genricas, e como conseqncia as linguagens LR(k ) constituem uma classe de lingua-
gens ainda muito aderente s necessidades prticas de representao sinttica formal das
linguagens de programao usuais, sendo por esse motivo largamente utilizadas na rea
de processamento de linguagens artificiais, em especial das linguagens de programao.
Por sua vez, tambm como parte da classe das linguagens LR(k ), possvel identi-
ficar uma nova classe de linguagens, constituda na forma de um subconjunto prprio, e
que tambm apresenta elevado interesse prtico: trata-se das linguagens LL(k ), e a sua
caracterizao decorre da possibilidade de obteno de modelos de implementao ainda
mais eficientes do que os obtidos para as linguagens LR(k ). No entanto, a sua abrangn-
cia significativamente menor do que a das linguagens LR(k ), e por esse motivo o seu
interesse prtico no to grande como o das primeiras, sendo no entanto bastante til
no caso de linguagens livres de contexto determinsticas com menor grau de sofisticao
sinttica.
A seguir sero apresentadas as definies de gramticas e de linguagens LL(k ) e
LR(k ). Para maiores detalhes, exemplos, propriedades, algoritmos de verificao gra-
matical e tcnicas de construo de reconhecedores para essas classes de linguagens,
recomenda-se a leitura de [48] ou [49].
Suponha-se que G = (V , , P , S ) seja uma gramtica livre de contexto. Ento:
Diz-se que uma linguagem LL(k ) se ela for gerada por uma gramtica LL(k ). Por
outro lado, de acordo com a definio, toda gramtica LL(k ) , naturalmente, tambm
uma gramtica LL(k + 1), LL(k + 2) etc. Logo, toda linguagem LL(k ) tambm uma
linguagem LL(k + 1), LL(k + 2) etc. Na prtica, no entanto, costuma-se atribuir a uma
linguagem o menor valor de k entre todas as gramticas que a geram. Consideraes
anlogas se aplicam ao caso das gramticas e das linguagens LR(k ).
Do ponto de vista da hierarquia de incluso prpria das linguagens formais, a classe
das linguagens LR(k ) e a classe das linguagens LL(k ) situam-se entre a classe das lingua-
gens regulares e a classe das linguagens livres de contexto genricas, conforme ilustrado
na Figura 4.23:
G2 = (V , , P , S )
V = {S , X , a, b, c}
= {a, b, c}
P = {S Xc, X aXb | }
Quaisquer que sejam a forma sentencial e a cadeia de entrada consideradas, o seguinte critrio
permite determinar univocamente a produo a ser aplicada:
Se a forma sentencial corrente for S :
Logo, G2 LL(1) LL(k ) para k = 1 pois, dada uma forma sentencial, basta inspecionar
apenas um smbolo da cadeia de entrada para determinar univocamente a regra a ser aplicada.
Conseqentemente, L(G2 ) tambm LL(1).
Considerem-se as cadeias aabbc e c. As Tabelas 4.1 e 4.2 ilustram, respectivamente, as
seqncias de derivaes mais esquerda que refletem a operao de um reconhecedor LL(1) na
aceitao das mesmas. Os delimitadores [ e ] indicam o smbolo corrente da cadeia de entrada.
G3 = (V , , P , S )
V = {S , E , O, x , y, e, o}
= {x , y, e, o}
P = {S Ee | Oo, E xOy | , O xEy}
Logo, G3 LR(1), ou seja, LR(k ) para k = 1, pois, dada uma forma sentencial, basta
inspecionar apenas um smbolo da cadeia de entrada para determinar univocamente a regra a ser
aplicada. Conseqentemente, L(G3 ) tambm LR(1).
As Tabelas 4.3 e 4.3 ilustram as seqncias de redues mais esquerda que refletem a
operao de um reconhecedor LR(1) na aceitao das cadeias xxyye e xxxyyyo, respectivamente.
Os delimitadores [ e ] indicam o smbolo corrente da cadeia de entrada.
258 Linguagens Formais - Teoria, Modelagem e Implementao
dessas linguagens costumam ser construdos com base nos correspondentes autmatos de
pilha determinsticos. Tais reconhecedores, que servem como ponto de partida para a
construo de analisadores sintticos, so com freqncia usados como ncleos dos com-
piladores das respectivas linguagens, e a eles so agregados os demais mdulos de anlise
e de gerao de cdigo, para completar as funes do compilador.
3. Considere-se a linguagem {ww R | w {a, b} }, que pode ser gerada pela gramtica
no-ambgua G = ({S , a, b, }, {a, b}, {S aSa | bSb | }, S ), mas no pode ser
reconhecida por nenhum autmato de pilha determinstico (ver Exemplo 4.41).
Trata-se, portanto, de uma linguagem livre de contexto no-ambgua, porm no-
determinstica, e a sua existncia demonstra que a relao de incluso entre a classe
das linguagens determinsticas e a classe das linguagens no-ambguas prpria.
Logo, natural concluir que a resposta para a pergunta anterior : Sim, e ela
corresponde classe das linguagens livres de contexto no inerentemente ambguas ou,
simplesmente, no-ambguas.
Em outras palavras, a classe das linguagens livres de contexto no-ambguas
est includa propriamente na classe das linguagens livres de contexto gerais, e a classe
das linguagens livres de contexto que no so no-ambguas corresponde classe das
linguagens livres de contexto que so inerentemente ambguas. A Figura 4.26 ilustra
essas relaes.
A relao entre a classe das linguagens livres de contexto e as diversas subclasses nela
contidas, conforme discutido na Seo 4.11 e tambm na presente seo, est representada
de forma resumida na Figura 4.27.
V3 = V1 V2 {S3 }
3 = 1 2
P3 = P1 P2 {S3 S1 , S3 S2 }
V3 = V1 V2 {S3 }
3 = 1 2
P3 = P1 P2 {S3 S1 S2 }
V2 = V1 {S2 }
2 = 1
P2 = P1 {S2 S1 S2 , S2 }
Justificativa suficiente, para provar este teorema, que existem pelo menos duas lin-
guagens livres de contexto cuja interseco gera uma linguagem que no seja livre de
contexto.
Considerem-se as linguagens L1 = {a m b m c n | m 1, n 1} e L2 = {a n b m c m |
m 1, n 1}. fcil demonstrar que essas linguagens so geradas, respectivamente,
pelas gramticas livres de contexto G1 e G2 :
Entradas:
Mtodo:
1. Q3 = Q1 Q2 ;
3. F3 = F1 F2 ;
4. 3 definida como:
possvel demonstrar (ver [46]), por induo sobre o tamanho das cadeias analisa-
das pelos autmatos, que ((q01 , q02 ), w , Z0 ) ((qr , qs ), , ), (qr , qs ) F3 , se e somente
se (q01 , w ) (qs , ), qs F1 e (q02 , w , Z0 ) (qr , , ), qr F2 .
Em outras palavras, M3 aceita w se e apenas se M1 e M2 tambm aceitam w . Se
M1 e/ou M2 rejeitam w , ento M3 tambm rejeita w . Logo, L3 corresponde interseco
das linguagens L1 e L2 , e a existncia de M3 prova que L3 uma linguagem livre de
contexto.
Este teorema mostra como construir um autmato de pilha M3 que simula, de
maneira simultnea, as configuraes que podem ser assumidas por um outro autmato
de pilha M2 e um autmato finito determinstico M1 no reconhecimento de uma mesma
cadeia de entrada.
Assim, os estados de M3 correspondem ao produto cartesiano Q1 Q2 . Se M3 se
encontrar no estado (qi , qm ), isso significa que, naquela situao, M1 encontrar-se- no
estado qi e M2 no estado qm , se estivessem operando separadamente no reconhecimento
da mesma cadeia de entrada.
Se a entrada for aceita simultaneamente no estado qi de M1 e no estado qm de
M2 , ento uma nova transio acrescentada em M3 com o smbolo partindo do estado
(qi , qm ) e com destino no estado (1 (qi ), 2 (qm )).
Transies sem consumo de smbolo na cadeia de entrada de M2 da forma
2 (qi , , X ) = {(qj , )} podem ser simuladas sem dificuldade em M3 , bastando para
isso preservar o estado corrente de M1 em M3 , uma vez que M1 , por definio, deter-
minstico, isento de transies em vazio.
Pelo fato de M1 ser um autmato finito, que no necessita de pilha para operar, esta
manipulada por M3 de forma a reproduzir a manipulao executada de forma isolada
por M2 .
A cadeia de entrada ser aceita se M3 atingir um estado final (composto por estados
finais de M1 e de M2 ) com a cadeia de entrada esgotada e com a pilha vazia. Nesta
configurao ocorre a aceitao simultnea da cadeia de entrada por M1 e M2 .
q11 a
b
q01
a
q12 b
(b, A)/
(, Z0 )/Z0 q21 q22
q02
(a, B )/
(, Z0 )/Z0 q23 q24
Q3 = {(q01 , q02 ), (q01 , q21 ), (q01 , q22 ), (q01 , q23 ), (q01 , q24 ),
(q11 , q02 ), (q11 , q21 ), (q11 , q22 ), (q11 , q23 ), (q11 , q24 ),
(q12 , q02 ), (q12 , q21 ), (q12 , q22 ), (q12 , q23 ), (q12 , q24 )}
F3 = {(q11 , q22 ), (q11 , q24 ), (q12 , q22 ), (q12 , q24 )}
3 = {((q01 , q02 ), , Z0 ) ((q01 , q21 ), Z0 ),
((q01 , q02 ), , Z0 ) ((q01 , q23 ), Z0 ),
((q01 , q21 ), a, Z0 ) ((q12 , q21 ), AZ0 ),
((q01 , q21 ), a, A) ((q12 , q21 ), AA),
((q01 , q21 ), b, A) ((q11 , q22 ), ),
((q01 , q22 ), b, Z0 ) ((q11 , q22 ), ),
4 Linguagens Livres de Contexto 267
b a a
q1 q2 q3
q0
b b
q4 q5 q6
a
A linguagem reconhecida por M3 (abb | baa), portanto livre de contexto, regular e finita.
Observe-se e compare-se o reconhecimento destas duas sentenas em M1 , M2 e M3 . Note-se que a
configurao final assumida por M3 compreende as configuraes finais assumidas por M1 e por M2
para uma mesma cadeia de entrada.
M1 :
M2 :
M3 :
((q01 , q02 ), abb, Z0 ) ((q01 , q21 ), abb, Z0 ) ((q12 , q21 ), bb, AZ0 )
((q12 , q22 ), b, Z0 ) ((q12 , q22 ), , )
((q01 , q02 ), baa, Z0 ) ((q01 , q23 ), baa, Z0 ) ((q11 , q23 ), aa, BZ0 )
((q11 , q24 ), a, Z0 ) ((q11 , q24 ), , )
2
Mtodo:
2. Se w = , ento:
3. Se w 6= , ento:
b) Considerar n = |w |;
Considere-se a cadeia abbc L(G). Ento, n = 4 e m = 2 (pois existem duas produes para
S , duas para B e apenas uma para C ) e, conforme o Algoritmo 4.15, existem no mximo 24 = 16
seqncias distintas de derivaes mais esquerda que geram como prefixo uma cadeia de terminais
de comprimento mximo 4, no havendo necessidade de se inspecionar outras seqncias. A Tabela
4.5 relaciona todas as oito seqncias que geram cadeias de terminais de comprimento mximo 4.
270 Linguagens Formais - Teoria, Modelagem e Implementao
Seqncia V V V V
1 S aBC abBC abbBC abbbBC
2 abbbC
3 abbC abbc
4 abC abc
5 bBC bbBC bbbBC bbbbBC
6 bbbbC
7 bbbC bbbc
8 bbC bbc
Como se pode verificar, a seqncia de derivaes 3 produz a cadeia abbc. Por outro lado, a
cadeia bcbc, tambm de comprimento 4, no pertence linguagem, uma vez que nenhuma das oito
seqncias da Tabela 4.5 gera o prefixo bcbc e, portanto, nenhuma seqncia de derivaes capaz
de gerar a cadeia bcbc. 2
G ambgua?
L inerentemente ambgua?
L(G) regular?
L(G) = ?
L(G1 ) = L(G2 )?
L(G1 ) L(G2 )?
L(G1 ) L(G2 ) = ?
E E + E
| E E
|E E
| E / E
| (E )
| a
| b
Uma vez declarados, os novos nomes podem ser empregados no corpo do programa.
Normalmente, tais linguagens exigem que apenas nomes declarados possam ser referen-
ciados em comandos e expresses; alm disso, que a utilizao dos mesmos seja feita de
forma coerente com os atributos que lhes foram associados.
o caso, por exemplo, de se utilizar, no lado esquerdo de um comando de atri-
buio, apenas variveis declaradas e visveis no local da referncia. o caso, tambm,
de se utilizar, na expresso do lado direito de um comando de atribuio, apenas os
nomes e literais cujos atributos sejam compatveis com as operaes que estejam sendo
empregadas.
Dessa forma, a correo sinttica de uma sentena, no caso um programa escrito
em uma linguagem de alto nvel, s se completa se as condies anteriores forem verifica-
das. Est criada, portanto, uma dependncia de contexto entre os atributos dos nomes
constantes nas respectivas declaraes e a forma como os mesmos so manipulados ao
longo do programa.
Exemplo 5.2 Considere-se, por exemplo, o seguinte trecho de programa escrito na linguagem C:
void main () { int x; scanf (%d,&x); printf (%d,x);}
Existe uma clara vinculao entre a declarao da varivel x e a referncia mesma nos
comandos de leitura e impresso. Se ela no tivesse sido declarada, ou se os seus atributos no fossem
compatveis com a maneira como ela utilizada nesses comandos, no seria possvel considerar tal
sentena como vlida do ponto de vista sinttico. 2
V NV
| | ||
Gramticas sensveis ao contexto eliminam a restrio de que o lado esquerdo das
regras seja formado por um nico smbolo, e de que este seja um smbolo no-terminal.
Tais gramticas admitem qualquer quantidade de smbolos do lado esquerdo, sejam eles
terminais ou no-terminais. Exigem, apenas, que do lado esquerdo exista pelo menos um
smbolo no-terminal e, tambm, que o lado direito possua uma quantidade de smbolos
no inferior quela encontrada no lado esquerdo da mesma regra.
Define-se inicialmente linguagem sensvel ao contexto como sendo aquela que
possa ser definida atravs de uma gramtica sensvel ao contexto. Conforme convencio-
nado na Seo 2.6, essa definio estendida para qualquer linguagem L que contenha a
cadeia vazia, desde que L {} possa ser gerada por uma gramtica sensvel ao contexto.
Define-se linguagem estritamente sensvel ao contexto como sendo uma lin-
guagem sensvel ao contexto mas no livre de contexto.
Exemplo 5.3 Seja a gramtica G1 = ({a, b, c, S , B , C }, {a, b, c}, P , S ), com
P = {S aSBC ,
S aBC ,
CB BC ,
aB ab,
bB bb,
bC bc,
cC cc}
Todas as regras desta gramtica satisfazem condio de possuir pelo menos um no-terminal
do lado esquerdo e uma seqncia arbitrria de smbolos do lado direito, porm de comprimento
nunca inferior ao comprimento verificado no lado esquerdo da mesma regra.
Algumas derivaes possveis so:
P = {S ABC ,
S ABCS ,
AB BA,
AC CA,
BA AB ,
BC CB ,
CA AC ,
CB BC ,
A a,
B b,
C c}
Analise-se agora a derivao de algumas sentenas:
Neste ltimo caso, aceita-se que a regra S seja includa na gramtica, porm
desde que S (a raiz da gramtica) no comparea do lado direito de nenhuma outra
regra. Dessa forma evita-se a gerao de formas sentenciais que possam sofrer contrao
5 Linguagens Sensveis ao Contexto 277
L(G) = L(G ).
Como foi demonstrado no Teorema 4.7, tal transformao sempre possvel. Toda e
qualquer gramtica livre de contexto pode ser transformada, sem prejuzo da linguagem
que estiver sendo definida, em uma outra gramtica em que a cadeia vazia comparece
apenas na produo S , sendo S a raiz da gramtica. Alm disso, S garantidamente
no figura no lado direito de nenhuma outra produo. Isso significa que o nico efeito
prtico da presena de produes do tipo A , A N , em gramticas livres de con-
texto quaisquer, na eventual incorporao da cadeia vazia como sentena na linguagem
definida.
Portanto, com exceo da produo S , as gramticas do tipo 2 podem ser
sempre convertidas para um formato que as torne um caso particular das gramticas
do tipo 1. Em outras palavras, tem-se que qualquer gramtica do tipo 2, desde que
devidamente convertida para esse formato padronizado, e a menos da produo S ,
torna-se tambm uma gramtica do tipo 1.
Assim, fato que G , exceto pela regra vazia, uma gramtica sensvel ao contexto
e, conseqentemente, L(G ) {} uma linguagem sensvel ao contexto. Logo, L(G) =
L(G ) , de acordo com a definio, uma linguagem sensvel ao contexto.
Como conseqncia, pode-se concluir que toda linguagem livre de contexto tam-
bm uma linguagem sensvel ao contexto. Fica claro, tambm, que as linguagens livres
de contexto constituem um subconjunto prprio das linguagens sensveis ao contexto.
Para finalizar, algumas observaes de ordem prtica. muito comum, quando
se especificam linguagens de programao, fazer uso de gramticas livres de contexto.
Tal artifcio mascara, no entanto, a existncia das dependncias de contexto, as quais
acabam sendo excludas da formalizao gramatical. Esta estratgia possui pelo menos
uma importante razo de ser e uma importante conseqncia:
A razo de ser consiste no fato de que formalismos distintos, adequados para a re-
presentao de linguagens sensveis ao contexto (como, por exemplo, as gramticas
sensveis ao contexto), so relativamente complexos e difceis de serem trabalhados
quando se trata de especificar as dependncias de contexto tpicas das linguagens
de programao. Opta-se, assim, por uma questo de praticidade, pelo uso de
formalismos mais simples, em particular os livres de contexto.
278 Linguagens Formais - Teoria, Modelagem e Implementao
%a
%b
#a = a + b
#b = b b
Tal sentena pode ser entendida como um programa contendo a declarao de duas variveis
(a e b, nas duas linhas iniciais) e o uso de ambas em dois comandos de atribuio (nas duas
linhas finais).
A nica dependncia de contexto exibida por essa linguagem que os nicos identificadores
que podem ser usados nos comandos (aps o smbolo #) so aqueles que tenham sido declarados
anteriormente (aps o smbolo %).
Perceba-se, no entanto, que tal regra no est incorporada na gramtica apresentada uma
gramtica livre de contexto , mas bastante simples e fcil de ser interpretada.
Tal facilidade de representao, entretanto, onerada pela possibilidade de derivao de sen-
tenas como, por exemplo:
%a
%c
#a = a + b
#b = b b
que viola a dependncia de contexto que vincula referncias s variveis com as respectivas declara-
es (a varivel b referenciada indevidamente, uma vez que sua declarao foi substituda pela
declarao da varivel c). Da a necessidade de se adicionar um filtro para excluir tais sentenas
do conjunto gerado pela gramtica apresentada. 2
5 Linguagens Sensveis ao Contexto 279
Gramticas matriciais;
Gramticas programadas;
{a n b n c n | n 1}
G = (G , R)
G = (V , , P , S ) uma gramtica livre de contexto
P = {p1 , p2 , ..., pn }
R = uma expresso regular sobre P
L(G) = {w |
(S pi1 w1 pi2 ... pik wk = w ) e
(pi1 , pi2 , ..., pik R)}
Exemplo 5.6
G1 = (G1 , R)
G1 = ({S , B , C , a, b, c}, {a, b, c}, {p1 , p2 , p3 , p4 , p5 }, S )
(p1 ) S BC
(p2 ) B aBb
(p3 ) B ab
(p4 ) C cC
(p5 ) C c
R = p1 (p2 p4 ) (p3 p5 )
L(G1 ) = {a n b n c n | n 1}
Considere-se a cadeia p1 p2 p4 p2 p4 p3 p5 R. A aplicao do correspondente conjunto de
produes gera a sentena aaabbbccc, conforme mostra a seqncia de derivaes:
S p1 BC p2 aBbC p4 aBbcC p2
aaBbbcC p4 aaBbbccC p3 aaabbbccC p4 aaabbbccc
2
5 Linguagens Sensveis ao Contexto 281
Exemplo 5.7
G2 = (G2 , R)
G2 = ({S , A, B , a, b}, {a, b}, {p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 })
(p1 ) S AB
(p2 ) A aA
(p3 ) B aB
(p4 ) A bA
(p5 ) B bB
(p6 ) Aa
(p7 ) B a
(p8 ) Ab
(p9 ) B b
R = p1 (p2 p3 | p4 p5 ) (p6 p7 | p8 p9 )
L(G2 ) = {ww | w {a, b}+ }
Considere-se a cadeia p1 p2 p3 p4 p5 p8 p9 R. A aplicao do correspondente conjunto de
produes gera a sentena abbabb, conforme mostra a seqncia de derivaes:
S p1 AB p2 aAB p3 aAaB p4
abAaB p5 abAabB p8 abbabB p9 abbabb
2
Gramticas matriciais
Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estru-
tura matricial M , na qual esto distribudas as regras de produo de P . Uma seqncia
de derivaes considerada vlida se e apenas se as regras forem sempre aplicadas em
grupos, cada grupo sendo formado por todas as regras de uma mesma linha, da primeira
ltima coluna, nessa seqncia. Gramticas matriciais foram inicialmente divulgadas
em [43]. Uma gramtica livre de contexto matricial G definida formalmente como:
G = (G , M )
G = (V , , P , S ) uma gramtica livre de contexto
M = {m1 , m2 , ..., mn }
mi = (pi1 , ..., pik ) | k 1, pij P , i1 ij ik
L(G) = {w |
(S = w0 mi1 w1 mi2 w2 mi3 ... miq1 wq1 miq wq = w ), com
(mi1 , mi2 , mi3 , ..., miq1 , miq M ) e
(wj mi wj +1 : wj pi1 wj1 pi2 wj2 pi3 ... pik wjk = wj +1 )}
Exemplo 5.8
G3 = (G3 , M })
G3 = ({S , A, B , C , a, b, c}, {a, b, c}, P , S )
P = {S abc, S aAbBcC , A aA, B bB , C cC , A a, B b, C c}
282 Linguagens Formais - Teoria, Modelagem e Implementao
M = {m1 , m2 , m3 , m4 }
m1 = (S abc)
m2 = (S aAbBcC )
m3 = (A aA, B bB , C cC )
m4 = (A a, B b, C c)
L(G3 ) = {a n b n c n | n 1}
Considere-se a seqncia m2 m3 m4 . A aplicao do correspondente conjunto de produes gera
a sentena aaabbbccc, conforme mostra a seqncia de derivaes:
S m2 aAbBcC : S aAbBcC
aAbBcC m3 aaAbbBccC : aAbBcC aaAbBcC aaAbbBcC aaAbbBccC
aaAbbBccC m4 aaabbbccc : aaAbbBccC aaabbBccC aaabbbccC aaabbbccc
2
Exemplo 5.9
G4 = (G4 , M })
G4 = ({S , A, B , a, b}, {a, b}, P , S )
P = {S AB , A aA, B aB , A bA, B bB , A a, B a, A b, B b}
M = {m1 , m2 , m3 , m4 , m5 })
m1 = (S AB )
m2 = (A aA, B aB )
m3 = (A bA, B bB )
m4 = (A a, B a)
m5 = (A b, B b)
L(G4 ) = {ww | w {a, b}+ }
Considere-se a seqncia m1 m2 m3 m5 . A aplicao do correspondente conjunto de produes
gera a sentena aaabbbccc, conforme mostra a seqncia de derivaes:
S m1 AB : S AB
AB m2 aAaB : AB aAB aAaB
aAaB m3 abAabB : aAaB abAaB abAabB
abAabB m5 abbabb : abAabB abbabB abbabb
2
Gramticas programadas
Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estru-
tura T , na qual cada regra p P associada a um conjunto, eventualmente vazio, de
regras de P . Uma seqncia de derivaes considerada vlida se e apenas se, para cada
regra p aplicada, a regra seguinte, a ser usada na prxima derivao, for sempre obtida no
conjunto de regras associadas a p. Gramticas programadas foram originalmente repor-
5 Linguagens Sensveis ao Contexto 283
G = (G , T )
G = (V , , P , S ) uma gramtica livre de contexto
T = {t1 , t2 , ..., tn }
ti = (pi , si ) | 1 i n, pi P , si 2T
L(G) = {w |
(S pi1 w1 pi2 ... piq w ) e
(pij +1 sij , j 1)}
Exemplo 5.10
G5 = (G5 , T })
G5 = ({S , A, B , C , a, b, c}, {a, b, c}, P , S )
P = {S AB , A aA, A bA, B aB , B bB , A a, A b, B a, B b}
T = {t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 }
t1 = (S abc, {})
t2 = (S aAbBcC , {t3 , t6 })
t3 = (A aA, {t4 })
t4 = (B bB , {t5 })
t5 = (B cC , {t3 , t6 })
t6 = (A a, {t7 })
t7 = (B b, {t8 })
t8 = (C c, {})
L(G5 ) = {a n b n c n | n 1}
A derivao abaixo tal que pij +1 sij , j 1:
Exemplo 5.11
G6 = (G6 , T })
G6 = ({S , A, B , a, b}, {a, b}, P , S )
P = {S AB , A aA, A bA, B aB , B bB , A a, A b, B a, B b}
T = {t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 }
t1 = (S AB , {t2 , t3 , t6 , t7 })
t2 = (A aA, {t4 })
t3 = (A bA, {t5 })
t4 = (B aB , {t2 , t3 , t6 , t7 })
t5 = (B bB , {t2 , t3 , t6 , t7 })
t6 = (A a, {t8 })
t7 = (A b, {t9 })
284 Linguagens Formais - Teoria, Modelagem e Implementao
t8 = (B a, {})
t9 = (B b, {})
L(G6 ) = {ww | w {a, b}+ }
A derivao abaixo tal que pij +1 sij , j 1:
S p1 AB p2 aAB p4 aAaB p3
abAaB p5 abAabB p7 abbabB p9 abbabb
De fato, t2 s1 , t4 s2 , t3 s4 , t5 s3 , t7 s5 e t9 s7 . 2
G = (G , U )
G = (V , , P , S ) uma gramtica livre de contexto
U = {P1 , P2 , ..., Pk }, k 1, Pi P , 1 i k
L(G) = {w |
(S pi1 w1 pi2 ... piq w ) e
(pij P(j mod k ) , 1 j q)}
Exemplo 5.12
G7 = (G7 , U )
G7 = ({S , A, B , C , X , a, b, c}, {a, b, c}, P , S )
P = {S ABC , C cC , C c,
A aA, A a, X b,
B bB , B X }
U = {P1 , P2 , P3 }
P1 = {S ABC , C cC , C c}
P2 = {A aA, A a, X b}
P3 = {B bB , B X }
L(G7 ) = {a n b n c n | n 1}
A derivao abaixo tal que pij P(j mod 3) :
Exemplo 5.13
G8 = (G8 , U )
G8 = ({S , X1 , X2 , Y1 , Y2 , a, b}, {a, b}, P , S )
P = {S X1 Y1 , X1 X1 , Y2 Y2 ,
X1 aX1 , X1 bX2 , X1 , X2 aX1 , X2 bX2 , X2 ,
Y1 aY1 , Y1 bY2 , Y1 , Y2 aY1 , Y2 bY2 , Y2 ,
X2 X2 , Y1 Y1 }
U = {P1 , P2 , P3 , P4 }
P1 = {S X1 Y1 , X1 X1 , Y2 Y2 }
P2 = {X1 aX1 , X1 bX2 , X1 , X2 aX1 , X2 bX2 , X2 }
P3 = {Y1 aY1 , Y1 bY2 , Y1 , Y2 aY1 , Y2 bY2 , Y2 }
P4 = {X2 X2 , Y1 Y1 }
L(G8 ) = {ww | w {a, b}+ }
A derivao abaixo tal que pij P(j mod 4) :
com A N , V + e , V .
Demonstra-se a seguir (Teorema 5.1) que toda e qualquer gramtica do tipo 1 pode
ser convertida para uma nova gramtica em que todas as produes obedecem ao formato
286 Linguagens Formais - Teoria, Modelagem e Implementao
Sada: uma gramtica sensvel ao contexto G, tal que todas as suas regras satisfa-
zem ao padro uAv uwv , w ( N )+ , u, v ( N ) , A N e, alm disso,
L = L(G);
Mtodo:
Considerem-se as regras de G numeradas de 1 a p. Cada regra tem o formato
geral:
Xi1 Xi2 Xi3 ...Xim Yi1 Yi2 Yi3 ...Yin
onde 1 i p o ndice da regra considerada e Xij , Yik ( N ). Como se
trata de uma linguagem sensvel ao contexto, L gerada por uma gramtica com
regras monotnicas, ou seja, aquelas em que o comprimento do lado direito das
regras nunca menor do que o comprimento do respectivo lado esquerdo. No caso
acima, n m.
(i) PQ RS
(ii) P R+
com P , Q N e R, S ( N ).
Note-se que o lado esquerdo dessas regras contm apenas smbolos no-
terminais. As regras do tipo (ii) j estaro no formato uAv uwv (basta
considerar u, v = ), e portanto no h mais nada a fazer com elas. As
regras do tipo (i), no entanto, ainda precisam ser convertidas para o formato
desejado.
Considerem-se agora as regras numeradas de 1 a q. Considerem-se, dentre
estas, as regras que obedecem ao formato (i) citado acima:
Pj 1 Qj 2 Rj 1 Sj 2
288 Linguagens Formais - Teoria, Modelagem e Implementao
3. Para j variando de 1 at q:
a) Considere-se a regra j ;
Pj 1 Qj 2 Pj 1 Wj
Pj 1 Wj R j 1 Wj
R j 1 Wj R j 1 Sj 2
Exemplo 5.14
A gramtica abaixo representa a linguagem {a n b n c n | n 1}.
S abc (5.1)
S aSQ (5.2)
bQc bbcc (5.3)
cQ Qc (5.4)
1. Primeiro passo: substituio dos smbolos terminais. O seguinte novo conjunto de regras
obtido:
S ABC (5.5)
A a (5.6)
B b (5.7)
C c (5.8)
S ASQ (5.9)
BQC BBCC (5.10)
CQ QC (5.11)
2. Segundo passo: Todas essas regras satisfazem ao critrio de seleo, exceto a Regra (5.10).
Procede-se, ento, sua manipulao.
5 Linguagens Sensveis ao Contexto 289
Regra (5.10): criam-se os novos smbolos no-terminais Z61 , Z62 e Z63 , substituindo
a regra original pelo conjunto de regras:
BQ BZ61 (5.12)
Z61 C BZ62 (5.13)
Z62 CZ63 (5.14)
Z63 C (5.15)
(5.16)
S ABC (5.17)
A a (5.18)
B b (5.19)
C c (5.20)
S ASQ (5.21)
BQ BZ61 (5.22)
Z61 C BZ62 (5.23)
Z62 CZ63 (5.24)
Z63 C (5.25)
CQ QC (5.26)
3. Terceiro passo: Com exceo das Regras (5.23) e (5.26), todas as demais satisfazem ao
critrio de seleo.
CQ CW10 (5.30)
CW10 QW10 (5.31)
QW10 QC (5.32)
S ABC (5.33)
A a (5.34)
B b (5.35)
C c (5.36)
S ASQ (5.37)
BQ BZ61 (5.38)
Z61 C Z61 W7 (5.39)
290 Linguagens Formais - Teoria, Modelagem e Implementao
N e ;
N e N;
N e NN ;
NN e NN ;
2. O cursor de acesso aos smbolos da fita de trabalho pode se deslocar, sob o comando
do controle finito, tanto para a direita quanto para a esquerda;
M = (Q , , , , q0 , <, >, F )
onde:
o conjunto, tambm finito, de smbolos que podem ser lidos e/ou gravados na
fita de trabalho. ;
Q 2Q{E ,D}
Q {<} 2Q{<}{D}
Q {>} 2Q{>}{E }
q0 o estado inicial, q0 Q ;
de trabalho. Este conjunto incorpora, pela sua prpria definio, o conjunto , alm de
outros smbolos que sero utilizados durante a operao do dispositivo.
O conjunto Q e o estado q0 representam, respectivamente, assim como no caso
dos autmatos finitos e de pilha, o conjunto de estados que formam o controle finito do
dispositivo e o estado inicial nico que utilizado para caracterizar a configurao
inicial do mesmo. F representa um subconjunto de Q e contm os chamados estados
finais, que so utilizados para caracterizar as configuraes finais em um dispositivo
deste tipo.
Os smbolos < e > so empregados como delimitadores da cadeia a ser anali-
sada na fita de trabalho. Eles no pertencem ao alfabeto , indicando com isso que no
podem ser utilizados na composio das cadeias de entrada nem ser gravados na fita de
trabalho em sobreposio a outros smbolos (exceto em sobreposio a si prprios).
A inspeo da funo de transio revela que os smbolos especiais < e > s podem
ser gravados na prpria posio original em que se encontravam no incio da operao da
mquina. A funo , da maneira como formulada, impede ainda que outro smbolo
seja gravado em qualquer uma dessas duas posies. Ela especifica, ainda, um nico
sentido de movimentao do cursor em cada caso: esquerda para > e direita para <.
A representao da funo de transio indica, a partir do estado corrente e do
smbolo correntemente selecionado na fita de trabalho, o novo estado corrente, o novo
smbolo que dever substituir o correntemente selecionado e o sentido em que o cursor
de acesso dever se deslocar: para a esquerda (E) ou para a direita (D).
Considere-se a transio (qi , m ) = {(qj , n , E )}. As seguintes aes so tomadas,
nesta seqncia, aps a seleo dessa transio:
Como regra adicional, deve-se registrar que as Mquinas de Turing com fita limitada
no permitem movimentos do cursor de acesso esquerda da posio preenchida com
<, nem direita da posio preenchida com >. Sua movimentao fica, portanto,
confinada ao trecho da fita de trabalho situado entre os delimitadores < e >, o que
justifica o uso do termo fita limitada para caracterizar esse tipo de dispositivo.
A definio da funo remete ainda para o no-determinismo inerente a esse tipo
de dispositivo. Dada uma mesma combinao de estado corrente e de smbolo na fita de
trabalho, possvel especificar mltiplas transies envolvendo o prximo estado, o novo
smbolo a ser gravado na fita e o sentido de movimentao do cursor de acesso aps a
gravao.
Apesar de ser possvel se considerar a definio de Mquinas de Turing com fita
limitada determinsticas, a questo de uma eventual equivalncia entre as Mquinas de
Turing com fita limitada no-determinsticas e uma correspondente verso determinstica
um problema em aberto, de soluo ainda desconhecida ([58]). Vale lembrar que este
resultado foi provado verdadeiro para o caso dos autmatos finitos e falso para o caso
dos autmatos de pilha.
A configurao de uma Mquina de Turing com fita limitada denotada atravs
da tripla (, qk , ), em que qk o estado corrente, {<} a poro da cadeia de
entrada que se encontra esquerda do cursor de acesso e {>} a poro da cadeia
5 Linguagens Sensveis ao Contexto 293
de entrada que se encontra direita do cursor de acesso, incluindo a posio por ele
correntemente selecionada. Note-se que < e > podem ocorrer, cada um, no mximo
uma vez em , e sempre nos respectivos extremos.
A configurao inicial (<, q0 , >), onde q0 o estado inicial e a cadeia
de entrada a ser analisada. O cursor de acesso refere-se, portanto, ao smbolo inicial (mais
esquerda) da cadeia . A poro da representao (, qk , ) corresponde, neste caso,
apenas ao smbolo <, pois no existe fita esquerda deste delimitador. A configurao
final definida como (, qf , ), com qf F , {<} e {>}.
As transies contidas na funo especificam possibilidades de movimentao, que
conduzem o dispositivo de cada possvel configurao para a correspondente configurao
seguinte. Diz-se que o dispositivo pra quando a funo no estiver definida para o
par (estado, smbolo de entrada) corrente.
A linguagem aceita por uma Mquina de Turing com fita limitada o conjunto
de todas as cadeias que so capazes de conduzir o dispositivo desde a sua configurao
inicial (nica para cada cadeia de entrada) at uma configurao final qualquer, sem
possibilidade de movimentao adicional. Formalmente:
Q = {q0 , q1 , q2 }
= {a, b}
= {a, b}
= {(q0 , a) (q0 , a, D), (q0 , b) (q1 , b, D), (q0 , >) (q2 , >, E ),
(q1 , b) (q1 , b, D), (q1 , >) (q1 , >, E )}
F = {q2 }
294 Linguagens Formais - Teoria, Modelagem e Implementao
q2
b/(b, D )
q0 q1
a/(a, D ) b/(b, D )
A Mquina de Turing com fita limitada do Exemplo 5.15 comporta-se como um autmato finito:
o cursor de acesso move-se em apenas um sentido (exceto quando o smbolo > encontrado na fita
de trabalho) e no h gravao de smbolos na fita, apenas leitura (na verdade, cada smbolo lido
substitudo por ele mesmo). Este exemplo sugere que as Mquinas de Turing com fita limitada possam
ser usadas em substituio aos autmatos finitos, ainda que com um custo maior de processamento
(o custo de gravao de um smbolo na fita).
fcil, tambm, perceber como as Mquinas de Turing com fita limitada podem ser empre-
gadas em mecanismos de transduo, maneira dos transdutores finitos estudados anteriormente.
Se, neste exemplo, as transies:
(q0 , a) (q0 , a, D)
(q0 , b) (q1 , b, D)
(q1 , b) (q1 , b, D)
forem, respectivamente, substitudas por:
(q0 , a) (q0 , b, D)
(q0 , b) (q1 , a, D)
(q1 , b) (q1 , a, D)
ento o autmato resultante mapear elementos do conjunto a b em elementos do conjunto b a ,
em que os smbolos a das cadeias do primeiro conjunto so substitudos por smbolos b nas
cadeias do segundo conjunto e vice-versa. 2
Exemplo 5.16 A Mquina de Turing com fita limitada M = (Q, , , , q0 , <, >, F ) da Figura 5.2
aceita a linguagem {a n b n | n 1}.
Q = {q0 , q1 , q2 , q3 , q4 , q5 }
= {a, b}
5 Linguagens Sensveis ao Contexto 295
= {a, b, X , Y }
= {(q0 , a) (q1 , X , D), (q0 , b) (q5 , b, D), (q0 , Y ) (q3 , Y , D),
(q1 , a) (q1 , a, D), (q1 , Y ) (q1 , Y , D), (q1 , b) (q2 , Y , E ),
(q1 , >) (q5 , >, E ), (q2 , X ) (q0 , X , D), (q2 , Y ) (q2 , Y , E ),
(q2 , a) (q2 , a, E ), (q3 , Y ) (q3 , Y , D), (q3 , b) (q5 , b, D),
(q3 , >) (q4 , >, E )}
F = {q4 }
Y /(Y , D )
> /(>, E )
q3 q4
b/(b, D )
Y /(Y , D ) q5
> /(>, E )
a/(a, D ) a/(a, E )
b/(b, D )
a/(X , D ) b/(Y , E )
q0 q1 q2 Y /(Y , E )
Y /(Y , D )
X /(X , D )
4. Se o smbolo corrente for Y , isso indica que j foram considerados todos os smbolos a.
Se o restante da cadeia de entrada for formada apenas por smbolos Y , ela ser aceita.
Caso contrrio, ser rejeitada. o caso, por exemplo, de cadeias que contm mais smbolos
b do que smbolos a.
Neste exemplo, a Mquina de Turing com fita limitada est sendo utilizada para reconhecer
uma linguagem livre de contexto, e tal fato sugere que esse tipo de dispositivo possa ser empregado
tambm no reconhecimento desta categoria de linguagens, em substituio aos autmatos de pilha.
Alm de necessitar da movimentao do cursor em ambos os sentidos, neste exemplo a subs-
tituio (gravao) de um smbolo do alfabeto de entrada por smbolos que no fazem parte deste
alfabeto (no caso, a por X e b por Y ) essencial para o seu correto funcionamento. 2
Exemplo 5.17 A Mquina de Turing com fita limitada da Figura 5.3 reconhece a linguagem {wcw |
w {a, b} } sobre o alfabeto {a, b, c}:
X /(X , D )
> /(>, E )
q7 q8
c/(c, D )
a/(X , D )
a/(a, D ) X /(X , D ) X /(X , E )
b/(X , D ) b/(X , E )
c/(c, D )
q5 q6
b/(b, D )
(<, q0 , abbcabb >) (< X , q1 , bbcabb >) (< Xb, q1 , bcabb >)
(< Xbb, q1 , cabb >) (< Xbbc, q2 , abb >) (< Xbb, q3 , cXbb >)
(< Xb, q4 , bcXbb >) (< X , q4 , bbcXbb >) (<, q4 , XbbcXbb >)
(< X , q0 , bbcXbb >) (< XX , q5 , bcXbb >) (< XXb, q5 , cXbb >)
(< XXbc, q6 , Xbb >) (< XXbcX , q6 , bb >) (< XXbc, q3 , XXb >)
(< XXb, q3 , cXXb >) (< XX , q4 , bcXXb >) (< X , q4 , XbcXXb >)
(< XX , q0 , bcXXb >) (< XXX , q5 , cXXb >) (< XXXc, q6 , XXb >)
(< XXXcX , q6 , Xb >) (< XXXcXX , q6 , b >) (< XXXcX , q3 , XX >)
(< XXXc, q3 , XXX >) (< XXX , q3 , cXXX >) (< XX , q4 , XcXXX >)
(< XXX , q0 , cXXX >) (< XXXc, q7 , XXX >) (< XXXcX , q7 , XX >)
(< XXXcXX , q7 , X >) (< XXXcXXX , q7 , >) (< XXXcXX , q8 , X >)
Pode-se demonstrar, atravs do Pumping Lemma para linguagens livres de contexto, que
a linguagem deste exemplo no livre de contexto (a demonstrao semelhante do Exemplo
4.39). Tal resultado sugere, como ser mostrado mais adiante, que as Mquinas de Turing com fita
limitada so dispositivos capazes de reconhecer uma classe de linguagens mais ampla do que as livres
de contexto, reconhecidas pelos autmatos de pilha trata-se, no caso, da classe das linguagens
sensveis ao contexto, caracterizadas neste captulo (ver Teorema 5.3). 2
poucos estados e poucas entradas. O procedimento descrito abaixo, no entanto, pode ser
facilmente automatizado atravs de programas de computador.
Inicialmente so gerados os smbolos no-terminais de G. Estes smbolos possuem
o formato geral [, ], com , e {<, }{, q, q}{>, }, com e q Q .
A primeira dessas duas componentes [, ...] representa um certo smbolo ter-
minal da cadeia de entrada. A segunda componente [..., ] representa parte da
configurao assumida pela Mquina de Turing com fita limitada no reconhecimento da
referida cadeia de entrada.
Os conjuntos P e S de G so inicialmente definidos como:
I. P =
A) [i , < q0 i >], ou
[..., < q0 i ][..., j ][..., k ]...[..., u >] ou, simplesmente, < q0 i j k ...u >
Suponha-se que a regra (q0 , a) = (q1 , d , D ) (caso iii) seja aplicada em M . Neste
caso, G deve permitir a derivao:
[a, < q0 a][b, b][c, c][a, a >] [a, < d ][b, q1 b][c, c][a, a >]
[a, < q2 d ][b, e][c, c][a, a >] [a, q3 < d ][b, e][c, c][a, a >]
300 Linguagens Formais - Teoria, Modelagem e Implementao
Esta ltima forma sentencial mostra que M pode, eventualmente, deslocar o cursor
de acesso para a esquerda, at fazer com que o smbolo corrente seja <. Em situaes
como esta, o nico movimento permitido para a direita, sem modificao do smbolo
lido (conforme a definio da funo de transio). Supondo que (q3 , <) = (q4 , <, D )
na verdade, a nica transio possvel de ser aplicada neste ponto , caracteriza-se
o caso (i), e a nova forma sentencial obtida :
[a, q3 < d ][b, e][c, c][a, a >] [a, < q4 d ][b, e][c, c][a, a >]
XIII;
XIX;
N = N {[r , qi m ], r }
N = N {[p , < qj q ], p , q }
N = N {[r , n ], r }
A operao do autmato cessa quando ele atinge uma configurao para a qual no
exista movimentao possvel, ou seja, quando (qi , m ) = . Nesta situao, se qi F ,
diz-se que o autmato aceita a cadeia de entrada. Caso contrrio, diz-se que ele a rejeita.
Condio semelhante precisa ser alcanada atravs de G. Suponha-se que, quando
o autmato pra de se movimentar, a configurao seja (, qi m ). A forma sentencial
equivalente em G ser [...][...]...[n , qi m ][...].
Se, nesta situao, qi F e (qi , m ) = , ento as seguintes regras devem ser
adicionadas gramtica G:
XXV. P = P {[p , qi m ] p , p }
N = N {[p , qi m ], p }
XXVIII. P = P {[m , ]n m n , n , [m , ] V }
XXIX. P = P {n [m , ] n m , n , [m , ] V }
A simples inspeo do formato das regras geradas nos itens I a XXIX permite
concluir que toda e qualquer gramtica gerada por esse mtodo uma gramtica sensvel
ao contexto. Ser omitida a demonstrao formal da equivalncia das Mquinas de
Turing com fita limitada com as gramticas sensveis ao contexto, que no entanto pode
ser encontrada em [52].
Exemplo 5.18 Considere-se uma Mquina de Turing com fita limitada M = (Q, , , , q0 , <, >, F ),
conforme apresentado a seguir, e a cadeia de entrada ab.
Q = {q0 , q1 }
= {a, b}
= {a, b}
= {(q0 , a) (q0 , a, D), (q0 , b) (q1 , b, E )}
F = {q1 }
A Figura 5.4 ilustra os movimentos que levam o reconhecedor desde a sua configurao inicial
at uma configurao final. direita, as respectivas formas sentenciais, que so geradas pela
aplicao dos casos enumerados anteriormente. Note-se que, por uma questo de economia de
espao, esto mostradas aqui apenas as regras e os smbolos no-terminais relevantes para a gerao
desta cadeia. Uma gerao exaustiva de todos os smbolos e de todas as regras da gramtica G
equivalente a M tornaria o exemplo exageradamente extenso, e por isso deixada como exerccio
para o leitor.
Justificativa Assim como foi feito no Teorema 5.3, ser apresentado como prova deste
teorema um algoritmo que permite efetuar um mapeamento direto entre G e sua cor-
respondente Mquina de Turing com fita limitada. Trs propriedades das Mquinas de
Turing com fita limitada so fundamentais para a apresentao e o entendimento do
algoritmo:
iii) A possibilidade de se considerar a fita de trabalho como sendo composta por vrias
trilhas, sem perda de generalidade.
Sada: uma Mquina de Turing com fita limitada M tal que L(M ) = L(G);
Mtodo:
A mquina M que reconhece L(G) apresenta uma fita de trabalho formada por
duas trilhas de mesmo comprimento:
2. Para cada par (i, ) obtido no passo (1), criar um novo thread para M ,
e deslocar o respectivo cursor de acesso simultaneamente sobre as duas
trilhas, at a posio i da fita de trabalho; encerrar o thread original na
configurao de rejeio;
O Algoritmo 5.2 faz com que M reproduza, na segunda trilha, as formas sentenciais
de G na sntese da cadeia fornecida (caso esta seja uma sentena de L). Cada uma das
diferentes seqncias de derivao possveis de serem obtidas em G so simuladas por
um thread distinto de M , que opera de forma no-determinstica.
Dessa forma, a cadeia de entrada ser aceita se e apenas se existir pelo menos um
thread que simule a seqncia de derivaes que gera w em G e, portanto, que con-
duza M desde a sua configurao inicial at uma configurao de aceitao. Se todas as
seqncias possveis tiverem sido consideradas (atravs do no-determinismo) e ainda as-
sim nenhuma delas tiver conduzido M a uma configurao de aceitao, ento certamente
a cadeia de entrada no pertence a L. Do ponto de vista gramatical, isso corresponde ao
fato de no existir derivao possvel para a referida cadeia em G. Logo, M capaz de
aceitar apenas e to somente as sentenas que so geradas por G.
possvel provar, em funo do carter monotnico das derivaes obtidas atravs
das gramticas sensveis ao contexto, que todos os threads criados pelo Algoritmo 5.2 se
encerram aps um tempo finito de execuo, correspondente ao tempo necessrio para a
gerao de uma forma sentencial de comprimento mnimo igual ao da cadeia de entrada.
Assim, garante-se a existncia de uma Mquina de Turing com fita limitada que sempre
pra, qualquer que seja a cadeia de entrada que lhe seja submetida. Portanto, L(G)
uma linguagem recursiva.
O Algoritmo 5.2 presume que leitor saiba como realizar as seguintes operaes
fundamentais em uma Mquina de Turing com fita limitada que, por serem extensas,
embora no necessariamente complexas, sero deixadas apenas como exerccio:
Deslocar parte da cadeia de entrada para a direita, com a finalidade de abrir espao
para a insero dos smbolos indicados pela produo que estiver sendo aplicada;
Substituir uma subcadeia localizada em uma das trilhas por uma subcadeia cor-
respondente, conforme indicado em alguma das produes da gramtica;
Comparar as cadeias contidas nas duas trilhas da fita de trabalho para determinar
se so ou no idnticas.
Exemplo 5.19 Seja G = ({a, b, c, Q, S }, {a, b, c}, {S abc | aSQ, bQc bbcc, cQ Qc}, S ),
L(G) = {a n b n c n , n 1}. A Figura 5.7 reproduz uma seqncia de movimentos de M que conduz
aceitao da cadeia aabbcc. So mostrados os contedos das duas trilhas da fita de trabalho.
5 Linguagens Sensveis ao Contexto 309
Assim como foi feito no Exemplo 5.18, por uma questo de economia de espao, so mostrados
aqui apenas os movimentos realizados por M que permitem o reconhecimento da cadeia de entrada,
omitindo-se as mltiplas tentativas de reconhecimento atravs do no-determinismo inerente ao
dispositivo. Trata-se, portanto, de uma situao de melhor caso, deixando-se para o leitor, como
exerccio, a investigao dos demais caminhos que no levam ao reconhecimento da sentena.
Suponha-se, no entanto, que no passo 4 a regra escolhida tivesse sido S abc (no lugar
de S aSQ). Neste caso, a forma sentencial resultante seria abc, portanto diferente da cadeia
aabbcc gravada na primeira trilha, e no passo seguinte no seria possvel identificar o lado esquerdo
de nenhuma regra em abc, disso resultando a parada de M em uma configurao no-final.
Suponha-se, por outro lado, que no passo 5 a posio 2 tivesse sido selecionada (e no a
posio 3). Neste caso, M no seria capaz de reconhecer o lado esquerdo de nenhuma regra a
310 Linguagens Formais - Teoria, Modelagem e Implementao
partir da referida posio 2, pois no existem regras que possuam o lado esquerdo comeando com
o smbolo a, e portanto M pararia em uma configurao no-final.
Essas duas possibilidades, no entanto, no indicam que a cadeia de entrada possa ser arbitra-
riamente aceita ou rejeitada. preciso lembrar que se trata de um dispositivo no-determinstico,
no qual todas as alternativas de movimentao devem ser consideradas, at que pelo menos uma
resulte em aceitao (como o caso mostrado na Figura 5.7 do Exemplo 5.19), ou ento que todas
tenham resultado em parada em configurao no-final, caso em que a cadeia de entrada rejeitada.
A rejeio, no entanto, no aconteceria no Exemplo 5.19, mesmo que as hipteses consideradas
nos pargrafos anteriores tivessem de fato acontecido durante a operao de M , pois a Figura 5.7
comprova que existe pelo menos uma seqncia de movimentos que conduz M de sua configurao
inicial at uma configurao final. 2
Justificativa Se L livre de contexto, ento existe pelo menos uma gramtica livre
de contexto G que gera L. Conforme demonstrado no Captulo 4, toda gramtica livre
de contexto pode ser colocada na Forma Normal de Chomsky, com as regras no formato
A BC ou A a, com A, B , C N , a . Se L, ento S admitida como
nica regra vazia em G.
Se L, ento L {} pode ser gerada por uma gramtica livre de contexto
que, alm de estar na Forma Normal de Chomsky, claramente uma gramtica sensvel
ao contexto tambm. Se 6 L, idem. Logo, L tambm uma linguagem sensvel ao
contexto.
{S
A a
B b
S AX
X SB }
fcil notar que L(G2 ) = L(G1 ), sendo que G2 est na Forma Normal de Chomsky. Como se
pode observar, L{} gerada por G3 = ({a, b, S , X }, {S , X }, P3 , S ), em que P3 = P2 {S }.
Portanto, G3 uma gramtica sensvel ao contexto. Logo, L tambm uma linguagem sensvel ao
contexto. 2
Entrada: um alfabeto ;
Mtodo:
pode ser ordenada na mesma seqncia dos nmeros naturais (1, 2, 3...). O conjunto das
gramticas sensveis ao contexto , portanto, um conjunto enumervel.
1. A1 A1
2. A1 a
3. A1 b
Desta forma, as diversas gramticas que podem ser criadas a partir das regras acima contero,
respectivamente, apenas uma, apenas duas ou apenas trs regras distintas.
Gramticas com exatamente uma regra:
Portanto, so sete as gramticas sensveis ao contexto distintas que podem ser criadas sobre
o vocabulrio {A1 , a, b}.
Para relacionar as regras em que , || 2, | | 2, e tais que A1 , A2 sejam empregados,
deve-se considerar os seguintes casos:
a) || = | | = 1
b) || = 1, | | = 2
c) || = | | = 2
Sejam, portanto, N2 = {A1 , A2 } e V2 = {A1 , A2 , a, b}. Ento, as seguintes regras podem ser
geradas em cada caso:
a) , || = 1, | | = 1
A1 A1 , A1 A2 , A1 a, A1 b,
A2 A1 , A2 A2 , A2 a, A2 b
b) , || = 1, | | = 2
5 Linguagens Sensveis ao Contexto 313
A1 A1 A1 , A1 A1 A2 , A1 A1 a, A1 A1 b,
A1 A2 A1 , A1 A2 A2 , A1 A2 a, A1 A2 b,
A1 aA1 , A1 aA2 , A1 aa, A1 ab,
A1 bA1 , A1 bA2 , A1 ba, A1 bb,
A2 A1 A1 , A2 A1 A2 , A2 A1 a, A2 A1 b,
A2 A2 A1 , A2 A2 A2 , A2 A2 a, A2 A2 b,
A2 aA1 , A2 aA2 , A2 aa, A2 ab,
A2 bA1 , A2 bA2 , A2 ba, A2 bb
ou seja:
| |
n = |V2 | = 24 = 16 possibilidades distintas para a cadeia .
c) , || = 2, | | = 2
2 2
m = |V2 | | | = 42 22 = 12
| |
n = |V2 | = 42 = 16
1::1
1::2 2::2
1::3 2::3 3::3
... ... ...
1::n-1 2::n-1 3::n-1 ... n-1::n-1
1::n 2::n 3::n ... n-1::n n::n
A ttulo de ilustrao, fcil deduzir que a quantidade total de elementos contidos no conjunto
i :: j pode ser obtida pelo produto m n, onde:
i i
m = |Vn | | |
(quantidade de cadeias distintas com comprimento i)
j
n = |Vn |
(quantidade de cadeias distintas com comprimento j )
Para se determinar a quantidade total de regras na tabela, basta calcular a funo regras(n)
abaixo (Vn o conjunto dos smbolos no-terminais e o conjunto dos smbolos terminais):
regras(n) :
1. regras 0;
2. para i 1 at n
para j i at n
i i j
faa regras regras+(|Vn | | | ) |Vn |
regras(n) :
1. regras 0;
2. para i 1 at n
para j i at n
Os casos anteriores podem ser considerados casos particulares da frmula geral acima. Considere-
se n = 2, , || 2, | | 2:
regras = 0
i = 1, j = 1 regras = regras + ((2 + 2)1 21 ) (2 + 2)1 = regras + 8
i = 1, j = 2 regras = regras + ((2 + 2)1 21 ) (2 + 2)2 = regras + 32
i = 2, j = 2 regras = regras + ((2 + 2)2 22 ) (2 + 2)2 = regras + 192
Portanto, obtm-se 8+32+192=232 regras distintas.
A quantidade total de gramticas que podem ser criadas a partir de k regras distintas dada
pela funo gramaticas(k ) abaixo:
gramaticas(k ) = 2k 1
1. n 1;
5 Linguagens Sensveis ao Contexto 315
2. k regras(n);
3. calcula gramaticas(k );
4. n n + 1;
Naturalmente, esses passos servem apenas como ilustrao da forma como se podem enumerar
todas as gramticas possveis sobre {a, b}. A sua transcrio para a forma de um algoritmo s faz
sentido caso se estabelea um limite superior para n, caso contrrio eles no se encerrariam nunca.
Cumpre notar que o mtodo descrito gera toda e qualquer gramtica sensvel ao contexto sobre
{a, b}, incluindo aquelas que geram linguagens vazias, contm smbolos inteis ou so equivalentes
a outras gramticas geradas anteriormente. Como exemplo destes casos, pode-se considerar as
gramticas:
Justificativa feita provando-se que existe pelo menos uma linguagem tal que no existe
gramtica sensvel ao contexto que a gere.
Considere-se inicialmente o resultado do Teorema 5.7 (as gramticas sensveis ao
contexto so enumerveis) e um alfabeto qualquer. Em seguida, pode-se considerar
uma enumerao, em ordem lexicogrfica crescente, das cadeias de + . Considere-se, em
particular, = {a, b}. Tal enumerao correspondente seqncia:
a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, ...
G1 G2 G3 ... Gn ...
l l l l
1 2 3 ... n ...
Considere-se que LR seja uma linguagem sensvel ao contexto. Se essa hiptese for
verdadeira, dever existir pelo menos uma gramtica sensvel ao contexto que a gere.
Naturalmente, tal gramtica dever pertencer ao conjunto G. Seja Gi esta gramtica.
Se LR = L(Gi ), ento s existem duas possibilidades: i pertence ou no pertence a LR .
Unio
Concatenao
Interseco
Complementao
Fecho de Kleene
Sada: uma gramtica sensvel ao contexto G3 , tal que L(G3 ) = L(G1 ) L(G2 );
Mtodo:
5 Linguagens Sensveis ao Contexto 317
2. V3 = V1 V2 ;
3. 3 = 1 2 ;
4. P3 = P1 P2 {S3 S2 , S3 S1 )}.
Sada: uma Mquina de Turing com fita limitada M3 , tal que L(M3 ) = L(M1 )
L(M2 );
Mtodo:
Algoritmo 5.6 (Fecho na interseco) Obteno de uma Mquina de Turing com fita
limitada que reconhece a interseco de duas linguagens sensveis ao contexto definidas
por Mquinas de Turing com fita limitada.
Sada: uma Mquina de Turing com fita limitada M3 , tal que L(M3 ) = L(M1 )
L(M2 );
Mtodo:
w L?
L=?
L = ?
L1 = L2 ?
L1 L2 ?
L1 L2 = ?
De todos estes, apenas o primeiro um problema que pode ser decidido no caso geral,
quaisquer que sejam w e L. Os demais constituem problemas para os quais pode no haver
soluo geral. Isso significa que determinadas combinaes de dados de entrada podem
nunca gerar uma resposta, no importa se afirmativa ou negativa. Ser apresentado aqui
apenas o primeiro desses resultados, sendo que a demonstrao de todos eles pode ser
encontrada em [46].
5 Linguagens Sensveis ao Contexto 319
4. O cursor de acesso pode se deslocar livremente sobre a fita de trabalho, exceto para
a esquerda da primeira posio da fita. Caso isso ocorra, a computao encerra-se
anormalmente.
A Figura 6.1 ilustra a configurao inicial de uma Mquina de Turing com cadeia
de entrada igual a 1 2 3 ...n . Formalmente, uma Mquina de Turing definida como:
M = (Q , , , , q0 , <, B , F )
onde:
um conjunto, tambm finito e no-vazio, de smbolos que podem ser lidos e/ou
escritos na fita de trabalho. ;
q0 o estado inicial, q0 Q ;
Ou seja, M atinge a condio de parada para toda e qualquer cadeia que lhe submetida,
no importando se esta pertence ou no a L.
Uma linguagem recursiva tambm dita linguagem decidvel. Este termo denota
o fato de que, para essa classe de linguagens, sempre existe pelo menos uma Mquina de
Turing que aceita a referida linguagem, qualquer que seja a cadeia usada como entrada
(no importa se ela pertence ou no linguagem), e que sempre pra. A parada pode
ocorrer com aceitao ou rejeio da cadeia.
Conforme ser discutido no Captulo 7, as linguagens recursivas no so a nica
classe de linguagens aceitas pelas Mquinas de Turing. Na verdade, o relaxamento da
condio de parada para cadeias no pertencentes linguagem faz com que o modelo
possa ser usado para definir uma classe mais ampla de linguagens, denominadas lingua-
gens recursivamente enumerveis.
Exemplo 6.1 A mquina M apresentada na Figura 6.2 tal que L(M ) = abc(a | b | c) .
(<, q0 , abcB ) (< a, q1 , bcB ) (< ab, q2 , cB ) (< abc, q3 , B ) (< abcB , q4 , )
(<, q0 , abccbaB ) (< a, q1 , bccbaB ) (< ab, q2 , ccbaB ) (< abc, q3 , cbaB )
(< abcc, q3 , baB ) (< abccbB , q3 , aB ) (< abccbaB , q3 , B ) (< abccbaB , q4 , )
O smbolo B usado, nestes casos, para garantir que a cadeia de entrada no contenha
smbolos estranhos ao alfabeto {a, b, c}. A cadeia , usada na configurao final dos trs casos,
formada por uma seqncia infinita de smbolos B .
A rejeio de algumas cadeias pertencentes a , porm no pertencentes a L, pode ser
ilustrada atravs dos seguintes exemplos:
(<, q0 , b)
(<, q0 , aB ) (< a, q1 , B )
Note-se que, nos casos acima, M pra sempre em configuraes no-finais, uma vez que,
respectivamente, q0 , q1 e q2 so estados no-finais.
L uma linguagem recursiva, uma vez que M sempre pra, qualquer que seja a cadeia de
entrada w que lhe seja apresentada. 2
Exemplo 6.2 A Mquina de Turing M ilustrada na Figura 6.3 aceita a linguagem L = {ww R | w
{a, b} }.
6 Linguagens Recursivas 325
a/(a, D ), b/(b, D )
a/(a, E ), b/(b, E )
X /(X , E )
B /(B , E ) a/(X , E )
q1 q2 q3
a/(X , D )
Y /(Y , E )
X /(X , D )
q0
Y /(Y , D )
X /(X , E )
b/(Y , D )
B /(B , E ) b/(Y , E )
q4 q5 q6
Y /(Y , E )
a/(a, D ), b/(b, D ) a/(a, E ), b/(b, E )
(<, q0 , bbaaaaB ) (< Y , q4 , baaaaB ) (< Yb, q4 , aaaaB ) (< Yba, q4 , aaaB )
(< Ybaa, q4 , aaB ) (< Ybaaa, q4 , aB ) (< Ybaaaa, q4 , B ) (< Ybaaa, q5 , aB )
2
Mtodo:
M = (Q , , , , q0 , <, B , F ), onde:
1. Q = Q {qloop }
2. F =
6 Linguagens Recursivas 327
3. = e, alm disso:
Mtodo:
M = (Q , , , , q0 , <, B , F ), onde:
1. F = Q
Exemplo 6.3 Seja a mquina M do Exemplo 6.1, cujo critrio de aceitao baseado em estado
final. A mquina M , equivalente a M , porm baseada em critrio de parada, apresentada na
Figura 6.4.
328 Linguagens Formais - Teoria, Modelagem e Implementao
c/(c, D ) B /(B , D )
q2 q3 q4
q0 a/(a, D ), c/(c, D ), B /(B , D )
fcil notar, neste exemplo, que as cadeias a, b e abb, rejeitadas aps parada em M , conduzem
M a uma seqncia interminvel de movimentos. Seno, vejamos:
J as cadeias aceitas por estado final em M abc, abca e abccba conduzem M a uma
situao de parada, e portanto de aceitao, segundo este critrio:
(<, q0 , abccbaB )
(< a, q1 , bccbaB )
(< ab, q2 , ccbaB )
(< abc, q3 , cbaB )
(< abcc, q3 , baB )
(< abccbB , q3 , aB )
(< abccbaB , q3 , B ) (< abccbaB , q4 , )
O caso inverso (converso do critrio de parada para o critrio de estado final) trivial e no
ser exemplificado. 2
Mltiplas trilhas:
Trata-se do caso discutido no texto da Seo 5.5, que precede o Teorema 5.4
(equivalncia das gramticas sensveis ao contexto com as Mquinas de Turing
com fita limitada). Tal extenso considera que a fita de trabalho seja substituda
por uma coleo finita de fitas, as quais so acessadas por uma quantidade idntica
de cursores de acesso, cada qual dedicado fita correspondente. Os cursores de
acesso deslocam-se todos juntos e sempre no mesmo sentido (para a esquerda ou
para a direita), sob o comando do controle finito. Os smbolos gravados em cada
fita, no entanto, podem ser distintos. Exemplo: em um dispositivo com duas fitas,
os dois cursores de acesso devem se movimentar simultaneamente para a esquerda
ou para a direita, ainda que cada fita receba a gravao de smbolos de alfabetos
distintos.
Funo de transio correspondente (para n trilhas, cada qual com o seu prprio
alfabeto i ):
: Q (1 2 ... n ) Q (1 2 ... n ) {E , D }
Mltiplas fitas:
Esta extenso assemelha-se que foi discutida para o caso de mltiplas trilhas,
com a diferena de que os cursores de acesso podem ser movimentados de forma
independente uns dos outros. Assim, o controle finito pode especificar, na movi-
mentao de uma configurao para a configurao seguinte, o comportamento de
cada cursor de acesso em sua respectiva fita de trabalho: sentido do deslocamento
e smbolo a ser gravado na respectiva fita. Por exemplo: em um dispositivo com
duas fitas, uma transio pode especificar que o cursor da primeira fita se desloque
para a esquerda, ao mesmo tempo que o cursor da segunda fita se desloque para
a direita.
Funo de transio correspondente (para n fitas, cada qual com seu prprio alfa-
beto i ):
: Q (1 2 ... n ) Q (1 {E , D }) (2 {E , D })... (n {E , D })
Mltiplos cursores:
Neste caso, uma nica fita de trabalho equipada com dois ou mais cursores de
acesso. O controle finito, por sua vez, especifica o sentido de movimentao de cada
cursor e o smbolo a ser gravado na posio da fita correntemente referenciada por
intermdio de cada cursor. Cuidado especial deve ser tomado com a possibilidade
de dois ou mais cursores referenciarem uma mesma posio da fita de trabalho,
para que sejam evitados conflitos devidos ordem em que forem gravados ou lidos
os smbolos pelos respectivos cursores de acesso.
Funo de transio correspondente (para n cursores):
: Q ( ... ) Q ( {E , D }) ( {E , D })... ( {E , D })
330 Linguagens Formais - Teoria, Modelagem e Implementao
: Q Q ({E } {D } )
: Q ( {}) Q ( {}) {E , D }
As demonstraes para os quatro casos iniciais podem ser encontradas em [46]. To-
das essas extenses podem, eventualmente, ser combinadas umas com as outras, gerando
diferentes verses da Mquina de Turing bsica. Se, por um lado, elas nada conseguem
acrescentar ao poder da Mquina de Turing original, elas podem, por outro lado, facili-
tar significativamente o projeto, a implementao e a anlise de algoritmos representados
atravs de Mquinas de Turing, assim como a demonstrao de teoremas acerca desse
tipo de dispositivos ou das linguagens por eles aceitas.
Trata-se, portanto, de uma convenincia que deve ser levada em conta e que pode
ser usada sem qualquer perigo de introduzir distores no modelo original que possam
eventualmente descaracterizar as suas propriedades fundamentais ou mesmo inviabilizar
a sua realizao prtica.
6 Linguagens Recursivas 331
Justificativa Seja L uma linguagem sensvel ao contexto. Ento, existe uma Mquina de
Turing com fita limitada M1 que aceita L:
M2 = (Q2 , , 2 , 2 , <, B , q0 , F2 )
onde:
Q2 = Q1
2 = 1
F2 = F1
(qi , B ) = (qj , B , E ),
Justificativa Basta demonstrar que existe pelo menos uma linguagem recursiva que no
sensvel ao contexto. Como instncia desse fato, podem-se citar todas as linguagens
que incluem a cadeia vazia, uma vez que, conforme foi discutido anteriormente na Seo
5.1, as linguagens sensveis ao contexto no incluem tais cadeias.
Um exemplo no-trivial, desta vez sem recorrer cadeia vazia, a linguagem LR ,
apresentada no final da Seo 5.7, quando foi empregada para demonstrar a existncia
de linguagens que no so sensveis ao contexto (Teorema 5.8).
Partindo-se (Teorema 5.7) de uma enumerao de todas as gramticas sensveis ao
contexto (G1 , G2 , ...), e tambm de uma enumerao de todas as cadeias possveis de
serem geradas sobre o alfabeto {a, b} (1 , 2 , ...), o Teorema 5.8 mostra que a linguagem
LR = {i | i 6 L(Gi ), i 1}
Mtodo:
1. Compara-se com cada uma das cadeias i , at que haja coincidncia entre
ambas;
Justificativa suficiente provar que existe pelo menos uma linguagem no-recursiva.
Essa demonstrao consiste na definio da linguagem LU , conforme abaixo, e na prova,
por contradio, de que a mesma no pode pertencer classe das linguagens recursivas.
Em outras palavras, que esta linguagem no decidvel.
LU = {C (M )w | w L(M )}
onde:
Para efeito prtico de demonstrao de uma forma de codificao que possa ser
aplicada a qualquer Mquina de Turing, com qualquer alfabeto de entrada, ser adotada
a segunda alternativa.
Apresenta-se a seguir, portanto, um esquema genrico de codificao de mquinas
e cadeias de entrada quaisquer sobre o alfabeto = {a, b, c}, escolhido arbitrariamente.
Note-se, na codificao proposta, que, apesar de o alfabeto possuir apenas trs sm-
bolos, ela permite a representao de Mquinas de Turing com qualquer quantidade
de smbolos em seu alfabeto de entrada , e tambm da prpria cadeia w a ser
processada por M .
Assim, cada uma das transies (qi , m ) = (qj , n , E ) de M poder ser represen-
tada como:
Se 6= , ento codifica-se ;
x /(x , D ) B /(B , E )
q0 q1 q2
Tal modificao de fcil realizao: basta fazer com que M1 , ao atingir uma
configurao de aceitao, transite para um novo estado, criado especialmente para essa
finalidade, em M2 , e l permanea indefinidamente lendo smbolos na fita de entrada e
deslocando o cursor de acesso para a direita.
Seja M3 uma Mquina de Turing com fita limitada que duplica a cadeia fornecida
como entrada. Se a cadeia sobre a fita de entrada , ao trmino do processamento a
fita de trabalho conter , conforme a Figura 6.12:
ou ainda:
A Figura 6.15 remete a uma contradio: por um lado, temos a informao de que,
ao analisar a cadeia C (M4 ), se a mquina M4 parar, ento M4 executa uma seqncia
infinita de movimentaes. Por outro, que ao analisar a cadeia C (M4 ), se M4 no parar,
ento M4 pra. Tem-se, portanto, uma contradio. Logo, a nossa hiptese inicial no
vlida, ou seja, LU no pode ser uma linguagem recursiva.
6 Linguagens Recursivas 339
w0 w1 w2 ... wn ...
l l l l
M0 M1 M2 ... Mn ...
Unio
Concatenao
Complementao
Interseco
resultado este que no ser demonstrado neste texto, podendo ser encontrado em [46].
340 Linguagens Formais - Teoria, Modelagem e Implementao
Teorema 6.6 (Fecho na unio) A classe das linguagens recursivas fechada em rela-
o operao de unio.
Mtodo:
Mtodo:
Mtodo:
L1 = ?
L1 = ?
L1 = L2 ?
L1 L2 ?
L1 L2 = ?
7.1 Decidibilidade
Um problema de deciso um problema cuja formulao conduz a apenas duas respos-
tas possveis: SIM ou NO. Exemplo: dadas duas linguagens regulares L1 e L2 quaisquer,
sempre possvel determinar se L1 = L2 ? Para cada par de linguagens considerado, este
problema admite apenas uma resposta entre duas possveis.
Uma instncia de um problema um caso particular de um problema geral,
com seus argumentos completamente definidos. Exemplo: dadas a linguagem regular L1
(segue a especificao de L1 ) e a linguagem regular L2 (segue a especificao de L2 ), ser
que L1 = L2 ?
344 Linguagens Formais - Teoria, Modelagem e Implementao
Uma das fitas usada apenas para a gravao de cadeias geradas sobre o alfabeto
. Nessa fita, o cursor de acesso desloca-se apenas para a direita, smbolos podem
apenas ser gravados, e cadeias consecutivas so separadas pelo smbolo #, no
pertencente a .
Mtodo:
Mtodo:
Comprimento 1: a, b
...
348 Linguagens Formais - Teoria, Modelagem e Implementao
Comprimento n: a n , a n1 b, ..., b n1 a, b n
...
2
Alm disso, como w L, tambm fato que w aceita por uma Mquina de Turing
M aps um nmero limitado de movimentaes que levam M desde a sua configurao
inicial at uma configurao final qualquer. Supondo que M seja determinstica, e sendo
|w | = k , w aceita apenas na k -sima configurao assumida por M .
Defina-se a funo parcial : Z+ Z+ da seguinte forma: se i L, |i | = j
e i aceita por uma Mquina de Turing M determinstica (neste caso, aps j configu-
raes), ento associa o par (i, j ) com a cadeia i . A funo injetora e sobrejetora,
pois no existem dois pares que possam ser associados com a mesma sentena, e todas
as sentenas de L esto associadas com exatamente um par.
Considere-se um certo par (p, q) escolhido ao acaso. Se p L, certo que p
aceita por M aps um certo nmero de movimentaes. Se este nmero for q, a cadeia p
ser enumerada. Caso contrrio, ela ser descartada, at que o par correto seja sorteado
(note-se que para cada valor de p existe uma quantidade infinita de pares com este valor
no primeiro elemento da dupla: ...(p, q 2), (p, q 1), (p, q), (p, q + 1), (p, q + 2)... etc.).
O objetivo agora o de construir uma Mquina de Turing N que, partindo de uma
seqncia de todos os pares ordenados (i, j ), i 1, j 1, em que cada (i, j ) ocorre uma
nica vez, testar sistematicamente se a cadeia i aceita por M em j movimentos. Em
caso afirmativo, i ser enumerada. Em caso afirmativo ou negativo, um novo par
considerado e um novo teste efetuado.
Dessa forma, evita-se testar i em M de forma contnua, at que M pare (conforme
a proposta do Algoritmo 7.2), pois isso poderia causar problemas no caso de linguagens
estritamente recursivamente enumerveis. Nessa nova tcnica, o teste de cada i efe-
tuado apenas durante uma seqncia limitada de configuraes (porm suficiente para
a sua aceitao, caso a cadeia pertena linguagem), evitando-se dessa maneira a ocor-
rncia de eventuais seqncias interminveis de movimentaes. Assim, a sentena i
enumerada apenas quando o par (i, j ) correspondente tiver sido considerado.
A fim de garantir a enumerao sistemtica de todas as sentenas de L, necessrio
considerar a gerao e o teste sistemtico de todos os pares (i, j ), sem repetio, um de
cada vez. Conforme estudado no Captulo 1 (ver Exemplo 1.54), o conjunto desses pares
pode facilmente ser enumerado considerando-se a organizao em que os pares cuja soma
representa os mesmos valores so agrupados em ordem crescente do valor da soma e,
dentro de cada um desses grupos, na ordem descrescente do primeiro termo e crescente
do segundo:
Soma 2: (1, 1)
Soma 6: (5, 1), (4, 2), (3, 3), (2, 4), (1, 5)
...
...
Por outro lado, dado um valor de i, ser necessrio gerar a cadeia i correspondente.
possvel, sem grande dificuldade, demonstrar a existncia de Mquinas de Turing que
realizam essas duas tarefas, e que sero embutidas em N . O Algoritmo 7.3 corresponde
verso revisada do Algoritmo 7.2.
Algoritmo 7.3 (Enumeradas recursivamente enumerveis, verso 2) Reviso
do Algoritmo 7.2 que evita seqncias infinitas de movimentaes, sendo portanto ade-
quada para linguagens estritamente recursivamente enumerveis.
Mtodo:
2. N gera a cadeia i ;
Como o nmero de passos necessrios para a gerao de cada par (i, j ) e de cada
cadeia i finito, o mesmo ocorrendo com o nmero de passos alocado para testar cada
i em M , e como, alm disso, todos os pares (i, j ) so considerados (o que significa dizer
que todas as cadeias de so consideradas), pode-se afirmar que N enumera todas as
sentenas de L, e apenas essas.
Se L for uma linguagem recursiva, e apenas neste caso, N enumera as sentenas de
L em ordem lexicogrfica, na seqncia de comprimento crescente.
smbolos menor que o lado esquerdo correspondente (). Isso faz com que possa haver
reduo no tamanho das formas sentenciais durante o processo de derivao de sentenas.
Alguns autores consideram um formato ainda mais geral para as regras das gra-
mticas irrestritas: V + , V . Este formato permite que o lado esquerdo das
regras seja formado por qualquer combinao de smbolos terminais e no-terminais, in-
cluindo cadeias formadas exclusivamente por smbolos terminais, o que no permitido
no formato aqui adotado.
Na verdade, ambas as definies so equivalentes, podendo ser usadas indistinta-
mente. A converso de regras do formato mais geral ( V + , V ) para o formato
menos geral ( V NV , V ) pode ser feita aplicando-se a tcnica utilizada na
demonstrao do Teorema 5.1, em que novos smbolos no-terminais so criados e subs-
tituem todas as ocorrncias de smbolos terminais, e a gramtica acrescida de produes
unitrias que convertem cada um desses novos smbolos no-terminais nos smbolos ter-
minais correspondentes.
Exemplo 7.2 A gramtica G1 = ({S , A, B , C , a, b, c}, {a, b, c}, P1 , S ), com P1 :
{S aAbcC
bc B
ABC b}
pode ser facilmente convertida para G2 = ({S , A, B , C , X , Y , Z , a, b, c}, {a, b, c}, P2 , S ), com P2 :
{S XAYZC
YZ B
ABC Y
X a
Y b
Z c}
2
{S aAbc
A aAbC |
Cb bC
Cc cc}
S aAbc abc
{S aBSa | aBXa
Ba aB
BX Xb
aX a}
ii. Incorporao da produo (1), caso a cadeia vazia faa parte da linguagem;
iii. Substituio dos smbolos terminais por novos smbolos no-terminais e incorpo-
rao de novas produes da forma (2), uma para cada smbolo terminal de G1 ;
352 Linguagens Formais - Teoria, Modelagem e Implementao
Algoritmo 7.4 (Forma normal para gramticas irrestritas) Obteno de uma gra-
mtica irrestrita na forma normal.
Mtodo:
1. Incio:
Sendo N1 = V1 e N2 = V2 , faz-se:
N2 N1
P2
2. Etapa (i):
Eliminam-se as produes da forma A contidas em P1 :
P2 P2 {XA X , AX X , A , A | A P1 , X
N1 , }
3. Etapa (ii):
Incorporao da cadeia vazia, se for o caso:
P2 P2 {S , se L(G1 )}
4. Etapa (iii):
Eliminao dos terminais originais e sua substituio por no-terminais cor-
respondentes:
N2 N2 {X , }
P2 P2 {X , 1 X 2 | 1 2 P1 , , 1 , 2
V1 }
P2 P2 {X , 1 2 | 1 2 P1 , , 1 , 2
V1 }
5. Etapa (iv):
Eliminao das produes , || | |:
7 Linguagens Recursivamente Enumerveis 353
Fazer:
N2 N2 {Xi , 1 i n 1}
P2 P2
{A1 B1 X1
X1 A2 B2 X2
X2 A3 B3 X3
...
Xm2 Am1 Bm1 Xm1
Xm1 Am Bm Xm
Xm Bm+1 Xm+1
Xm+1 Bm+2 Xm+2
...
Xn2 Bn1 Xn1
Xn1 Bn }
Fazer:
N2 N2 {Xi , 1 i n m 1} {Yj , 0 j n 2}
P2 P2
{An1 An X0 Y0 , X0 Y0 Y0 ,
An2 Y0 X1 Y1 , X1 Y1 Y1 ,
An3 Y1 X2 Y2 , X2 Y2 Y2 ,
...
Am Ynm2 Xnm1 Ynm1 , Xnm1 Ynm1 Ynm1 Bm ,
Am1 Ynm1 Ynm Bm1 ,
Am2 Ynm Ynm+1 Bm2 ,
...
A1 Yn2 Yn2 B1 , Yn2 B1 B1 }
7. Trmino:
As produes do tipo AB CD geradas nas etapas (iv ) e (v ) devem
ainda ser substitudas por um conjunto de produes equivalente, porm
em conformidade com as formas (3), (4), (5), (6) e (7):
354 Linguagens Formais - Teoria, Modelagem e Implementao
N2 N2 {X , Y }
P2 P2 {AB AY , AY XY , XY XD , XD CD }
{A1 B1 X1 , (7.1)
X1 A2 B2 X2 , (7.2)
X2 A3 B3 X3 , (7.3)
X3 B4 X4 , (7.4)
X4 B5 X5 , (7.5)
X5 B6 X6 , (7.6)
X6 B7 } (7.7)
{X1 A2 X1 N ,
X1 N MN ,
MN MX2 ,
MX2 B2 X2 }
Transformao semelhante deve ser aplicada na produo (7.3), pois as demais j se encontram
enquadradas nos formatos originalmente propostos. 2
{A6 A7 X0 Y0 , (7.8)
X0 Y0 Y0 , (7.9)
A5 Y0 X1 Y1 , (7.10)
X1 Y1 Y1 , (7.11)
A4 Y1 X2 Y2 , (7.12)
X2 Y2 Y2 , (7.13)
A3 Y2 X3 Y3 , (7.14)
X3 Y3 Y3 B3 , (7.15)
A2 Y3 X4 Y4 , (7.16)
X4 Y4 Y4 B2 , (7.17)
A1 Y4 Y5 B1 , (7.18)
Y5 B1 B1 } (7.19)
A1 X4 Y4 B3 A1 Y4 B2 B3 Y5 B1 B2 B3 B1 B2 B3
Para completar, a produo (7.8) deve ainda ser substituda pelo conjunto:
{A6 A7 A6 N ,
A6 N MN ,
MN MY0 ,
MY0 X0 Y0 }
Transformaes semelhantes devem ser aplicadas s produes (7.10), (7.12), (7.14), (7.15),
(7.16), (7.17) e (7.18). Assim, todas as produes resultantes se enquadram nas formas originalmente
propostas. 2
- Na primeira fita est inicialmente gravada a cadeia w que se deseja examinar para
determinar se ela pertence ou no a L;
1. Determinar todos os pares (i, ) tais que, a partir da posio i da cadeia z , seja
possvel identificar uma subcadeia , tal que 1 | 2 | ... | n P , sendo P o
conjunto das regras de G gravado na segunda fita de trabalho;
2. Para cada par (i, ) obtido no passo (1), criar um novo thread para M , e deslocar
o respectivo cursor de acesso da fita nmero 3 at a posio i; encerrar o thread
original na configurao de rejeio;
Mtodo:
Inicialmente so gerados os smbolos no-terminais de G. Esses smbolos possuem
o formato geral [, ], onde , uma cadeia sobre {, q, <, #} e q Q .
A primeira destas duas componentes do smbolo [, ...] representa um certo
terminal da cadeia de entrada. Sua segunda componente [..., ] representa
parte da configurao assumida pela Mquina de Turing no reconhecimento da
referida cadeia de entrada.
Os conjuntos P e S de G so inicialmente definidos como:
I. P {S [i , < q0 i ]A, i }
N {S , A, [i , < q0 i ], i }
XIII;
XIX;
N N {[r , qi m ], r }
N N {[p , < qj q ], p , q }
N N {[r , n ], r }
XXIX. P P {B # #}
XXX. P P {i # i , i }
A inspeo das produes geradas nos itens I a XXX (em particular nos itens XXIX
e XXX) permite concluir que toda e qualquer gramtica gerada por esse mtodo uma
gramtica irrestrita. Ser omitida a demonstrao formal da equivalncia das Mquinas
de Turing com as gramticas irrestritas assim construdas. Tal demonstrao pode, no
entanto, ser encontrada em [52].
= {x , y, z }
= {x , y, z , X , Y , Z , B }
{(q0 , x ) (q1 , X , D), (q1 , y) (q2 , Y , D), (q2 , z ) (q3 , Z , D),
(q3 , B ) (q4 , x , D), (q4 , B ) (q5 , B , D), (q5 , B ) (q6 , y, D),
(q6 , B ) (q7 , B , D), (q7 , B ) (q8 , z , D), (q8 , B ) (q9 , B , E ),
(q9 , z ) (q10 , z , E )}
(q10 , B ) =
{q10 } F
A seqncia de movimentos abaixo ilustra a aceitao da cadeia xyz por M :
(<, q0 xyz ) (< X , q1 yz ) (< XY , q2 z ) (< XYZ , q3 B )
(< XYZx , q4 B ) (< XYZxB , q5 B ) (< XYZxBy, q6 B ) (< XYZxByB , q7 B )
(< XYZxByBz , q8 B ) (< XYZxByB , q9 zB ) (< XYZxBy, q10 BzB )
7 Linguagens Recursivamente Enumerveis 363
A seqncia de derivaes abaixo mostra as formas sentenciais geradas por uma gramtica
irrestrita G, correspondentes aos movimentos de M acima. As produes e os smbolos no-terminais
utilizados foram derivados diretamente da especificao de M , conforme o Algoritmo 7.5. Note-se
que S xyz , e portanto xyz L(G).
S
[x , < q0 x ]A
[x , < q0 x ][y, y]A
[x , < q0 x ][y, y][z , z #]
[x , < X ][y, q1y][z , z #]
[x , < X ][y, Y ][z , q2 z #]
[x , < X ][y, Y ][z , Z ][B , q3 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , q4 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , q5 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , q6 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , B ][B , q7 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , B ][B , z ][B , q8 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , B ][B , q9 z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , q10 B ][B , z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y]B [B , z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ]BB [B , z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ]BBB [B , B #]
[x , < X ][y, Y ][z , Z ][B , x ]BBBB [B , B #]
[x , < X ][y, Y ][z , Z ][B , x ]BBBBB #
[x , < X ][y, Y ][z , Z ]BBBBBB #
[x , < X ][y, Y ]zBBBBBB #
[x , < X ]yzBBBBBB #
xyzBBBBBB #
xyzBBBBB #
xyzBBBB #
xyzBBB #
xyzBB #
xyzB #
xyz #
xyz
2
LU = {C (M )w | w L(M )}
onde
Entrada: a linguagem LU ;
Mtodo:
Entrada: a linguagem LK ;
Mtodo:
2. i 0;
3. N gera a cadeia i ;
6. i i + 1;
N gera, uma por uma, porm uma de cada vez, todas as cadeias i , ordenadas
lexicograficamente. Uma vez identificado o valor de i para a cadeia de entrada fornecida
(o que acontece aps um tempo finito de processamento), N gera Mi e verifica se Mi
aceita i . N aceita a cadeia de entrada w se e apenas se i (w ) for aceita por Mi . Logo,
LK recursivamente enumervel.
366 Linguagens Formais - Teoria, Modelagem e Implementao
{a, b, c}
Qualquer que seja o alfabeto finito utilizado, sabe-se que o conjunto enu-
mervel. Uma maneira fcil de perceber isso considerar a ordenao lexicogrfica das
cadeias geradas sobre , conforme foi feito na demonstrao do Teorema 7.2. Para gerar
tal ordenao, suficiente convencionar uma relao de ordem entre os elementos de .
O estabelecimento de uma bijeo entre o conjunto dos nmeros naturais N e o conjunto
imediato. Logo, enumervel.
Por outro lado, nem toda cadeia sobre representa uma Mquina de Turing vlida.
O conjunto que interessa a este estudo , portanto, um subconjunto de . Conforme o
Teorema 1.4, qualquer subconjunto de um conjunto enumervel tambm enumervel.
Logo, C1 um conjunto enumervel.
Teorema 7.9 (Gramticas so enumerveis) O conjunto C2 = {G | G uma gra-
mtica e L(G) } enumervel. C2 corresponde ao conjunto de todas as gramticas
definveis sobre um certo alfabeto .
Justificativa O Teorema 1.3 garante que, para qualquer conjunto A, finito ou infinito, a
cardinalidade de A sempre inferior cardinalidade de 2A . Logo, a cardinalidade de
menor do que a cardinalidade de 2 .
A demonstrao da existncia de linguagens no-gramaticais, e portanto da relao
de incluso prpria da classe das linguagens recursivamente enumerveis com a classe
das linguagens formadas sobre alfabetos, feita a seguir.
Teorema 7.11 (Linguagens no-recursivamente enumerveis) Existem linguagens
que no so recursivamente enumerveis.
LN = LU = {C (M )w | w 6 L(M )}
368 Linguagens Formais - Teoria, Modelagem e Implementao
Se a condio (1) for verdadeira, ento C (MN )wN 6 LN , ou seja, C (MN )wN 6
L(MN ), o que uma contradio com (1). Se, por outro lado, a condio (2) for ver-
dadeira, ento C (MN )wN LN , ou seja, C (MN )wN L(MN ), o que tambm uma
contradio com (2).
Logo, a hiptese original no vlida e, portanto, LN no pode ser recursivamente
enumervel.
Outra linguagem clssica, que no recursivamente enumervel, a linguagem:
LD = LK = {wi | wi 6 Mi }
Assim como a linguagem LK discutida no Teorema 6.5, ela supe uma certa orde-
nao (por exemplo, lexicogrfica) das cadeias wi sobre um certo alfabeto , e tambm
do conjunto das Mquinas de Turing sobre o mesmo alfabeto. Diferentemente de LK , no
entanto, ela compreende as cadeias wi que no so aceitas pelas Mquinas de Turing Mi
correspondentes.
Teorema 7.13 (LD no-gramatical) A linguagem LD no-gramatical.
1. wD L(MD ), ou
2. wD 6 L(MD ).
verdadeira, por outro lado, ento wD LD . Mas como LD = L(MD ), isso implica
wD L(MD ), uma contradio com (2).
Como a contradio acontece em ambos os casos, conclui-se que a hiptese inicial
falsa e, portanto, que LD no pode ser gramatical.
Unio
Concatenao
Fecho de Kleene
Interseco
Complementao
Mtodo:
Mtodo:
Mtodo:
1. V2 V1 {S2 }
2. P2 P1 {S2 S1 S2 , S2 }
Mtodo:
Justificativa suficiente mostrar que existe pelo menos uma linguagem recursivamente
enumervel cujo complemento no recursivamente enumervel.
A linguagem LU = {C (M )w | w L(M )}, conforme demonstrado nos Teore-
mas 6.4 e 7.7, um exemplo de linguagem recursivamente enumervel, no-recursiva. Seu
372 Linguagens Formais - Teoria, Modelagem e Implementao
Mtodo:
Qualquer que seja a cadeia de entrada w , certo que, aps um nmero finito
de movimentaes, ou M1 ou M2 , de maneira exclusiva, aceitar w . Se w for aceita por
M1 , ento ser aceita por M3 . Se w for aceita por M2 , ento ser rejeitada por M3 .
Logo, M3 aceita w se e somente se w L1 , e rejeita w se e somente se w L2 , ou
seja, se w 6 L1 . Logo, L1 uma linguagem recursiva.
7 Linguagens Recursivamente Enumerveis 373
w L?
L=?
L = ?
L1 = L2 ?
L1 L2 ?
L1 L2 = ?
terminada propriedade ou, ainda, que a questo no decidvel para aquela classe de
linguagens.
Adaptatividade
[2] Adaptive automata for context-dependent languages, J. J. Neto, ACM SIGPLAN Notices,
v.29, n.9, 1994
[3] Adaptive automata for syntax learning, J. J. Neto and M. K. Iwai, XXIV Conferencia Latino-
americana de Informtica, Quito Ecuador, Centro Latinoamericano de Estudios en Informtica,
Pontificia Universidad Catlica del Ecuador, tomo 1, 1998
[4] Solving complex problems efficiently with adaptative automata, J. J. Neto, CIAA 2000
Fifth International Conference on Implementation and Application of Automata, London, Ontario,
Canada, 2000
[7] Dynamic parsers and evolving grammars, S. Cabasino, P. S. Paolucci and G. M. Todesco,
ACM SIGPLAN Notices, v.27, n.11, 1992
[8] A survey of adaptable grammars, H. Christiansen, ACM SIGPLAN Notices, v.25, n.11, 1990
[22] A formalization of transition diagram systems, D. B. Lomet, Journal of the ACM, 20, 2,
1973
[23] Reconhecedores sintticos uma alternativa didtica para uso em cursos de enge-
nharia, J. J. Neto e M. E. S. Magalhes, Anais do XIV CNPD, So Paulo, 1981
Compiladores
[25] Compiler construction: an advanced course, Editado por F. L. Bauer e J. Eickel, Springer-
Verlag, 1976 - Segunda edio
[26] The theory and practice of compiler writing, J. P. Tremblay and P. G. Sorenson, McGraw-
Hill, 1985
[28] Compilers: Principles, techniques and tools, A. V. Aho, R. Sethi and J. D. Ullman,
Addison-Wesley, 1986; Segunda edio: A. V. Aho, M. S. Lam, R. Sethi and J. D. Ullman,
2007
[29] Programming language processors in Java: Compilers and interpreters, D. A. Watt and
D. F. Brown, Prentice-Hall, 2000
[31] The syntax and semantics of the proposed international algebraic language of the
Zurich ACM-GAMM Conference, J. W. Backus, Proc. of the International Conference on
Information Processing, UNESCO, 1959
[32] Report on the algorithmic language Algol 60, P. Naur, Communications of the ACM 3:5,
1960
[33] Revised report on the algorithmic language Algol 60, P. Naur, Communications of the
ACM 6:1, 1963
[34] Revised report on the Algorithmic Language Algol 68, A. V. Wijngaarden, Acta Informa-
tica, v.5, n.1-3, 1975
[35] What can we do about the unnecessary diversity of notation for syntactic definitions?,
N. Wirth, CACM, Vol. 20, issue 11, November 1977, pp. 822-823
[36] Extended BNF, International Standards Organization, ISO/IEC 14977, Primeira edio, 1996
[38] Grammars with regulated rewriting, J. Dassow, Em Formal languages and applications,
C. Martin-Vide, V. Mitrana e Gh. Paun, Studies in Fuzziness and Soft Computing 148, Springer-
Verlag, Berlin, 2004
[39] Regulated rewriting in formal language theory, J. Dassow, Gh. Paun, Akademie-Verlag,
Berlin e Springer-Verlag, Berlin, 1989
[40] Grammars with controlled derivations, J. Dassow, Gh. Paun, A. Salomaa. Em Handbook
of formal languages I III, G. Rozenberg, A. Salomaa, Volume II, Chapter 3, Springer-Verlag,
1997
[42] Some problems of finite representability, E. Altman, R. Banerji, Information and Control,
8, 1965
[47] Formal languages and their relation to automata, J. E. Hopcroft and J. D. Ullman, Addison
Wesley, 1969
384 Linguagens Formais - Teoria, Modelagem e Implementao
[48] Languages and machines, T. A. Sudkamp, Addison Wesley, 1988; Terceira edio: 2006
[49] The theory of parsing, translation and compiling, volume 1, A. V. Aho and J. D. Ullman,
Prentice-Hall, 1972
[56] Discrete structures, logic and computability, J. L. Hein, Jones and Bartlett, 2002
[57] Contribution to the founding of the theory of transfinite numbers, G. Cantor, Dover
Publications, 1955
[58] An introduction to formal languages and automata, P. Linz, Jones and Bartlett, 2001;
Quarta edio: 2006
[59] Handbook of theoretical computer science, vol.B: Formal models and semantics, J.
van Leeuwen, Elsevier Science Publishers, 1990
[60] Representation of events in nerve nets and finite automata, S. C. Kleene, Automata
Studies, Princeton University Press, 1956
[61] Three models for the description of language, N. Chomsky, IRE Transactions on Information
Theory 2, 1956
[62] On certain formal properties of grammar, N. Chomsky, Information and Control 2, 1959
[63] A new normal form theorem for context-free phrase structure grammars, S. A. Grei-
bach, Journal of the ACM, 12:1
[65] Classes of languages and linear bounded automata, S. Y. Kuroda, Information and Control
7:2, 1964
Modelagem e UML
Ruby