Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagens Formais e Autômatos
Linguagens Formais e Autômatos
Sumrio
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
10
12
17
20
22
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
31
31
33
45
49
50
61
3 Linguagens Regulares
3.1 Gramticas Regulares . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Conjuntos e Expresses Regulares . . . . . . . . . . . . . . . . .
3.3 Autmatos Finitos . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Equivalncia entre Gramticas Regulares e Conjuntos Regulares
3.5 Equivalncia entre Gramticas Regulares e Autmatos Finitos . .
3.6 Minimizao de Autmatos Finitos . . . . . . . . . . . . . . . . .
3.7 Transdutores Finitos . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 Linguagens que no so Regulares . . . . . . . . . . . . . . . . .
3.9 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . .
3.10 Questes Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
67
67
72
76
118
129
140
153
157
163
172
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
181
182
187
192
194
200
211
219
233
245
246
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
253
259
262
268
. . . . . . . .
. . . . . . . .
. . . . . . . .
ao Contexto
. . . . . . . .
. . . . . . . .
. . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
321
321
326
328
331
332
339
342
381
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 novamente. Por outro lado, o conjunto {, , , } igual ao conjunto {, , , }, uma vez que
no existe relao de ordem entre os elementos que os compem.
2
Um smbolo corresponde a uma representao grfica nica e indivisvel. Se formado por caracteres, um smbolo pode ser composto por um nmero arbitrrio deles.
Exemplo 1.2 So exemplos de smbolos: a, abc, , 1 etc.
Exemplo 1.12 Para A = {0, 1, 2}, temos 2A = {, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}}.
Alm disso, |A| = 3 e |2A | = 23 = 8.
2
i=0
Ai = A0 A1 A2 ... An
i=0
Ai = A0 A1 A2 ... An
Exemplo 1.15 Os conjuntos {a, b, c} e {c, d } no so disjuntos, pois {a, b, c} {c, d } = {c} =
6 { }.
Os conjuntos {a, b} e {c, d } so disjuntos, pois {a, b} {c, d } = .
2
|A B | = |A | | B | = 3 2 = 6
Partio: Define-se partio de um conjunto A como sendo qualquer coleo formada por n subconjuntos no-vazios de A, n 1, tal que:
n,j
n
n
[
[
[6=i
A=
Ai e
Ai Aj =
i=0
i=0
j =0
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
10
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, consistindo, sempre, em subconjuntos definidos sobre o produto cartesiano dos conjuntos participantes 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 .
11
Reflexiva: se aRa, a A;
Por outro lado, a relao binria maior (>), definida como o conjunto dos pares
ordenados cujas primeiras componentes tenham valor maior que as segundas componentes, aplicada sobre o mesmo conjunto Z, revela-se no-reflexiva, pois no verdade que
a > a, a Z; no-simtrica, j que a > b no implica b > a, a e b Z; porm ela
transitiva, uma vez que a > b e b > c implica a > c, a, b, c Z.
Uma relao que seja simultaneamente reflexiva, simtrica e transitiva denominada
relao de equivalncia. Se R uma relao de equivalncia sobre um conjunto A,
ento R estabelece uma partio do conjunto A.
Suponha-se que R seja uma relao binria sobre A, e Ai , i 0, uma partio de
A induzida por R. Ento, valem as seguintes propriedades:
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 .
:
=
{(a, b) Z Z | a 2 = b 2 }
{(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
A1
A2
An
=
=
=
...
=
...
{0, 0}
{1, 1}
{2, 2}
{n, n}
12
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 (codomnio) definida como uma relao R entre esses conjuntos, de modo que:
(a, b), (a, c) R, b = c
Portanto, o termo funo refere-se um tipo particular de relao, em que cada
elemento do domnio est associado a, no mximo, um nico elemento do co-domnio.
Em outras palavras, toda funo uma relao, mas nem toda relao uma funo.
Denota-se uma funo f entre dois conjuntos X e Y por:
f :X Y
Exemplo 1.26 Considere-se f1 e f2 definidas abaixo:
f1
f2
=
=
{(1, 5), (2, 3), (4, 5), (8, 1), (7, 3)}
{(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 .
13
14
Uma funo se diz uma funo total (denotada pelo smbolo ) quando especifica associaes para todos os elementos do conjunto domnio, sem exceo. Formalmente:
x X , y Y | y = f (x )
Exemplo 1.29 A Figura 1.5 ilustra o conceito de funo total.
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.31 A Figura 1.6 ilustra o conceito de funo parcial.
15
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
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 denominao de funo bijetora.
16
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:
/ : R R R. No injetora, pois existem vrios casos em que a diviso de dois nmeros reais corresponde ao mesmo nmero real (por exemplo, os casos ((10.0,2.5),4.0) e
((20.0,5.0),4.0)). sobrejetora, pois todos os nmeros reais podem ser expressos como a
diviso de dois outros nmeros reais (por exemplo, todos os casos ((x,1.0),x)). No total,
pois a diviso no definida quando o denominador zero (por exemplo, ((1,0),?)).
+:NNN
/ :RRR
:ZZ
Injetora?
No
No
Sim
Sobrejetora?
Sim
Sim
No
Total?
Sim
No
No
17
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 representao 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 , A1 )
{0, 1, 2, 3}
{(0, 1), (0, 2), (0, 3), (1, 3), (2, 3)}
18
Um grafo orientado dito ordenado quando houver uma relao de ordem prconvencionada 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 , A2 )
{a, b, c, d }
{(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, indicandose assim a ordenao relativa dos arcos que partem de um mesmo vrtice:
19
1
1
Trs importantes conceitos esto relacionados a grafos orientados, sejam eles ordenados 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 determinado 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 predecessor 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):
NS (a) = 3, NS (b) = 1, NS (c) = 2, NS (d ) = 1
NE (a) = 1, NE (b) = 2, NE (c) = 2, NE (d ) = 2
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, caracterizase a rotulao de vrtices ou ento a rotulao de arcos do grafo.
20
G3
V3
A3
(V3 , A3 )
{0, 1, 2}
{(0, 1), (1, 2), (0, 2)}
0/
1/
2/
Ordenados / No-ordenados
Orientados
/
No-orientados
Cclicos / Acclicos
Grafos
Rotulados / No-rotulados
1.5 rvores
21
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 denominados 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 iniciado 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
V00
V1
V01
V10
V11
22
Induo Matemtica
O princpio da induo matemtica foi estabelecido com o intuito de permitir a generalizao de uma propriedade P para um conjunto infinito de elementos X. Informalmente,
induo definida como uma operao mental que consiste em se estabelecer uma verdade 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:
23
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
Exemplo 1.46 Demonstrar, por induo, que P2 (n) :
0
X
i=
i =0
Base da induo:
n = 0.
P2 (0) :
n
X
i=
i =0
n(n + 1)
.
2
0(0 + 1)
=0
2
Hiptese indutiva:
P2 (k ) :
k
X
i =0
i=
k (k + 1)
,k 0
2
Passo indutivo:
P2 (k ) implica P2 (k + 1), k 0.
Prova:
Pela hiptese indutiva:
k
X
i =0
i=
k (k + 1)
,k 0
2
i + (k + 1) =
k+1
X
i =0
i=
k (k + 1)
+ (k + 1)
2
k (k + 1)
k 2 + k + 2k + 2
k 2 + 3k + 2
Desmembrando:
+ (k + 1) =
=
2
2
2
(k + 1)(k + 2)
(k + 1)((k + 1) + 1)
k 2 + 3k + 2
Fatorando:
=
=
2
2
2
24
Logo:
k+1
X
i=
i =0
(k + 1)((k + 1) + 1)
= P2 (k + 1)
2
0
X
i =
i =0
!2
!2
i =0
Hiptese indutiva:
k
X
k
X
i =
i =0
n
X
i =
i =0
Base da induo:
n = 0.
0
X
i =0
n
X
i =0
!2
,n 0
=0
,k 0
Passo indutivo:
P3 (k ) implica P3 (k + 1), k 0.
Prova:
Pela hiptese indutiva:
k
X
k
X
i =
i =0
i =0
!2
,k 0
k
X
i + (k + 1) =
i =0
i =0
!2
Logo:
k
X
i =0
!2
n
X
i =0
+ (k + 1) =
2
k+1
X
+ (k + 1)3 =
i3
i =0
n(n + 1)
,n 0
i=
2
k (k + 1)
2
2
+ (k + 1)3
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
+ (k + 1)(k + 1)2 = (k + 1)2
Fatorando:
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
!
Como:
Ento:
(k + 1)
k
X
i =0
k + 2 2
2
i + (k + 1) =
k+1
X
i =0
(k + 1)
i =
k+1
X
i =0
(k + 1) + 1
2
i
!2
2
k+1
X
i =0
= P3 (k + 1)
2
Os Exemplos 1.45, 1.46 e 1.47 demonstram a validade de proposies sobre subconjuntos dos nmeros naturais. Na prtica, no entanto, proposies sobre outros tipos de
conjuntos, e no apenas N, podem ser formuladas, mantendo-se a aplicabilidade integral
dos princpios e das tcnicas ilustradas nos exemplos.
Contradio
Uma outra tcnica bastante popular utilizada na demonstrao de teoremas a demonstrao por contradio.
25
A essncia da tcnica da demonstrao por contradio (ou reduo ao absurdo) consiste em adotar como base da demonstrao a negao da hiptese formulada
e, atravs de manipulaes lgicas, mostrar que a negao dessa hiptese conduz a um paradoxo, muitas vezes correspondente sua prpria contradio. Dessa forma, a hiptese
efetuada no pode ser considerada falsa, devendo, portanto, ser considerada verdadeira.
Exemplo 1.48 Deseja-se provar, por reduo ao absurdo, que 2 no pode ser expressa como um
nmero racional, ou seja, como frao cujo numerador e denominador, respectivamente p e q, so
nmeros inteiros (conforme [54]). Admitindo-se a hiptese como verdadeira (negao da hiptese
original), ento:
p
2=
q
Pode-se considerar, sem perda de generalidade, que p e q no possuem fatores comuns. Caso
haja fatores comuns, simplifica-se a frao antes de iniciar o procedimento. Elevando-se ambos os
lados da igualdade ao quadrado, obtm-se:
p2
2 = 2 , ou p 2 = 2q 2
q
Portanto, p 2 e, conseqentemente, p so nmeros pares. Substituindo-se p por 2m na equao
acima, temos:
(2m)2 = 2q 2 , ou q 2 = 2m 2
Isso mostra que q 2 e, portanto, q tambm so nmeros pares. Ora, se p e q so pares, isso
contradiz a hiptese original de que entre eles no haveria fatores comuns. Dessa forma, a hiptese
no pode ser verdadeira, concluindo-se que a raiz quadrada de 2 no pode ser um nmero racional.2
De que forma seria, por outro lado, possvel comparar o tamanho de dois conjuntos
infinitos? Assim como no caso dos conjuntos finitos, dois conjuntos infinitos tambm
podem possuir a mesma cardinalidade, bastando para isso que seja possvel identificar
uma correspondncia biunvoca entre os elementos de ambos os conjuntos.
Formalmente, diz-se que dois conjuntos A e B quaisquer, finitos ou infinitos, possuem a mesma cardinalidade, ou seja, |A| = |B |, se for possvel definir entre eles uma
funo bijetora.
Exemplo 1.50 Sejam A = {a, b, c} e B = {7, 3, 6}. Neste exemplo, A e B possuem a mesma
cardinalidade, pois |A| = |B | = 3. Note-se que possvel definir uma funo bijetora de A para B :
{(a, 7), (b, 3), (c, 6)}. Naturalmente, muitas outras funes bijetoras tambm podem ser definidas
entre esses dois conjuntos.
2
26
Z
N
0
0
1
1
-1
2
2
3
-2
4
3
5
-3
6
...
...
n + (n mod 2)
2
2
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.
27
(0,1)
(1,1)
(2,1)
(3,1)
(4,1)
(5,1)
..
.
(0,2)
(1,2)
(2,2)
(3,2)
(4,2)
(5,2)
..
.
(0,3)
(1,3)
(2,3)
(3,3)
(4,3)
(5,3)
..
.
(0,4)
(1,4)
(2,4)
(3,4)
(4,4)
(5,4)
..
.
(0,5)
(1,5)
(2,5)
(3,5)
(4,5)
(5,5)
..
.
...
...
...
...
...
...
Tabela 1.3:
enumervel
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, conforme ilustrado na Tabela 1.4.
(1,0)
0
ZZ
N
(2,0)
1
(3,0)
2
(2,1)
3
...
...
1 1,
0 < x < 0, 5
2x
+ 1,
2(x 1)
0, 5 x < 1
R
N
R0
0
R1
1
R2
2
R3
3
...
...
28
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]), desenvolvida 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 subconjunto 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
29
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 |.
Se
Justificativa Se |A| = 0 , ento existe uma funo bijetora entre o conjunto dos nmeros 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:
f1 :
N
a0
a1
a2
...
...
an
...
...
a0
a1
a1
...
a2
...
an
an
...
...
30
a0
a1
a1
...
a2
...
...
an
an
...
...
...
B:
1 Na
32
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 alfabeto anteriormente considerado, em que todos os smbolos eram compostos de um
nico caractere, os smbolos deste novo alfabeto so construdos a partir da concatenao 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 considerados 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 :
33
|| = || = ||
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 .
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
35
36
etc.
{}
{a, b, c}
i=0
37
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 rigorosa 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 , observandose 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 linguagem 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
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 , L1 , L2 , L3 ;
38
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
[
+ = 1 2 3 ... =
i
i=1
Como se pode perceber, = {}. Observe-se ainda que, embora aparentemente seja conseqncia da anterior, a afirmao + = {} s ser vlida nos casos
em que no contiver a cadeia vazia.
+ = {}, pois 6
Diz-se que uma linguagem exibe a propriedade do prefixo (sufixo) prprio sempre
que no houver nenhuma cadeia a ela pertencente que seja prefixo (sufixo) prprio de
outra cadeia dessa mesma linguagem. Formalmente:
L2
Neste exemplo, a linguagem L1 exibe a propriedade do prefixo prprio, ao passo que a linguagem
L2 no a exibe. A propriedade do sufixo prprio exibida por ambas as linguagens.
2
39
L2
L3
=
=
L4
L5
L6
L7
{a i b | i 0}
{a i bc i | i 0}
{b}
{a i b | i 1}
{bc i | i 0}
{c i b | i 0}
{a i | i 0}
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...}
L5 /L7 =
L5 = {b, bc, bcc, bccc...}
L7 = {ab, aab, aaab...}
L2 /L6 = L7
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
L2 /L1 = L7
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
40
L5 /L2 = {}
s : 1 22
s() =
s(a) = s(a)s(), a 1 , 1
s(a) = {x };
s(c) = {z , zz , zzz }.
41
h(a) = x ;
h(b) = x ;
h(c) = z .
A linguagem definida por esse homomorfismo h(L) = {x 2i z i | i 1}.
Nos casos em que h um homomorfismo, diz-se que h(L) a imagem homomrfica de L. A imagem homomrfica inversa de uma cadeia y definida atravs de um
homomorfismo inverso h 1 :
h 1 (y) = {x | y = h(x )}
Observe-se que a imagem homomrfica inversa de uma cadeia definida como um
conjunto de cadeias, e no como uma cadeia nica, uma vez que a funo h no
necessariamente injetora. A imagem homomrfica inversa de uma linguagem L definida
como:
h 1 (L) = {x | h(x ) L}
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}
Pelo fato de a funo h originalmente adotada no ser usualmente injetora, obtm-se:
h 1 (h(L)) = {(a | b)2i c i | i 1}
e, portanto, h 1 (h(L)) 6= L.
j (a) = c;
j (b) = dd .
42
j 1 (c) = a;
j 1 (dd ) = b.
Observe, neste caso, que j 1 (j (L1 )) = L1 .
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 Decimal ). 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
j 1 (1000) = 8
j 1 (1001) = 9
43
n+n
(n*n)
n*(n(n+n+n))
n++
nn*
(n*n)))
n*-(n(+n+/))
As linguagens de interesse prtico, como o caso das linguagens de programao, normalmente correspondem a um subconjunto prprio do fechamento reflexivo e
transitivo do alfabeto sobre o qual as suas cadeias so construdas. Assim, tornam-se
necessrios mtodos e notaes que permitam, dentro do conjunto fechamento, identificar as cadeias que efetivamente pertencem linguagem que estiver sendo definida,
descartando-se as demais.
Um outro aspecto importante, referente definio rigorosa das linguagens formais,
diz respeito ao fato de que, em sua maioria, as linguagens de interesse contm, se no
uma quantidade infinita, ao menos um nmero finito, porm muito grande, de cadeias.
Por esses dois motivos, h um interesse muito grande em relao a mtodos que
permitam especificar linguagens, sejam elas finitas ou no, atravs de representaes
finitas. Por outro lado, nem todas as linguagens podem ser representadas por meio
de uma especificao finita. Apesar do reduzido interesse prtico que recai sobre tais
linguagens, possvel comprovar a existncia de linguagens para as quais impossvel se
obter uma representao finita.
Neste texto sero considerados trs mtodos dentre os mais empregados para a
representao finita de linguagens:
1. Gramticas: correspondem a especificaes finitas de dispositivos de gerao de
cadeias. Um dispositivo desse tipo deve ser capaz de gerar toda e qualquer cadeia
44
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
45
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 smbolos que compem o alfabeto os diversos verbos, substantivos, adjetivos, advrbios,
pronomes, artigos etc. , e isso feito com o auxlio de entidades abstratas denominadas 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) seguido 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 estrutural do sujeito: artigo (a) seguido de substantivo (rua).
Naturalmente, o conjunto das regras que formam uma gramtica deve ser suficiente 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
S a raiz da gramtica, S V .
Adicionalmente, define-se N = V como sendo o conjunto dos smbolos noterminais da gramtica. corresponde ao conjunto dos smbolos que podem ser justapostos para compor as sentenas da linguagem que se est definindo, e N corresponde ao
conjunto dos smbolos intermedirios (classes sintticas) utilizados na estruturao e na
gerao de sentenas, sem no entanto fazer parte das mesmas. , N e P so conjuntos
finitos e no-vazios. P o conjunto das produes gramaticais, que obedecem forma
geral:
, com V NV e V
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.
47
V1
1
N1
P1
=
=
=
=
{0, 1, 2, 3, S , A}
{0, 1, 2, 3}
{S , A}
{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
48
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;
=
=
=
{a, b, c, S , B , C }
{a, b, c}
{S aSBC , S abC , CB BC , bB bb, bC bc, cC cc}
possvel definir uma mesma linguagem atravs de duas ou mais gramticas distintas. Quando isso ocorre, diz-se que as gramticas que definem a linguagem em questo
so sintaticamente equivalentes ou, simplesmente, equivalentes uma outra.
49
=
=
Uma rpida anlise de G3 e G4 permite concluir que L3 (G3 ) = L4 (G4 ) = {a, b}+ .
So muitas as notaes (metalinguagens) utilizadas na definio gramatical das linguagens formais e de programao. Nos exemplos acima, bem como na maior parte do
presente texto, utiliza-se a notao algbrica. No entanto, diversas outras metalinguagens so largamente empregadas para representar dispositivos generativos. A escolha de
uma ou outra metalinguagem varia de acordo com o tipo da linguagem que estiver sendo
definida, com o uso que se pretenda fazer de tal representao formal e com as prprias
preferncias pessoais de quem a estiver elaborando.
exceo da notao algbrica, empregada para representar diversos tipos de linguagens e utilizada com especial nfase no estudo terico das propriedades das linguagens
formais, outras notaes, como, por exemplo, as Expresses Regulares, o BNF (BackusNaur Form ou Notao de Backus-Naur), a Notao de Wirth (ou Expresses Regulares
Estendidas) e os Diagramas de Sintaxe (tambm conhecidos como Diagramas Ferrovirios), so bastante populares e amplamente utilizadas na definio de linguagens de
programao de alto nvel.
50
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} .
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, aceitadores sintticos ou simplesmente autmatos, os reconhecedores so sistemas formais capazes de aceitar todas as sentenas que pertenam a uma determinada linguagem,
rejeitando todas as demais. Por esse motivo, constituem uma forma alternativa s gramticas 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
51
52
Mquina de Estados Finita
Limitada / No limitada
No limitada
53
Estado corrente;
Prximo estado;
A identificao das transies passveis de serem aplicadas a uma determinada configurao determinada pela mquina de estados. Ela tambm responsvel, na ocasio
da aplicao de uma transio, pelo deslocamento do cursor, acompanhado de uma eventual substituio do smbolo lido na fita de entrada, e tambm pela eventual modificao
do contedo da memria auxiliar.
No se devem confundir os conceitos de movimentao e de transio, uma vez
que o simples fato de o autmato exibir vrias transies que sejam aplicveis a uma
dada configurao no implica que haja obrigatoriamente mais de uma possibilidade de
movimentao em tal configurao.
Essa multiplicidade de possibilidades ocorrer apenas se houver mais de uma transio, associada ao mesmo estado, que faa referncia ao mesmo smbolo de entrada e
ao mesmo contedo da memria auxiliar. Transies em vazio, ou seja, transies
que permitem a movimentao do autmato sem levar em conta os smbolos da cadeia
54
55
Dessa forma, as configuraes de um reconhecedor genrico podem ser representadas como triplas (q, (, ), ), onde q Q , (, ) e .
Para cada configurao assim representada, o termo q designa o estado especfico
assumido pela mquina de estados, o termo representa o contedo completo da memria
auxiliar, e o par ordenado (, ) indica ao mesmo tempo o contedo completo da fita de
entrada e a posio do cursor sobre a mesma, da seguinte forma:
: Q ( ) 2Q(
56
: Q ( {}) 2Q( )
Alm disso, usual que a consulta ao contedo da memria auxiliar seja feita
levando-se em considerao apenas um smbolo do alfabeto de cada vez (o critrio de
escolha do smbolo a ser consultado depende do tipo de autmato e da forma como a
memria auxiliar est organizada). Assim, a funo sofre uma nova simplificao:
: Q ( {}) 2Q(
57
2.
3.
4.
5.
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)
58
(q0 , (, 0110), A)
(q1 , (0, 110), AA)
(q0 , (, 0110), BA)
(q1 , (0, 110), A)
(q1 , (00, 10), BA)
(q1 , (0, 010), ABA)
2
A verificao de qualquer das condies acima implica a necessidade de o reconhecedor optar, a partir de uma dada configurao corrente, por uma dentre uma coleo de
novas configuraes possveis, caracterizando dessa maneira o no-determinismo de sua
operao.
No primeiro caso, o no-determinismo identificado pela existncia de mais de
uma possibilidade de movimentao a partir de uma dada configurao corrente, possibilidades estas que so expressas em termos das indicaes de um estado corrente, de
um smbolo do alfabeto de entrada e de um smbolo da memria auxiliar; no segundo
caso, pela existncia de mais de uma possibilidade de movimentao a partir de uma
dada configurao corrente, possibilidades estas expressas apenas em funo do estado
corrente e do smbolo do alfabeto da memria auxiliar (sem referncias ao alfabeto de
entrada); finalmente, no terceiro caso, pela coexistncia, em um dada configurao corrente, de possibilidades de movimentao com ou sem referncias a smbolos do alfabeto
de entrada (pelo menos uma de cada tipo).
Note-se, portanto, que uma transio (ou especificao de uma possibilidade de movimentao) possui carter esttico, ou seja, ela est associada a uma descrio esttica
do comportamento de um reconhecedor. Transies descrevem movimentaes potenciais, as quais s se concretizam, durante a operao do reconhecedor, ao serem habilitadas
pelas configuraes assumidas pelo mesmo.
Por outro lado, as movimentaes possuem um carter dinmico e so conseqncias
diretas da aplicao de transies sobre as configuraes sucessivamente assumidas pelo
reconhecedor. Observado por esse prisma, um reconhecedor pode ser considerado nodeterminstico se exibir pelo menos uma configurao que possa evoluir, conforme as
especificaes de suas transies, para mais de uma possvel configurao. Caso contrrio,
ele ser dito determinstico.
Exemplo 2.28 Considere-se um reconhecedor cuja configurao corrente seja:
(q1 , (, 1 ), 1 ),
q1 Q, 1 , , , 1 ,
59
1 e 1 correspondem, respectivamente, aos smbolos correntemente referenciados pelos cursores da fita de entrada e da memria auxiliar. Seja uma funo que especifique, entre outras, a
seguinte transio:
(q1 , 1 , 1 ) = {(q2 , (2 , D), 2 )},
2 , 2
Suponha-se, ainda, que esta seja a nica transio aplicvel configurao corrente. Neste
caso, a movimentao do reconhecedor da configurao corrente para a seguinte, pela aplicao
dessa transio, determinstica e representada por:
1.
(q1 , (, 1 ), 1 ) (q2 , (2 , ), 2 )
Suponha-se, agora, a funo de transio modificada como segue:
(q1 , 1 , 1 ) = {(q2 , (2 , D), 2 ), (q3 , (3 , D), 3 )}
Nesta situao, haveria no apenas uma, mas duas movimentaes possveis a partir da configurao corrente:
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 )
q0 Q o estado inicial;
60
qF QF
F F
61
, N , N , ou = , de forma no exclusiva.
62
, N , N , ou = , de forma no exclusiva.
Conseqentemente, correto dizer que todas as linguagens do tipo 3 (aquelas geradas por gramticas do tipo 3) tambm so do tipo 2, uma vez que as gramticas do
tipo 3 so, por definio, do tipo 2. Na prtica, no entanto, costuma-se designar o tipo
de uma linguagem conforme o tipo da gramtica mais simples que a gera. Conforme
discutido nos captulos seguintes, nem toda linguagem do tipo 2 pode ser caracterizada,
inversamente, como sendo do tipo 3. Isso significa que existem linguagens do tipo 2 para
as quais no possvel obter uma gramtica do tipo 3. Logo, as linguagens do tipo 3
constituem um subconjunto prprio das linguagens do tipo 2.
As gramticas do tipo 1, tambm conhecidas como sensveis ao contexto, constituem a classe seguinte de gramticas, na Hierarquia de Chomsky. A caracterizao das
gramticas sensveis ao contexto decorre da restrio, imposta ao formato das produes,
de que o comprimento da cadeia do lado direito de cada produo seja no mnimo igual
ao comprimento da cadeia do lado esquerdo, no havendo, portanto, possibilidade de
reduo do comprimento das formas sentenciais quando da realizao de derivaes em
gramticas deste tipo:
V NV
| | ||
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 linguagens 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, tratase 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 ;
64
65
66
Tipo
0
1
2
3
Classe de
linguagens
Recursivamente
enumerveis
Sensveis ao
contexto
Livres de
contexto
Regulares
Modelo de
gramtica
Modelo de
reconhecedor
Irrestrita
Mquina de Turing
Sensvel ao
contexto
Livre de
contexto
Linear (direita
ou esquerda)
Mquina de Turing
com fita limitada
Autmato de pilha
Autmato finito
3 Linguagens Regulares
Neste captulo sero estudadas as linguagens regulares e as diversas formas atravs das
quais elas podem ser geradas ou reconhecidas:
Gramticas regulares;
Autmatos finitos.
Em primeiro lugar, sero apresentados cada um desses formalismos. Depois, mostrada a equivalncia entre os mesmos quanto classe de linguagens que so capazes de
representar as linguagens regulares , e sero apresentados tambm algoritmos que
permitem efetuar a obteno de uma representao a partir de cada uma das outras.
Especial nfase ser dedicada ao estudo dos autmatos finitos: sero introduzidas
as notaes e os conceitos, sempre relacionando esse tipo de reconhecedor ao modelo
geral, apresentado no captulo anterior. Tambm ser apresentada uma introduo aos
transdutores finitos.
Posteriormente, sero consideradas as propriedades exibidas pelas linguagens do
tipo 3 em suas diversas representaes. Em particular, o Pumping Lemma das linguagens regulares, muito til na demonstrao de que certas linguagens no so regulares,
e tambm para demonstrar diversos outros importantes teoremas relativos s linguagens
desta classe. Outra fundamental propriedade refere-se existncia de um autmato mnimo (e nico) para cada linguagem regular considerada, o qual pode ser obtido conforme
o mtodo prtico apresentado.
Em seguida, sero analisadas algumas valiosas operaes que preservam a regularidade das linguagens do tipo 3, e que, por esse motivo, tambm so teis para determinar
a categoria de Chomsky a que uma linguagem possa pertencer.
Finalmente, sero apresentadas e demonstradas, no ltimo item deste captulo,
algumas questes decidveis referentes classe das linguagens regulares.
N;
68
Mtodo:
1. P ;
2. Se P , ( N {}), ento P ;
3. Se P , (N ), ento R P ;
1 Se
69
3 Linguagens Regulares
Dada uma gramtica linear direita G1 , o procedimento completo consiste, portanto, nos passos descritos no Algoritmo 3.2:
Algoritmo 3.2 (Linear direita esquerda) Obteno de gramtica linear esquerda G2 equivalente a uma gramtica linear direita G1 .
Mtodo:
1. Determinar L(G1 );
2. Determinar L(G1 )R ;
3. Obter uma gramtica linear direita G tal que L(G ) = L(G1 )R ;
4. Transformar G em G2 atravs da inverso das regras, conforme o Algoritmo
3.1.
aS
bS
P
cQ
cR
dR
d
2.
3.
1.
2.
3.
dS
dP
cQ
70
cR
aR
bR
S d
P d
Q c
R c
R a
R b
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
N;
tipo de gramtica recebe, em alguns textos, a denominao de gramtica linear unitria direita.
71
3 Linguagens Regulares
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 ;
3. Para cada P1 , = 1 ...n K , com K N {} e n 0, faa:
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
Exemplo 3.2 Considere-se a gramtica G1 :
S1
P
P
Q
abcdP
efP
Q
g
aP1
72
P1
P2
P3
P
P4
P
Q
bP2
cP3
dP
eP4
fP
Q
g
4. (X );
5. X Y ;
6. X Y , tambm denotado XY ;
7. X .
Diz-se que um determinado subconjunto de um conjunto regular se ele puder
ser formulado atravs do uso combinado dessas regras apenas.
Exemplo 3.3 Seja L = {0m 1n | m 0, n 0} sobre = {0, 1}. A linguagem L formada
por sentenas em que a concatenao de um nmero arbitrrio de smbolos 0 (incluindo nenhum)
se concatena com a concatenao de um nmero tambm arbitrrio de smbolos 1 (incluindo
nenhum):
L = {, 0, 1, 00, 01, 11, ...}
Considerem-se as linguagens sobre , abaixo discriminadas:
L1
L2
=
=
{0}
{1}
3 Linguagens Regulares
73
L3
L4
L5
=
=
{0i | i 0}
{1i | i 0}
{0p 1q | p 0, q 0}
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:
1. uma expresso regular e denota o conjunto regular ;
2. uma expresso regular e denota o conjunto regular {};
3. Cada , , uma expresso regular e denota o conjunto regular {}, ;
74
Operador
Representao
Mais alta
Fechamento
Intermediria
Concatenao
Mais baixa
Unio
x y ou xy
x | y ou x + y
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:
A ou (a | b | c | d ) a(a | b | c | d )
( A) A( A) A( A) ou (b | c | d ) a(b | c | d ) a(b | c | d )
3 Linguagens Regulares
75
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 seguir sero apresentadas algumas relaes de identidade vlidas para as expresses regulares, as quais podem ser demonstradas sem dificuldade. Sejam x , y, z trs
expresses regulares quaisquer. Ento:
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
3 Linguagens Regulares
77
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
{q0 , q1 , q2 , q3 }
79
3 Linguagens Regulares
=
=
{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 }
{q1 , q2 }
q0
1
1
2
2
q1
2
q2
0, 1
q3
0, 1, 2
(q0 , 00001) = q1
(q0 , 0122) = q2
(q1 , 12) = q2
(q2 , 222) = q2
80
(q0 , 0011222) (q0 , 011222) (q0 , 11222) (q1 , 1222) (q1 , 222) (q2 , 22) (q2 , 2)
(q2 , )
q0
1
1
q1
2
2
q2
(q0 , 0011222) (q0 , 011222) (q0 , 11222) (q1 , 1222) (q1 , 222) (q2 , 22) (q2 , 2)
(q2 , )
3 Linguagens Regulares
81
Nos casos em que |((q, ))| 2, haver mais de uma possibilidade de movimentao para o autmato finito no-determinstico na configurao corrente.
82
Autmato
finito
determinstico
Autmato
finito nodeterminstico
Aceita a cadeia
de entrada se:
Rejeita a cadeia
de entrada se:
Pra em uma
configurao
final.
Pra em uma
configurao
final.
Pra em uma
configurao
no-final.
Pra sem
conseguir
atingir
nenhuma
configurao
final.
=
=
=
=
{q0 , q1 , q2 }
{a, b, c}
{(q0 , a) {q1 , q2 }, (q1 , b) {q1 , q2 }, (q2 , c) {q2 }}
{q1 , q2 }
q0
q1
c
b
q2
83
3 Linguagens Regulares
84
q0
q1
q2
{q1 , q2 }
b
{q1 , q2 }
{q2 }
Tabela 3.3: Notao tabular para o autmato finito nodeterminstico M da Figura 3.5
2
3 Linguagens Regulares
85
qj
qk
ql
qi
qm
qi
ql
b
qj qk
c
qk
qm
86
Mtodo:
1. Q2 ;
2. i 0, se q1i Q1 ento Q2 Q2 {q2i };
3. F2 ;
4. i 0, se q1i F1 ento F2 F2 {q2i };
5. ;
6. q1i Q1 , , se 1 (q1i , ) = {q11 , ..., q1n }, n 1 ento 2 (q2i , ) =
{q21 , ..., q2n };
7. Substituir todos os elementos {q2i } de 2 por q2i ;
8. Enquanto houver transies no-determinsticas em 2 , faa:
a) Selecione uma transio no-determinstica qualquer 2 (q, ), e considere 2 (q, ) = {q21 , ..., q2i , ..., q2n }, n 2;
b) Acrescente um novo estado q21 ...q2i ...q2n tabela de transio de
estados (nesta notao, os estados do conjunto so concatenados formando uma cadeia, em que os ndices dos estados esto organizados
em ordem crescente, ou em qualquer outra ordem conveniente); se
q2i = q2i1 ...q2im , considerar a ordenao de todos os estados obtidos
pela substituio de q2i por q2i1 ...q2im em q21 ...q2i ...q2n ;
c) Substitua, na tabela, todas as referncias a {q21 , ..., q2n } por q21 ...q2n ;
d) Para cada , faa:
i. 2 (q21 ...q2n , ) ;
ii. Para cada estado q2j {q21 , ..., q2n }, faa:
A. 2 (q21 ...q2n , ) 2 (q21 ...q2n , ) 2 (q2j , );
B. Se q2j F2 , ento F2 F2 {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.
87
3 Linguagens Regulares
q0
q1
q2
q1 q2
q1 q2
q1 q2
q1 q2
q2
q2
q0
q1 q2
c
b
q2
b
q1
88
q2
a
a
c
q0
q3
a
a, b
b
q1
Tabela 3.5:
inicial
q0
q1
q2
q3
{q1 , q2 }
{q0 }
{q0 , q1 }
{q2 }
{q1 }
{q3 }
{q2 }
q0
q1
q2
q3
{q1 , q2 }
q0
q2
c
q3
{q0 , q1 }
q2
q1
89
3 Linguagens Regulares
q0
q1
q2
q3
q1 q2
q1 q2
q0
q2
q0
c
q3
{q0 , q1 }
q2
q1
{q0 , q1 }
q2
q0
q1
q2
q3
q1 q2
q0 q1
q1 q2
q0
q0 q1
q3
q2
q2
q0
{q1 q2 , q0 }
q1
q0 q1
q0 q1
q2
q3
q0
q1
q2
q3
q1 q2
q0 q1
q0 q1 q2
q1 q2
q0
q0 q1
q2
q2
q0
q0 q1 q2
q0 q1 q2
q1
q0 q1
q0 q1
q0 q1
q2
{q2 , q3 }
90
q0
q1
q2
q3
q1 q2
q0 q1
q0 q1 q2
q2 q3
q1 q2
q0
q0 q1
q2
q0
q0 q1 q2
q0 q1 q2
q2
q1
q0 q1
q0 q1
q0 q1
q1
q2
q2
q2 q3
q2
q1
b
a
q0
q1 q2
q0 q1
c
b
q2
a, c
q0 q1 q2
c
q2 q3
3 Linguagens Regulares
91
ento |Q2 | 2|Q1 | 1, uma vez que toda combinao de estados dever conter pelo
menos um estado do autmato original.
Exemplo 3.14 A eliminao dos no-determinismos do autmato finito representado na Tabela 3.11
resulta no autmato determinstico da Tabela 3.12.
Como se pode perceber, Q1 = {q0 , q1 , q2 } e Q2 = {q0 , q1 , q2 , q0 q1 , q0 q2 , q1 q2 , q0 q1 q2 }. Alm
disso, |Q1 | = 3 e |Q2 | = 23 1 = 7. Trata-se, portanto, de um autmato determinstico no
qual todas as combinaes possveis dos estados do autmato original no-determinstico esto
consideradas.
q0
q1
q2
{q1 , q2 }
{q0 , q2 }
{q0 , q1 }
q0
q1
q2
q1 q2
q0 q1
q0 q2
q0 q1 q2
q1 q2
q0 q2
q0 q2
q1 q2
q1 q2 , q0 q2
q0 q1 q2
q0 q1
q0 q1
q0 q1
q0 q1
92
q0
q1
b
q2
Figura 3.11:
a(bca)
q0
q1
b
q2
a
c
q3
q4
a
Quando um autmato transita em vazio, isso significa que ele muda de estado sem
consultar a cadeia de entrada. Sempre que ocorrer a coexistncia entre alguma transio
em vazio e outras transies (vazias ou no) com origem em um mesmo estado, isso
3 Linguagens Regulares
93
=
=
=
=
{q0 , q1 }
{a, b}
{(q0 , a) {q0 }, (q0 , ) {q1 }, (q1 , b) {q1 }}
{q1 }
A linguagem aceita por esse autmato a b , conforme pode ser deduzido a partir do diagrama
de estados da Figura 3.13.
a
q0
q1
2.
Apesar de constituir uma generalizao da definio dos autmatos finitos nodeterminsticos (basta comparar as respectivas funes de transio: Q 2Q versus
Q ( {}) 2Q ), possvel demonstrar que a incorporao de transies em vazio
ao autmato em nada aumenta o seu poder de reconhecimento. Em outras palavras,
toda e qualquer linguagem que seja aceita por um autmato finito no-determinstico
que apresente transies em vazio pode tambm ser aceita por um autmato equivalente,
sem transies em vazio.
A equivalncia dessas duas classes de autmatos desenvolvida a partir da discusso
de um algoritmo que possibilite a converso sistemtica de autmatos finitos quaisquer
em uma verso equivalente, porm isenta de transies em vazio.
Teorema 3.4 (Eliminao de transies em vazio, verso 1) Todo autmato que
contenha transies em vazio gera uma linguagem que aceita por algum autmato finito
que no contm transies em vazio.
Justificativa Sejam M = (Q , , , q0 , F ) um autmato finito contendo transies em
vazio, representado em notao tabular, e N = (Q , , , q0 , F ) o autmato finito sem
transies em vazio correspondente que a partir dele se deseja obter. A obteno de N
a partir de M pode ser efetuada atravs do Algoritmo 3.5.
94
Sada: um autmato finito sem transies em vazio N , tal que L(N ) = L(M );
Mtodo:
1. Eliminao das transies em vazio
Considere-se um estado qualquer qi Q . Se houver uma transio em vazio
de qi para qj , deve-se elimin-la, copiando-se para a linha que representa
o estado qi todas as transies que partem dos estados qj para os quais
feita a transio em vazio.
Esse procedimento corresponde, em notao tabular, realizao de uma
fuso (merge) entre a linha do estado qi que contm a transio em vazio
para o estado-destino qj e a prpria linha do estado qj , armazenando-se o
resultado novamente na linha correspondente ao estado qi .
Havendo mais de uma transio em vazio indicadas, deve-se repetir cumulativamente o procedimento para todas elas.
Se (qi , ) F , ento F F {qi }, sendo que inicialmente F F .
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.
3 Linguagens Regulares
95
Tabela 3.13:
em vazio
q0
q1
q0
q1
q1
q0
q1
q0
q1
q1
q0
b
b
q1
A seguir, ser apresentado um algoritmo alternativo para a eliminao de transies em vazio da especificao de um autmato finito. Diferentemente do anterior, este
algoritmo no exige a manipulao da tabela que representa o autmato. possvel
demonstrar que, apesar de no serem obrigatoriamente iguais, os autmatos obtidos pela
aplicao dos dois mtodos so equivalentes (no sentido de reconhecerem exatamente a
mesma linguagem).
Inicialmente, so apresentadas duas novas definies: o Fechamento- de um estado
e a funo de transio estendida .
A funo Fechamento-: Q 2Q definida de forma indutiva e pode ser calculada
conforme o Algoritmo 3.6.
Algoritmo 3.6 (Fechamento-) Clculo do Fechamento- de um estado qi .
Sada: Fechamento-(qi );
Mtodo:
1. Fechamento-(qi ) {qi };
96
q0
q1
q2
Fechamento-(q0 ) = {q0 , q1 , q2 }
Fechamento-(q1 ) = {q1 , q2 }
Fechamento-(q2 ) = {q1 , q2 }
Sada: (qi , );
Mtodo:
1. (qi , ) Fechamento-(qi );
[
2. (qi , )
Fechamento-(qk ), com qj (qi , ), qk (qj , ),
, .
3 Linguagens Regulares
97
(q0 , a) = {q0 }
(q1 , a) =
(q2 , a) =
Fechamento-(q0 ) = Fechamento-(q0 ) = {q0 , q1 , q2 }
(q0 , a) = {q0 }
(q1 , a) =
(q2 , a) =
Fechamento-(q0 ) = {q0 , q1 , q2 }
(q0 , b) =
(q1 , b) = {q1 }
(q2 , b) =
Fechamento-(q1 ) = {q1 , q2 }
qj
ql
qi
a
qk
qm
98
(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
qj
ql
qi
a
a
qk
qm
Figura 3.17: Autmato equivalente ao da Figura 3.16, eliminadas todas as transies em vazio
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
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 }
99
100
etc.
(q1 , c) = {q1 , q2 }
etc.
(q2 , c) = {q1 , q2 }
(q2 , c) (q2 , )
etc.
2
101
3 Linguagens Regulares
Mtodo:
1. Q2 ;
2. i 0, se q1i Q1 ento Q2 Q2 {q2i };
3. F2 ;
4. i 0, se q1i F1 ento F2 F2 {q2i };
5. Se Fechamento-(q10 ) F1 6= , ento F2 F2 {q20 };
6. 2 ;
7. q1i Q1 , m , se 1 (q1i , m ) = {q1m , q1n , ..., q1p }, ento 2 2
{(q2i , m ) {q2m , q2n , ..., q2p }}.
Fechamento-(q01 ) F1 6=
q20
q21
q22
{q21 , q22 }
{q21 , q22 }
{q21 , q22 }
{q21 , q22 }
{q21 , q22 }
{q21 , q22 }
102
q20
b, c
a, b, c
q21
b, c
q22
b, c
b, c
a, b, c
=
=
=
{q0 }
{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 , b)
(q0 , )
M2 :
=
=
=
q0
q0
q1
(q0 , a) (q0 , )
(q0 , a) (q1 , a)
Logo, a operao de M2 , nesse caso, no-determinstica.
Como mostram os Exemplos 3.22 e 3.23, o que efetivamente determina o comportamento que um autmato exibe durante a sua operao (se determinstico ou no) no o
formato genrico da funo de transio adotoda, mas as especificidades de sua prpria
definio.
Assim, um autmato no-determinstico do modelo (2) pode operar de forma determinstica se:
se:
Um autmato determinstico do modelo (4), por sua vez, pode operar de forma
no-determinstica, se:
104
a
q0
q1
q3
q2
Mtodo:
1. Q20 {q20 };
2. i 1;
3. Q2i Q2(i1) {q2k | q1k Q1 e 1 (p, ) = q1k , p Q2(i1) , (
{})};
4. Se Q2i 6= Q2(i1) , ento i i + 1 e desviar para (3); caso contrrio,
Q2 Q2i ;
105
3 Linguagens Regulares
5. F2 {q2k Q2 | q1k F1 };
6. 2 {(q2i , ) q2j | (q1i , ) q1j 1 e q2i , q2j Q2 }.
Mtodo:
1. Considere-se a linha correspondente ao estado inicial de M . Marque-se este
estado como acessvel na coluna apropriada.
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.
3. Escolha-se arbitrariamente qualquer outro estado que tenha sido previamente marcado como acessvel, mas que ainda no esteja marcado como
considerado. Repitam-se os passos (2) e (3) at que no mais existam na
tabela estados acessveis, porm no considerados.
4. N definido a partir de M eliminando-se todos os estados inacessveis (ou
seja, aqueles que no foram marcados como acessveis pelo algoritmo), bem
como todas as transies que deles partem ou a eles chegam.
q0
q1
q2
q3
q4
q5
q0
q4
q4
q3
q1
q4
q1
q4
q3
q0
q5
q5
106
q0
q1
q2
q3
q4
q5
q0
q4
q4
q3
Acessvel
Considerado
X
q1
q4
q1
q4
q3
q5
q0
q5
q0
q1
q2
q3
q4
q5
q0
q4
q4
q3
Acessvel
Considerado
q1
q4
q1
q4
q3
X
X
q5
q0
q5
107
3 Linguagens Regulares
q0
q1
q2
q3
q4
q5
q0
q4
q4
q3
Acessvel
Considerado
X
X
q1
q4
q1
q4
q3
q5
q0
q5
q0
q1
q2
q3
q4
q5
q0
q4
q4
q3
Acessvel
Considerado
X
X
X
X
X
q1
q4
q1
q4
q3
q5
q0
q5
q0
q1
q2
q3
q4
q5
q0
q4
q4
q3
Acessvel
Considerado
X
X
X
X
X
X
q1
q4
q1
q4
q3
q0
q5
q5
108
q0
q3
q4
q5
q0
q4
q3
q4
q3
q0
q5
q5
Mtodo:
1. Q20 {q2i | q1i F1 };
2. i 1;
3. Q2i Q2(i1) {q2k | q1k Q1 e 1 (q1k , ) = q, q Qi1 , ( {})};
4. Se Q2i 6= Q2(i1) , ento i i + 1 e desviar para (3); caso contrrio,
Q2 Q2i ;
5. F2 {q2k Q2 | q1k F1 };
3 Linguagens Regulares
109
Mtodo:
1. Considerem-se as linhas correspondentes aos estados finais de M . Marquemse as mesmas como teis, na coluna apropriada.
2. Selecione-se um estado qualquer marcado como til, porm ainda no
marcado como considerado. Inspecionem-se todos os demais estados do
autmato, identificando quais deles permitem transitar para o estado selecionado. Marquem-se todos como teis. Marque-se finalmente o estado
selecionado como considerado.
3. Repita-se o passo (2) at que no reste mais nenhum estado marcado como
til, mas ainda no como considerado.
4. O autmato N definido a partir de M eliminando-se-lhe todos os estados
inteis, bem como todas as transies que deles partem ou a eles chegam.
Exemplo 3.25 Considere-se o autmato da Figura 3.20, em que todos os estados so acessveis mas
nem todos so teis.
110
q3
a
q0
c
c
q1
b
q4
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
q0
c
q4
111
3 Linguagens Regulares
til
q0
q1
q2
q3
q4
q3
q2
q1
q2
q1
q4
q4
Considerado
q4 j estava marcado;
til
Considerado
q0
q1
q2
q3
q4
q3
q2
q1
q2
q1
q4
q4
X
X
til
q0
q1
q2
q3
q4
q3
q2
q1
q2
q1
q4
q4
X
X
Considerado
X
X
112
til
Considerado
q0
q1
q2
q3
q4
q3
q2
q1
q2
q1
q4
q4
X
X
X
X
q0
q3
q4
q3
c
q4
q4
A eliminao de no-determinismos:
113
3 Linguagens Regulares
Logo, fcil provar que a resposta para as questes inicialmente propostas sim,
bastando para isso aplicar os algoritmos na seguinte seqncia:
1. Eliminao de transies em vazio, se houver;
2. Eliminao dos no-determinismos restantes, caso haja algum;
3. Eliminao de estados inacessveis e inteis, caso existam.
Qualquer outra ordem poder, dependendo do autmato que estiver sendo manipulado, 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 autmatos 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 linguagem.
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 referenciados 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).
q0
q1
q2
q3
q4
q1
q1
q1
q3
q3
q2
q4
q2
q4
q3
q2
q4
q0
114
Seleciona-se a linha q0 ;
Copiam-se transies para q2 e q3 no estado q0 , obtendo-se os conjuntos de estadosdestino {q1 , q2 } e {q1 , q3 }, respectivamente, no estado q0 ;
q0
q1
q2
q3
q4
a
q3
{q1 , q2 }
{q1 , q3 }
q1
q3
q2
q4
q4
q3
q2
q4
q0
q0
q1
q2
q3
q4
q3
{q1 , q2 }
q2
q2
q4
{q1 , q3 }
q1
q3
q4
q0
q4
q0
q3
q2
115
3 Linguagens Regulares
q0
q1
q2
q3
q4
q3
{q1 , q2 }
{q1 , q2 }
q2
q4
{q1 , q3 }
{q1 , q3 }
q3
q4
q3
q2
q4
q0
q0
q1
q2
q3
q4
q3
{q1 , q2 }
{q1 , q2 }
q2
q4
{q1 , q3 }
{q1 , q3 }
q3
q4
{q1 , q3 }
q4
q3
{q1 , q2 }
q0
q1
q2
q3
q4
q3
{q1 , q2 }
{q1 , q2 }
q2
q4
{q1 , q3 }
{q1 , q3 }
q3
q4
{q1 , q3 }
q4
q3
{q1 , q2 }
2.
Eliminao de no-determinismos
Atravs da inspeo da funo de transio, torna-se evidente a necessidade de criao imediata 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
q0
q1
q2
q3
q4
{q1 , q2 }
{q1 , q3 }
q3
{q1 , q2 }
{q1 , q2 }
q2
q4
{q1 , q3 }
{q1 , q3 }
q3
q4
{q1 , q3 }
{q1 , q3 }
{q1 , q3 }
q4
q4
q4
q3
q3
{q3 , q4 }
{q1 , q2 }
{q1 , q2 }
{q1 , q2 }
q3
Ao efetuar a combinao das transies que emergem de q1 e q3 , deve-se observar o surgimento de um novo no-determinismo anteriormente inexistente no autmato. O mesmo
corresponde a uma transio no-determinstica para q3 ou q4 , quando a entrada a, e pode
ser eliminada atravs da criao de um novo estado {q3 , q4 }, conforme a Tabela 3.35.
q0
q1
q2
q3
q4
q1 q2
q1 q3
q3 q4
q3
q1 q2
q1 q2
q2
q4
q3
q3 q4
q4
q1 q3
q1 q3
q3
q4
q1 q3
q1 q3
q1 q3
q1 q3
q4
q4
q4
q4
q3
q1 q2
q1 q2
q1 q2
q1 q2
q3
q3
3.
Estados renomeados
Renomeando-se os estados, a fim de aumentar a legibilidade da Tabela 3.35, obtm-se a
Tabela 3.36.
117
3 Linguagens Regulares
q0
q1
q2
q3
q4
q5
q6
q7
q3
q5
q5
q2
q4
q3
q7
q4
q6
q6
q3
q4
q6
q6
q6
q6
q4
q4
q4
q4
q3
q5
q5
q5
q5
q3
q3
Tabela 3.36:
nomeados
4.
q0
q1
q2
q3
q4
q5
q6
q7
q3
q5
q5
q2
q4
q3
q7
q4
q6
q6
q3
q4
Acessvel
Considerado
X
X
X
X
X
X
X
X
X
X
q3
q5
q5
q5
q5
q3
q3
q6
q6
q6
q6
q4
q4
q4
q4
Tabela 3.37: Autmato da Tabela 3.36, logo aps a execuo do algoritmo de eliminao de estados inacessveis
ou, simplesmente:
q0
q3
q4
q5
q6
q7
q5
q4
q3
q7
q4
q6
q3
q5
q5
q5
q5
q3
q3
q6
q6
q6
q6
q4
q4
q4
q4
118
3 Linguagens Regulares
119
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.
Suponha-se agora que X e Y sejam dois conjuntos regulares, gerados por gramticas lineares direita. vlido, nesse caso, admitir que X e Y sejam gerados
pelas gramticas Gx e Gy :
X
Y
= L(Gx ), Gx = (x Nx , x , Px , Sx )
= L(Gy ), Gy = (y Ny , y , Py , Sy )
120
Gz = (x y Nx Ny {Sz }, x y , Px Py {Sz Sx , Sz Sy }, Sz )
tal que L(Gz ) = X Y .
Gz = (x y Nx Ny , x y , Py Pz , Sx ), sendo Pz obtido pela aplicao
das regras:
a) Se A B Px , ento A B Pz
b) Se A Px , ento A Sy Pz
tal que L(Gz ) = XY .
3 Linguagens Regulares
121
Atravs da aplicao das regras correspondentes ao fechamento reflexivo e transitivo, obtmse, a partir de G0 e G1 , novas gramticas G3 e G4 representando, respectivamente, os conjuntos
{0} e {1} :
Da concatenao dos conjuntos {0} e {1} resulta o conjunto regular {0} {1} , representado
atravs da gramtica linear direita G5 :
{z
} |
G3
{z
G4
Finalmente, a linguagem obtida pela unio de L(G5 ) com L(G2 ) pode ser representada pela
gramtica linear G6 :
| {z }
G2
S3 S0 , S3 S4 , S0 0S3 , S4 S1 , S4 , S1 1S4 }
{z
G5
P6 = {S
2
, B }
| {z
}, |S A,{zA 0A}, A
|
{z B} , |B 1B
{z
}
{2}
{0}
{0} {1}
{1}
Teorema 3.7 (Conjuntos regulares gramticas lineares direita) Toda gramtica linear direita gera um conjunto regular.
Justificativa Mostra-se agora a proposio inversa, ou seja, que toda e qualquer linguagem 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
Xi Xj torna-se Xi = {}Xj
Xi Xj torna-se Xi = {}Xj
Xi torna-se Xi = {}
Xi torna-se Xi = {}
=
=
...
Xm =
...
Am1 X1 Am2 X2 ... Amm Xm Bm1 Bm2 ...Bmr
Observe-se que cada equao assim obtida pode conter referncias a todos os smbolos 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 equao. 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
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
Nesta expresso, no existem ocorrncias do smbolo Xi . De fato, substituindo-se
Xi por Aii Ci na segunda ocorrncia deste smbolo em Xi = Aii Xi Ci , obtm-se a
identidade:
124
Mtodo:
1. i 1;
2. Se i = m, ento desviar para (4). Caso contrrio, considerar a i-sima
equao na forma Xi = Aii Xi Ci e substituir todas as ocorrncias de Xi
por Aii Ci nas equaes referentes s variveis Xj , (i + 1) j m;
3. i i + 1 e desviar para (2);
4. Se i = 0, ento FIM. Caso contrrio, Xi i = Aii Ci e substituir todas
as ocorrncias de Xi pelo conjunto i nas equaes referentes s variveis
Xj , 1 j (i 1).
5. i i 1 e desviar para (4).
Este algoritmo opera em dois passos. No primeiro, em que as equaes so percorridas 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, existem 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 substitudas, 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 mostra, intuitivamente, que toda e qualquer gramtica linear direita gera uma linguagem
regular.
Exemplo 3.29 Considere-se a gramtica linear direita G0 :
G0
P0
=
=
({a, b, c, X0 , X1 , X2 }, {a, b, c, d }, P0 , X0 )
{X0 aX0 , X0 aX1 , X0 b,
X1 bX1 , X1 cX1 , X1 cX2 , X1 d ,
X2 aX0 , X2 bX1 , X2 cX2 , X2 c, X2 d }
125
3 Linguagens Regulares
Do agrupamento das alternativas de substituio de cada smbolo no-terminal resulta o sistema de equaes seguinte:
com:
C0 = A0 B0 = {a}X1 {b}
C1 = A1 B1 = {c}X2 {d }
e:
X1 = {b, c} ({c}X2 {d })
A aplicao do algoritmo de clculo dos conjuntos regulares definidos pelos smbolos noterminais da gramtica feita conforme apresentado a seguir.
=
=
=
=
=
=
=
=
=
126
=
=
=
X2
=
=
=
=
=
A22 C2 , com :
A22
C2
=
=
=
X0
X1
X2
X1
X2
=
=
=
=
=
1
3
4
=
=
=
127
3 Linguagens Regulares
Exemplo 3.30 Seja G1 uma gramtica linear direita:
=
=
G1
P1
=
=
=
{0}X1 {}X2
{1}X2 {1}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
X2
X3
=
=
=
{0}X1 {}X2
{1}X2 {1}{2} {22}
{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:
X1
X2
X3
=
=
=
Finalmente, obtm-se X1 = {0} {1} {1}{2} {22}, que representa tambm o conjunto regular
definido pela gramtica linear direita G1 . Resulta:
X1
X2
X3
=
=
=
=
=
({0 , 1 , 2 , A0 , A1 , A2 }, {0 , 1 2 }, P2 , A0 )
{A0 0 A1 , A0 0 ,
A1 1 A2 , A1 1 ,
A2 2 A0 , A2 2 }
=
=
=
{0 }A1 {0 }
{1 }A2 {1 }
{2 }A0 {2 }
128
A0
A1
A2
{0 }A1 {0 }
{1 }A2 {1 }
{2 }({0 }A1 {0 }) {2 }
=
=
=
{0 }A1 {0 }
{1 }A2 {1 }
{2 }({0 }({1 }A2 {1 }) {0 }) {2 }
=
=
{2 0 1 }A2 {2 0 1 , 2 0 , 2 }
{2 0 1 } {2 0 1 , 2 0 , 2 }
=
=
{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 }
=
=
=
=
{0}A {1}
{0}S {2}
=
=
=
=
=
=
3 Linguagens Regulares
129
Mtodo:
130
3 Linguagens Regulares
G
V
131
=
=
=
=
(V , , P , S )
{a, b, c, S , K , L}
{a, b, c}
{S a, S aK , K bK , K L, L cL, L }
P
S a
S aK
K bK
K L
L cL
L
(S , a) = Z
(S , a) = K
(K , b) = K
(K , ) = L
(L, c) = L
(L, ) = Z
=
=
=
=
=
(Q, , , S , F )
{S , K , L, Z }
{a, b, c}
{(S , a) Z , (S , a) K , (K , b) K , (K , ) L, (L, c) L, (L, ) Z }
{Z }
b
132
Mtodo:
1. Definio do conjunto de smbolos no-terminais:
Os smbolos no-terminais de G correspondem aos estados de M . A raiz da
gramtica q0 .
2. Alfabeto de entrada:
O alfabeto de G o prprio alfabeto de entrada de M .
3. Produes:
P ;
=
=
=
(Q, , , q0 , F )
{q0 , q1 , q2 }
{a, b, c}
3 Linguagens Regulares
=
=
133
{(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q2 , (q1 , ) q2 , (q2 , c) q2 }
{q2 }
b
c
c
q0
q1
q2
=
=
=
(V , , P , q0 )
{a, b, c, q0 , q1 , q2 }
{a, b, c}
(q0 , a) = q1
(q1 , b) = q1
(q1 , c) = q2
(q1 , ) = q2
(q2 , c) = q2
Q
q2 F
P
q0 aq1
q1 bq1
q1 cq2
q1 q2
q2 cq2
P
q2
(q0 , abbbc) (q1 , bbbc) (q1 , bbc) (q1 , bc) (q1 , c) (q2 , )
Em particular, a cadeia abbbc possui mais de uma seqncia de movimentaes que conduzem
sua aceitao em M . Tal fato implica a existncia de uma outra seqncia de derivaes que
capaz de gerar essa cadeia em G, como pode ser percebido abaixo:
(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
Os resultados apresentados at este ponto so suficientes para estabelecer intuitivamente a equivalncia completa dos conjuntos (expresses) regulares com as gramticas
lineares direita e tambm com os autmatos finitos, no que se refere classe de linguagens 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 seguida um algoritmo que permite a construo sistemtica de autmatos finitos nodeterminsticos 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 .
Justificativa O autmato finito no-determinstico que aceita a linguagem definida por
r pode ser obtido atravs da aplicao do Algoritmo 3.16, que especifica as regras de
mapeamento parciais que abrangem casos triviais de sentenas (itens 1, 2 e 3) e cada
um dos operadores de unio (4), concatenao (5) e fechamento (6), conforme a prpria
definio das expresses regulares.
Algoritmo 3.16 (Expresso regular autmato) Obteno de um autmato finito a partir de uma expresso regular.
Mtodo:
1. r =
r aceita por:
3 Linguagens Regulares
135
3. r = ,
r aceita por:
136
q10
q11
q20
q21
137
3 Linguagens Regulares
q30
q31
q40
q41
q20
q21
q42
q43
q10
q51
q11
q40
q41
q20
q21
q42
q43
138
q30
q31
q60
q61
q10
q11
q51
q40
q41
q20
q21
q42
q43
q1
a
q0
c
q2
3 Linguagens Regulares
139
q0
q1
q2
q3
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
Autmato finito
determinstico
(3.3)
Expresso
regular
(3.11)
Autmato
finito
(3.10)
(3.9)
Gramtica
linear direita
(3.7)
(3.6)
Conjunto
regular
(3.4)
Autmato finito
sem
transies em vazio
(3.1)
Gramtica
linear esquerda
3 Linguagens Regulares
141
1. qi qj se e apenas se ou qi , qj F , ou ento qi , qj (Q F ), e
k
k 1
k 1
142
q1 q2 se e apenas se q1 q2 .
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
k +1
nesse caso, que essas mesmas classes de equivalncia satisfazem a , e assim sucessivamente.
k
Considere-se, por exemplo, uma situao hipottica em que (i) a relao partik +1
k +2
3 Linguagens Regulares
143
k +1
Q0 , Q1 , Q2
Q0 , Q1 , Q2
Q0 , R, S , Q2
k +2
1. qi 6 qj , ou
k +1
2. (qi , ) 6 (qj , ).
A condio (1) falsa, pois, de acordo com a hiptese original, qi e qj pertencem
k +1
k +1
k +1
Mtodo:
1. Divide-se o conjunto original Q de estados de M nos dois subconjuntos
que compem a sua partio inicial: o primeiro, composto por todos os
estados finais, e o outro, por todos os estados no-finais de Q . Tal ao se
144
da relao ao conjunto Q .
2. Para cada um dos conjuntos obtidos em (1), refin-los em novas parties,
segundo o critrio:
Dois estados A e B de um mesmo subconjunto Qi , obtido de uma partio
prvia do conjunto Q de estados, so equivalentes se e somente se:
a) A e B aceitam o mesmo conjunto S de entradas, S , e
b) Para cada uma dessas entradas S :
(A, ) = (B , ), ou
1
B
145
3 Linguagens Regulares
1
C
1
2
(f)
(f)
q0
q1
q2
q3
q4
q5
q6
a
q1
b
q3
q3
q1
q2
q1
q3
q4
q6
q4
a)
146
O conjunto {q0 , q1 , q3 } pode ser particionado em {q0 } e {q1 , q3 }, pois seus elementos transitam 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
O mtodo funciona pelo refinamento sucessivo dos conjuntos de estados indistinguveis para valores crescentes do comprimento das cadeias analisadas. No entanto, a
aplicao desse mtodo um pouco trabalhosa, uma vez que exige a verificao cuidadosa
da equivalncia para cadeias de comprimento k entre quaisquer dois estados. Note-se, por
exemplo, que o simples fato de um estado A aceitar como entrada um subconjunto das
entradas aceitas por um estado B no necessariamente implica a distinguibilidade entre
ambos, uma vez que as entradas no aceitas em A podem eventualmente no conduzir a
estados finais.
Tendo em vista este importante resultado, pode-se retornar ao objetivo inicial desta
seo e apresentar o teorema e o algoritmo que tratam da minimizao do nmero de
estados de um autmato finito.
Teorema 3.13 (Autmato mnimo) Seja M = (Q , , , q0 , F ) um autmato finito.
Ento, existe um autmato finito M = (Q , , , q0 , F ) que possui o menor nmero
possvel de estados, tal que L(M ) = L(M ). Alm disso, M nico.
Justificativa A obteno do autmato finito mnimo M equivalente a M pode ser feita
com base no Algoritmo 3.18, que determina as classes de equivalncia de M .
As classes de equivalncia so denotadas atravs do nome de um estado de M
(qualquer, j que todos so equivalentes), circundado por colchetes, como em [q]. A
demonstrao de que M mnimo, e tambm nico, pode ser encontrada em [46].
Algoritmo 3.18 (Minimizao de estados) Minimizao do nmero de estados de
um autmato finito.
Mtodo:
0
k +1
e sejam idnticas.
2. Construir M tal que:
3 Linguagens Regulares
147
: {([q], ) = [r ] | (q, ) = r };
q1
a
q0
c
b
q2
c
q3
q4
{q0 , q1 , q3 }, {q2 , q4 }
1
2
[q1 ]
[q2 ]
148
q1
(q0 , q1 )
q2
(q0 , q2 )
(q1 , q2 )
...
...
...
qn1
(q0 , qn1 )
(q1 , qn1 )
...
(qn2 , qn1 )
qn
(q0 , qn )
(q1 , qn )
...
(qn2 , qn )
(qn1 , qn )
Mtodo:
1. Marcar, na tabela, todos os pares do tipo (qa , qb ), qa F , qb (Q F )
como no-equivalentes (6);
2. Para cada um dos pares de estados restantes (qa , qb ) (escolhidos arbitrariamente), fazer:
149
3 Linguagens Regulares
Se (qa , ) = (qb , ), ou
150
q0
q1
q2
q3
q4
q5
q6
(f)
(f)
(f)
b
q6
q3
q3
q2
q3
q5
q4
q1
q0
q1
q2
q3
q4
q5
q2
6
6
-
q3
6
-
q4
6
6
q5
6
6
6
-
6
-
q6
6
6
6
4 Com
(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.
(q0 , q3 ) (q1 , q4 ) 6
Similar ao item acima. O par (q0 , q3 ) marcado como 6.
(q1 , q3 ) (q2 , q4 ) ?
a
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.
(q1 , q6 ) (q2 , q4 ) ?
a
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.
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
(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 )
(q2 , q5 ) (q2 , q4 )
(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
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.
Ao trmino do algoritmo, a Tabela 3.46 resume o resultado da anlise.
q0
q1
q2
q3
q4
q5
q1
6
-
q2
6
6
-
q3
6
6
6
-
q4
6
6
6
-
q5
6
6
6
6
6
-
q6
6
6
6
6
6
(f)
(f)
[q0 ]
[q1 ]
[q2 , q4 ]
[q3 , q6 ]
[q5 ]
a
[q1 ]
[q2 , q4 ]
[q2 , q4 ]
[q2 , q4 ]
[q2 , q4 ]
b
[q3 , q6 ]
[q3 , q6 ]
[q3 , q6 ]
[q2 , q4 ]
[q5 ]
152
q1
q0
q3
a
b
q2
q4
L(q0 ) = (a | b)c (a | b)
L(q1 ) = c (a | b)
L(q2 ) = c (a | b)
3 Linguagens Regulares
L(q3 ) =
L(q4 ) =
153
q0
a, b
q1
a, b
q3
O Teorema 3.13 apresenta dois resultados fundamentais para as linguagens regulares, conforme abaixo. Dada uma linguagem regular L qualquer, ento:
1. Existe um autmato finito mnimo que aceita L. Em outras palavras, no existe
nenhum outro autmato, com um nmero inferior de estados, que aceite L;
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.
A existncia e unicidade de um autmato finito mnimo para toda e qualquer linguagem regular L permite, entre outros resultados, estabelecer critrios para determinar
se um conjunto de linguagens regulares representa a mesma linguagem: basta obter as
verses mnimas dos autmatos finitos que reconhecem cada uma dessas linguagens, e
verificar se so todos iguais. Em caso afirmativo, as linguagens so todas idnticas. Caso
contrrio, no so todas idnticas.
154
=
=
=
=
=
=
=
(Q, , , , , q0 , F )
{q0 , q1 }
{a, b, c}
{1}
{(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q0 }
{q0 1, q1 }
{q1 }
q0 /1
q1 /
Sentena aceita
abbcabbbcab
abbbcab
acacaca
a
Cadeia Gerada
111
11
1111
1
Um transdutor finito do tipo Mquina de Mealy, por sua vez, definido como
sendo uma stupla TMealy = (Q , , , , , q0 , F ) sobre um autmato finito M = (Q , , ,
q0 , F ), em que o alfabeto de sada do transdutor e : Q a funo de
transduo6 de T .
alguns autores preferem adotar : Q .
autores adotam : Q .
5 Alternativamente,
6 Alguns
3 Linguagens Regulares
155
=
=
=
=
=
=
=
(Q, , , , , q0 , F )
{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}
{q1 }
q0
a/ab
q1
c/c
Sentena aceita
abbcabbbcab
abbbcab
acacaca
a
Cadeia Gerada
abcabcab
abcab
abcabcabcab
ab
Apesar de se tratar de dois modelos distintos de transdutores finitos, pode-se demonstrar a plena equivalncia de ambos: toda e qualquer Mquina de Moore pode ser
simulada por uma Mquina de Mealy e vice-versa. Dessa maneira, portanto, a opo
por um ou outro tipo de mquina pode ser feita levando-se em conta exclusivamente a
convenincia de manipulao e a facilidade de representao obtidas conforme o caso em
questo.
Teorema 3.14 (Equivalncia dos transdutores) Toda Mquina de Mealy pode ser
simulada por uma Mquina de Moore, e vice-versa.
156
As subcadeias de entrada xx que contiverem trs ou menos smbolos x devem ser reproduzidas 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 reproduzidas na sada como xxxy;
Todos os smbolos - da cadeia entrada devem ser substitudos pelo smbolo # na cadeia
de sada.
A Tabela 3.50 apresenta exemplos de cadeias de entrada e correspondentes cadeias de sada:
Sentena aceita
x x
xxx xxxx
xxxxxx xxx xx
x xx xxx xxxx xxxxx
Cadeia Gerada
x #x
xxx #xxxy
xxxy#xxx #xx
x #xx #xxx #xxxy#xxxy
q0
x /x
x /x
q1
q2
x /x
q3
x /y
q4
/#
/#
/#
/#
3 Linguagens Regulares
157
q0 /
x
x
q1 /x
q2 /x
q3 /x
q4 /y
q5 /
x
#
q6 /#
#
#
Figura 3.51: Transdutor do tipo Mquina de Moore equivalente ao transdutor do tipo Mquina de Mealy da Figura
3.50
2
158
an1
an+1
am 1
n
m
q0 1 q1 2 q2 3 q3 ... qn1
qn qn+1 ... qm1
qm
onde q0 ...qm so os estados sucessivamente percorridos por M (no necessariamente distintos entre si).
Considerando-se os n + 1 estados inicialmente percorridos por M (q0 , q1 ...qn ), fato
que pelo menos dois desses estados devem ser idnticos. Existem ento duas possibilidades extremas a serem consideradas, no que diz respeito localizao desses estados
idnticos na seqncia:
1. A distncia entre eles a menor possvel: (qi , ak ...am ) (qj , ak +1 ...am ), qi =
qj , j n;
2. A distncia entre eles a maior possvel: (q0 , a1 ...am ) (qn , an+1 ...am ), q0 = qn .
Reescrevendo-se w como xyz , em que x corresponde parte da cadeia de entrada
que leva M primeira ocorrncia de um estado repetido na seqncia, e y corresponde
parte da cadeia que leva M sua segunda ocorrncia, tem-se que:
|y | 1;
|xy | n;
3 Linguagens Regulares
159
Assim, a constante n corresponde ao nmero de estados do autmato finito utilizado para definir a linguagem regular. No entanto, como sabido, uma mesma linguagem
regular pode ser definida por autmatos finitos distintos, os quais podem possuir, eventualmente, um nmero de estados tambm distintos.
Suponha-se L uma linguagem regular e infinita que seja aceita por dois autmatos
finitos distintos M1 e M2 , M1 = (Q1 , , 1 , q01 , F1 ) e M2 = (Q2 , , 2 , q02 , F2 ). Sejam
n1 = |Q1 | e n2 = |Q2 |, e suponha-se n1 > n2 . Se w L e |w | n1 , ento claro
que |w | n2 e w pode ser escolhida para verificar o Pumping Lemma em M2 . Por
outro lado, se |w | n2 , como L infinita, ento fato que existe uma outra cadeia
z L, |z | n1 , que pode ser usada para verificar o Pumping Lemma em M1 . Logo,
indiferente a escolha de M1 ou M2 e, conseqentemente, de n1 ou n2 , para demonstrar a
validade do Pumping Lemma para a linguagem L.
Por outro lado, natural que se questione a existncia de um valor para a constante
n que independa do autmato analisado, e que possa, portanto, ser considerado como
inerente linguagem. Considerando-se a existncia de um autmato finito mnimo que
reconhece uma dada linguagem regular L (ver Seo 3.6), natural que se considere o
nmero de estados do correspondente autmato finito como o valor n inerente linguagem
L.
Observe-se que, embora o teorema prove a existncia da constante n, a sua aplicao
em casos prticos no exige que se determine o valor dessa constante.
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.
2.
3.
4.
2.
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.
160
4.
x = , y = a, z = b.
x = , y = ab, z = .
x = a, y = b, z = .
Portanto, qualquer que seja o caso, sempre possvel identificar, na cadeia ab, cujo comprimento coincide com o nmero de estados do autmato que a aceita, uma subcadeia y, de comprimento maior ou igual a 1 e menor ou igual a 2, que provoca um ciclo na seqncia de movimentaes
executada pelo autmato.
2
Exemplo 3.46 Considere-se o autmato da Figura 3.52:
b
q0
q1
q2
Considere-se a cadeia w = abc, |w | = 3. Ento, w pode ser reescrito como xyz , |xy | 3, 1
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.
|y | 3 e, finalmente, xy i z
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 pertencem 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;
ii)
x = , y = ab, z = bbc;
iii)
x = , y = abb, z = bc.
3 Linguagens Regulares
161
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
As linguagens que exibem maior interesse so infinitas (linguagens finitas so trivialmente regulares); 8
A demonstrao de que uma linguagem regular s pode ser feita atravs da apresentao 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
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 suficientemente 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+
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 6= 1, pois n 1 e m > n;
Teorema 3.17 (Fecho na complementao) A classe das linguagens regulares fechada em relao operao de complementao.
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
= ( )
Portanto, como decorrncia do fechamento das linguagens regulares sobre as operaes de fechamento reflexivo e transitivo e de concatenao, possvel afirmar que
regular.
Finalmente, ( ) ( L(M )) tambm uma linguagem regular, uma vez
que ( ) e ( L(M )) so fechadas em relao operao de unio.
Exemplo 3.52 Considere-se M o autmato finito determinstico da Figura 3.54, L(M ) = (ab |c)d e .
d
q0
q1
a, c, d , e
q2
e
e
q3
a, b, c
a, b, c, d
b, d , e
q4
a, b, c, d , e
165
3 Linguagens Regulares
d
q0
q1
a, c, d , e
e
e
q2
q3
a, b, c
a, b, c, d
b, d , e
q4
a, b, c, d , e
q0
q1
q2
166
q0
q1
q2
s(0) = a | b
167
3 Linguagens Regulares
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
aceita h 1 (L), ou seja, L(M ) = h 1 (L(M )). Observe-se que a funo de transio
especificada para M simula a operao do autmato M atravs de transies efetuadas
diretamente para os estados que sucedem o reconhecimento das cadeias h(a) em cada
estado considerado no autmato M .
Exemplo 3.55 Seja L(M ) = (ab) ((cd ) | e ), com M definido conforme a Figura 3.58.
q5
q6
b
q0
q1
e
q8
q2
b
q3
q7
q4
168
h(0) = ab
h(1) = cd
h(2) = e
3.59.
q0
q2
q4
2
1
q8
q0
q1
3 Linguagens Regulares
169
a
q0
q1
2.
Mtodo:
1. Construo de F :
a) Se 6 L, ento F = {q0 };
b) Se L, ento F = {q0 , q0 }.
2. Construo de :
c) Se (q, ) F , ento (q0 , ) = q;
d) Se (qa , ) = qb , ento (qb , ) = qa .
170
c
b
q0
q1
q0
q1
b
c
b
q0
3 Linguagens Regulares
L1 = (a | b | c | d ) bb(a | b | c | d )
L1 = (a | b | c | d ) dd (a | b | c | d )
171
2.
3.
4.
Portanto, a demonstrao da regularidade de uma linguagem no precisa ficar restrita especificao de uma expresso regular, de um autmato finito ou, ainda, de
uma gramtica regular que definam essa linguagem. A partir da identificao do uso de
operaes que preservam a regularidade de linguagens mais simples na constituio de
linguagens mais complexas, essa demonstrao pode ser consideravelmente simplificada.
Foram apresentadas algumas das principais propriedades de fechamento exibidas
pelas linguagens regulares. Outras propriedades, com suas respectivas demonstraes,
podem ser encontradas em [46], [48] e [53]. No obstante, outras propriedades estudadas
nos captulos seguintes para as demais classes de linguagens tambm se aplicam diretamente s linguagens regulares, uma vez que, conforme a Hierarquia de Chomsky, toda
linguagem do tipo 3 tambm , simultaneamente, uma linguagem do tipo 2, 1 e 0.
172
3 Linguagens Regulares
173
A condio suficiente (linguagem no-vazia aceita uma sentena de comprimento inferior a n) no to bvia, mas pode ser verificada com auxlio do Pumping
Lemma. Considere-se w L(M ), |w | = m.
Se m < n, ento nada h para demonstrar, e a hiptese trivialmente verdadeira.
Se, no entanto, m n, ento w pode ser reescrita como xyz com xz L(M ), y 6=
, |xz | < m. Seguem, ento, duas possibilidades: |xz | n ou |xz | < n. Se |xz | < n,
a hiptese est demonstrada. Se, por outro lado, |xz | n, pode-se agora considerar
w = xz e aplicar o Pumping Lemma novamente, desta vez sobre tal cadeia.
Atravs da iterao deste passo, possvel obter cadeias de comprimentos sucessivamente menores, enquanto o comprimento da cadeia anterior for maior ou igual a n.
Assim, possvel demonstrar a existncia de uma sentena de comprimento inferior a n,
pertencente a L.
A condio suficiente do Teorema 3.23 pode tambm ser compreendida atravs
do seguinte raciocnio: partindo-se do estado inicial, se o autmato aceitar pelo menos
uma cadeia, ento a linguagem no-vazia. Como o autmato possui n estados, ento
necessrio que pelo menos um desses estados seja final, e tambm acessvel desde o
estado inicial.
Se o estado inicial for simultaneamente final, ento a cadeia vazia aceita e a
linguagem aceita pelo autmato no-vazia. Observe-se ainda que || < n, qualquer que
seja o valor de n, uma vez que n 1.
Se o estado inicial no for simultaneamente final, ento ser necessrio atingir pelo
menos um dos outros n 1 estados do autmato, o qual deve tambm ser final. Para isso,
bastam cadeias de comprimento mximo n 1, inclusive, j que cadeias de comprimento
maior ou igual a n possuem ciclos (conforme o Pumping Lemma), e no modificam o
conjunto de estados que so acessveis a partir do estado considerado. Logo, se nenhuma
cadeia de comprimento menor que n for aceita pelo autmato, isso significa que:
174
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.
Comprimento
Cadeias distintas
Cadeias distintas
m0
m1
m m
m2
3
...
n 1
m m m
m3
...
...
m m m ... m
m n1
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
Teorema 3.24 (A linguagem infinita?) A linguagem L aceita por um autmato finito com n estados infinita se e somente se o autmato aceitar pelo menos uma cadeia
w , n |w | < 2n.
Justificativa A condio se (aceita pelo menos uma cadeia w , n |w | < 2n linguagem infinita) pode ser facilmente deduzida atravs do Pumping Lemma: como
|w | n, ento w pode ser reescrita como xyz , e xy i z L, i 0. Logo, L infinita.
A condio somente se (linguagem infinita aceita pelo menos uma cadeia w , n
|w | < 2n) demonstrada, por contradio, a seguir.
Se L infinita, ento com certeza existem cadeias de comprimento maior ou igual a n
(pois a quantidade de cadeias com comprimento menor ou igual a n finita). Considere-se
w L(M ), |w | n.
Se |w | < 2n, ento no h nada a demonstrar e a hiptese trivialmente verdadeira.
175
3 Linguagens Regulares
mi
i=n
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
w L, n |w | < 2n?
Sim
Infinita
Sim
No
Finita, no-vazia
No
No
Finita, vazia
No
Sim
N.A. (contradio)
Sim
L ...
q0
q1
q2
177
3 Linguagens Regulares
q0
q1
q2
q0
q1
q2
Mtodo:
1. Obter M = (Q , , , q0 , F ), isento de transies em vazio, tal que L(M ) =
L(M );
2. Determinar (q0 , ). Se (q0 , ) F , ento SIM; caso contrrio, NO.
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 inexistncia de ciclos formados exclusivamente por transies desse tipo, as quais poderiam,
eventualmente, provocar um processamento interminvel da cadeia de entrada.
178
q0
q1
a
b
q2
q3
q0
a
q2
q3
Figura 3.68: Autmato equivalente ao da Figura 3.67, porm isento de ciclos formados por transies em vazio
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
Teorema 3.27 (As linguagens so idnticas?) Sejam L1 e L2 duas linguagens regulares quaisquer. Ento, a questo L1 = L2 decidvel.
Justificativa Considerem-se as linguagens L1 = L1 (M1 ) 1 e L2 = L2 (M2 ) 2 .
A condio L1 = L2 pode tambm ser formulada como (ver Teorema 1.2):
(L1 L2 ) (L1 L2 ) =
onde as operaes de complementao se referem a qualquer alfabeto tal que (1 2 )
. Para decidir se L1 = L2 , deve-se executar o Algoritmo 3.22.
Algoritmo 3.22 (As linguagens so idnticas?) Determina se duas linguagens regulares so idnticas.
3 Linguagens Regulares
179
Mtodo:
1. Basta construir M3 tal que L3 (M3 ) = (L1 L2 ) (L1 L2 ). Se L3 = ,
ento SIM; caso contrrio, NO
Mtodo:
1. Basta construir M tal que L(M ) = L(M ) = L(M ). Se L(M ) = ,
ento SIM; caso contrrio, NO.
180
Mtodo:
1. Basta construir M3 tal que L3 (M3 ) = L2 (M2 ) L1 (M1 ). Se L3 = , ento
SIM; caso contrrio, NO.
Tambm neste caso a validade do algoritmo e da demonstrao decorrem de resultados anteriormente apresentados.
182
<sujeito><verbo><complemento>
O homem
A mulher
leu
escreveu
um <adjetivo> livro
timo
pssimo
183
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 representao de construes aninhadas, que so freqentemente encontradas em linguagens
dessa categoria. Construes aninhadas costumam ocorrer em linguagens de programao, 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 estruturao 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 ).
T + E,
T,
F T,
F,
(E ),
a}
(4.1)
(4.2)
(4.3)
(4.4)
(4.5)
(4.6)
Considere-se a sentena a (a + a). Ela pode ser obtida atravs da seguinte seqncia de
derivaes:
184
O aninhamento de construes a caracterstica que distingue as linguagens estritamente do tipo 2 das linguagens do tipo 3: pertencem a uma linguagem estritamente
do tipo 2 apenas e to somente as sentenas em que, para cada ocorrncia de um dado
delimitador (no caso, o abre-parnteses), haja em correspondncia a ocorrncia de um
outro, atravs do qual se forma o par (no caso, o fecha-parnteses). Alm disso, a
subcadeia situada entre esse par de delimitadores pode ser gerada atravs das mesmas
regras de formao vlidas para a sentena completa, caracterizando dessa maneira o
aninhamento de suas construes.
Note-se que, atravs de regras de produo livres de contexto, possvel especificar
construes mais restritas do que as obtenveis mediante o uso de produes de gramticas lineares. Assim, com regras livres de contexto possvel caracterizar aninhamentos
sintticos, os quais no podem ser descritos apenas com produes lineares direita ou
esquerda (ou qualquer combinao delas). Em outras palavras, as gramticas livres
de contexto permitem impor restries adicionais quelas que se podem construir em
gramticas regulares, podendo assim caracterizar subconjuntos das linguagens regulares
que gozem da propriedade determinada pelos aninhamentos sintticos. Dessa forma, as
gramticas livres de contexto tornam-se muito teis para a especificao de linguagens
de programao, a maioria das quais exibe aninhamentos sintticos.
A representao de aninhamentos em gramticas do tipo 2 decorre de uma propriedade caracterstica das gramticas deste tipo, denominada Self-embedding Property.
Um no-terminal Y dito self-embedded, ou auto-recursivo central, se, a partir
dele, for possvel derivar alguma forma sentencial em que o no-terminal Y ressurja,
delimitado por cadeias no-vazias de terminais sua esquerda e sua direita:
Y Y ,
com , +
Um no-terminal Z dito simplesmente auto-recursivo se, a partir dele, for possvel derivar alguma forma sentencial em que Z ressurja, acompanhado de pelo menos
uma cadeia no-vazia de terminais sua esquerda ou sua direita:
Z Z ,
com , , 6=
Se uma gramtica livre de contexto G possui pelo menos um no-terminal autorecursivo central, diz-se que G auto-embutida (do ingls self-embedded).
Um smbolo no-terminal essencial aquele que no pode ser removido da gramtica (ou substitudo) sob pena de provocar modificaes na linguagem sendo definida.
Uma linguagem L dita estritamente livre de contexto, ou livre de contexto noregular, se e apenas se todas as gramticas que geram L forem auto-embutidas, ou seja, se
todas elas possurem pelo menos um no-terminal auto-recursivo central essencial.
O simples fato de uma gramtica ser auto-embutida no garante a no-regularidade
da linguagem definida: possvel identificar linguagens regulares geradas por gramti-
185
aS ,
bS ,
a,
b,
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
S
S
S
aS ,
bS ,
a,
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
Quando todas as alternativas de substituio para um smbolo no-terminal so noessenciais, diz-se que o smbolo em questo no-essencial. Se ele for um no-terminal
auto-recursivo central, diz-se que o no-terminal auto-recursivo central no-essencial.
Dessa maneira, os no-terminais auto-recursivos centrais que caracterizam gramticas
auto-embutidas podem ou no ser essenciais. Se houver pelo menos um no-terminal
auto-recursivo central essencial em alguma gramtica, a correspondente linguagem dita
estritamente livre de contexto. Se todos os no-terminais auto-recursivos centrais
de uma gramtica forem no-essenciais, a linguagem por ela definida regular.
A Self-embedding Property exprime a capacidade que tm as gramticas livres
de contexto para representarem aninhamentos sintticos. Intuitivamente, se Y
Y , ento, da aplicao sucessiva dessa seqncia de derivaes, resulta que Y ,
Y etc. so formas sentenciais que geram sentenas pertencentes a L(G). Assim,
a cada subcadeia possvel impor a existncia de uma outra subcadeia que estabelea
a correspondncia com . importante notar, finalmente, que as gramticas regulares
no exibem a Self-embedding Property, sendo esta uma propriedade caracterstica das
gramticas livres de contexto no-regulares.
Exemplo 4.3 Considere-se a linguagem das expresses aritmticas definida no Exemplo 4.1. Observese que E T F (E ), ou seja, E (E ).
Logo, E um no-terminal auto-recursivo central, e a gramtica a que ele pertence autoembutida. possvel demonstrar que todas as gramticas que geram essa linguagem so autoembutidas, o que caracteriza a linguagem como no-regular. Note-se que, como E (E ), a cada
abre-parnteses que antecede a subexpresso E corresponde sempre um fecha-parnteses logo aps
E . Note-se tambm que todas as sentenas derivadas das formas sentenciais (i E )i , i 1, tambm
pertencem linguagem definida, sendo obtidas pela aplicao repetida da seqncia de derivaes
apresentada.
2
Quando se consideram linguagens especificadas atravs de gramticas livres de contexto, deve-se tambm considerar de que forma feita a aceitao sinttica de suas
sentenas para fins de compilao e/ou interpretao. Quando se trata de efetuar o re-
186
2.
3.
187
Exemplo 4.5 Em BNF, a gramtica que representa expresses aritmticas aninhveis, sobre operandos a, com os operadores adio e multiplicao, anteriormente apresentada no Exemplo 4.1,
torna-se:
<E>
<T>
<F>
::=
::=
::=
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 vrios 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.
X
Y
Z
XYZ | g
aX | a
Sb
cdZ | eZ | f }
188
::=
<X>
<Y>
<Z>
::=
::=
::=
<X><Y><Z> | g
a<X> | a
<S>b
cd <Z> | e<Z> | f
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:
em:
<X><Y><Z> | g
<S>
::=
<X>
<Y>
::=
::=
aa
<S>b
<Z>
::=
(cd | e) f
A substituio das definies dos smbolos <X>, <Y> e <Z> na regra do smbolo <S> resulta
<S>
::=
aa <S>b(cd | e) f
|g
O lado direito da regra acima (aa <S>b(cd | e) f | g) , como se pode perceber, uma expresso
regular estendida, pois possui a forma de uma expresso regular, acrescida da referncia ao smbolo
no-terminal <S>. O lado esquerdo e o lado direito, juntamente, constituem uma regra gramatical
representada na notao BNF estendida.
A regra acima explicita a presena de um smbolo no-terminal auto-recursivo essencial em G
(no caso, o smbolo <S>), suficiente para caracterizar L como sendo livre de contexto e no-regular.
Em termos informais, L pode tambm ser representada como (aa )n g(b(cd | e) f )n , com n 0.2
A principal vantagem decorrente uso da BNF estendida, em comparao com a notao algbrica, ou mesmo com a BNF, resulta da possibilidade de representar a repetio
de formas sintticas sem a necessidade de definies gramaticais recursivas (aquelas em
que o smbolo no-terminal que estiver sendo definido ressurge, direta ou indiretamente,
em formas sentenciais derivadas do mesmo), substituindo-as pela definio de iteraes
explcitas (atravs do uso do operador fechamento reflexivo e transitivo). Isso proporciona um entendimento mais fcil da linguagem por ela definida, sendo ainda til em
determinados mtodos de construo de reconhecedores sintticos a partir de gramticas
livres de contexto (ver Seo ??).
Note-se, no entanto, que nem sempre uma gramtica livre de contexto poder ser
reduzida a uma nica regra em BNF estendida, ainda que esta represente uma definio recursiva. De fato, a quantidade mnima de regras a que se pode chegar igual
quantidade de smbolos no-terminais auto-recursivos centrais essenciais que a gramtica
possui, uma vez que cada um destes responsvel pela incorporao de uma caracterstica distinta de aninhamento sinttico linguagem definida pela gramtica, no podendo
ser removidos da gramtica sem prejuzo da linguagem por ela definida.
Por outro lado, gramticas livres de contexto que representam linguagens regulares
podero sempre ser manipuladas at a eliminao de todos os smbolos no-terminais
da gramtica, exceto, naturalmente, a raiz, resultando em uma nica expresso regular
189
(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:
<S>
<X>
<Y>
<Z>
<W>
::=
::=
::=
::=
::=
a<S> | b<X>
<X>b | c<S> | <Y>bc
<X>d | <Z> | e
<X>f | <W>
e<W>f | g
Neste caso, possvel identificar as seguintes situaes: o smbolo no-terminal <S> recursivo
direita diretamente (atravs da regra <S> ::= a<S>), e indiretamente (atravs das regras <S>
::= b<X>, <X> ::= c<S>). O smbolo no-terminal <X>, por sua vez, recursivo esquerda
diretamente (atravs da regra <X> ::= <X>b) e indiretamente (atravs das regras <X> ::= <Y>bc,
<Y> ::= <X>d, <Y> ::= <Z>, <Z> ::= <X>f). Note-se que o smbolo <W> no recursivo
esquerda nem direita.
2
recurso direita: A A;
recurso esquerda: A A;
recurso central: A A;
termo independente: A .
Agrupando-se as regras de mesmo formato, obtm-se:
A
1 A | 2 A | ... | i A |
A1 | A2 | ... | Aj |
190
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 )
As recurses centrais no podem, naturalmente, ser eliminadas na expresso resultante, sob pena de se modificar a linguagem definida por A, no caso das linguagens
estritamente livres de contexto. O mesmo vale para o caso de mltiplas recurses em uma
mesma regra, que no sejam da forma AA (por exemplo, como em A A1 A2 A3 A).
Se i = j = k = m = p = 1, o caso geral reduz-se a:
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 ;
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 ) .
191
Exemplo 4.9 Os casos abaixo contm, alm de recurses esquerda, direita e termos independentes, 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 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 publicao, 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 internacional ISO em 1996 ([36]).
192
1 Neste
texto, 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.
193
Formalmente, uma rvore de derivao um sistema de representao de seqncias de derivaes em uma gramtica livre de contexto G = (V , , P , S ), consistindo em
um grafo orientado e ordenado, acclico, com as seguintes propriedades:
1. Todo vrtice rotulado com um elemento de V {};
2. O rtulo da raiz S ;
3. Os rtulos de vrtices internos so elementos de N = V ;
4. Se um vrtice tem o rtulo A, e X1 , X2 , . . . Xn so descendentes diretos de A,
ordenados da esquerda para a direita, ento A X1 , X2 , ...Xn deve pertencer ao
conjunto P de regras;
5. Se um vrtice possui o rtulo , ento este vrtice deve ser simultaneamente uma
folha e descendente nico de seu ancestral direto.
Define-se como fronteira de uma rvore a cadeia formada pela concatenao
dos smbolos correspondentes aos rtulos dos vrtices que so folhas, considerados no
sentido da esquerda para a direita, e de cima para baixo. Essa cadeia de smbolos
(terminais e/ou no-terminais) corresponde forma sentencial cuja estrutura est sendo
representada pela rvore.
Exemplo 4.10 Considere-se a gramtica das expresses aritmticas anteriormente apresentada no
Exemplo 4.1. A estrutura da sentena a (a + a), de acordo com essa gramtica, pode ser representada pela rvore de derivao:
E
T
F
T
F
(
E
T
F
a
194
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
F
(
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.
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 esquerda, 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.
Justificativa As gramticas livres de contexto possuem a propriedade de que as derivaes de cada um dos smbolos no-terminais presentes em uma mesma forma sentencial
podem ser feitas de forma independente umas das outras. Se S X , ento
a derivao X independe de e .
Considere-se uma gramtica livre de contexto G e a seqncia de derivaes mais
esquerda S 1 X , com 1 , X N , e V . Considere-se que X 2 , com
2 e 3 , com 3 . Ento, S 1 X 1 2 3 e 1 2 3 L(G).
Sejam X 1 e X 2 duas produes distintas de G. Ento, existem duas
derivaes esquerda distintas para a cadeia 1 2 3 :
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
E + E,
E E,
a,
(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
2.
. . . <comando> . . .
<condicional>
if <condio> then <comando>
if <condio> else <comando> else <comando>
...
Primeira alternativa:
<programa>
2.
. . . <comando> . . .
. . . <condicional> . . .
. . . if <condio> then <comando> else <comando> . . .
. . . if <condio> then <condicional> else <comando> . . .
. . . if <condio> then if <condio> then <comando>
else <comando> . . .
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 condicional 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
197
{z
{z
}
}
Assim, a forma sentencial apresentada ambgua, o que tambm torna ambgua a gramtica.
Como se pode verificar facilmente, as mesmas concluses poderiam tambm ter sido obtidas caso
fossem consideradas apenas substituies mais direita.
2
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, assuntos 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 geralmente 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 construes 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>
<condicional>
<condicional>
<condio>
. . . <comando> . . .
<condicional>
if <condio> then <comando> fi
if <condio> then <comando> else <comando> fi
...
{z
{z
{z
{z
198
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 ambigidade 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 conseqncia, existem tambm duas rvores de derivao distintas que possuem como fronteira essa
mesma forma sentencial:
200
if
<condio>
then
<comando>
else
<comando>
else
<comando>
<condicional>
if
<condio>
then
<comando>
if
<condio>
then
<comando>
<condicional>
if
<condio>
then
<comando>
201
Para cada tipo de transformao ser apresentado um algoritmo que mapeia a gramtica original em uma outra gramtica que exiba uma das propriedades acima enumeradas. 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:
com , V ,
202
Mtodo:
1. N0 ;
2. i 1;
3. Ni Ni1 {Y | Y P e (Ni1 )};
4. Se Ni 6= Ni1 , ento:
a) i i + 1;
b) Desviar para (3);
Caso contrrio:
a) N Ni ;
b) P {A X1 X2 . . . Xn P | A, X1 , X2 , . . . , Xn (Ni )}.
203
Mtodo:
1. V0 {S };
2. i 1;
3. Vi Vi1 {Xj V , 1 j n | A X1 X2 . . . Xn P e A Ni1 };
4. Se Vi 6= Vi1 , ento:
a) i i + 1;
b) Desviar para (3);
Caso contrrio:
a) N Vi N ;
b) Vi ;
c) P {A X1 X2 . . . Xn P | A, X1 , X2 . . . Xn Vi }.
204
205
=
=
=
{S , A, B , C , a, b}
{a, b}
{S A | B , A aB | bS | b, B AB | Ba, C AS | b}
=
=
=
=
{A, C }
{A, C , S }
{A, C , S }
Logo, G = {V , , P , S }, com:
V
{S , A, C , a, b}
{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
V1
V2
=
=
=
{S }
{S , A}
{S , A, b}
e G = {V , , P , S }, com:
V
{S , A}
{b}
{S A | A bS | b}
Teorema 4.7 (Eliminao de produes em vazio) Toda linguagem livre de contexto que no contm a cadeia vazia pode ser gerada por uma gramtica livre de contexto
em que no h produes em vazio.
206
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;
b) Desviar para (3);
Caso contrrio:
a) E Ei1 ;
5. P ;
6. P {A P | 6= };
7. Considerem-se as produes de P no formato:
A 0 B1 1 B2 2 . . . Bk k , com i (V E )+ e Bi E
207
=
=
=
{S , A, B , C }
{a, b}
{S ABC , A BB | , B CC | a, C AA | b}
AA | A | b,
CC | C | a,
BB | B ,
ABC | A | B | C | AB | AC | BC }
208
=
=
=
{S , B , C }
{a, b, c, d }
{S aBC , B bB | , C cCc | d | }
bB | b,
cCc | cc | d ,
aBC | aB | aC }
O ltimo caso de simplificao de gramticas livres de contexto refere-se eliminao de produes unitrias. Produes unitrias so produes da forma A B , em
que A e B so no-terminais, e costumam ser descartadas das gramticas livres de contexto porque nada acrescentam s formas sentenciais s quais so aplicadas, constituindo
mera renomeao de smbolos (no caso, de A para B ).
Teorema 4.8 (Eliminao de produes unitrias) Toda linguagem livre de contexto pode ser gerada por uma gramtica livre de contexto isenta de produes unitrias.
Justificativa O Algoritmo 4.4 mostra como transformar gramticas livres de contexto
arbitrrias em outras equivalentes sem produes unitrias.
Algoritmo 4.4 (Eliminao de produes unitrias) Eliminao de produes unitrias em gramticas livres de contexto.
Mtodo:
1. Para cada A N , constri-se NA tal que NA = {B N | A B 2 } da
seguinte forma:
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;
ii. Desviar para (1.c);
2 Devem-se
considerar apenas as derivaes que so obtidas pela aplicao exclusiva de regras unitrias.
209
=
=
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.
Exemplo 4.22 Considere-se G = (V , , P , S ), com o conjunto de regras P seguinte:
{S
A
B
C
A | B | C,
aaAa | B | ,
bBb | b | C ,
cC | }
=
=
=
=
Assim, G = (V , , P , S ), e P torna-se:
{S , A, B , C }
{A, B , C }
{B , C }
{C }
210
{S
A
B
C
aaAa | | bBb | b | cC ,
aaAa | | bBb | b | cC ,
bBb | b | cC | ,
cC | }
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 contexto isentas de produes em vazio.
Mtodo:
1. Para cada A N , constri-se NA tal que NA = {B N | A B } da
seguinte forma:
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;
ii. Desviar para (1.c);
Caso contrrio:
i. NA Ni1 ;
2. Se A N , A 6 NA , ento NO; caso contrrio, SIM.
211
Mtodo:
212
{A X1 Z1 ,
Z1 X 2 Z2 ,
Zn2
...
Xn1 Xn }
E + T | T,
T F | F,
(E ) | a}
213
{E E [+T ] | T ,
[+T ] [+]T ,
[+] +,
T T [F ] | F ,
[F ] []F ,
[] ,
F [(][E )] | a,
[(] (,
[E )] E [)]}
Sada: uma gramtica livre de contexto G = (V , , P , S ) sem recurses esquerda e tal que L(G) = L(G ).
Mtodo:
1. N N ;
2. P ;
3. i 1;
4. Considerem-se os elementos de N ordenados segundo um critrio arbitrrio,
X1 , X2 , . . ., Xp ;
214
6. Neste passo, todas as alternativas de substituio para Xi podem ser reagrupadas na forma:
Xi Xi 1 | . . . | Xi m | 1 | . . . | n
em que i se inicia com ou Xj N , j > i. Introduzir um novo noterminal Xi e criar as produes abaixo em substituio s acima agrupadas:
Xi
Xi
1 | . . . | n | 1 Xi | . . . | n Xi
1 | . . . | m | 1 Xi | . . . | m Xi
215
E + T | T,
T F | F,
(E ) | a}
E
T
T
F
T | TE ,
+T | +TE ,
F | FT ,
F | FT ,
(E ) | a}
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
X4
X2 X3
X3 X2
X4 X1
X1 X3
| a,
| X2 b | b,
| c,
| 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
X2
X3 X2 | b | X3 X2 X2 | bX2
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
X2 X3 X3 | aX3 | X3 e | d
X4 X1 X2 X3 X3 | cX2 X3 X3 | bX3 X3 | X4 X1 X2 X2 X3 X3 |
X1 X2 X3 X3 | X1 X2 X2 X3 X3 | X1 e | X1 X2 X3 X3 X4 | X1 X2 X2 X3 X3 X4 | X1 eX4
X2 X3 | a,
X2
X3
bX2 | b,
X4 X1 | c,
X2
X4
X4
X3 X2 | b | X3 X2 X2 | bX2 ,
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 algoritmo/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 converso 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.
217
Mtodo:
1. Considere-se uma ordenao dos smbolos Xi N , tal que, se Xi
Xj , Xj N e V , ento j > i. Seja, portanto, X1 < X2 < . . . < Xr .
2. N N ;
3. P {Xr | Xr P };
4. i r 1;
5. Se i = 0 ento desviar para (6). Caso contrrio:
a) Considerem-se todas as produes de Xi iniciadas com Xj , j > i.
Substitua-se Xj pela sua definio e repita-se este passo at que todas
as alternativas de substituio para Xi sejam iniciadas apenas com
smbolos terminais;
b) i i 1;
c) Desviar para (5);
6. Para cada produo da forma:
Xi A2 . . . Ak , com , Aj V , 2 j k
Se Aj , substitua-se Aj por um novo no-terminal Aj e faa-se N N
{Aj }, obtendo-se assim Xi B2 B3 . . . Bk , com Bj {Aj , Aj }, 2 j k .
Incluir em P todas as produes assim obtidas.
7. Para cada novo smbolo no-terminal Aj introduzido no passo anterior, criar
uma nova produo Aj Aj e fazer P P {Aj Aj }.
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
T
F
T | TE ,
+T | +TE ,
F | FT ,
F | FT ,
(E ) | a}
(E ) | a
(E ) | a | (E )T | aT
(E ) | a | (E )T | aT | (E )E | aE | (E )T E | aT E
+T | +TE
F | FT
{F
(E ) | a | (E ) T | aT | (E ) E | aE | (E ) T E | aT E ,
+T | +TE ,
E
)
(E ) | a | (E ) T | aT ,
F | FT ,
)}
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.
{X1
bX2 X3 X3 X4 X1 X2 X3 | aX3 X4 X1 X2 X3 | ce X4 X1 X2 X3 |
219
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 |
X2
X2
X3
X4
X4
e
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}
220
q0
Z0
F
Dos sete elementos que compem este sistema formal, apenas trs merecem explicao 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:
Q 2Q
Q ( {}) 2Q
Diferentemente do Captulo 3, em que os modelos de autmato finito foram considerados em escala crescente de complexidade, os autmatos de pilha sero considerados,
no presente captulo, a partir de seu modelo mais geral, ficando para o leitor a tarefa
de interpretar e eventualmente utilizar, onde adequado, os modelos mais restritos pre-
221
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:
Pilha Stack: alm das operaes de empilhamento e desempilhamento de elementos no topo da pilha (push e pop), permite que os demais elementos da
mesma sejam endereados diretamente, somente para consulta;
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 configurao 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 configurao inicial para o reconhecimento de uma cadeia w representada como
(q0 , w , Z0 ).
As possibilidades de movimentao de um autmato de pilha em uma dada configurao so determinadas a partir de trs informaes: o seu estado corrente, o prximo
smbolo presente na cadeia de entrada e o smbolo armazenado no topo da pilha. Observese, pela definio da funo , a possibilidade de movimentaes em vazio, sem consumo
de smbolos da fita de entrada, e tambm a possibilidade de serem especificadas transies
no-determinsticas. Note-se tambm a obrigatoriedade, imposta por essa formulao, de
se consultar o smbolo presente no topo da pilha em toda e qualquer transio efetuada
pelo autmato.
Aps a aplicao de uma transio, o cursor de leitura sofre um deslocamento de
uma posio para a direita, e o smbolo presente no topo da pilha removido, sendo
substitudo pela cadeia de smbolos especificada no lado direito da transio. No caso de
222
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 caracterizao, 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 critrio 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, simplesmente, (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
Deve-se notar, em primeiro lugar, que o determinismo deste autmato decorre do fato de que
a funo exibe no mximo um elemento para cada combinao possvel de estado, smbolo de
entrada e smbolo no topo da pilha, e tambm porque inexistem transies em vazio que se refiram
a pares de estado e smbolo no topo da pilha considerados nas transies no-vazias: note-se que a
nica transio em vazio deste autmato ocorre no estado q1 , com um smbolo do alfabeto de pilha
(Z0 ) diferente do utilizado na transio no-vazia desse mesmo estado (C ).
A linguagem definida por M1 :
V1 (M1 ) = {w | (q0 , w , Z0 ) (q, , ), q Q}
Inspecione-se agora as produes deste autmato com o intuito de determinar a linguagem por
ele aceita. Partindo-se do estado inicial, os nicos smbolos de entrada admitidos so a e b. Para
cada smbolo a consumido na entrada, a pilha acrescida da cadeia CC em seu topo, preservandose o restante de seu contedo. Ao ocorrer uma transio com o smbolo de entrada b, h apenas
uma mudana de estado, no havendo qualquer alterao no contedo da pilha. Nesse novo estado,
note-se que so especificadas apenas transies envolvendo o smbolo de entrada c. Para cada c
consumido, um smbolo C retirado do topo da pilha, at que reste apenas o smbolo inicial da
pilha, o qual removido atravs de uma transio em vazio.
Observe-se que o conjunto de produes assim formulado impe que as sentenas aceitas pelo
autmato sejam construdas de modo tal que, para cada smbolo a previamente consumido no incio
da cadeia, dois smbolos c sejam necessariamente colocados em correspondncia com ele no final
da cadeia de entrada. Note-se ainda que a seqncia de smbolos a separada da seqncia de
smbolos c por exatamente um smbolo b. Observe-se que o papel desempenhado pela pilha, neste
caso, consiste em manter a memria da quantidade de smbolos a que foram localizados no incio
da cadeia, possibilitando o reconhecimento futuro da correspondente quantidade de smbolos c ao
trmino da cadeia de entrada.
Como conseqncia, o conjunto de sentenas capazes de conduzir este autmato a configuraes finais, com base no critrio de pilha vazia, e portanto a linguagem por ele definida, o
seguinte:
V1 (M1 ) = {a i bc 2i | i 0}
Considerem-se algumas sentenas desta linguagem e a correspondente seqncia de movimentos executada pelo autmato durante o seu reconhecimento:
1.
Sentena: b
Movimentos: (q0 , b, Z0 ) (q1 , , Z0 ) (q1 , , )
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 )
225
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 definidos 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, ).
=
=
=
=
{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 )}}
{q4 }
226
(a, Z0 )/CCZ0
q1
q0
(c, C )/
(a, Z0 )/CZ0
(c, C )/
(c, C )/
q3
q4
(, Z0 )/Z0
q2
(a, C )/CC
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 )
Sentena: aacc
Movimentos: (q0 , aacc, Z0 ) (q1, acc, CCZ0 ) (q1 , cc, CCCCZ0 ) (q3 , c, CCCZ0 )
(q3 , , CCZ0 )
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 decorrncia da existncia de transies no-determinsticas podem ser representadas graficamente na
forma de uma rvore, conforme ilustrado na Figura 4.7:
Figura 4.8:
Rejeio em autmato de pilha nodeterminstico do Exemplo 4.30
2
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
Mtodo:
1. Q Q {qv , q0 } (supondo-se, sem perda de generalidade, que Q
{qv , q0 } = );
2. {Z0 } (supondo-se, sem perda de generalidade, que {Z0 } = );
3. Funo de transio :
a) ;
b) (q0 , , Z0 ) {(q0 , Z0 Z0 )};
c) (q, , ) (q, , ),
q Q , , ( {});
q F , ( {Z0 });
( {Z0 }).
229
=
=
=
=
{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 )}}
{q2 }
230
q0
(c, Z0 )/
q2
q1
(, Z0 )/
(Q , , , , q0 , Z0 , )
{q0 , q1 , q2 , qv , q0 }
{Z0 , A, B , Z0 }
231
(b, B )/, (a, A)/
q0
(, Z0 )/Z0 Z0
q0
q1
(c, Z0 )/
(, Z0 )/, ...
(, Z0 )/
qv
q2
(, Z0 )/, ...
Teorema 4.12 (Estado final pilha vazia) Seja M um autmato de pilha nodeterminstico com critrio de aceitao baseado em pilha vazia. Ento, possvel definir um autmato de pilha no-determinstico M com critrio de aceitao baseado em
estado final, de modo que V (M ) = L(M ).
Justificativa O Algorimo 4.10 apresenta um mtodo para se efetuar tal converso.
Algoritmo 4.10 (Estado final pilha vazia) Obteno de um autmato de pilha
baseado em critrio de aceitao de estado final a partir de outro baseado em critrio de
pilha vazia.
Mtodo:
1. Q Q {qf , q0 } (supondo-se, sem perda de generalidade, que Q
{qf , q0 } = );
2. {Z0 } (supondo-se, sem perda de generalidade, que {Z0 } = );
3. Funo de transio :
a) ;
b) (q0 , , Z0 ) {(q0 , Z0 Z0 )};
c) (q, , ) (q, , ),
q Q , , ( {});
q Q.
Assim como no caso anterior, o objetivo construir M capaz de simular o comportamento de M . Alm disso, sempre que M esvaziar a sua pilha, o objetivo fazer com
232
q0
(a, X )/XX
(b, X )/
q0
(, Z0 )/Z0 Z0
q0
(, Z0 )/
qf
(b, X )/
233
Mtodo:
1. Q {q};
2. N ;
3. F ;
4. Funo de transio:
a) ;
b) (q, , A) = {(q, ) | A P }, A N , , N .
234
ou (q, z , A) (q, z , 2 )
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 reconhecimento 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 noterminais, 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 :
235
236
(EX | a,
(EX | a | (EXY | aY ,
(EX | a | (EXY | aY | (EXZ | aZ | (EXYZ | aYZ ,
F | FY ,
+T | +TZ ,
)}
{(q, EX )},
{(q, )},
{(q, EX ), (q, EXY )},
{(q, ), (q, Y )},
{(q, EX ), (q, EXY ), (q, EXZ ), (q, EXYZ )},
{(q, ), (q, Y ), (q, Z ), (q, YZ )},
{(q, F ), (q, FY )},
{(q, T ), (q, TZ )},
{(q, )}}
Cumpre notar, na demonstrao informal do Teorema 4.13, que, como conseqncia da exigncia de que G se apresente na Forma Normal de Greibach, com produes
obedecendo exclusivamente ao formato A , com , que esta demonstrao no
se aplica ao caso das linguagens livres de contexto que incluam a cadeia vazia. A fim de
generalizar o resultado desse teorema, deve-se introduzir uma pequena modificao para
contemplar o caso de linguagens livres de contexto que incluam a cadeia vazia.
A modificao em questo consiste na introduo de um novo estado q0 em M ,
renomeando-se o estado q para q1 . Duas novas transies devem tambm ser acrescentadas:
(q0 , , S ) = {(q0 , ), (q1 , S )}
A transio (q0 , , S ) = {(q0 , )} permite que o autmato remova S da pilha sem
consumir smbolos da cadeia de entrada, possibilitando, portanto, o reconhecimento de .
237
aSBS ,
aB ,
b}
A linguagem definida por esta gramtica, L(G), aceita por um autmato M que tenha a
seguinte funo de transio:
(q, a, S )
(q, b, B )
=
=
S aB ab
Logo, L(G) = {ab, aabbab, . . .}. Considerando-se a linguagem L = L {}, pode-se imediatamente 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, )}
no produziria o efeito desejado, que o de permitir o reconhecimento de L {} a partir do
autmato-base M . Para isso, preciso acrescentar o estado adicional, tornando a funo de
transio do autmato M :
(q0 , , S )
(q1 , a, S )
(q1 , b, B )
=
=
=
{(q0 , ), (q1 , S )}
{(q1 , SBS ), (q1 , B )}
{(q1 , )}
aSBS
aB
b
2
Naturalmente, dada uma gramtica G em que S a raiz, sendo que S garantidamente no comparece no lado direito de nenhuma produo, ento torna-se desnecessrio
acrescentar um estado adicional, se o objetivo de sua incluso for exclusivamente o de
238
Sada: um autmato de pilha no-determinstico M = (Q , , , q, S , F ) com critrio de aceitao de pilha vazia, tal que V (M ) = L(G);
Mtodo:
1. Q {q};
2. V ;
3. F ;
4. Funo de transio:
a) ;
b) (q, , A) = {(q, ) | A P }, A N , V ;
c) (q, , ) = {(q, )}, .
Observe-se, neste caso, que o alfabeto de pilha o prprio vocabulrio V da gramtica, e no apenas o conjunto dos no-terminais N como no caso anterior. Autmatos
construdos segundo este critrio operam atravs da repetida substituio dos smbolos
no-terminais no topo da pilha, sem consumo de smbolos da fita de entrada, at que
surja um smbolo terminal do topo da pilha. Nesta configurao, a sua remoo condicionada presena do mesmo smbolo na posio de leitura correntemente apontada
pelo cursor da fita de entrada.
Assim como no caso anterior, autmatos construdos segundo este critrio tambm simulam a seqncia de derivaes mais esquerda que seria feita pela gramtica
correspondente na gerao da mesma sentena. Note-se que:
1. Pelo primeiro mtodo, a escolha da produo a ser aplicada depende do noterminal no presente topo da pilha e tambm do prximo smbolo de entrada. No-
239
A 1
A 2
Por outro lado, regras iniciadas com smbolos distintos no geram no-determinismo:
A 1 1
A 2 2
A 1
A 2
A 1 1
A 2 2
Constata-se, dessa maneira, que o segundo mtodo gera uma situao de nodeterminismo para regras que se iniciam com smbolos diferentes, o que no ocorre no
primeiro mtodo. Assim, o segundo mtodo tende a apresentar mais situaes nodeterminsticas 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 apresenta 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 determinsticos. 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, empregada 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 renomeados para Z e Y .
{E
T
T | TZ ,
F | FY ,
240
(E ) | a,
F | FY ,
+T | +TZ }
Aplicando-se o mtodo alternativo (Algoritmo 4.12), obtm-se o autmato de pilha nodeterminstico cuja funo de transio :
{(q, , E )
(q, , T )
(q, , F )
(q, , Y )
(q, , Z )
(q, a, a)
(q, (, ()
(q, ), ))
(q, +, +)
(q, , )
Mtodo:
1. N {[qi Zqk ] | qi , qk Q e Z } {S };
2. P ;
3. q, q1 Q , {}, Z , Z1 , . . . , Zk , se {(q1 , Z1 . . . Zk )} (q, , Z ),
k 0, ento:
P P {[qZqk +1 ] [q1 Z1 q2 ][q2 Z2 q3 ] . . . [qk Zk qk +1 ]}
para qualquer seqncia de qj Q , 2 j (k + 1);
241
4. P P {S [q0 Z0 q]}, q Q .
possvel demonstrar formalmente (ver [46]), por induo sobre a quantidade de
derivaes efetuadas atravs de G, que a gramtica assim definida gera exatamente a
mesma linguagem aceita pelo autmato, ou seja:
(q0 , x , Z0 ) (q, , ) se e somente se
S x
com , V
242
com qi , r Q , A
q0
(a, X )/XX
(b, X )/
(, X )/X
q1
(, X )/XX
(b, Z0 )/
243
A obteno de G, tal que L(G) = V (M ), tem como ponto de partida as duas produes do
conjunto:
{S
S
[q0 Z0 q0 ],
[q0 Z0 q1 ]}
(4.7)
(4.8)
(4.9)
(4.10)
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 noterminal 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, descartase 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 )
{[q0 Z0 q1 ]
[q0 Z0 q1 ]
(4.11)
(4.12)
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 )
{[q0 Xq0 ]
[q0 Xq0 ]
(4.13)
(4.14)
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 )
{[q0 Xq1 ]
[q0 Xq1 ]
[q0 Xq1 ]
(q0 , , X ) = (q1 , X )
(4.15)
(4.16)
(4.17)
244
[q1 Z0 q1 ]
(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 , )
{[q1 Xq1 ]
[q1 Xq1 ]
(q1 , , X ) = (q1 , XX )
b,
[q1 Xq1 ][q1 Xq1 ]}
(4.19)
(4.20)
{S [q0 Z0 q1 ],
[q0 Z0 q1 ] a[q0 Xq1 ][q1 Z0 q1 ],
[q0 Xq1 ] a[q0 Xq1 ][q1 Xq1 ],
[q0 Xq1 ] [q1 Xq1 ],
[q1 Z0 q1 ] b,
[q1 Xq1 ] b,
[q1 Xq1 ] [q1 Xq1 ][q1 Xq1 ]}
{S A,
A aBC ,
B aBD,
B D,
C b,
D b,
D DD}
245
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 considerada. 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 anteriormente, 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 ,
X aXX ,
X X,
X b,
X XX ,
Z0 b}
(de
(de
(de
(de
(de
(de
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
246
com , +
com +
247
248
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):
249
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
250
S uXy uwy
S uXy uvvwxxy
S uXy uvvvwxxxy
...
S uXy uv i wx i y, i 0
Sentenas que apresentem um certo comprimento mnimo geram rvores de derivao com uma certa altura mnima;
Como a quantidade de smbolos no-terminais da gramtica limitada, necessariamente dever haver repetio de smbolos em algum caminho da rvore de
derivao correspondente;
251
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.
2.
3.
4.
5.
252
2.
3.
vwx contm smbolos a (pelo menos um) seguidos de smbolos b (pelo menos um);
4.
5.
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:
1.
2.
3.
4.
5.
6.
Pelo exposto, fica claro que a hiptese inicial falsa e que L2 no uma linguagem livre de
contexto.
2
Exemplo 4.40 A linguagem L3 = {a k | k 1 um nmero primo} no livre de contexto.
Suponha-se que L3 seja livre de contexto e considere-se a sentena = a p , cujo comprimento seja
maior que o valor da constante n definida pelo Pumping Lemma para linguagens livres de contexto,
portanto, p > n. Se = uvwxy pertence a L3 , ento, de acordo com o Lemma, a sentena uwy
tambm deve pertencer. Seja q = |uwy |.
O comprimento das sentenas uv i wx i y, portanto, pode ser calculado da seguinte forma:
|uv i wx i y | = |uwy | +i | vx |. Em particular, o comprimento da sentena |uv q wx q y | = |uwy |
+q | vx | = q + q | vx | = q (1 + |vx |). Logo, o comprimento de |uv q wx q y | no primo e isso
prova que L3 no pode ser livre de contexto.
Vale lembrar que, no Exemplo 3.51 da Seo 3.8 (Pumping Lemma para as Linguagens
Regulares), esta mesma linguagem foi demonstrada como sendo no-regular.
2
253
q0
q1
(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 contexto, decorrente da relativa facilidade com que elas podem ser representadas e manipuladas, a dificuldade acima mencionada levou os pesquisadores a um estudo mais
aprofundado dessa classe de linguagens, visando fornecer aos projetistas e implementadores 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 determinsticas so aquelas que podem ser reconhecidas por autmatos de pilha determinsticos.
254
3 Uma
reduo corresponde ao inverso de uma derivao, ou seja, substituio do lado direito de uma produo,
em uma forma sentencial, pelo lado esquerdo correspondente. Por exemplo, se X uma produo, ento
X denota uma derivao e X denota uma reduo. Uma seqncia de redues mais
esquerda corresponde ordem inversa da seqncia de derivaes mais direita que gera a mesma cadeia.
255
=
=
=
=
(V , , P , S )
{S , X , a, b, c}
{a, b, c}
{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:
256
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.
Forma sentencial
S
Xc
aXbc
aXbc
aaXbbc
aaXbbc
aabbc
aabbc
aabbc
aabbc
Cadeia de entrada
[a]abbc
[a]abbc
[a]abbc
a[a]bbc
a[a]bbc
aa[b]bc
aa[b]bc
aab[b]c
aabb[c]
aabbc
Produo utilizada
S Xc
X aXb
X aXb
X
-
Tabela 4.1: Seqncia de derivaes mais esquerda realizada por um reconhecedor LL(1) na anlise da cadeia
aabbc
Forma sentencial
S
Xc
c
c
Cadeia de entrada
[c]
[c]
[c]
c
Produo utilizada
S Xc
X
-
Tabela 4.2: Seqncia de derivaes mais esquerda realizada por um reconhecedor LL(1) na anlise da cadeia
c
2
Exemplo 4.43 Considere-se a linguagem L3 = {x 2n y 2n e | n 0} {x 2n+1 y 2n+1 o | n 0}. A
gramtica G3 abaixo gera esta linguagem:
257
G3
V
=
=
=
=
(V , , P , S )
{S , E , O, x , y, e, o}
{x , y, e, o}
{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
Cadeia de entrada
[x ]xyye
x [x ]yye
xx [y]ye
xx [y]ye
xxy[y]e
xxyy[e]
xxyye
Produo utilizada
E
O xEy
E xOy
S Ee
-
Tabela 4.3: Seqncia de redues mais esquerda realizada por um reconhecedor LR(1) na anlise da cadeia
xxyye
Forma sentencial
xxxyyyo
xxxyyyo
xxxyyyo
xxxyyyo
xxxEyyyo
xxOyyo
xEyo
Oo
S
Cadeia de entrada
[x ]xxyyyo
x [x ]xyyyo
xx [x ]yyyo
xxx [y]yyo
xxx [y]yyo
xxxy[y]yo
xxxyy[y]o
xxxyyy[o]
xxxyyyo
Produo utilizada
E
O xEy
E xOy
O xEy
S Oo
-
Tabela 4.4: Seqncia de redues mais esquerda realizada por um reconhecedor LR(1) na anlise da cadeia
xxxyyyo
2
259
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 compiladores das respectivas linguagens, e a eles so agregados os demais mdulos de anlise
e de gerao de cdigo, para completar as funes do compilador.
260
Figura 4.25: Correspondncia entre classes de gramticas e classes de linguagens livres de contexto
Conforme discutido em [49], demonstra-se que a relao de incluso entre as classes
de gramticas representadas na Figura 4.24 prpria. Isso significa que possvel garantir a existncia, j verificada na Seo 4.4, de gramticas livres de contexto que no
pertencem classe das gramticas livres de contexto no-ambguas sendo, portanto,
ambguas , e tambm de gramticas livres de contexto que no so LR(k ), porm ainda
assim so no-ambguas.
Dessa forma, cumpre responder questo: Ser possvel identificar alguma subclasse das linguagens livres de contexto que esteja em correspondncia com a classe das
gramticas livres de contexto no-ambguas?.
Para responder a essa questo, considere-se:
1. Conforme a definio, toda e qualquer linguagem livre de contexto que no seja
inerentemente ambgua (ver Seo 4.4) pode ser gerada por pelo menos uma gramtica livre de contexto no-ambgua. Portanto, razovel considerar-se uma
classe de linguagens livres de contexto no-ambguas.
2. De acordo com a hierarquia de gramticas apresentada na Figura 4.24, toda gramtica livre de contexto LR(k ) tambm uma gramtica livre de contexto noambgua, o que implica que a classe das linguagens livres de contexto determinsticas est includa na classe das linguagens livres de contexto no-ambguas.
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 nodeterminstica, e a sua existncia demonstra que a relao de incluso entre a classe
das linguagens determinsticas e a classe das linguagens no-ambguas prpria.
4. Ainda de acordo com a hierarquia de gramticas apresentada na Figura 4.24,
toda gramtica livre de contexto no-ambgua tambm uma gramtica livre de
contexto geral, o que implica que a classe das linguagens livres de contexto noambguas est includa na classe das linguagens livres de contexto gerais.
261
262
Toda linguagem inerentemente ambgua tambm no-determinstica. Isso significa que a inexistncia de uma gramtica no-ambgua que gera determinada
linguagem implica a inexistncia de um autmato de pilha determinstico que reconhea essa mesma linguagem. Implica, tambm, a inexistnca de uma gramtica
LR(k ) que a gere.
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.
263
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 }
264
G2
Entradas:
Sada: um autmato de pilha M3 = (Q3 , , , 3 , q03 , Z0 , F3 ), com critrio de aceitao de pilha vazia, tal que V (M3 ) = L(M1 ) L(M2 );
Mtodo:
1. Q3 = Q1 Q2 ;
2. q03 = (q01 , q02 );
265
3. F3 = F1 F2 ;
4. 3 definida como:
a) 3 ((qi , qm ), , X ) = {((qj , qn ), )},
para 1 (qi , ) = qj e 2 (qm , , X ) = {(qn , )};
b) 3 ((qi , qm ), , X ) = {((qi , qn ), )},
para 2 (qm , , X ) = {(qn , )}.
possvel demonstrar (ver [46]), por induo sobre o tamanho das cadeias analisadas 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, determinstico, 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 .
Exemplo 4.44 Sejam L1 = (ab | ba ) e L2 = (a n b n+1 | b n a n+1 ), respectivamente reconhecidas
pelo autmato finito M1 e pelo autmato de pilha M2 mostrados nas Figuras 4.28 e 4.29.
266
q11
q12
b
q01
a
(, Z0 )/Z0
q21
(b, A)/
(b, A)/
q22
(a, Z0 )/AZ0
(b, Z0 )/
(b, B )/BB
(a, B )/
q02
(, Z0 )/Z0
q23
(b, Z0 )/BZ0
(a, B )/
q24
(a, Z0 )/
F3
3
=
=
{(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 )}
{(q11 , q22 ), (q11 , q24 ), (q12 , q22 ), (q12 , q24 )}
{((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 ), ),
267
q1
q2
q3
q0
q4
q5
q6
M1 :
M2 :
268
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 ), , )
Nesta igualdade esto envolvidas apenas as operaes de interseco, unio e complementao. Sabe-se, conforme demonstrao anterior (Teorema 4.18), que as linguagens livres de contexto so fechadas em relao operao de unio. Se elas fossem
fechadas tambm em relao operao de complemento, deveriam necessariamente ser
fechadas em relao operao de interseco. Como isso no verdade (Teorema 4.21),
conclui-se que as linguagens livres de contexto no so fechadas em relao operao
de complementao.
Mtodo:
1. Obter uma gramtica livre de contexto G tal que L = L(G);
269
=
=
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
V
aBC
bBC
V
abBC
V
abbBC
abC
bbBC
abbC
abc
bbbBC
bbC
bbbC
bbc
V
abbbBC
abbbC
abbc
bbbbBC
bbbbC
bbbc
O tempo de execuo do Algoritmo 4.15 proporcional a m n , onde n o comprimento da cadeia de entrada. Logo, esse tempo varia exponencialmente com o tamanho
da cadeia, o que um resultado considerado ineficiente, e portanto indesejvel do ponto
de vista prtico. Diversos outros algoritmos, no entanto, apresentam tempos de execuo
que so proporcionais a n 3 (ou menos), o que implica importantes ganhos de desempenho. Uma discusso sobre tais algoritmos, assim como referncias, pode ser encontrada
em [46], ou na literatura sobre compiladores, e foge ao escopo da presente publicao.
Por outro lado, conforme o Algoritmo 4.11 (obteno de um autmato de pilha a
partir de uma gramtica livre de contexto na Forma Normal de Greibach), possvel
construir um autmato de pilha que sempre pra, qualquer que seja a cadeia de entrada
que lhe seja submetida. De fato, cada movimentao do autmato construdo com base
naquele algoritmo efetua o consumo de um smbolo da cadeia de entrada. Como o
comprimento dessa cadeia finito, e inexistem ciclos formados por transies em vazio em
tal autmato, seu processamento pra aps um nmero finito de passos (correspondente
ao comprimento da cadeia de entrada), e o mesmo pode ser usado como alternativa para
se determinar se uma cadeia qualquer (no-vazia) pertence a uma linguagem livre de
contexto.
Fica, portanto, demonstrada a existncia de autmatos de pilha que sempre param,
quaisquer que sejam a linguagem livre de contexto considerada e a cadeia de entrada que
lhes sejam submetidas. Essa propriedade anloga obtida no Teorema 3.26 (pertinncia
de uma cadeia a uma linguagem regular), que garante a existncia de autmatos finitos
que sempre param, quaisquer que sejam a linguagem regular considerada e a cadeia de
entrada que lhes seja submetida.
Teorema 4.25 (A linguagem vazia?) Seja L uma linguagem livre de contexto. Ento, a questo L = ? decidvel.
Justificativa L = se e somente se L no contm nenhuma sentena de comprimento
menor que n, onde n a constante definida pelo Pumping Lemma para linguagens
livres de contexto. Tal fato pode ser verificado por demonstrao semelhante que foi
feita no Teorema 3.23 (determina se uma linguagem regular vazia ou no-vazia).
271
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 )
| a
| b
274
Dependncias de contexto so, portanto, uma caracterstica fundamental das linguagens de programao em geral. Do ponto de vista mais terico, as linguagens formais
com tais caractersticas constituem uma classe de linguagens sobre a qual recaem interesses e questes similares s estudadas nos captulos anteriores, entre as quais, maneiras
de formaliz-las do ponto de vista gramatical, modelos de reconhecimento, propriedades
mais importantes e seu relacionamento com as demais classes de linguagens.
275
Para superar tal limitao, empregam-se as gramticas sensveis ao contexto. Formalmente, uma gramtica sensvel ao contexto G = (V , , P , S ) aquela cujas
regras do conjunto P obedecem ao formato , onde:
V NV
| | ||
{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:
276
{S ABC ,
S ABCS ,
AB BA,
AC CA,
BA AB ,
BC CB ,
CA AC ,
CB BC ,
A a,
B b,
C c}
| w | 3}
Como no Exemplo 5.3, pode-se demonstrar que esta linguagem estritamente sensvel ao
contexto. Para isso suficiente provar, atavs do Pumping Lemma, que ela no livre de contexto.2
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
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 contexto 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 tambm 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 representao 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
Declaracao
Comandos
Comando
Expressao
Identificador
Declaracoes Comandos,
Declaracoes Declaracao
| ,
%Identificador ,
Comandos Comando
| ,
#Identificador = Expressao,
Expressao + Expressao
| Expressao Expressao
| Identificador ,
a
| b
| c}
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 sentenas 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 declaraes (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
279
Gramticas matriciais;
Gramticas programadas;
280
{a n b n c n | n 1}
=
=
(G , R)
(V , , P , S ) uma gramtica livre de contexto
R
L(G)
=
=
{p1 , p2 , ..., pn }
Exemplo 5.6
G1
(G1 , R)
G1
(p1 )
(p2 )
(p3 )
(p4 )
(p5 )
R
L(G1 )
=
=
281
Exemplo 5.7
G2
(G2 , R)
G2
(p1 )
(p2 )
(p3 )
(p4 )
(p5 )
(p6 )
(p7 )
(p8 )
(p9 )
R
L(G2 )
Gramticas matriciais
Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estrutura 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
=
=
(G , M )
(V , , P , S ) uma gramtica livre de contexto
M
mi
=
=
L(G)
{m1 , m2 , ..., mn }
(pi1 , ..., pik ) | k 1, pij P , i1 ij ik
{w |
(S = w0 mi1 w1 mi2 w2 mi3 ... miq1 wq1 miq wq = w ), com
(mi1 , mi2 , mi3 , ..., miq1 , miq M ) e
Exemplo 5.8
G3
G3
=
=
(G3 , M })
282
=
=
=
=
=
=
{m1 , m2 , m3 , m4 }
(S abc)
(S aAbBcC )
(A aA, B bB , C cC )
(A a, B b, C c)
{a n b n c n | n 1}
:
:
:
S aAbBcC
aAbBcC aaAbBcC aaAbbBcC aaAbbBccC
aaAbbBccC aaabbBccC aaabbbccC aaabbbccc
Exemplo 5.9
G4
G4
P
M
m1
m2
m3
m4
m5
=
=
=
=
=
=
=
=
L(G4 )
(G4 , M })
:
:
:
:
S AB
AB aAB aAaB
aAaB abAaB abAabB
abAabB abbabB abbabb
Gramticas programadas
Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estrutura 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-
283
=
=
(G , T )
(V , , P , S ) uma gramtica livre de contexto
T
ti
=
=
L(G)
{t1 , t2 , ..., tn }
(pi , si ) | 1 i n, pi P , si 2T
{w |
(S pi1 w1 pi2 ... piq w ) e
(pij +1 sij , j 1)}
Exemplo 5.10
G5
G5
=
=
=
=
=
=
=
=
=
=
=
=
P
T
t1
t2
t3
t4
t5
t6
t7
t8
L(G5 )
(G5 , T })
G6
=
=
=
=
=
=
=
=
=
=
P
T
t1
t2
t3
t4
t5
t6
t7
(G6 , T })
284
=
=
L(G6 )
(B a, {})
(B b, {})
=
=
(G , U )
(V , , P , S ) uma gramtica livre de contexto
U
L(G)
=
=
{P1 , P2 , ..., Pk }, k 1, Pi P , 1 i k
{w |
(S pi1 w1 pi2 ... piq w ) e
(pij P(j
mod k ) , 1
j q)}
Exemplo 5.12
G7
(G7 , U )
G7
P
=
=
U
P1
P2
P3
L(G7 )
=
=
=
=
=
mod 3) :
285
Exemplo 5.13
G8
(G8 , U )
G8
P
=
=
U
P1
P2
P3
P4
=
=
=
=
=
L(G8 )
mod 4) :
O interesse e a pesquisa sobre gramticas com mecanismos controladores de derivaes no novo, tendo ocorrido principalmente entre meados da dcada de 1960 e o
incio da dcada de 1970. Apesar de se tratar de uma rea pouco considerada nos dias de
hoje, tanto do ponto de vista terico quanto do ponto de vista tecnolgico, no se pode
negar que a elevada simplicidade dos seus formalismos, aliada abrangncia da classe
de linguagens por eles representveis, as torna dignas de referncia e estudo na teoria
clssica de linguagens formais. No obstante, o formalismo gramatical tradicional ainda
mais adequado na demonstrao dos resultados tericos considerados nesse texto, e por
esse motivo volta-se a adot-lo nas sees seguintes do presente texto.
286
Sada: uma gramtica sensvel ao contexto G, tal que todas as suas regras satisfazem 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
287
Xi1 Xi2
Zi1 Xi3
Zi(m2) Xim
Zi(m1)
Zim
Zi(m+1)
Zi(n2)
Zi(n1)
Yi1 Zi1
Yi2 Zi2
Yim Zim
Yi(m+1) Zi(m+1)
Yi(n1) Zi(n1)
Yin
Yi(m1) Zi(m1)
Yi(m+2) Zi(m+2)
PQ RS
(ii)
P R+
com P , Q N e R, S ( N ).
Note-se que o lado esquerdo dessas regras contm apenas smbolos noterminais. 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
Pj 1 Qj 2
Pj 1 Wj
R j 1 Wj
Pj 1 Wj
R j 1 Wj
R j 1 Sj 2
(5.1)
(5.2)
(5.3)
(5.4)
Primeiro passo: substituio dos smbolos terminais. O seguinte novo conjunto de regras
obtido:
S
A
B
C
S
BQC
CQ
2.
abc
aSQ
bbcc
Qc
ABC
a
b
c
ASQ
BBCC
QC
(5.5)
(5.6)
(5.7)
(5.8)
(5.9)
(5.10)
(5.11)
Segundo passo: Todas essas regras satisfazem ao critrio de seleo, exceto a Regra (5.10).
Procede-se, ento, sua manipulao.
289
Regra (5.10): criam-se os novos smbolos no-terminais Z61 , Z62 e Z63 , substituindo
a regra original pelo conjunto de regras:
BQ
Z61 C
Z62
Z63
BZ61
BZ62
CZ63
C
(5.12)
(5.13)
(5.14)
(5.15)
(5.16)
ABC
a
b
c
ASQ
BZ61
BZ62
CZ63
C
QC
(5.17)
(5.18)
(5.19)
(5.20)
(5.21)
(5.22)
(5.23)
(5.24)
(5.25)
(5.26)
Terceiro passo: Com exceo das Regras (5.23) e (5.26), todas as demais satisfazem ao
critrio de seleo.
Z61 W7
BW7
BZ62
(5.27)
(5.28)
(5.29)
CW10
QW10
QC
(5.30)
(5.31)
(5.32)
ABC
a
b
c
ASQ
BZ61
Z61 W7
(5.33)
(5.34)
(5.35)
(5.36)
(5.37)
(5.38)
(5.39)
290
BW7
BZ62
CZ63
C
CW10
QW10
QC
(5.40)
(5.41)
(5.42)
(5.43)
(5.44)
(5.45)
(5.46)
2
N e ;
N e N;
N e NN ;
NN e NN ;
291
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 ;
<, >6 so smbolos respectivamente situados imediatamente esquerda e imediatamente direita da cadeia de entrada na configurao inicial;
292
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
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:
L(M ) = { | (<, q0 , >) (, qf , ), com qf F , {<} e {>}
Admite-se, como condio de parada, que = , com ( {<, >}), ( {>
} {}) e no seja definida para (qf , ).
Deve-se, por ltimo, notar que, diferentemente dos autmatos finitos e dos autmatos de pilha, as Mquinas de Turing com fita limitada no exigem, como pr-requisito
para a caracterizao de uma configurao final, que a cadeia de entrada tenha sido esgotada ou, ainda, que o cursor de acesso se encontre direita do ltimo smbolo da referida
cadeia. Configuraes finais so caracterizadas quando (i) no h transio possvel de
ser aplicada na configurao corrente e (ii) o estado corrente final, no importando a
posio do cursor de acesso.
Exemplo 5.15 A Mquina de Turing com fita limitada M = (Q, , , , q0 , <, >, F ) mostrada na
Figura 5.1 aceita a linguagem a b .
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 )}
{q2 }
294
q2
> /(>, D )
> /(>, D )
b/(b, D )
q0
a/(a, D )
q1
b/(b, D )
Como no h movimentao possvel a partir da configurao (< aabb, q2 , b >), que final,
a mquina pra e a cadeia aabbb aceita.
(q0 , a, D)
(q1 , b, D)
(q1 , b, D)
(q0 , b, D)
(q1 , a, D)
(q1 , a, D)
=
=
{q0 , q1 , q2 , q3 , q4 , q5 }
{a, b}
=
=
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 )}
{q4 }
Y /(Y , D )
q3
> /(>, E )
q4
b/(b, D )
Y /(Y , D )
q5
> /(>, E )
b/(b, D )
q0
a/(X , D )
a/(a, D )
a/(a, E )
b/(Y , E )
q1
q2
Y /(Y , E )
Y /(Y , D )
X /(X , D )
2.
3.
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.
A seguir, confere-se a operao de M com algumas cadeias:
296
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 substituio (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 )
q7
> /(>, E )
q8
c/(c, D )
a/(a, D )
q0
a/(X , D )
q1
X /(X , D )
c/(c, D )
q5
a/(X , E )
q3
a/(X , D )
c/(c, E )
q4
a/(a, E ), b/(b, E )
b/(b, D )
a/(a, D )
b/(X , D )
q2
X /(X , E )
X /(X , D )
c/(c, D )
b/(X , E )
q6
b/(b, D )
297
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
298
299
Dessa maneira, as formas sentenciais dos tipos A e B correspondem s duas configuraes iniciais com as quais o autmato poder se defrontar e representam, em termos
gramaticais, uma verso adequada das mesmas para a simulao dos movimentos do reconhecedor pela gramtica. Em outras palavras, partindo-se da raiz S , e pela aplicao
das regras dos itens II e III, chega-se a formas sentenciais compostas apenas por smbolos
no-terminais de G, conforme ilustrado em A e B.
Um conjunto adicional de regras de P deve ser especificado de forma que se possa
garantir que, para toda movimentao possvel da Mquina de Turing com fita limitada
a partir de uma configurao qualquer, haja a possibilidade de uma derivao correspondente em G.
Genericamente, as regras de M enquadram-se em quatro casos (conforme a definio
da funo de transio ):
Nesta forma sentencial, se (q2 , d ) = (q3 , d , E ) (caso iv, novamente), ento a nova
configurao de M (, q3 , < abca >). Para refletir essa nova condio, G deve possuir
regras que permitam a derivao:
[a, < q2 d ][b, e][c, c][a, a >] [a, q3 < d ][b, e][c, c][a, a >]
300
301
XIII;
302
XIX;
303
N = N {[r , qi m ], r }
N = N {[p , < qj q ], p , q }
N = N {[r , n ], r }
XIX. P
N
N
N
N
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:
XXIII.
304
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 )}
{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.
Figura 5.4: Gramtica sensvel ao contexto simulando Mquina de Turing com fita limitada para o Exemplo 5.18
305
2
306
Teorema 5.4 (Mquina de Turing gramtica) Seja L = (G), com G uma gramtica sensvel ao contexto. Ento L = L(M ), sendo M uma Mquina de Turing com
fita limitada.
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 correspondente 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:
i) O no-determinismo inerente sua definio;
ii) A caracterstica monotnica das gramticas sensveis ao contexto (suas formas
sentenciais nunca sofrem contrao aps a aplicao de uma regra);
307
iii) A possibilidade de se considerar a fita de trabalho como sendo composta por vrias
trilhas, sem perda de generalidade.
Algoritmo 5.2 (Mquina de Turing gramtica) Obteno de uma Mquina de
Turing com fita limitada que aceita a linguagem gerada por uma gramtica sensvel ao
contexto.
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:
-
Na primeira trilha est inicialmente gravada a cadeia w que se deseja examinar para determinar se ela pertence ou no a L;
308
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 correspondente, 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.
309
310
a
b
AX
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
Teorema 5.6 (Livres de contexto 6= sensveis ao contexto) A classe das linguagens livres de contexto constitui subconjunto prprio da classe das linguagens sensveis
ao contexto.
Justificativa Atravs da aplicao do Pumping Lemma para linguagens livres de contexto possvel provar que diversas linguagens no so livres de contexto. Entre estas,
311
Entrada: um alfabeto ;
Mtodo:
1. Inicialmente, listam-se todas as gramticas cujas regras tenham o formato
, || = 1, | | = 1, e tais que apenas o no-terminal A1 seja utilizado
nas mesmas. Claramente, existe apenas um nmero finito de gramticas
nesta condio.
2. A seguir, listam-se todas as gramticas cujas regras tenham o formato
, || 2, | | 2, e tais que apenas os no-terminais A1 e A2 sejam
utilizados nas mesmas. Novamente, o conjunto de gramticas que satisfaz
a esta condio finito.
3. Repete-se o passo (2) considerando || 3, | | 3 e os no-terminais
A1 , A2 , A3 , e assim por diante.
312
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 ,
A2 A1 ,
A1 A2 ,
A2 A2 ,
A1 a,
A2 a,
A1 b,
A2 b
, || = 1, | | = 2
A1 A1 ,
A2 A1 ,
aA1 ,
bA1 ,
A1 A1 ,
A2 A1 ,
aA1 ,
bA1 ,
A1
A1
A1
A1
A2
A2
A2
A2
313
A1 A2 ,
A2 A2 ,
aA2 ,
bA2 ,
A1 A2 ,
A2 A2 ,
aA2 ,
bA2 ,
A1
A1
A1
A1
A2
A2
A2
A2
A1 a,
A2 a,
aa,
ba,
A1 a,
A2 a,
aa,
ba,
A1
A1
A1
A1
A2
A2
A2
A2
A1 b,
A2 b,
ab,
bb,
A1 b,
A2 b,
ab,
bb
ou seja:
n = |V2 |
| |
, || = 2, | | = 2
2
m = |V2 | | | = 42 22 = 12
n = |V2 |
| |
= 42 = 16
exclusivamente por smbolos terminais ou seja, || . Dessa forma, so contadas apenas as cadeias
que contenham pelo menos um smbolo no-terminal.
A generalizao desses casos pode ser resumida na questo: quantas gramticas sensveis
ao contexto distintas podem ser geradas com n smbolos no-terminais distintos e com as regras
obedecendo ao formato , || n, | | n, || | | ?
Para responder a essa pergunta, deve-se, inicialmente, considerar todos os formatos diferentes
que as regras podem assumir, de acordo com tal especificao. Esses formatos so apresentados na
Tabela 5.1:
1::1
1::2
1::3
...
1::n-1
1::n
2::2
2::3
...
2::n-1
2::n
3::3
...
3::n-1
3::n
...
...
n-1::n-1
n-1::n
n::n
314
m = |Vn
n = |Vn |
| |
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
faa regras regras+(|Vn
| | ) |Vn |
regras 0;
2.
para i 1 at n
para j i at n
faa regras regras+((n + 2)i 2i ) (n + 2)j
Os casos anteriores podem ser considerados casos particulares da frmula geral acima. Considerese n = 2, , || 2, | | 2:
regras = 0
i = 1, j = 1
i = 1, j = 2
i = 2, j = 2
n 1;
k regras(n);
3.
calcula gramaticas(k );
4.
n n + 1;
5.
315
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:
G2
l
2
G3
l
3
...
...
Gn
l
n
...
...
316
Unio
Concatenao
Interseco
Complementao
Fecho de Kleene
Sada: uma gramtica sensvel ao contexto G3 , tal que L(G3 ) = L(G1 ) L(G2 );
Mtodo:
317
Sada: uma Mquina de Turing com fita limitada M3 , tal que L(M3 ) = L(M1 )
L(M2 );
Mtodo:
1. M3 inicialmente simula M1 com uma cadeia de entrada w , w = ;
2. Se M1 aceita um prefixo de w , ento M3 simula M2 com o sufixo ;
3. Se M2 aceita , ento M3 pra e aceita a cadeia w .
318
Sada: uma Mquina de Turing com fita limitada M3 , tal que L(M3 ) = L(M1 )
L(M2 );
Mtodo:
1. M3 possui duas fitas de entrada;
2. Uma cadeia w gravada na primeira fita;
3. M3 copia w da primeira para a segunda fita;
4. M3 simula M1 , utilizando a primeira fita;
5. Se M1 aceita w , ento M3 simula M2 com a segunda fita;
6. Se M2 aceita w , ento M3 pra e aceita w .
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].
319
6 Linguagens Recursivas
Linguagens recursivas so aquelas que so aceitas por um tipo muito geral de reconhecedor: a Mquina de Turing sem limitao de memria, tambm conhecida como Mquina
de Turing com fita infinita ou, simplesmente, Mquina de Turing.
Como o prprio nome sugere, as Mquinas de Turing com fita infinita diferem
das apresentadas no captulo anterior as Mquinas de Turing com fita limitada
justamente pelo fato de no apresentarem restries quanto ao comprimento da fita de
trabalho. No que se refere aos demais aspectos, elas so definidas de forma muito similar.
Apesar de se tratar de uma diferena aparentemente pouco significativa, o fato de a
fita de trabalho comportar infinitas posies possibilita, conforme est demonstrado no
Teorema 6.3, o reconhecimento de uma categoria de linguagens mais abrangente do que
as linguagens sensveis ao contexto. Estas, por sua vez, conforme veremos mais adiante,
constituem um subconjunto prprio das linguagens recursivas.
Diferentemente das linguagens sensveis ao contexto, no entanto, no h caracterizao conhecida para as linguagens recursivas em termos gramaticais. Ou seja, no
possvel caracterizar essa classe de linguagens a partir da formulao de restries ao formato das produes gramaticais gerais procedimento adotado para definir as classes
das linguagens regulares, das livres de contexto e tambm das sensveis ao contexto.
Da mesma forma, no so conhecidas eventuais propriedades estruturais que possam
ser consideradas para efeito de caracterizao de uma linguagem como sendo recursiva.
Se, por outro lado, as linguagens regulares, as livres de contexto e as sensveis ao contexto
podem ser facilmente identificadas a partir de tais propriedades concatenao, unio
e fechamento de termos no caso das regulares, balanceamento de termos nas livres de
contexto e vinculao de termos nas sensveis ao contexto , as linguagens recursivas
no exibem caractersticas de natureza equivalente, que poderiam servir para identificar
uma determinada linguagem como sendo estritamente dessa classe.
A nica caracterizao que resta, portanto, baseada no modelo de reconhecimento.
O restante deste captulo ser dedicado formalizao e discusso das Mquinas de
Turing e suas propriedades. Na seqncia, as linguagens recursivas sero definidas como
sendo uma classe particular de linguagens aceita por esse tipo de dispositivo (pois as
linguagens recursivas no so a nica classe de linguagens por ele aceita). Finalmente,
ser demonstrado que toda linguagem sensvel ao contexto tambm recursiva e, alm
disso, que existe pelo menos uma linguagem recursiva que no sensvel ao contexto.
Em resumo, demonstrar-se- que a classe das linguagens sensveis ao contexto constitui
um subconjunto prprio da classe das linguagens recursivas. Linguagens que so recursivas porm no so sensveis ao contexto so denominadas linguagens estritamente
recursivas.
322
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 ;
1 Dependendo
6 Linguagens Recursivas
323
324
q0
a/(a, D )
q1
b/(b, D )
q2
c/(c, D )
q3
B /(B , D )
q4
(<, 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 )
q1
B /(B , E )
q2
a/(X , E )
q3
a/(X , D )
Y /(Y , E )
X /(X , D )
q0
Y /(Y , D )
X /(X , E )
b/(Y , D )
q4
B /(B , E )
q5
b/(Y , E )
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 )
326
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
328
q1
a/(a, D )
q0
b/(b, D )
q2
c/(c, D )
q3
B /(B , D )
q4
...
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
6 Linguagens Recursivas
329
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 movimentao 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 alfabeto 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
As demonstraes para os quatro casos iniciais podem ser encontradas em [46]. Todas 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, facilitar 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
Q2 = Q1
2 = 1
F2 = F1
332
Mtodo:
1. Compara-se com cada uma das cadeias i , at que haja coincidncia entre
ambas;
2. Seleciona-se a gramtica Gi correspondente cadeia i (lembrar que foi estabelecida uma funo bijetora entre o conjunto das gramticas e o conjunto
das cadeias);
3. Determina-se se i L(Gi ). Como se trata de linguagens sensveis ao
contexto, tal determinao pode sempre ser efetuada;
4. Se o resultado for que i L(Gi ), ento, por construo, i 6 LR e a resposta NO. Caso o resultado seja que i 6 L(Gi ), ento, por construo,
i LR e a resposta SIM.
6 Linguagens Recursivas
333
334
Cada estado no-final do conjunto de estados Q = {q0 , q1 , q2 ...qn } ser representado, respectivamente, pela cadeia aa, aaaa, aaaaaa...a 2(n+1) (ou seja, uma quantidade par de smbolos a);
C (qi ) = a 2(i+1) , para qi Q QF ;
Assim, cada uma das transies (qi , m ) = (qj , n , E ) de M poder ser representada como:
6 Linguagens Recursivas
335
com qi 6 F , qj 6 F
Se 6= , ento codifica-se ;
A funo de transio ser codificada como uma seqncia de cadeias concatenadas conforme a conveno apresentada individualmente para a codificao de
cada transio (acima);
q0
x /(x , D )
q1
B /(B , E )
q2
336
6 Linguagens Recursivas
337
338
6 Linguagens Recursivas
339
w1
l
M1
w2
l
M2
...
...
wn
l
Mn
...
...
Unio
Concatenao
Complementao
Interseco
As respectivas demonstraes sero apresentadas na seqncia. As linguagens recursivas, no entanto, no so fechadas em relao operao de:
resultado este que no ser demonstrado neste texto, podendo ser encontrado em [46].
340
Mtodo:
1. M3 inicialmente simula M1 com uma cadeia de entrada w ;
2. Se M1 aceita w , ento M3 pra e aceita w ;
3. Se M1 rejeita w , ento M3 simula M2 com a mesma cadeia w ;
4. Se M2 aceita w , ento M3 pra e aceita w ;
5. Se M2 rejeita w , ento M3 pra e rejeita w ;
Mtodo:
1. M3 inicialmente simula M1 com uma cadeia de entrada w , w = ;
6 Linguagens Recursivas
341
Mtodo:
1. M2 simula M1 com uma cadeia de entrada w ;
2. Se M1 aceita w , ento M2 pra e rejeita w ;
3. Se M1 rejeita w , ento M1 pra e aceita w .
342
L1 = ?
L1 = ?
L1 = L2 ?
L1 L2 ?
L1 L2 = ?
possvel demonstrar que as linguagens formadas por essas questes no so recursivas. Logo, nem sempre ser possvel determinar uma resposta, qualquer que seja ela,
para questes dessa natureza envolvendo as prprias linguagens recursivas. As demonstraes no sero feitas neste texto, porm podem ser encontradas em [46].
Por outro lado, conforme mostra o Teorema 6.10, sempre possvel decidir a questo
w L? para a classe das linguagens recursivas.
Teorema 6.10 (A cadeia pertence?) Dadas uma cadeia w e uma linguagem
recursiva L, L , sempre possvel determinar se w L.
Justificativa Conforme a prpria definio de linguagem recursiva, se L uma linguagem
dessa classe, ento existe uma Mquina de Turing M que reconhece (decide) L. Para
determinar se uma certa cadeia w L(M ), basta submeter w anlise de M . Aps um
nmero finito de movimentaes, M ir parar indicando se w pertence ou no a L.
7 Linguagens Recursivamente
Enumerveis
Uma linguagem L dita recursivamente enumervel (ou simplesmente irrestrita)
se for aceita por pelo menos uma Mquina de Turing M . Ou seja:
1. Para toda cadeia w L, M pra e aceita w ;
2. Para toda cadeia z L, M pra e rejeita z ou executa uma seqncia infinita
de movimentaes.
Uma linguagem L dita estritamente recursivamente enumervel se, para
toda e qualquer Mquina de Turing M que aceita L, existir pelo menos uma cadeia
z L, tal que M inicie uma seqncia interminvel de movimentaes em seu
processamento.
Da mesma forma que as linguagens recursivas, e diferentemente das linguagens
regulares, livres de contexto e sensveis ao contexto, no se conhece qualquer tipo de
estrutura que permita identificar as linguagens recursivamente enumerveis apenas pela
inspeo das propriedades sintticas de suas sentenas.
As linguagens recursivamente enumerveis so, portanto, inicialmente caracterizadas a partir das Mquinas de Turing. Conforme ser estudado adiante, elas tambm
podem ser caracterizadas por meio do modelo mais geral de gramticas, as chamadas
gramticas irrestritas (ver Seo 7.3).
A maior importncia desta classe de linguagens reside em sua aplicao ao desenvolvimento terico da computao.
Conforme estudado no Captulo 6, as linguagens recursivas so tambm conhecidas
como linguagens decidveis. Isso ocorre porque, para tal classe de linguagens, sempre
possvel obter uma Mquina de Turing que sempre pra em resposta a qualquer entrada
que lhe seja submetida, no importa se aceitando ou rejeitando tal entrada. Cadeias
que pertencem linguagem so aceitas e cadeias que no lhe pertencem so rejeitadas.
Essa caracterstica particularmente til quando se deseja estudar a computabilidade de
determinados tipos de problema, em particular dos chamados problemas de deciso.
7.1 Decidibilidade
Um problema de deciso um problema cuja formulao conduz a apenas duas respostas 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
345
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 .
346
Mtodo:
1. N possui duas fitas de entrada: na primeira sero gravadas as cadeias de L,
uma a uma (atravs da simulao de M por N ), e na segunda ser gravada
a cadeia w que se deseja verificar se pertence ou no a L;
2. N opera como M : gerando uma nova cadeia de L e gravando-a na fita de
sada;
3. Antes, porm, de acrescentar o delimitador # sua direita e proceder
gerao de uma nova cadeia, N compara a cadeia w contida na segunda fita
com a cadeia recm-gerada na primeira fita;
4. Se forem iguais, N pra e aceita w . Caso contrrio, desviar para (2).
Mtodo:
347
Comprimento 0:
Comprimento 1: a, b
...
348
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 configuraes), 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 efetuado apenas durante uma seqncia limitada de configuraes (porm suficiente para
a sua aceitao, caso a cadeia pertena linguagem), evitando-se dessa maneira a ocorrncia 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)
...
349
...
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 adequada para linguagens estritamente recursivamente enumerveis.
Mtodo:
1. N gera o prximo par (i, j ) da seqncia;
2. N gera a cadeia i ;
3. A cadeia gerada i gravada em uma fita auxiliar de N (fita 1);
4. A fita 2 de N contm uma codificao C (M ) da mquina M ;
5. N simula M com a cadeia i gravada na fita 1, efetuando j movimentaes;
6. Caso M aceite i na j -sima configurao, ento a cadeia i # gravada
na fita 3, imediatamente aps o final da cadeia anteriormente gravada nessa
mesma fita;
7. Desviar para (1).
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.
350
aAbcC
B
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
YZ
ABC
X
Y
Z
XAYZC
B
Y
a
b
c}
2
aAbc
aAbC |
bC
cc}
S aAbc abc
351
aBSa | aBXa
aB
Xb
a}
352
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 correspondentes:
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 , || | |:
353
Fazer:
N2 N2 {Xi , 1 i n 1}
P2 P2
{A1
X1 A2
X2 A3
Xm2 Am1
Xm1 Am
Xm
Xm+1
Xn2
Xn1
B1 X1
B2 X2
B3 X3
...
Bm1 Xm1
Bm Xm
Bm+1 Xm+1
Bm+2 Xm+2
...
Bn1 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
(7.1)
(7.2)
(7.3)
(7.4)
(7.5)
(7.6)
(7.7)
B1 X1 ,
B2 X2 ,
B3 X3 ,
B4 X4 ,
B5 X5 ,
B6 X6 ,
B7 }
X1 N ,
MN ,
MX2 ,
B2 X2 }
Transformao semelhante deve ser aplicada na produo (7.3), pois as demais j se encontram
enquadradas nos formatos originalmente propostos.
2
Exemplo 7.6 De acordo com a etapa (v ), a produo A1 A2 A3 A4 A5 A6 A7 B1 B2 B3 deve ser
substituda pelo conjunto de produes:
{A6 A7
X0 Y0
A5 Y0
X1 Y1
A4 Y1
X2 Y2
A3 Y2
X3 Y3
A2 Y3
X4 Y4
A1 Y4
Y5 B1
X0 Y0 ,
Y0 ,
X1 Y1 ,
Y1 ,
X2 Y2 ,
Y2 ,
X3 Y3 ,
Y3 B3 ,
X4 Y4 ,
Y4 B2 ,
Y5 B1 ,
B1 }
(7.8)
(7.9)
(7.10)
(7.11)
(7.12)
(7.13)
(7.14)
(7.15)
(7.16)
(7.17)
(7.18)
(7.19)
355
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
MN
MY0
A6 N ,
MN ,
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;
Na terceira fita est inicialmente gravado, na primeira posio, o smbolo noterminal S , a raiz da gramtica G. A cadeia gravada na terceira fita ser denotada
por z e, portanto, inicialmente |z | = |S | = 1.
A operao de M no-determinstica e acontece da seguinte forma:
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;
3. Para cada thread criado no passo (2):
356
357
Algoritmo 7.5 (Irrestritas recursivamente enumerveis) Obteno de uma gramtica irrestrita a partir de uma Mquina de Turing.
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 }
II. P P {S [i , < q0 i #], i ( {B })}
N N {[i , < q0 i #], i ( {B })}
III. P P {A [i , i ]A, A [i , i #], i }
N N {[i , i ], [i , i #], i }
Eles permitem gerar formas sentenciais dos formatos seguintes:
(a) [B , < q0 B #], ou
(b) [i , < q0 i #], ou
(c) [i , < q0 i ][j , j ][k , k ]...[u , u #]
Em todos os casos, o smbolo # usado para delimitar, nas formas sentenciais
geradas pela gramtica, o trmino da cadeia gravada sobre a fita de trabalho de M .
O smbolo # pode ser deslocado direita, e neste caso smbolos B so adicionados ao final da cadeia de entrada. A cadeia de entrada vazia representada pela
forma sentencial do tipo (a). As cadeias de entrada no-vazias so representadas
pelas formas dos tipos (b) (cadeia unitria) e (c) (cadeia de comprimento maior
ou igual a dois).
Assim como na demonstrao do Teorema 5.3, essas formas sentenciais devem ser
interpretadas como a representao de duas componentes:
[i , ...][j , ...][k , ...]...[u , ...] = i j k ...u , correspondente cadeia de entrada que se pretende verificar em M ;
e
358
VIII.
IX.
X.
XI.
XII.
XIII.
P
N
N
N
359
360
361
N N {[r , qi m ], r }
N N {[p , < qj q ], p , q }
N N {[r , n ], r }
XIX. P
N
N
N
N
XXIII.
Cumpre notar, caso a configurao final de M seja atingida em uma situao que
corresponda, em G, aplicao de alguma das produes geradas em XXI, XXIII
e XXIV, que o smbolo #, originalmente gravado dentro de algum no-terminal
362
XXVIII.
=
=
(q10 , B )
{q10 }
{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 )}
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
364
Entrada: a linguagem LU ;
Mtodo:
1. N simula a operao da Mquina M no processamento da cadeia de entrada
w , onde C (M )w a cadeia de entrada de N . N possui duas fitas: na
primeira gravada a cadeia = C (M )w que se pretende analisar; a segunda
usada como rea de trabalho de N , e servir para guardar, em cada
instante, o estado corrente de M ;
2. Trs possibilidades podem acontecer durante o processamento de N :
365
Entrada: a linguagem LK ;
Mtodo:
1. A fita de entrada de N contm, originalmente, a cadeia w a ser
analisada;
2. i 0;
3. N gera a cadeia i ;
4. Para cada cadeia i gerada, N compara i com w ;
5. Se i for igual a w , ento:
a) N constri a Mquina de Turing Mi correspondente cadeia i e
armazena C (Mi ) na fita de trabalho;
b) N simula Mi com a entrada i ;
c) Se Mi aceita i , ento N aceita w ;
6. i i + 1;
7. Desviar para (3).
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
367
Qualquer que seja o alfabeto finito utilizado, sabe-se que o conjunto enumervel. 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 gramtica e L(G) } enumervel. C2 corresponde ao conjunto de todas as gramticas
definveis sobre um certo alfabeto .
Justificativa A demonstrao feita de maneira anloga do Teorema 7.8
368
369
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
As correspondentes demonstraes sero apresentadas a seguir. As linguagens recursivamente enumerveis, no entanto, no so fechadas em relao operao de:
Complementao
Mtodo:
1. M3 possui duas fitas de entrada;
2. Uma cadeia w gravada na primeira fita;
3. M3 copia w da primeira para a segunda fita;
4. M3 simula M1 e M2 simultaneamente, utilizando ambas as fitas de entrada
e executando, alternadamente, movimentos de M1 e de M2 ;
370
Mtodo:
1. M3 inicialmente simula M1 com uma cadeia de entrada w , w = ;
2. Se M1 aceita um prefixo de w , ento M3 simula M2 com o sufixo ;
3. Se M2 aceita , ento M3 pra e aceita a cadeia w .
371
Mtodo:
1. V2 V1 {S2 }
2. P2 P1 {S2 S1 S2 , S2 }
Mtodo:
1. M3 possui duas fitas de entrada;
2. Uma cadeia w gravada na primeira fita;
3. M3 copia w da primeira para a segunda fita;
4. M3 simula M1 , utilizando a primeira fita;
5. Se M1 aceita w , ento M3 simula M2 com a segunda fita;
6. Se M2 aceita w , ento M3 pra e aceita w .
372
Mtodo:
1. M3 possui duas fitas de trabalho;
2. Uma cadeia w gravada na primeira fita;
3. M3 copia w da primeira para a segunda fita;
4. M3 simula M1 e M2 simultaneamente, utilizando ambas as fitas de trabalho
e executando, alternadamente, movimentos em M1 e M2 ;
5. Se M1 aceita w , ento M3 pra e aceita w ;
6. Se M2 aceita w , ento M3 pra e rejeita w .
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.
373
w L?
L=?
L = ?
L1 = L2 ?
L1 L2 ?
L1 L2 = ?
8 Concluses
O estudo das classes de linguagens discutidas neste livro, apresentadas em ordem crescente de complexidade, e configuradas como conjuntos sucessivamente mais abrangentes,
permite que se obtenha uma viso estruturada do assunto, com especial nfase nos aspectos que diferenciam cada classe estudada da respectiva classe antecessora.
O presente captulo apresenta um resumo dos principais resultados registrados nos
captulos anteriores, oferecendo, assim, uma viso panormica da essncia contida em
cada um desses captulos, e tambm dos itens que fazem com que certas classes de
linguagens se assemelhem ou se diferenciem.
Por outro lado, a aplicabilidade de linguagens formais e autmatos, nos campos
prtico e terico, no se encerra em si mesma, apresentando grande relevncia para reas
que sero destacadas mais adiante neste captulo.
1 N.A.
376
8 Concluses
377
demonstrar at hoje se existe ou no equivalncia entre as verses determinstica e nodeterminstica ([58]), todos os demais modelos e tipos de reconhecedor possuem verses
que so comprovadamente equivalentes quanto a esse quesito.
Finalmente, conveniente considerar as diferentes classes de linguagens do ponto
de vista exclusivo das propriedades sintticas que as distingem umas das outras
independentemente do tipo de gramticas ou reconhecedores empregados para a sua especificao. Dessa forma, pelo menos trs classes de linguagens podem ser facilmente
identificadas: a das linguagens regulares, a das linguagens livres de contexto determinsticas e a das linguagens sensveis ao contexto. As demais classes de linguagens, at
o ponto em que se sabe, no exibem propriedades sintticas conhecidas que se possa
considerar como tpicas de todas as linguagens da mesma classe.
Conforme resultados demonstrados ao longo do texto, todas as classes de linguagens
consideradas constituem uma hierarquia de incluso prpria, que comea com a classe das
linguagens regulares e termina com a classe das linguagens no-gramaticais. A Figura
8.2 ilustra a referida hierarquia, incluindo exemplos de linguagens que tornam a relao
de incluso prpria em cada nvel.
Figura 8.2: Hierarquia de incluso prpria das classes de linguagens, com exemplos
As Figuras 8.3 e 8.4 apresentam um resumo das principais propriedades de fechamento e das principais questes de deciso consideradas para cada classe de linguagens.
Onde empregada, a letra N indica que a classe no fechada em relao a uma de-
378
8 Concluses
379
Referncias Bibliogrficas
Adaptatividade
[1] Adapting to Babel: adaptivity & context-sensitivity in parsing, Q. T. Jackson, Ibis
Publishing, 2006
[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 Latinoamericana 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
[5] A stochastic musical composer based on adaptive algorithms, B. A. Basseto e J. J. Neto,
Anais do XIX Congresso Nacional da Sociedade Brasileira de Computao, vol. 3, 1999
[6] Generation and recognition of formal languages by modifiable grammars, B. Burshteyn,
ACM SIGPLAN Notices v.25, n.12, 1990
[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
[9] Um ambiente de desenvolvimento de reconhecedores sintticos baseados em autmatos adaptativos, J. C. D. Pereira e J. J. Neto, II Brazilian Symposium on Programming
Languages, Campinas, SP, Brazil, 1997
[10] Self-modifying finite automata: an introduction, R. S. Rubinstein and J. N. Shutt, Information Processing Letters, v.56, n.4, 1995
[11] Contribuio metodologia de construo de compiladores, J. J. Neto, Tese de livredocncia, Escola Politcnica da USP, So Paulo, 1993
[12] STAD Uma ferramenta para representao e simulao de sistemas atravs de
statecharts adaptativos, J. R. A. Jnior, Tese de doutorado, Escola Politcnica da USP, So
Paulo, 1995
[13] Um formalismo gramatical adaptativo para linguagens dependentes de contexto, M.
K. Iwai, Tese de doutorado, Escola Politcnica da USP, So Paulo, 2000
[14] Alguns aspectos de tratamento de dependncias de contexto em linguagem natural
empregando tecnologia adaptativa, M. de Moraes, Tese de doutorado, Escola Politcnica da
USP, So Paulo, 2006
382
Referncias Bibliogrficas
383
[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 Informatica, 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
Gramticas com derivaes controladas
[37] Formal languages, A. Salomaa, Academic Press, New York, 1973
[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, SpringerVerlag, 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
[41] Gramticas livres de contexto adaptativas com verificao de aparncia, C. A. B. Pariente, Tese de doutorado, Escola Politcnica da USP, 2004
[42] Some problems of finite representability, E. Altman, R. Banerji, Information and Control,
8, 1965
[43] Some questions of language theory, S. Abraham, International Conference on Computational
Linguistics, 1965
[44] Programmed grammars and classes of formal languages, D. J. Rosenkrantz, Journal of
the Association for Computing Machinery, 16, 1969
[45] Periodically time-variant context-free grammars, A. Salomaa, Information and Control,
17, 1970
Linguagens formais e autmatos & Teoria da computao
[46] Introduction to automata theory, languages and computation, J. E. Hopcroft and J. D.
Ullman, Addison Wesley, 1979; Segunda edio: J. E. Hopcroft, R. Motwani and J. D. Ullman,
2001; Terceira edio: 2007
[47] Formal languages and their relation to automata, J. E. Hopcroft and J. D. Ullman, Addison
Wesley, 1969
384
[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
[50] Introduction to formal language theory , M. A. Harrison, Addison Wesley, 1978
[51] Elements of the theory of computation, H. R. Lewis and C. H. Papadimitriou, Prentice-Hall,
1972; Segunda edio: 1998
[52] Introduction to languages and the theory of computation, J. C. Martin, McGraw-Hill,
1991
[53] Theory of finite automata, J. Carroll and D. Long, Prentice-Hall, 1989
[54] Mathematical foundations of programming, F. S. Beckman, Addison Wesley, 1980
[55] Introduction to formal languages, G. E. Rvsz, McGraw-Hill, 1983
[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. Greibach, Journal of the ACM, 12:1
[64] Nondeterministic space is closed under complementation, N. Immerman, Journal of Computing 17, No.5, 1988
[65] Classes of languages and linear bounded automata, S. Y. Kuroda, Information and Control
7:2, 1964
Modelagem e UML
Ruby
[66] Programming Ruby, D. Thomas, Pragmatic Bookshelf, 2005