Você está na página 1de 384

Linguagens Formais e Autmatos

Marcus Vincius Midena Ramos


Curso de Engenharia de Computao
Universidade Federal do Vale do So Francisco

22 de abril de 2008
Sumrio

1 Elementos de Matemtica Discreta 5


1.1 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Relaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5 rvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.6 Teoremas e Demonstraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.7 Conjuntos Enumerveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2 Conceitos Bsicos de Linguagens 31


2.1 Smbolos e Cadeias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 Linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.3 Gramticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.4 Linguagens, Gramticas e Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.5 Reconhecedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.6 Hierarquia de Chomsky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3 Linguagens Regulares 67
3.1 Gramticas Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2 Conjuntos e Expresses Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.3 Autmatos Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.4 Equivalncia entre Gramticas Regulares e Conjuntos Regulares . . . . . . . . . 118
3.5 Equivalncia entre Gramticas Regulares e Autmatos Finitos . . . . . . . . . . . 129
3.6 Minimizao de Autmatos Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . 140
3.7 Transdutores Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
3.8 Linguagens que no so Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.9 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
3.10 Questes Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

4 Linguagens Livres de Contexto 181


4.1 Gramticas Livres de Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
4.2 BNF Estendida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
4.3 rvores de Derivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
4.4 Ambigidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
4.5 Simplificao de Gramticas Livres de Contexto . . . . . . . . . . . . . . . . . . . 200
4.6 Formas Normais para Gramticas Livres de Contexto . . . . . . . . . . . . . . . 211
4.7 Autmatos de Pilha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
4.8 Equivalncia entre Gramticas Livres de Contexto e Autmatos de Pilha . . . . . 233
4.9 Relao entre Linguagens Livres de Contexto e Linguagens Regulares . . . . . . 245
4.10 Linguagens que no so Livres de Contexto . . . . . . . . . . . . . . . . . . . . . 246
4 Linguagens Formais - Teoria, Modelagem e Implementao

4.11 Linguagens Livres de Contexto Determinsticas . . . . . . . . . . . . . . . . . . . 253


4.12 Linguagens Livres de Contexto No-Ambguas . . . . . . . . . . . . . . . . . . . 259
4.13 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.14 Questes Decidveis e No-Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . 268

5 Linguagens Sensveis ao Contexto 273


5.1 Gramticas Sensveis ao Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
5.2 Gramticas com Derivaes Controladas . . . . . . . . . . . . . . . . . . . . . . . 279
5.3 Formas Normais para Gramticas Sensveis ao Contexto . . . . . . . . . . . . . . 285
5.4 Mquinas de Turing com Fita Limitada . . . . . . . . . . . . . . . . . . . . . . . 290
5.5 Equivalncia entre Gramticas Sensveis ao Contexto e Mquinas de Turing com
Fita Limitada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
5.6 Relao entre Linguagens Sensveis ao Contexto e Linguagens Livres de Contexto 310
5.7 Linguagens que no so Sensveis ao Contexto . . . . . . . . . . . . . . . . . . . . 311
5.8 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
5.9 Questes Decidveis e No-Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . 318

6 Linguagens Recursivas 321


6.1 Mquinas de Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
6.2 Critrios de Aceitao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
6.3 Extenses Mais Comuns das Mquinas de Turing . . . . . . . . . . . . . . . . . . 328
6.4 Relao entre Linguagens Recursivas e Linguagens Sensveis ao Contexto . . . . 331
6.5 Linguagens que no so Recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . 332
6.6 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
6.7 Questes Decidveis e No-Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . 342

7 Linguagens Recursivamente Enumerveis 343


7.1 Decidibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
7.2 Mquinas de Turing como Enumeradoras de Linguagens . . . . . . . . . . . . . . 345
7.3 Gramticas Irrestritas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
7.4 Forma Normal para Gramticas Irrestritas . . . . . . . . . . . . . . . . . . . . . . 351
7.5 Equivalncia entre Gramticas Irrestritas e Linguagens Recursivamente Enume-
rveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
7.6 Relao entre Linguagens Recursivamente Enumerveis e Linguagens Recursivas 363
7.7 Linguagens que no so Recursivamente Enumerveis . . . . . . . . . . . . . . . 366
7.8 Propriedades de Fechamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
7.9 Questes Decidveis e No-Decidveis . . . . . . . . . . . . . . . . . . . . . . . . . 373

8 Concluses 375
8.1 Uma Hierarquia de Classes de Linguagens . . . . . . . . . . . . . . . . . . . . . . 375
8.2 Decidibilidade e Complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

Referncias Bibliogrficas 381


1 Elementos de Matemtica Discreta
As linguagens formais (ou linguagens estruturadas em frases) podem ser vistas como
conjuntos. Conseqentemente, muito da teoria e dos principais resultados da rea de
linguagens formais est baseado na ainda mais fundamental teoria dos conjuntos da
matemtica discreta.
A teoria dos conjuntos relativamente extensa, e dela sero apresentados neste
captulo apenas os tpicos, conceitos e definies que se mostram mais importantes para
a fundamentao e o estudo dos captulos seguintes.

1.1 Conjuntos
Um conjunto uma coleo de smbolos, tambm denominados tomos ou elementos,
em que no so consideradas ocorrncias mltiplas dos mesmos nem h relao de ordem
entre eles.
Exemplo 1.1 A incluso do smbolo no conjunto {, , , } resulta no prprio conjunto
{, , , }, pois o mesmo j faz parte do conjunto e, portanto, no deve ser considerado no-
vamente. Por outro lado, o conjunto {, , , } igual ao conjunto {, , , }, uma vez que
no existe relao de ordem entre os elementos que os compem. 2

Um smbolo corresponde a uma representao grfica nica e indivisvel. Se for-


mado por caracteres, um smbolo pode ser composto por um nmero arbitrrio deles.
Exemplo 1.2 So exemplos de smbolos: a, abc, , 1 etc. 2

Alguns conjuntos podem ser especificados atravs da simples enumerao de todos


os seus elementos, denotados entre chaves e separados por vrgulas.
Exemplo 1.3 O conjunto formado pelos elementos 0, 1, 2, 3 representado por {0, 1, 2, 3}. O
conjunto {a, b, c, d , e, f } formado pelas seis primeiras letras do alfabeto romano. O conjunto
{01, 231, 33, 21323} contm os elementos 01, 231, 33 e 21323. 2

Conjuntos podem ser referenciados atravs de nomes, arbitrariamente escolhidos.


Exemplo 1.4 X = {0, 1, 2, 3}, Y = {a, b, c, d , e, f }. Assim, os nomes X e Y passam a denotar os
conjuntos correspondentes. 2

O nmero de elementos contido em um conjunto A denotado por |A|.

Exemplo 1.5 No exemplo 1.4, |X | = 4, |Y | = 6. 2

Os smbolos e 6 servem para denotar se um determinado elemento pertence ou


no pertence a um conjunto, respectivamente.
Exemplo 1.6 No exemplo 1.4, 0 X , 5 6 X , 2 6 Y , b 6 X , c Y , h 6 Y . 2

Conjuntos podem conter um nmero finito ou infinito de elementos. No primeiro


caso, o conjunto pode ser denotado enumerando-se (relacionando-se explicitamente) todos
os elementos que o compem, como foi feito para os conjuntos X e Y do exemplo 1.4,
que so conjuntos finitos.
6 Linguagens Formais - Teoria, Modelagem e Implementao

Conjuntos infinitos podem ser denotados atravs da especificao (formal ou


informal) de regras ou propriedades que devem ser satisfeitas por todos os seus elementos,
possibilitando assim a sua identificao precisa e completa a partir de uma especificao
finita.
Exemplo 1.7 P = {x | x um nmero primo}, Q = {y | n inteiro tal que y = n 2 }. O primeiro
exemplo deve ser lido da seguinte forma: P o conjunto formado pelos elementos x , tal que x
um nmero primo. Em outras palavras, P o conjunto, infinito, formado por todos os nmeros
primos: {1, 2, 3, 5, 7, 11, 13, 17...}. O conjunto Q, tambm infinito, formado por todos os nmeros
que correspondem ao quadrado de algum nmero inteiro: {0, 1, 4, 9, 16...}. 2

Quando um conjunto especificado a partir de regras, o smbolo | deve ser lido


como tal que, e serve para introduzir as condies que devem ser satisfeitas pelos mem-
bros do conjunto, que assim tornam-se conhecidos.
O conjunto que no contm nenhum elemento recebe o nome de conjunto vazio.
Por definio, || = 0. O conjunto vazio denotado por ou ainda pelo smbolo { }.
Assim, { } = .
Dois conjuntos so ditos idnticos, ou simplesmente iguais, se eles contm exa-
tamente os mesmos elementos. A igualdade de dois conjuntos denotada atravs do
smbolo =.
Exemplo 1.8 Considere Z = {a, b} e W = {b, a}. Ento, Z = W . 2

Um conjunto A dito contido em um conjunto B , condio esta denotada atravs


do smbolo , se todo elemento de A for tambm elemento de B . Neste caso diz-se,
equivalentemente, que A um subconjunto de B ou, ainda, que B contm A. Os
conjuntos e A so, por definio, subconjuntos de qualquer conjunto A.
Exemplo 1.9 Para os conjuntos A = {b, c, d }, B = {a, b, c, d , e} e C = {e, a, d , b, c} tem-se que
A B e B C . Portanto, pode-se dizer que A est contido em B e em C , que A subconjunto
de B e de C , que C contm A e B e, ainda, que B e C so subconjuntos um do outro ou que esto
contidos um no outro. B e C , por outro lado, no esto contidos em A. 2

Dois conjuntos M e N so iguais se e somente se M N e N M , e tal igualdade


denotada por M = N . A desigualdade de dois conjuntos expressa atravs do smbolo
6=, ocorrendo portanto quando no mximo apenas uma das duas condies M N e
N M for verdadeira.
Exemplo 1.10 No exemplo 1.9, A B , porm A 6= B . Como B C e C B , ento B = C . 2

Se M N e M 6= N , diz-se que M um subconjunto prprio de N . O smbolo


denota essa condio: M N . O conjunto subconjunto prprio de qualquer
conjunto, exceto do prprio conjunto .
Exemplo 1.11 No exemplo 1.9, A subconjunto prprio de B , porm B no subconjunto prprio
de C . Logo, A B . 2

Algumas operaes importantes sobre conjuntos so apresentadas a seguir.


Conjunto potncia (powerset): Denotado por 2A , onde A um conjunto. Essa
operao utilizada para designar o conjunto formado por todos os possveis subconjuntos
de A:
2A = {B | B A}

Para conjuntos A finitos, |2A | = 2|A| .


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
1 Elementos de Matemtica Discreta 7

Unio: A unio de dois conjuntos A e B corresponde ao conjunto formado por


todos os elementos contidos em cada um dos dois conjuntos A e B . Elementos repetidos
em ambos os conjuntos so considerados uma nica vez no conjunto unio:
A B = {x | x A ou x B }
Trata-se de uma operao associativa, ou seja, uma operao para a qual vale a
propriedade:
(A B ) C = A (B C )
A generalizao da operao de unio denotada da seguinte forma:
n
[
Ai = A0 A1 A2 ... An
i=0

Exemplo 1.13 {a, b, c} {c, d } = {a, b, c, d }. {a, b, c, d } = {a, b, c, d }. 2


Interseco: Define-se a interseco de dois conjuntos A e B como sendo a coleo
de todos os elementos comuns aos dois conjuntos:
A B = {x | x A e x B }
Tambm em decorrncia da associatividade desta operao, a sua generalizao
denotada de forma similar ao caso da unio:
n
\
Ai = A0 A1 A2 ... An
i=0

Exemplo 1.14 {a, b, c} {c, d } = {c}. {a, b} {c, d } = . {a, b, c, d } = . 2


Dois conjuntos A e B so ditos disjuntos se A B = .
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
Diferena: Define-se a diferena entre dois conjuntos A e B (nesta ordem) como
sendo o conjunto formado por todos os elementos de A no-pertencentes ao conjunto B .
Denota-se este conjunto como:
A B = {x | x A e x 6 B }

Exemplo 1.16 {a, b, c} {c, d } = {a, b}. {a, b} {a, b, c} = . {a, b, c} {d , e} = {a, b, c}.
{c, d } {a, b, c} = {d }. {a, b, c} {a, b} = {c}. {d , e} {a, b, c} = {d , e}. 2
Complementao: Define-se a complementao de um conjunto A em relao
ao conjunto B , A B , como sendo o conjunto de todos os elementos de B que no
pertencem a A. Denota-se este conjunto como:
AB = B A
Muitas vezes esta operao definida para um conjunto A em relao a um outro
conjunto B subentendido e, neste caso, escreve-se simplesmente:
A=B A
Diz-se, neste caso, que o conjunto subentendido o conjunto universo da operao.
O resultado da operao conhecido simplesmente como complemento de A.
8 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 1.17 Sejam A = {a, b, c}, B = {a, b, c, d } e C = {d , c, a, b}. Ento, AB = {d } e


B C = . Sendo D = {a, b, c, d , e} o conjunto universo, A = {d , e}, B = C = {e} e D = . 2

Produto cartesiano: O produto cartesiano de dois conjuntos o conjunto formado


por todos os pares ordenados (a, b), em que a um elemento de A, e b um elemento de
B:
A B = {(a, b) | a A e b B }
Um par ordenado uma representao de dois elementos separados por vrgula
e delimitados por parnteses, como em (a, b). Tal representao implica uma relao de
ordem em que o elemento a anterior ao elemento b. Conseqentemente, se a 6= b, ento
(a, b) 6= (b, a).
Se A e B so conjuntos finitos, ento |A B | = |A | | B |.
A generalizao desta operao denotada:

A1 A2 ... An = {(a1 , a2 , ..., an ) | ai Ai para 1 6 i 6 n}

Exemplo 1.18 Sejam A = {a, b, c} e B = {0, 1}. Ento A B =

{(a, 0), (a, 1), (b, 0), (b, 1), (c, 0), (c, 1)}
e
|A B | = |A | | B | = 3 2 = 6
2

Partio: Define-se partio de um conjunto A como sendo qualquer coleo for-


mada por n subconjuntos no-vazios de A, n 1, tal que:

n
[ [n [6=i
n,j
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

A seguir sero apresentados trs importantes resultados acerca de conjuntos, os dois


primeiros conhecidos como Leis de De Morgan, os quais sero teis na demonstrao
de outros teoremas mais adiante no texto.
Teorema 1.1 (Leis de De Morgan) Sejam A e B dois conjuntos quaisquer. Ento
A B = A B e A B = A B.

Justificativa Estas propriedades podem ser inferidas, respectivamente, pela inspeo


dos diagramas das Figuras 1.1 e 1.2.
Na Figura 1.1, da esquerda para a direita, as reas hachuradas dos diagramas re-
presentam, respectivamente, A, B , A B e A B .
1 Elementos de Matemtica Discreta 9

Figura 1.1: Demonstrao da Lei de De Morgan para interseco


de conjuntos

Na Figura 1.2, da esquerda para a direita, as reas hachuradas dos diagramas re-
presentam, respectivamente, A, B , A B e A B .

Figura 1.2: Demonstrao da Lei de De Morgan para unio de


conjuntos

Teorema 1.2 (Igualdade de conjuntos) Sejam A e B dois conjuntos quaisquer. En-
to A = B (A B ) (A B ) = .

Justificativa
() Se A = B , ento (A B ) (A B ) = (A A) (A A) = = .
() Se (A B ) (A B ) = , ento as duas seguintes condies devem ser simultanea-
mente satisfeitas:

1. (A B ) = ;

2. (A B ) = .

Considere-se A C e B C , de forma que A = AC e B = B C . Ento, existem


apenas trs possibilidades para representar a relao entre A e B :

i A 6= B e A B 6= . Logo, A B 6= ;

ii A 6= B e A B = . Logo, A B 6= ;

iii A = B . Logo, A B = .

Portanto, a nica relao possvel entre A e B que satisfaz condio (1) a relao
(iii). Da mesma forma, pode-se facilmente mostrar que (iii) tambm a nica relao
que satisfaz condio (2), e isso completa a demonstrao do teorema. 
10 Linguagens Formais - Teoria, Modelagem e Implementao

A menos de ressalva em contrrio, ao longo deste texto os nomes de conjuntos sero


representados por intermdio das letras maisculas do alfabeto romano (A, B , X , Y etc.).
Elementos de um conjunto so usualmente denotados atravs das letras minsculas do
mesmo alfabeto (a, b, c etc.).
Os seguintes conjuntos sero utilizados no restante deste livro:

N, representando os nmeros naturais {0, 1, 2, 3, ...};

Z, representando os nmeros inteiros {..., 3, 2, 1, 0, 1, 2, 3, ...};

Z+ , representando os nmeros inteiros positivos {1, 2, 3, ...};

Z , representando os nmeros inteiros negativos {..., 3, 2, 1};

R, representando os nmeros reais.

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

Uma relao R aplicada sobre um elemento a de um conjunto A e outro elemento b


de um conjunto B pode ser denotada, em notao infixa, por aRb. Se (a, b) R, diz-se,
de forma abreviada, que aRb.
Os conjuntos A e B recebem, respectivamente, os nomes domnio e co-domnio
(ou contradomnio) da relao R. Por envolver dois conjuntos, essa relao dita
binria e seus elementos recebem a designao de pares ordenados. Relaes binrias
sobre um mesmo conjunto A representam subconjuntos de A A.
Exemplo 1.21 Considere-se a relao binria 6= sobre o conjunto dos nmeros inteiros. Essa
relao se define como o conjunto dos pares ordenados tais que suas duas componentes so diferentes.
Alguns dos elementos do conjunto definido por essa relao so (1, 3), (5, 0), (8, 2) etc. Utilizando
a notao introduzida, os elementos citados, pertencentes a essa relao, so denotados por 1 6= 3,
5 6= 0 e 8 6= 2, coincidindo, portanto, com a representao tradicional da relao.
Notar que (1, 1), (0, 0) e (5, 5) so exemplos de pares ordenados que no satisfazem a essa
relao binria, pois suas duas componentes coincidem. 2

O conceito de relao pode ser generalizado para mais de dois conjuntos, consis-
tindo, sempre, em subconjuntos definidos sobre o produto cartesiano dos conjuntos par-
ticipantes da relao. A relao, nesse caso, dita uma relao n-ria, e corresponde
a um subconjunto do produto cartesiano dos conjuntos envolvidos. Sejam n conjuntos
A1 , A2 , ...An . Os elementos pertencentes ao conjunto definido por uma relao n-ria
sobre A1 , A2 , ...An so, portanto, elementos de A1 A2 ... An , e tm a seguinte
forma:
(a1 , a2 , a3 , ..., an )
onde a1 A1 , a2 A2 , ...an An .
1 Elementos de Matemtica Discreta 11

Tais elementos so denominados nuplas ordenadas. Em casos particulares, como


para n = 2, 3, 4, 5 etc., as nuplas recebem nomes especiais, geralmente os ordinais de n:
pares, triplas, qudruplas, quntuplas etc. Quando n grande, usa-se em geral o nome
n-tupla ordenada. Por exemplo, (a1 , a2 , ...a10 ) considerada uma dcupla (ou uma
10-tupla) ordenada.
Uma relao binria R sobre um conjunto A dita:

Reflexiva: se aRa, a A;

Simtrica: se aRb implica bRa, a, b A;

Transitiva: se aRb e bRc implicam aRc, a, b, c A;

sendo que a, b, c no precisam ser necessariamente distintos.


Exemplo 1.22 A relao binria identidade (=) definida sobre o conjunto dos nmeros inteiros Z
como o conjunto de todos os pares ordenados para os quais as duas componentes so idnticas. Ela
reflexiva, pois a = a, a Z; simtrica, pois a = b implica b = a, a, b Z; e transitiva, uma
vez que a = b e b = c implica a = c, a, b, c Z. Alguns elementos do conjunto definido por essa
relao so (4, 4), (0, 0), (7, 7) etc. Notar que pares ordenados, tais como (1, 3), (0, 5) e (7, 9),
no pertencem a essa relao. 2
Por outro lado, a relao binria maior (>), definida como o conjunto dos pares
ordenados cujas primeiras componentes tenham valor maior que as segundas componen-
tes, 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 .

Exemplo 1.23 Considere-se o conjunto Z dos nmeros inteiros e a relao binria:

Q : {(a, b) Z Z | a 2 = b 2 }
Q = {(0, 0), (1, 1), (1, 1), (1, 1), (1, 1)...(n, n), (n, n), (n, n), (n, n)...}
fcil verificar que Q reflexiva, simtrica e transitiva. Logo, uma relao de equivalncia.
Q induz partio {A0 , A1 , ...} de Z, onde:

A0 = {0, 0}
A1 = {1, 1}
A2 = {2, 2}
...
An = {n, n}
...
Quaisquer que sejam os nmeros a, b Z considerados, se (a, b) Q, ento a e b pertencem
necessariamente ao mesmo conjunto Ai , para algum valor de i 0. Se (a, b) 6 Q, a e b pertencero
sempre a conjuntos distintos desta partio de Z. 2
12 Linguagens Formais - Teoria, Modelagem e Implementao

Diz-se que um conjunto fechado em relao a uma operao se da aplicao


dessa operao a quaisquer membros desse conjunto resultarem sempre elementos que
tambm so membros do mesmo conjunto.

Exemplo 1.24 Considere-se o conjunto X = {x R | x 0} e a operao unria (raiz quadrada).

Qualquer que seja o elemento x X considerado,
x sempre um elemento de X . Portanto, o
conjunto X fechado em relao operao .
Por outro lado, no se pode dizer o mesmo do conjunto R, uma vez que a operao raiz
no definida para nmeros negativos. Logo, o conjunto R no fechado em relao
quadrada
operao . 2

Exemplo 1.25 Considerem-se os conjuntos dos nmeros inteiros Z, dos nmeros naturais N e as
operaes binrias de soma e subtrao. Ento, as seguintes afirmativas so verdadeiras:

O conjunto Z fechado em relao operao de soma. De fato, da soma de quaisquer dois


elementos de Z resulta sempre um elemento que tambm pertence ao conjunto Z;

O conjunto Z fechado em relao operao de subtrao, pois da subtrao de quaisquer


dois elementos de Z resulta sempre um elemento que tambm pertence ao conjunto Z;

O conjunto N no fechado em relao operao de subtrao: nem toda subtrao de


dois elementos arbitrrios de N fornece como resultado um elemento que tambm pertena
ao conjunto N; Assim, por exemplo, se 1 N e 2 N, 2 1 = 1 N, mas 1 2 = 1 6 N;
O conjunto N fechado em relao operao de soma.
2

1.3 Funes
Uma funo um mapeamento que associa elementos de um conjunto denominado
domnio a elementos de um outro conjunto, chamado co-domnio ou contradomnio.
Essa associao deve ser tal que cada elemento do domnio esteja associado a no mximo
um elemento do conjunto co-domnio.
Formalmente, uma funo entre um conjunto A (domnio) e um conjunto B (co-
domnio) definida como uma relao R entre esses conjuntos, de modo que:

(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 = {(1, 5), (2, 3), (4, 5), (8, 1), (7, 3)}
f2 = {(6, 7), (9, 0), (6, 3), (4, 3), (3, 1)}
A relao f1 aderente definio de funo, ao passo que f2 uma relao mas no uma
funo, devido presena simultnea dos pares (6, 7) e (6, 3), que associam o mesmo elemento
6 do domnio a dois elementos distintos do co-domnio (7 e 3). As Figuras 1.3 e 1.4 ilustram,
respectivamente, as relaes f1 e f2 .
1 Elementos de Matemtica Discreta 13

Figura 1.3: Relao que tambm funo

Figura 1.4: Relao que no funo


2

A associao estabelecida pela funo f entre um elemento x do conjunto domnio


X com um elemento y do conjunto co-domnio Y denotada por:

f (x ) = y

De maneira equivalente, diz-se que (x , y) f .


O conjunto imagem de f , denotado por If , o conjunto formado por todos os
elementos do co-domnio Y que estejam em correspondncia com elementos de X , ou
seja, If Y . Formalmente,

If = {y Y | y = f (x )}

O elemento x denominado argumento da funo f , e y denominado imagem


de x pela aplicao de f . Funes com mltiplos argumentos so definidas como um
mapeamento em que o conjunto domnio corresponde ao produto cartesiano de mltiplos
conjuntos:
f : X1 X2 ... Xn Y
Funes com um, dois ou trs argumentos so respectivamente denominadas funes
unrias, binrias ou ternrias, e assim por diante.
Diz-se tambm que uma funo que associa pares ordenados sobre um conjunto
X , ou seja, elementos de X 2 com elementos do prprio conjunto X , uma funo
(operao) binria sobre X .
Exemplo 1.27 Considere f1 : N N, f1 = {y N | y = x 3 , x N}. A funo f1 unria, pois
associa cada elemento de N ao seu cubo. Portanto, f1 : N N. Alguns dos infinitos elementos do
conjunto definido por f1 so: (1, 1), (2, 8), (3, 27) etc. Denota-se f1 (2) = 8, ou ainda (2, 8) f1 . 2
14 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 1.28 Seja f2 : Z Z Z, f2 = {z Z | z = x + y; x , y Z}. A funo binria f2


define a operao (funo) de adio sobre o conjunto dos nmeros inteiros Z, sendo elementos de
f2 : ((1, 2), 3), ((3, 7), 4), ((0, 5), 5) etc. Escreve-se f2 (3, 7) = 4, ou ainda ((3, 7), 4) f2 . 2

Uma funo se diz uma funo total (denotada pelo smbolo ) quando especi-
fica associaes para todos os elementos do conjunto domnio, sem exceo. Formalmente:

x X , y Y | y = f (x )

Exemplo 1.29 A Figura 1.5 ilustra o conceito de funo total.

Figura 1.5: Funo total

Notar que todos os elementos de X tm correspondncia com algum elemento de Y . 2

Exemplo 1.30 Sejam X = {0, 1, 2} e Y = {a, b, c}, respectivamente, o conjunto domnio e o


conjunto co-domnio da funo f1 = {(0, a), (1, b), (2, a)}. A funo f1 : X Y total, pois todos
os elementos do conjunto domnio esto em correspondncia com algum elemento do conjunto co-
domnio. Neste caso, o conjunto imagem de f1 {a, b}. 2

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.

Figura 1.6: Funo parcial

Notar a existncia de um elemento de X sem correspondente em Y . 2


1 Elementos de Matemtica Discreta 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

Diz-se que uma funo um-para-um, ou simplesmente uma funo injetora,


quando elementos distintos do domnio X estiverem associados a elementos distintos do
co-domnio Y , ou seja, quando no houver quaisquer dois elementos distintos do conjunto
domnio associados ao mesmo elemento do conjunto imagem:

x1 , x2 X , x1 6= x2 f (x1 ) 6= f (x2 )

De maneira equivalente, uma funo dita injetora se cada elemento do conjunto


co-domnio estiver associado a, no mximo, um elemento do conjunto domnio.
As Figuras 1.5 e 1.6 representam funes que so, respectivamente, no-injetora e
injetora.
Exemplo 1.33 Seja X = {0, 1, 2}, Y = {a, b, c} e f3 = {(0, c), (1, b)}. A funo f3 : X Y
injetora, pois no existe um mesmo elemento de Y associado a mais de um elemento de X . Por
outro lado, a funo f2 , definida no Exemplo 1.32, parcial mas no injetora, pois o elemento b de
seu conjunto imagem est simultaneamente associado aos elementos 0 e 2 do conjunto domnio. 2

Uma funo f dita sobrejetora se todos os elementos do conjunto co-domnio


estiverem associados a elementos do conjunto domnio, ou seja, se If , o conjunto imagem
de f , for igual ao conjunto co-domnio de f :

y Y , x X | y = f (x )

Dito de outra forma, uma funo sobrejetora se todo elemento do conjunto co-
domnio estiver associado a pelo menos um elemento do conjunto domnio.
Exemplo 1.34 As funes das Figuras 1.5 e 1.6 no so sobrejetoras. A Figura 1.7 ilustra uma
funo sobrejetora.

Figura 1.7: Funo sobrejetora

No h elemento de Y que no corresponda a algum elemento de X . 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 deno-
minao de funo bijetora.
16 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 1.36 As funes das Figuras 1.5, 1.6 e 1.7 no so bijetoras. Em particular, a da Figura
1.5 total, no-injetora e no-sobrejetora; a da Figura 1.6 parcial, injetora e no-sobrejetora; e a
da Figura 1.7 parcial, injetora e sobrejetora. A Figura 1.8 ilustra uma funo bijetora.

Figura 1.8: Funo bijetora

H uma correspondncia biunvoca entre os elementos de X e os de Y . 2

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:

+ : N N N. Ela no injetora, pois a soma de dois nmeros naturais quaisquer


pode corresponder soma de outros nmeros naturais distintos (por exemplo, ((3,4),7) e
((5,2),7)). sobrejetora, pois todo nmero natural pode ser expresso como a soma de dois
outros nmeros naturais. total, pois a cada par de nmeros naturais sempre corresponde
um outro nmero natural.

/ : R R R. No injetora, pois existem vrios casos em que a diviso de dois n-


meros 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),?)).

: Z Z. injetora, pois no possvel que dois nmeros inteiros diferentes tenham a
mesma raiz inteira ((4,2), (9,3) e (3,?)). No sobrejetora, pois nem todo nmero inteiro
corresponde raiz quadrada de algum outro nmero inteiro (por exemplo, (?,-3). No total,
pois a operao raiz quadrada no definida para nmeros inteiros negativos (por exemplo,
(-2,?)).

A Tabela 1.1 resume estes resultados:

Injetora? Sobrejetora? Total?


+:NNN No Sim Sim
/ :RRR No Sim No

:ZZ Sim No No

Tabela 1.1: Propriedades das funes +, / e


2
1 Elementos de Matemtica Discreta 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 repre-
sentao grfica. Neste caso, os ns so denotados por crculos e os arcos por linhas que
unem pares de vrtices.
Exemplo 1.39 Sejam G1 , V1 e A1 conforme abaixo:

G1 = (V1 , A1 )
V1 = {0, 1, 2, 3}
A1 = {(0, 1), (0, 2), (0, 3), (1, 3), (2, 3)}
O grafo G1 possui quatro vrtices, respectivamente numerados de 0 a 3, e cinco arcos, que
conectam pares de vrtices, conforme especificado em A1 . Graficamente, G1 pode ser ilustrado
conforme a Figura 1.9.

0 1 3

Figura 1.9: Grafo


2

Diz-se que um grafo orientado quando os pares da relao binria A sobre V


forem ordenados, ou seja, quando houver relao de ordem entre os elementos que formam
os pares (vi , vj ) A. Caso contrrio, diz-se que o grafo no-orientado.
Na prtica, costuma-se convencionar que vi precede vj no par (vi , vj ) A. Neste
caso, vi denominado predecessor de vj . Por outro lado, vj sucede vi neste mesmo
par, e por isso denominado sucessor de vi . Diz-se tambm que o arco (vi , vj ) emerge
do vrtice vi (ou ainda se inicia no, parte do) e atinge o vrtice vj (ou termina no,
chega ao, alcana).
Grafos orientados empregam, em sua representao, setas associadas aos arcos,
denotando, atravs do sentido dos arcos do grafo, a relao de ordem existente entre os
ns unidos pelo arco em questo. A omisso das setas, em grafos no-orientados, equivale
a considerar que todos os arcos representam conexes bidirecionais.
Exemplo 1.40 No Exemplo 1.39, o grafo G1 est representado como um grafo no-orientado.
Considerando-se desta vez o grafo G1 como sendo um grafo orientado, e sem alterar qualquer
aspecto de sua definio formal, o mesmo poderia ser representado graficamente conforme a Figura
1.10.
18 Linguagens Formais - Teoria, Modelagem e Implementao

0 1 3

Figura 1.10: Grafo orientado G1


2

Um grafo orientado dito ordenado quando houver uma relao de ordem pr-
convencionada sobre todos os arcos que emergem dos diversos vrtices do grafo. Essa
relao de ordem tem por objetivo estabelecer uma seqncia entre os diversos arcos que
partem de um mesmo vrtice, e no costuma ser definida explicitamente, uma vez que
conjuntos no incorporam o conceito de seqncia.
Quando se deseja ordenar os arcos que emergem de cada vrtice, comum que se
leve em conta como referncia a seqncia em que os arcos comparecem na representao
algbrica da funo A. Eventualmente pode-se considerar uma seqncia diferente, desde
que devidamente explicitada na representao do grafo.
Exemplo 1.41 Sejam:

G2 = (V2 , A2 )
V2 = {a, b, c, d }
A2 = {(a, b), (b, a), (a, c), (a, d ), (c, b), (d , c), (c, d )}
Suponha-se, para efeito didtico, que A2 fosse constituda de uma seqncia de pares ordenados
(e no de um conjunto de pares ordenados), redigida de maneira anloga representao do conjunto,
porm sem as chaves:
(a, b), (b, a), (a, c), (a, d ), (c, b), (d , c), (c, d )
Suponha-se, ainda, que um mesmo par ordenado no figure mais de uma vez na mesma
seqncia, e que exista uma relao de ordem implcita entre os pares ordenados, de tal forma que
(a, b) < (b, a) < (a, c) < ... < (c, d ). Isso facilita a percepo de uma relao de ordem definida
para os arcos de G2 , conforme mostrado a seguir:

Vrtice a: inicialmente (a, b), depois (a, c) e por ltimo (a, d )

Vrtice b: apenas (b, a)

Vrtice c: primeiro (c, b) depois (c, d )

Vrtice d : apenas (d , c)

Essa ordenao pode ser representada graficamente numerando-se os arcos do grafo, indicando-
se assim a ordenao relativa dos arcos que partem de um mesmo vrtice:
1 Elementos de Matemtica Discreta 19

1
a b

2
3 1

1
d c

Figura 1.11: Grafo ordenado G2


2

Trs importantes conceitos esto relacionados a grafos orientados, sejam eles orde-
nados ou no. O nmero NS de ramificaes de sada (ou fan-out ) de um dado
vrtice de um grafo orientado indica a quantidade de arcos que partem do mesmo. De
modo similar, o nmero NE de ramificaes de entrada (ou fan-in) de um determi-
nado vrtice refere-se quantidade de arcos do grafo que possuem o vrtice em questo
como destino. Vrtices com NE = 0 so denominados vrtices-base ou vrtices-raiz,
e vrtices com NS = 0 so denominados vrtices-folha.
Um caminho entre dois arcos, respectivamente denominados arcos inicial e final,
em um grafo, uma seqncia ordenada de arcos, de tal forma que o vrtice prede-
cessor de cada arco, exceo do arco inicial, corresponde ao vrtice sucessor do arco
imediatamente anterior na seqncia ordenada.
O comprimento de um caminho o nmero de arcos que o formam. Por definio,
um caminho de comprimento zero aquele que inicia e termina no mesmo vrtice sem
percorrer nenhum arco.
Um caminho denominado ciclo se o vrtice predecessor do primeiro arco coincidir
com o vrtice sucessor do ltimo arco que o define. Grafos orientados que possuem
pelo menos um ciclo so ditos grafos cclicos. Caso contrrio, so denominados grafos
acclicos.
Exemplo 1.42 Para o grafo G2 da Figura 1.11 (Exemplo 1.41):

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, caracteriza-
se a rotulao de vrtices ou ento a rotulao de arcos do grafo.
20 Linguagens Formais - Teoria, Modelagem e Implementao

Uma rotulao de vrtices definida como sendo uma funo fV que associa os
elementos de V a elementos de um conjunto RV , denominado alfabeto de rotulao de
vrtices. De modo anlogo, uma rotulao de arcos realizada atravs de uma funo
fA que associa elementos de A a elementos de um conjunto RA , denominado alfabeto de
rotulao de arcos.
Exemplo 1.43 Sejam:

G3 = (V3 , A3 )
V3 = {0, 1, 2}
A3 = {(0, 1), (1, 2), (0, 2)}
Uma possvel rotulao simultnea de vrtices e arcos em G3 seria:

fV = {(0, ), (1, ), (2, )}, com RV = {, , }

fA = {((0, 1), ), ((1, 2), ), ((0, 2), )}, com RA = {, , }

0/ 1/


2/

Figura 1.12: Grafo rotulado G3

Esquematicamente, essa rotulao pode ser representada conforme mostra a Figura 1.12. 2
Quanto sua natureza, os grafos podem ser classificados em grafos orientados ou
grafos no-orientados, e tambm em grafos rotulados ou grafos no-rotulados. Os grafos
orientados podem ainda ser classificados em grafos ordenados ou grafos no-ordenados,
e ainda como grafos cclicos ou grafos acclicos:

Ordenados / No-ordenados
Orientados / No-orientados


Cclicos / Acclicos

Grafos


Rotulados / No-rotulados

1.5 rvores
So especialmente importantes, no estudo das linguagens formais, e muito aplicados na
prtica, para a anlise e construo de compiladores, os grafos acclicos orientados e as
rvores. Estas, por sua vez, constituem um caso particular dos grafos acclicos orientados
ordenados.
Uma rvore ordenada, ou simplesmente uma rvore, um grafo acclico orientado
e ordenado que possui as seguintes caractersticas adicionais:

H apenas um vrtice r tal que NE (r ) = 0. Este vrtice diferenciado denominado


raiz da rvore.
1 Elementos de Matemtica Discreta 21

Todos os demais vrtices possuem NE = 1.

Para cada vrtice h sempre um nico caminho que o liga raiz da rvore.

Para vrtices a e b que fazem parte de um mesmo caminho em uma rvore, diz-se
que a ancestral de b se for possvel atingir b a partir de a. Nesse caso, b dito
descendente de a. Quando entre a e b no houver nenhum vrtice intermedirio, diz-se
que a e b so adjacentes. Nessa situao, diz-se ainda que o vrtice a ancestral direto,
ou pai, do vrtice b, e que este descendente direto, ou filho, do vrtice a. O ancestral
mnimo comum de dois vrtices a e b corresponde ao (nico) antecessor de ambos que
seja tambm descendente de todos os antecessores comuns de a e b.
Vrtices tais que NS = 0 so denominados folhas da rvore. Os demais so deno-
minados vrtices internos. Inclui-se, por essa definio, entre os vrtices internos de
uma rvore, o vrtice-raiz dessa rvore.
A profundidade de um vrtice em uma rvore o comprimento do caminho ini-
ciado em sua raiz, e que termina no referido vrtice. A profundidade de uma rvore
definida como sendo a maior dentre as profundidades de seus vrtices.
rvores costumam ser representadas esquematicamente com a raiz na parte superior
da figura, e com os arcos e demais vrtices crescendo para baixo. Normalmente, as
representaes esquemticas das rvores no incorporam indicaes sobre a orientao e
a ordenao dos arcos, as quais neste caso se tornam implcitas, podendo ser inferidas a
partir da prpria figura, de acordo com as seguintes convenes, usualmente adotadas:
todos os arcos apontam para baixo e so implicitamente ordenados da esquerda para a
direita.
Exemplo 1.44 Considere-se a rvore da Figura 1.13:

Raiz

V0 V1

V00 V01 V10 V11

Figura 1.13: rvore para o Exemplo 1.44

Neste exemplo, o vrtice V1 ancestral direto (pai) de V11 . Este, por sua vez descendente
direto (filho) de V1 . O vrtice Raiz ancestral de V00 e o vrtice V01 descendente de Raiz.
Raiz tambm o mnimo ancestral comum dos vrtices V00 e V11 , que por sua vez so folhas dessa
rvore e apresentam profundidade igual a 2. V0 e V1 so vrtices internos, e possuem profundidade
1. A profundidade desta rvore igual a 2. 2
22 Linguagens Formais - Teoria, Modelagem e Implementao

1.6 Teoremas e Demonstraes


Linguagens formais e autmatos constituem sistemas matemticos formais, nos quais
inmeras propriedades, em geral formuladas como teoremas, podem ser inferidas a
partir de verdades previamente conhecidas ou admitidas por hiptese, por intermdio
de raciocnios lgicos expressos como demonstraes. Tais propriedades sintetizam
grande parte dos resultados mais importantes da teoria na rea, e so fundamentais para
o aprendizado e a aplicao do conhecimento adquirido.
A demonstrao de teoremas sobre um dado conjunto geralmente exige a prova
formal de que uma certa propriedade satisfeita por todos os membros desse conjunto.
Quando se trata de conjuntos com uma quantidade reduzida de elementos, possvel
realizar demonstraes particulares para cada elemento individual deste conjunto (que
s vezes se reduzem a simples verificaes), garantindo assim que a propriedade seja
vlida para todos os elementos do conjunto.
H, no entanto, uma bvia dificuldade prtica na aplicao dessa tcnica para con-
juntos finitos com cardinalidades elevadas. Alm disso, esse mtodo exaustivo de de-
monstrao evidentemente no se aplica a conjuntos infinitos.
Para tais casos, devem-se buscar formas alternativas que permitam verificar, se-
gundo critrios de economia e de factibilidade, a validade de proposies efetuadas acerca
do sistema formal em estudo. Dentre as tcnicas mais largamente empregadas para tal
finalidade destacam-se as demonstraes por induo matemtica e as provas por con-
tradio, estas tambm conhecidas por demonstraes por reduo ao absurdo.

Induo Matemtica
O princpio da induo matemtica foi estabelecido com o intuito de permitir a genera-
lizao de uma propriedade P para um conjunto infinito de elementos X. Informalmente,
induo definida como uma operao mental que consiste em se estabelecer uma ver-
dade universal ou proposio geral com base no conhecimento de certo nmero de dados
singulares ou de proposies de menor generalidade (Novo Dicionrio Aurlio da Lngua
Portuguesa).
Formalmente, o princpio da induo estabelecido da seguinte forma:

Inicialmente, elege-se um elemento ou subconjunto de elementos destacados de X,


denominado base da induo, e demonstra-se que a propriedade P vlida neste
caso particular. Geralmente, essa parte da prova trivial.

Admite-se, em seguida, que a propriedade seja vlida para subconjuntos finitos de


X que contenham o elemento utilizado para demonstrar a base da induo. Essa
etapa conhecida como hiptese indutiva, e formulada, de maneira recorrente,
nos prprios termos da propriedade que se deseja demonstrar.

A seguir, confinado no fato de que, de maneira recorrente, a hiptese indutiva


verdadeira, demonstra-se que, se P vlida para um determinado elemento ou
subconjunto de X, ento P continuar sendo vlida quando se acrescenta mais um
elemento ao conjunto X (ou seja, P vlida para subconjuntos sucessivamente
mais abrangentes de X). Essa etapa recebe a denominao de passo indutivo, e
realiza a generalizao da propriedade proposta.
1 Elementos de Matemtica Discreta 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

n
X n(n + 1)
Exemplo 1.46 Demonstrar, por induo, que P2 (n) : i= .
2
i =0
Base da induo:
n = 0.
0
X 0(0 + 1)
P2 (0) : i= =0
2
i =0
Hiptese indutiva:
k
X k (k + 1)
P2 (k ) : i= ,k 0
2
i =0
Passo indutivo:
P2 (k ) implica P2 (k + 1), k 0.
Prova:
k
X k (k + 1)
Pela hiptese indutiva: i= ,k 0
2
i =0
Somando-se (k+1) a ambos os membros da igualdade:
k k+1
X X k (k + 1)
i + (k + 1) = i= + (k + 1)
2
i =0 i =0
k (k + 1) k 2 + k + 2k + 2 k 2 + 3k + 2
Desmembrando: + (k + 1) = =
2 2 2
k 2 + 3k + 2 (k + 1)(k + 2) (k + 1)((k + 1) + 1)
Fatorando: = =
2 2 2
24 Linguagens Formais - Teoria, Modelagem e Implementao

k+1
X (k + 1)((k + 1) + 1)
Logo: i= = P2 (k + 1)
2 2
i =0

n n
!2
X 3
X
Exemplo 1.47 Demonstrar, por induo, que P3 (n) = i = i ,n 0
i =0 i =0
Base da induo:
n = 0. !2
0
X 0
X
3
i = i =0
i =0 i =0
Hiptese indutiva:
k k
!2
X 3
X
i = i ,k 0
i =0 i =0
Passo indutivo:
P3 (k ) implica P3 (k + 1), k 0.
Prova: !2
k k
X 3
X
Pela hiptese indutiva: i = i ,k 0
i =0 i =0
Somando-se (k + 1)3 a ambos os membros da igualdade:
k k
!2 k+1
X 3 3
X X
i + (k + 1) = i + (k + 1)3 = i3
i =0 i =0 i =0
n
X n(n + 1)
De acordo com o exemplo anterior: i= ,n 0
2
i =0
k
!2  2
X
3 k (k + 1)
Logo: i + (k + 1) = + (k + 1)3
2
i =0
 2
k (k + 1) k 2 (k + 1)2
Desmembrando: + (k + 1)3 = + (k + 1)(k + 1)2
2 4
k 2 (k + 1)2 k 2 + 4k + 4
Fatorando: + (k + 1)(k + 1)2 = (k + 1)2
4 4
Fatorando novamente:  2   
2
k + 4k + 4 k +2 k +2 2
(k + 1)2 = (k + 1)2 = (k + 1)
4 2 2 !
  2 k+1 2
  k + 2 2 (k + 1) + 1 X
Como: (k + 1) = (k + 1) = i
2 2
i =0
k k+1 k+1
!2
X 3 3
X 3
X
Ento: i + (k + 1) = i = i = P3 (k + 1)
i =0 i =0 i =0 2

Os Exemplos 1.45, 1.46 e 1.47 demonstram a validade de proposies sobre subcon-


juntos 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 demons-
trao por contradio.
1 Elementos de Matemtica Discreta 25

A essncia da tcnica da demonstrao por contradio (ou reduo ao ab-


surdo) 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 pa-
radoxo, 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

1.7 Conjuntos Enumerveis


Quando se estudam os conjuntos, freqentemente torna-se necessrio compar-los entre
si em relao quantidade de elementos neles contidos, ou seja, sua cardinalidade.
A cardinalidade de um conjunto uma medida da quantidade de elementos contidos
no mesmo, ou seja, da grandeza que intuitivamente conhecida como tamanho do
conjunto.
Trata-se de um conceito de fcil compreenso quando referente a conjuntos finitos.
Nesse caso, diz-se que dois conjuntos A e B tm a mesma cardinalidade se eles possurem
a mesma quantidade de elementos, ou seja, |A| = |B |. Se A possuir mais elementos que
B , escreve-se |A| > |B |.
A cardinalidade de um conjunto finito , portanto, simplesmente o nmero natural
que informa a quantidade de elementos que compem esse conjunto. Quando se trata de
conjuntos finitos, tais resultados so intuitivos e, at certo ponto, bvios. Por exemplo,
se X for um subconjunto prprio de Y , ento ter-se- sempre |X | < |Y |.
Exemplo 1.49 Considerem-se os conjuntos finitos A = {a, b, c, d } e B = {0, 1, 2, 3, 4, 5}. Ento,
|A| = 4, |B | = 6 e |A| < |B |. 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, pos-
suem 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 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 1.51 Sejam A = {a | a mpar, 1 a 100} e B = {b | b par, 1 b 100}. A e


B so conjuntos finitos que possuem a mesma cardinalidade, pois a funo f (a) = a + 1 bijetora,
mapeando os elementos do conjunto A nos elementos do conjunto B . Neste caso, |A| = |B | = 50.2

Exemplo 1.52 Considere-se o conjunto dos nmeros inteiros Z e o subconjunto de Z composto apenas
pelos nmeros mpares. Trata-se, naturalmente, de dois conjuntos infinitos, sendo o segundo um
subconjunto prprio do primeiro. Porm, de acordo com a definio, embora isso parea paradoxal,
os dois conjuntos possuem a mesma cardinalidade, j que a funo bijetora 2 i + 1, onde i Z,
mapeia univocamente cada elemento de Z em um nico elemento do conjunto dos nmeros mpares.2

Do Exemplo 1.52 pode-se observar facilmente que, diferentemente do que ocorre


com conjuntos finitos, possvel, para conjuntos infinitos, definir subconjuntos prprios
com a mesma cardinalidade do conjunto original.
Caso no seja possvel identificar pelo menos uma funo bijetora entre dois con-
juntos A e B quaisquer, ainda possvel que se constate a existncia de uma funo total
e injetora de A para B . Neste caso, diz-se que |A | |B |. Se, alm disso, for possvel
provar a inexistncia de uma funo bijetora de A para B , ento |A| < |B |.
Diz-se que um conjunto enumervel, ou simplesmente contvel, se ele possuir
um nmero finito de elementos, ou ento, no caso de ser infinito, se ele possuir a mesma
cardinalidade que o conjunto dos nmeros naturais N. Conjuntos infinitos X tais que
|X | 6= |N| so ditos no-enumerveis ou no-contveis.
O conceito de conjuntos enumerveis est diretamente relacionado ao conceito in-
tuitivo de seqencializao dos elementos de um conjunto, com o objetivo de permitir a
sua contagem. Na prtica, a operao de contagem de elementos de um conjunto pode ser
definida como o estabelecimento de uma correspondncia nica (funo bijetora) entre o
conjunto dos nmeros naturais e o conjunto cujos elementos se pretenda contar.
A seqencializao uma operao que visa estabelecer uma relao de ordem entre
os elementos de um conjunto (efetuar a sua ordenao) para permitir a associao unvoca
de cada um de seus elementos com os correspondentes elementos de N.
Exemplo 1.53 O conjunto dos nmeros inteiros Z um exemplo de conjunto infinito enumervel. A
ordenao apresentada na Tabela 1.2 ilustra uma seqencializao que permite associar os elementos
de Z com os de N:

Z 0 1 -1 2 -2 3 -3 ...
N 0 1 2 3 4 5 6 ...

Tabela 1.2: Bijeo entre N e Z

Essa associao tambm pode ser representada por meio da funo:


n + (n mod 2)
f (n) = (1)n+1
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.
1 Elementos de Matemtica Discreta 27

(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) ...


(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) ...
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) ...
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) ...
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) ...
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) ...
.. .. .. .. .. ..
. . . . . .

Tabela 1.3: {(x , y) N N | x > y} um conjunto


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, con-
forme ilustrado na Tabela 1.4.

ZZ (1,0) (2,0) (3,0) (2,1) ...


N 0 1 2 3 ...

Tabela 1.4: Bijeo entre N e N N

Tcnica semelhante pode ser usada para demonstrar que o conjunto N N e o conjunto dos
nmeros racionais tambm so enumerveis. Neste ltimo caso, em particular, basta considerar o
elemento (x , y) N N como uma representao da frao x /y (a fim de evitar o denominador
zero, a primeira coluna do arranjo deve ser omitida). 2

Exemplo 1.55 O conjunto R, composto pelos nmeros reais, constitui um exemplo de conjunto
infinito no-enumervel, uma vez que, como demonstrado a seguir, |R| 6= |N|. Para efetuar essa
demonstrao, ser considerado o seguinte subconjunto de R:
S = {x R | 0 < x < 1}
A prova de que R no-enumervel efetuada em dois passos: inicialmente demonstra-se
que S possui a mesma cardinalidade que R, e a seguir demonstra-se que S um conjunto no-
enumervel. O fato de que |S | = |R | pode ser constatado pela existncia da funo bijetora f ,
apresentada a seguir, a qual permite associar univocamente elementos de S com elementos de R:

1 1, 0 < x < 0, 5
f (x ) = 2x
1
+ 1, 0, 5 x < 1
2(x 1)
A prova de que S um conjunto no-enumervel feita por contradio, ou seja, mostrando-se
que, qualquer que seja a seqencializao proposta para os elementos de S , sempre ser possvel
identificar um novo elemento de S que no pertence seqncia apresentada. Desse modo, a
hiptese original de que S um conjunto enumervel deve ser considerada invlida.
Admita-se que exista uma seqencializao de S de tal modo que seja possvel associar cada
elemento desse conjunto univocamente a elementos de N. Assim, seria obtida uma associao do
tipo ilustrado pela Tabela 1.5.

R R0 R1 R2 R3 ...
N 0 1 2 3 ...

Tabela 1.5: Bijeo hipottica entre N e R


28 Linguagens Formais - Teoria, Modelagem e Implementao

Suponha-se, sem perda de generalidade, que todos os elementos de S sejam denotados atravs
de representaes com um nmero infinito de casas de decimais significativas. Assim, por exemplo,
em vez de escrever 0, 1, adota-se a representao equivalente 0, 099999999999999999999999...
Se cada elemento Ri S pode ser escrito como sendo uma seqncia infinita do tipo:
0, di0 di1 di2 di3 ...din ..., ento a construo do novo elemento:
0, x0 x1 x2 x3 ...xn ..., xj 6= djj , xj 6= 0
suficiente para provar que o mesmo no pertence seqncia originalmente proposta, uma vez
que esse novo elemento difere em pelo menos uma casa decimal de cada um dos elementos ini-
cialmente considerados, sendo, portanto, diferente de todos eles. Logo, S no enumervel e,
conseqentemente, R tambm no. 2

Como est mostrado no Exemplo 1.55, nem todos os conjuntos infinitos possuem
a mesma cardinalidade. Assim, apesar de N e R possurem uma quantidade infinita de
elementos, intuitivo que R possui uma quantidade muito maior de elementos que N, ou
seja, |R| > |N|, impedindo que seja estabelecida uma funo bijetora entre ambos.
Esses so alguns dos resultados da Teoria dos Nmeros Transfinitos ([57]), desenvol-
vida no final do sculo XIX pelo matemtico russo Georg Cantor (1845-1918), de acordo
com a qual os nmeros transfinitos representam quantidades no-finitas ordenadas de
forma crescente. Tais quantidades so representadas por 0 , 1 ...n ... 1 , de tal forma que
i1 < i < i+1 , para i 1. Alm disso, 0 = |N| e 1 = |R|.
Outros exemplos de conjuntos infinitos enumerveis so o conjunto dos nmeros
racionais e o conjunto de todas as cadeias que podem ser formadas pela concatenao de
smbolos de um conjunto finito . J o conjunto formado por todos os subconjuntos de
N, ou seja, o conjunto 2N , no-enumervel.
Formalmente, um conjunto X dito infinito se for possvel identificar um subcon-
junto prprio de X , por exemplo, Y , tal que |X | = |Y |.

Exemplo 1.56 No Exemplo 1.55, o fato de que S R e |S | = |R| suficiente para garantir que R
um conjunto infinito. 2

Exemplo 1.57 Considere-se o conjunto dos nmeros naturais N. Deseja-se demonstrar que N
infinito com o auxlio do subconjunto prprio N{0}. No difcil perceber que esses dois conjuntos
possuem a mesma cardinalidade, uma vez que a funo n + 1, n N mapeia univocamente cada
elemento de N em elementos do subconjunto prprio N {0} : 0 1, 1 2, 2 3, 3 4, 4
5, 5 6, 6 7...
Assim, apesar de N {0} possuir um elemento a menos que N, na verdade ambos possuem a
mesma cardinalidade, o que confirma N como conjunto infinito. 2

A seguir sero apresentados e demonstrados alguns dos principais resultados tericos


sobre conjuntos enumerveis e no-enumerveis.
Teorema 1.3 (Teorema de Cantor) Seja A um conjunto qualquer, |A| = i . Ento
|2A | > |A| e |2A | = i+1 .
Justificativa Constata-se com facilidade a existncia de pelo menos uma funo f , que
associa cada elemento x A com um elemento f (x ) 2A , e que seja injetora e total.
Logo, possvel concluir que |A| |2A |. Para provar que |A| < |2A |, suficiente mostrar
que no existe funo bijetora de A para 2A .
Suponha-se que exista tal bijeo. Nesse caso, pode-se afirmar que todo e qualquer
elemento x A est associado a um elemento distinto f (x ) 2A . Considere-se agora o
seguinte subconjunto de A:
S = {x A | x 6 f (x )}
1 (aleph) a primeira letra do alfabeto hebraico.
1 Elementos de Matemtica Discreta 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:

Se xi S , e como S = f (xi ), por hiptese, ento xi 6 S , o que constitui uma


contradio;

Se xi 6 S , e como S = {x A | x 6 f (x )}, por definio, ento xi S , o que


tambm uma contradio.

Qualquer que seja o caso, resulta uma contradio. Logo, a hiptese inicialmente
formulada falsa e disso conclui-se no existir qualquer bijeo entre A e 2A . Portanto,
|A| < |2A |. 
O Teorema 1.3 demonstra que conjuntos infinitos de cardinalidades sucessivamente
maiores podem ser obtidos pela aplicao sucessiva da operao conjunto-potncia. Con-
sidere os conjuntos A, B = 2A , C = 2B , D = 2C etc. Ento, |A| < |B | < |C | < |D | < ...
De acordo com a teoria de Cantor, N o conjunto que possui a menor cardinalidade
entre todos os conjuntos infinitos, a qual denotada por 0 , o primeiro nmero da
sua srie transfinita. Por conseqncia, |N| < |2N |. Por outro lado, conforme foi visto
anteriormente, |N| < |R|, o que sugere a questo: ser que |R| = |2N | ?.
De fato, este resultado pode ser provado como sendo verdadeiro. Alm disso, |R| e
|2N | correspondem ao segundo nmero transfinito conhecido, na seqncia de Cantor, o
qual denotado por 1 . Por outro lado, no se sabe da existncia de algum conjunto X ,
tal que 0 < |X | < 1 .
Teorema 1.4 (|B |, B A, |A| = 0 ) Sejam A e B dois conjuntos, B A. Se
|A| = 0 , ento |B | 0 .
Justificativa Se |A| = 0 , ento existe uma funo bijetora entre o conjunto dos n-
meros naturais N e o conjunto A (e vice-versa). Logo, existe uma funo injetora e total
f1 que associa elementos de A e N, conforme a Tabela 1.6.

A: a0 a1 a2 ... an ...
f1 :
N 0 1 2 ... n ...

Tabela 1.6: Funo f1 para o Teorema 1.4

Se B subconjunto de A, possvel associar cada elemento de B ao mesmo elemento


de A atravs de uma funo injetora e total f2 , conforme a Tabela 1.7.

B: a1 ... an ...
f2 :
A: a0 a1 a2 ... an ...

Tabela 1.7: Funo f2 para o Teorema 1.4

A composio das funes f1 e f2 , ilustrada na Tabela 1.8, mostra que existe uma
funo injetora e total de B para N.
Logo, |B | |N|, ou seja, |B | 0 . Em outras palavras, qualquer subconjunto
(finito ou infinito) de um conjunto enumervel tambm um conjunto enumervel. 
30 Linguagens Formais - Teoria, Modelagem e Implementao

B: a1 ... an ...
f2 :
A: a0 a1 a2 ... an ...
f1 :
N 0 1 2 ... n ...

Tabela 1.8: Composio de f1 com f2 para o Teorema 1.4

Teorema 1.5 (|A B |, |A| = 0 , |B | = 0 ) Sejam A e B dois conjuntos quaisquer.


Se |A| = 0 e |B | = 0 , ento |A B | = 0 .

Justificativa Se A e B so conjuntos enumerveis (finitos ou infinitos), ento seus ele-


mentos podem ser ordenados da seguinte forma:

A: a0 , a1 , a2 , a3 , a4 , ...an1 , an , an+1 ...


B: b0 , b1 , b2 , b3 , b4 , ...bn1 , bn , bn+1 ...

A enumerao dos elementos de A B pode ser feita atravs do seguinte procedi-


mento:
A B : a0 , b0 , a1 , b1 , a2 , b2 , ...an1 , bn1 , an , bn , an+1 , bn+1 , ...
Portanto, A B enumervel e |A B | = 0 . Em outras palavras, a unio de dois
conjuntos enumerveis sempre um conjunto enumervel. 
Teorema 1.6 (|A B |, |A| = 0 , |B | = 0 ) Sejam A e B dois conjuntos quaisquer.
Se |A| = 0 e |B | = 0 , ento |A B | = 0 .

Justificativa Se A B , ento A B = A e |A B | = |A| = 0 por hiptese. Se,


por outro lado, B A, ento A B = B e |A B | = |B | = 0 por hiptese. Finalmente,
se nenhuma dessas duas condies for verdadeira, ento A B A e, pelo Teorema 1.4,
|A B | = 0 . Portanto, em qualquer caso que se considere, |A B | = 0 . 
Teorema 1.7 (|A B |, B A, |A| = 1 , |B | = 0 ) Sejam A e B dois conjuntos,
B A. Se |A| = 1 e |B | = 0 , ento |A B | = 1 .

Justificativa Suponha-se que |A B | = 0 . Ento, de acordo com o Teorema 1.5,


|(A B ) B | = 0 , o que contradiz a hiptese de que |A| = 1 , pois (A B ) B = A.
Como B A, e, portanto, |B | |A|, conclui-se que |A B | = 1 . 
2 Conceitos Bsicos de Linguagens
Este captulo apresenta e discute os principais conceitos bsicos associados ao estudo de
linguagens, como o caso dos smbolos, das cadeias e das linguagens propriamente ditas,
assim como dos mtodos empregados para a formalizao das linguagens, como o caso
das gramticas e dos reconhecedores.
As gramticas possuem grande importncia na anlise e na especificao formal da
sintaxe de linguagens, principalmente das linguagens de programao, ao passo que os
reconhecedores definem modelos que servem como base para a construo de analisadores
lxicos e sintticos nos compiladores e interpretadores de tais linguagens. Na prtica,
o estudo sistemtico das linguagens formais e dos autmatos viabilizou o desenvolvi-
mento de tcnicas eficientes para a utilizao econmica das linguagens de programao,
originando-se em seu estudo grande parte do interesse que recai sobre os assuntos ligados
a esse tema.
O captulo se encerra com a apresentao da Hierarquia de Chomsky, usualmente
empregada na classificao hierrquica das linguagens conforme seu grau de complexi-
dade, e em torno da qual se costuma desenvolver boa parte da teoria das linguagens
formais e autmatos. Tomando-se como base essa hierarquia, so efetuadas considera-
es preliminares sobre as propriedades e sobre a caracterizao formal de cada uma das
classes de linguagens por ela definidas.

2.1 Smbolos e Cadeias


Os smbolos,1 tambm denominados palavras ou tomos, so representaes grficas,
indivisveis, empregadas na construo de cadeias. Estas so formadas atravs da jus-
taposio de um nmero finito de smbolos, obtidos de algum conjunto finito no-vazio,
denominado alfabeto.
Cada smbolo considerado como uma unidade atmica, no importando a sua par-
ticular representao visual. So exemplos de smbolos: a, abc, begin, if , 5, 1024, 2.017e4.
Perceba-se que no h uma definio formal para smbolo. Deve-se intuir o seu signifi-
cado como entidade abstrata, e dessa forma aceit-lo como base para a teoria que ser
desenvolvida. Pode-se dizer que se trata de um conceito primitivo.
Ao longo deste texto ser adotada a seguinte conveno para denotar smbolos,
cadeias e alfabetos:

Smbolos: letras minsculas do incio do alfabeto romano: (a, b, c...).

Cadeias: letras minsculas do final do alfabeto romano (r , s, x , w ...), ou letras


minsculas do alfabeto grego (, , ...).

Alfabetos: letras maisculas do alfabeto grego (, , ...).

1 Na literatura em ingls so conhecidos como tokens.


32 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 2.1 Como exemplo de alfabeto podemos mencionar o conjunto dos dgitos hexadecimais,
em que cada elemento (dgito) desse conjunto corresponde a um determinado smbolo:

= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d , e, f }
Naturalmente, as cadeias que podem ser construdas a partir dos smbolos desse alfabeto
correspondem aos numerais hexadecimais: 123, a0b56, fe5dc, b, abc, 55efff ... 2

O comprimento de uma cadeia um nmero natural que designa a quantidade de


smbolos que a compem. O comprimento de uma cadeia denotado por ||.

Exemplo 2.2 Considerem-se as cadeias = 1, = 469, = ble60, = df . Ento, || = 1, | | =


3, || = 5 e || = 2. 2

D-se o nome de cadeia elementar (ou unitria) a qualquer cadeia formada por
um nico smbolo, como o caso da cadeia do Exemplo 2.2. Naturalmente, toda cadeia
unitria tem comprimento 1.
Um outro importante exemplo de alfabeto corresponde ao conjunto dos smbolos
definidos em algum dicionrio da lngua portuguesa. Note que, diferentemente do al-
fabeto anteriormente considerado, em que todos os smbolos eram compostos de um
nico caractere, os smbolos deste novo alfabeto so construdos a partir da concatena-
o de um nmero varivel de caracteres (no caso, as letras do alfabeto romano). Para o
presente estudo, embora representados com diversos caracteres, tais smbolos so conside-
rados indivisveis, e as correspondentes cadeias elementares apresentam, por essa razo,
comprimento unitrio quando consideradas no contexto da lngua portuguesa.
Considerando-se ainda que tal alfabeto suficientemente extenso para conter as
conjugaes de todos os verbos, as formas flexionadas de todos os adjetivos, substantivos
etc., enfim, todas as palavras possveis de serem empregadas em nosso idioma, ento
a cadeia Exemplo de uma cadeia no novo alfabeto dever ser considerada uma cadeia
vlida, construda a partir dos smbolos desse alfabeto, e o seu comprimento igual a
7. Note que esse alfabeto da lngua portuguesa, apesar de extenso, finito, e tambm
que possvel construir uma quantidade infinita de cadeias de comprimento finito com
os smbolos dele. Observe-se que, entre estas, h cadeias que na lngua portuguesa no
fazem sentido. Por exemplo, cadeia uma exemplo errado o. As demais so empregadas
nas diversas formas de comunicao humana.
O conceito de cadeia vazia especialmente importante na teoria das linguagens
formais. Denota-se por a cadeia formada por uma quantidade nula de smbolos, isto ,
a cadeia que no contm nenhum smbolo. Formalmente,

|| = 0
Duas cadeias, sejam elas elementares ou no, podem ser anexadas, formando uma
s cadeia, atravs da operao de concatenao. Essa operao fornece como resultado
uma nova cadeia, formada pela justaposio ordenada dos smbolos que compem os seus
operandos separadamente. Observe-se que a operao de concatenao entre uma cadeia
e um smbolo realizada atravs da concatenao da cadeia em questo com a cadeia
elementar correspondente ao smbolo.
Denota-se a concatenao de duas cadeias e como ou, simplesmente, .
Exemplo 2.3 Considere o alfabeto = {a, b, c, d }, e as cadeias = abc, = dbaca e = a.
A concatenao da cadeia com a cadeia assim obtida:
= = abcdbaca, e | | = | | + | | = 3 + 5 = 8
Da mesma forma, obtm-se a concatenao de com :
2 Conceitos Bsicos de Linguagens 33

= = dbacaabc, e, || = | | + | | = 5 + 3 = 8
Note-se que, neste exemplo, 6= .
A concatenao da cadeia com a cadeia elementar dada por:
= = abca, e | | = | | + | | = 3 + 1 = 4
Finalmente, a concatenao da cadeia elementar com a cadeia obtida como:
= = adbaca, e | | = | | + | | = 1 + 5 = 6 2
Como se pode perceber, a operao de concatenao, embora associativa, no
comutativa. Dadas trs cadeias , , quaisquer, pode-se sempre afirmar que () =
().
Por outro lado, dependendo dos particulares e considerados, pode ser que ou
6= ou = (por exemplo, se e/ou forem cadeias vazias ou, ainda, se
= ).
No caso da cadeia vazia (elemento neutro em relao ao operador de concatenao)
so vlidas as seguintes relaes:

1. = =

2. || = || = ||
Diz-se que uma cadeia um prefixo de outra cadeia se for possvel escrever
como . A cadeia dita sufixo de se puder ser escrita como . Em ambos
os casos, admite-se a possibilidade de = . Nos casos em que 6= , diz-se que ,
respectivamente, prefixo prprio ou sufixo prprio da cadeia . Note que a cadeia
vazia pode ser considerada simultaneamente prefixo ou sufixo de qualquer cadeia.
Dadas quatro cadeias , , e , uma cadeia chamada subcadeia de uma cadeia
sempre que = . Note-se que, se ou ou ambos forem vazios, a definio tambm
se aplica. Note-se tambm que prefixos e sufixos so casos particulares de subcadeias.
Uma cadeia dita o reverso de uma cadeia , denotando-se o fato por = R ,
se contiver os mesmos smbolos que , porm justapostos no sentido inverso, ou seja:
se = 1 2 ...n1 n ento = n n1 ...2 1
Por definio, R = .
Exemplo 2.4 Considerem-se as cadeias = 123abc e = d . Ento, R = cba321 e R = d . 2
Finalmente, convenciona-se que i representa a cadeia formada por i smbolos
concatenados. Por definio, 0 = .
Exemplo 2.5 Considere-se o smbolo a. Ento:

a 0 = ;

a 1 = a;

a 2 = aa;

a 3 = aaa;
etc.
2

2.2 Linguagens
Uma linguagem formal um conjunto, finito ou infinito, de cadeias de comprimento
finito, formadas pela concatenao de elementos de um alfabeto finito e no-vazio. Alm
34 Linguagens Formais - Teoria, Modelagem e Implementao

das operaes previamente definidas para conjuntos, como unio, diferena, interseco
etc., outras operaes, tais como a concatenao e os fechamentos, tambm so funda-
mentais para a definio e o estudo das linguagens formais.
Antes de apresent-las, convm notar a distino que h entre os seguintes conceitos:
cadeia vazia , conjunto vazio e o conjunto que contm apenas a cadeia vazia {}.
O primeiro deles, , denota a cadeia vazia, ou seja, uma cadeia de comprimento
zero, ao passo que os dois seguintes so casos particulares de linguagens (que por sua
vez so conjuntos): denota uma linguagem vazia, ou seja, uma linguagem que no
contm nenhuma cadeia, e {} denota uma linguagem que contm uma nica cadeia, a
cadeia vazia. Observe-se que || = 0 e |{}| = 1.
Note-se a diferena conceitual que h entre alfabetos, linguagens e cadeias. Al-
fabetos so conjuntos, finitos e no-vazios, de smbolos, atravs de cuja concatenao
so obtidas as cadeias. Linguagens, por sua vez, so conjuntos, finitos (eventualmente
vazios) ou infinitos, de cadeias. Uma cadeia tambm denominada sentena de uma
linguagem, ou simplesmente sentena, no caso de ela pertencer linguagem em questo.
Linguagens so, portanto, colees de sentenas sobre um dado alfabeto.
A Figura 2.1 ilustra a relao entre os conceitos de smbolo, alfabeto, cadeia e
linguagem:

Figura 2.1: Smbolo, alfabeto, cadeia e linguagem

As vrias leituras contidas na Figura 2.1 so: smbolo elemento de alfabeto;


alfabeto conjunto de smbolos; smbolo item de cadeia; cadeia seqncia de
smbolos; cadeia elemento de linguagem e linguagem conjunto de cadeias.
Outra maneira de associar significados aos termos smbolo, alfabeto, cadeia e
linguagem apresentada na Figura 2.2, que tambm ilustra o conceito de sentena.
2 Conceitos Bsicos de Linguagens 35

Figura 2.2: Smbolo, alfabeto, cadeia, sentena e linguagem

A Figura 2.2 facilita o entendimento das relaes entre os conceitos: (i) um conjunto
de smbolos forma um alfabeto, (ii) a partir de um alfabeto (finito) formam-se (infinitas)
cadeias; (iii) determinadas cadeias so escolhidas para fazer parte de uma linguagem;
(iv) uma linguagem um conjunto de cadeias, que por isso so tambm denominadas
sentenas.
Exemplo 2.6 O smbolo a elemento do alfabeto {a} e tambm um item da cadeia aaa, que por
sua vez elemento da linguagem {aaa}. Por outro lado, a linguagem {aaa} um conjunto que
contm a cadeia aaa, a cadeia aaa uma seqncia de smbolos a e o alfabeto {a} contm o
smbolo a. A Figura 2.3 ilustra esses conceitos, conforme a Figura 2.1.

Figura 2.3: a, {a}, aaa, {aaa}


2

Exemplo 2.7 A Figura 2.4 ilustra uma aplicao dos conceitos da Figura 2.2 ao alfabeto {a, b}. A
linguagem apresentada , naturalmente, apenas uma das inmeras que podem ser criadas a partir
desse alfabeto.
36 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 2.4: a, b, cadeias, sentenas e linguagem


2

A concatenao de duas linguagens X e Y , denotada por X Y ou simplesmente


XY , corresponde a um conjunto Z formado pela coleo de todas as cadeias que possam
ser obtidas pela concatenao de cadeias x X com cadeias y Y , nesta ordem.
Formalmente,
Z = X Y = XY = {xy | x X e y Y }
A concatenao , que gera cadeias de comprimento 2 formadas sobre um alfabeto
, tambm representada por 2 . Analogamente, a concatenao , que gera cadeias
de comprimento 3 sobre o alfabeto , representada como 3 , e assim sucessivamente.
Generalizando-se:
i = i1 , i 0
Por definio, 0 = {}
Exemplo 2.8 Considere-se = {a, b, c}. Ento,

0 = {}
1 = {a, b, c}
2
= {aa, ab, ac, ba, bb, bc, ca, cb, cc}
3
= {aaa, aab, aac, aba, abb, abc, ..., ccc}
etc.
2

O fechamento reflexivo e transitivo (s vezes chamado fechamento recursivo


e transitivo) de um alfabeto definido como o conjunto (infinito) que contm todas
as possveis cadeias que podem ser construdas sobre o alfabeto dado, incluindo a cadeia
vazia. Esse conjunto, denotado por , contm, naturalmente, todas as cadeias que
podem ser definidas sobre o alfabeto . Formalmente, o fechamento reflexivo e transitivo
de um conjunto definido como:

[
= 0 1 2 3 ... = i
i=0

Em outras palavras, o fechamento reflexivo e transitivo de um alfabeto a unio de


todos os conjuntos que representam as possveis cadeias de comprimentos zero, um, dois,
2 Conceitos Bsicos de Linguagens 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 rigo-
rosa com o auxlio da operao de fechamento reflexivo e transitivo: sendo uma linguagem
qualquer coleo de cadeias sobre um determinado alfabeto , e como contm todas
as possveis cadeias sobre , ento toda e qualquer linguagem L sobre um alfabeto
sempre poder ser definida como sendo um subconjunto de , ou seja, L .
Diz-se que a maior linguagem que se pode definir sobre um alfabeto , observando-
se um conjunto qualquer P de propriedades, corresponde ao conjunto de todas as cadeias
w tais que w satisfaz simultaneamente a todas as propriedades pi P .
De uma forma geral, sempre que for feita uma referncia a uma determinada lingua-
gem L cujas cadeias satisfaam a um certo conjunto de propriedades P , estar implcita
(a menos de ressalva em contrrio) a condio de que se trata da maior linguagem definida
sobre L, cujas cadeias satisfaam o conjunto de propriedades P .
Um caso particular importante a se considerar a linguagem cujo conjunto P de
propriedades seja o menos restritivo possvel, considerando toda e qualquer cadeia de
qualquer comprimento (finito) como sendo vlida. Assim, a maior linguagem dentre
todas as que podem ser definidas sobre um alfabeto qualquer L = (note-se, neste
caso, que a nica propriedade a ser satisfeita pelas cadeias de L que elas sejam definidas
sobre , ou seja, obtidas a partir da simples justaposio de smbolos de ). Qualquer
outra linguagem definida sobre esse mesmo alfabeto corresponder obrigatoriamente a
um subconjunto (eventualmente prprio) de .
Por outro lado, a menor linguagem que pode ser definida sobre um alfabeto
qualquer , ou seja, a linguagem vazia ou a linguagem composta por zero sentenas.
Finalmente, como o conjunto de todos os subconjuntos possveis de serem obtidos

a partir de 2 , tem-se que 2 representa o conjunto de todas as linguagens que
podem ser definidas sobre o alfabeto .
Em resumo:

o conjunto constitudo por zero cadeias e corresponde menor linguagem que


se pode definir sobre um alfabeto qualquer;

o conjunto de todas as cadeias possveis de serem construdas sobre e


corresponde maior de todas as linguagens que pode ser definida sobre ;

2 o conjunto de todos os subconjuntos possveis de serem obtidos a partir
de , e corresponde ao conjunto formado por todas as possveis linguagens que

podem ser definidas sobre . Observe-se que 2 , e tambm que 2 .

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:

A linguagem L0 = a menor linguagem que pode ser definida sobre ;

A linguagem L1 = {a, ab, ac, abc, acb} finita e observa P ;

A linguagem L2 = {a}{a} {b} {c} infinita e observa P ;

A linguagem L3 = {a}{a, b, c} infinita, observa P e, dentre todas as que observam P ,


trata-se da maior linguagem, pois no existe nenhuma outra cadeia em que satisfaa a P
e no pertena a L3 ;
L0 , L1 , L2 , L3 ;
38 Linguagens Formais - Teoria, Modelagem e Implementao


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

O fechamento transitivo de um alfabeto , denotado por + , definido de


maneira anloga ao fechamento reflexivo e transitivo, diferindo deste apenas por no
incluir o conjunto 0 :
[
+ = 1 2 3 ... = i
i=1

Como se pode perceber, = {}. Observe-se ainda que, embora aparente-


+

mente seja conseqncia da anterior, a afirmao + = {} s ser vlida nos casos


em que no contiver a cadeia vazia.
Exemplo 2.10 Seja = {n, (, ), +, , , /}. Neste caso:

= {, n, n + n, n), /, n()), n (n n), ...}

+ = {n, n + n, n), /, n()), n (n n), ...}

+ = {}, pois 6
2

A complementao de uma linguagem X definida sobre um alfabeto definida


como:
X = X
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:

Prefixo prprio: no existe L | 6= e L

Sufixo prprio: no existe L | 6= e L

Exemplo 2.11 Considere as seguintes linguagens:

L1 = {a i b i | i 1} = {ab, aabb, aaabbb, ...}


L2 = {ab i | i 1} = {ab, abb, abbb, abbbb, ...}
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

Diz-se que uma linguagem L1 o reverso de uma linguagem L2 , denotando-se o


fato por L1 = LR2 (ou L2 = L1 ), quando as sentenas de L1 corresponderem ao reverso
R

das sentenas de L2 . Formalmente:

L1 = LR
2 = {x
R
| x L2 }

Exemplo 2.12 Seja L2 = {, a, ab, abc}. Ento, L1 = LR


2 = {, a, ba, cba}. 2
2 Conceitos Bsicos de Linguagens 39

Define-se o quociente de uma linguagem L1 por uma outra linguagem L2 , denotado


por L1 /L2 , como sendo a linguagem:

L1 /L2 = {x | xy L1 e y L2 }

Exemplo 2.13 Considerem-se as linguagens:

L1 = {a i b | i 0}
L2 = {a i bc i | i 0}
L3 = {b}
L4 = {a i b | i 1}
L5 = {bc i | i 0}
L6 = {c i b | i 0}
L7 = {a i | i 0}
Ento, so verdadeiras as seguintes relaes:

L1 /L3 = L7 :
L1 = {b, ab, aab, aaab...}
L3 = {b}
Para cada uma das cadeias pertencentes a L1 , possvel identificar o (nico) membro de
L3 como sufixo dos membros de L1 . Logo, atravs da remoo desse sufixo b, de todas as
cadeias de L1 , o conjunto resultante ser L7 .

L1 /L4 = L7 :
L1 = {b, ab, aab, aaab...}
L4 = {ab, aab, aaab...}
Nenhuma das cadeias pertencentes a L4 pode ser considerada sufixo de b L1 . Por outro
lado, ab L4 sufixo de ab L1 , de aab L1 etc., resultando que , a, aa... pertencem
ao quociente de L1 por L4 . O mesmo ocorre com as cadeias aab, aaab... pertencentes a L4 ,
sem no entanto modificar o resultado da operao.
L5 /L7 =
L5 = {b, bc, bcc, bccc...}
L7 = {ab, aab, aaab...}
Como nenhuma cadeia de L5 contm o smbolo a (presente em todas as cadeias de L7 ),
conclui-se no ser possvel representar nenhuma cadeia de L5 atravs da concatenao de um
prefixo com uma cadeia de L7 .
L2 /L6 = L7
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
L6 = {b, cb, ccb, cccb...}
Como nenhum dos elementos de L6 tem o smbolo c como sufixo, todas as cadeias perten-
centes a L2 que terminam com o smbolo c no possuem sufixo em L6 . No entanto, todas as
cadeias de L2 compostas apenas por smbolos a e b possuem a cadeia b L6 como sufixo.
Removido de tais cadeias esse sufixo, restam as cadeias formadas por zero ou mais smbolos
a, ou seja, a linguagem L7 .

L2 /L1 = L7
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
L1 = {b, ab, aab, aaab...}
40 Linguagens Formais - Teoria, Modelagem e Implementao

Nenhuma das cadeias da linguagem L2 que termina com o smbolo c possui sufixo em L1 ,
uma vez que nenhuma das cadeias dessa linguagem termina com o smbolo c. Por outro lado,
todas as cadeias de L2 compostas apenas pelos smbolos a e b possuem como sufixo em L1
as cadeias de mesmo formato, porm com uma quantidade menor ou igual de smbolos a (por
exemplo, aab L2 possui como sufixo as cadeias b, ab, aab), resultando que o quociente
formado por cadeias com uma quantidade maior ou igual a zero de smbolos a (no exemplo,
aa, a, ).

L5 /L2 = {}
L5 = {b, bc, bcc, bccc...}
L2 = {b, ab, bc, abc, aab, bcc, aabc, abcc, aabcc...}
No difcil perceber, neste caso, que para a cadeia b L5 , b L2 o nico sufixo da
mesma em L2 e, portanto, L5 /L2 . O mesmo raciocnio vale para a cadeia bc L5 , e
assim por diante. Logo, o quociente corresponde linguagem formada pela nica cadeia .
2

Uma substituio uma funo que mapeia os elementos de um alfabeto 1 em


linguagens sobre um alfabeto 2 . Formalmente:

s : 1 22

Diz-se que uma substituio um homomorfismo se 22 contiver apenas um
elemento para cada 1 . Neste caso, costuma-se considerar os elementos do conjunto
imagem como simples cadeias e no como conjuntos compostos por um nico elemento:

h : 1 2

Assim, um homomorfismo uma funo que mapeia cada smbolo de um alfabeto


1 em uma cadeia nica contida em uma linguagem 2 .
Substituies permitem a especificao de transliteraes de linguagens, nas quais os
smbolos do alfabeto da linguagem original por cadeias de smbolos de um novo alfabeto.
O domnio de uma substituio pode ser estendido para 1 da seguinte forma:

s() =

s(a) = s(a)s(), a 1 , 1

Em outras palavras, uma substituio um mapeamento que preserva a ordem dos


componentes das sentenas. Assim, a substituio de uma linguagem L definida como:

s(L) = {y | y = s(x ) para x L}

Exemplo 2.14 Considere-se a linguagem L = {a i b i c i | i 1} e a substituio s sobre = {x , y, z }:

s(a) = {x };

s(b) = {y, yy};

s(c) = {z , zz , zzz }.

A aplicao de s em L define a linguagem s(L) = {x i y j z k | i 1, i j 2i, i k 3i}.


A ttulo de ilustrao, sero apresentadas a seguir todas as transliteraes possveis para a
cadeia abc obtidas atravs da substituio s acima definida:
s(abc) = {xyz , xyzz , xyzzz , xyyz , xyyzzz }
2 Conceitos Bsicos de Linguagens 41

Note-se que, neste exemplo, s(abc) = s(a)s(b)s(c), onde:


s(a) pode ser substitudo apenas por x
s(b) pode ser substitudo por y ou yy
s(c) pode ser substitudo por z , zz ou zzz
O conjunto s(abc) obtido a partir de todas as combinaes possveis de substituies para
os smbolos a, b e c na cadeia abc conforme s. 2

Exemplo 2.15 Considere-se agora a mesma linguagem L do Exemplo 2.14 e o homomorfismo h


sobre o respectivo alfabeto :

h(a) = x ;

h(b) = x ;

h(c) = z .

A linguagem definida por esse homomorfismo h(L) = {x 2i z i | i 1}. 2

Nos casos em que h um homomorfismo, diz-se que h(L) a imagem homomr-


fica 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. 2

Um homomorfismo denominado isomorfismo sempre que a funo h for injetora.


Neste caso, h(L) denominada imagem isomrfica de L. Isomorfismos viabilizam
a definio de imagens homomrficas inversas atravs de funes injetoras denomina-
das isomorfismos inversos. Neste caso, a linguagem h 1 (L) denominada imagem
isomrfica inversa de L.
Exemplo 2.17 Considere-se a linguagem L1 = {a i b i | i 1} sobre o alfabeto 1 = {a, b} e o
isomorfismo j , definido sobre 2 = {c, d }:

j (a) = c;

j (b) = dd .
42 Linguagens Formais - Teoria, Modelagem e Implementao

Neste caso, a imagem isomrfica de L1 , ou seja, a linguagem L2 , resultante da aplicao do


isomorfismo j sobre o alfabeto da linguagem L1 , a seguinte:

L2 = {c i d 2i | i 1}
A imagem isomrfica inversa de L2 , ou seja, a linguagem L1 , pode ser obtida a partir do
isomorfismo inverso:

j 1 (c) = a;

j 1 (dd ) = b.

Observe, neste caso, que j 1 (j (L1 )) = L1 . 2

Isomorfismos e isomorfismos inversos so muito teis, pois permitem mudar de 1


para 2 o domnio na resoluo de problemas, visando com isso facilitar a sua resoluo
no domnio 2 . Por se tratar de um mapeamento feito atravs de uma funo injetora,
torna-se sempre possvel retornar ao domnio original 1 , preservando-se a associao
unvoca entre os elementos dos domnios considerados.
Exemplo 2.18 Considere-se L = N e o isomorfismo j , sobre = {0, 1}:

j (0) = 0000

j (1) = 0001

j (2) = 0010

j (3) = 0011

j (4) = 0100

j (5) = 0101

j (6) = 0110

j (7) = 0111

j (8) = 1000

j (9) = 1001

j (L) mapeia os nmeros naturais na representao equivalente em BCD (Binary Coded Deci-
mal ). O isomorfismo inverso j 1 , abaixo, permite retornar ao domnio dos nmeros naturais:

j 1 (0000) = 0

j 1 (0001) = 1

j 1 (0010) = 2

j 1 (0011) = 3

j 1 (0100) = 4

j 1 (0101) = 5

j 1 (0110) = 6

j 1 (0111) = 7
2 Conceitos Bsicos de Linguagens 43

j 1 (1000) = 8

j 1 (1001) = 9
2

Conforme j mencionado, o conjunto contm todas as possveis linguagens que


podem ser definidas sobre o alfabeto . Na prtica, as linguagens de interesse costumam
ser definidas como um subconjunto prprio de , para um dado alfabeto .
Exemplo 2.19 Considere-se o alfabeto 1 = {n, (, ), +, , , /}. Uma linguagem L1 , passvel de ser
definida sobre o alfabeto 1 , e que corresponde a um subconjunto prprio de 1 , aquela em que as
cadeias se assemelham, do ponto vista estrutural, s cadeias que representam expresses aritmticas
bem-formadas em muitas linguagens populares de programao de alto nvel.
A seguir esto relacionadas algumas das cadeias que fazem parte de L1 , de acordo com esse
critrio:

n
n+n

(n*n)

n*(n(n+n+n))

Portanto, L1 = {n, n + n, (n n), n (n(n + n + n)), ...} 1 . So exemplos de cadeias


pertencentes a 1 L1 :
n++

nn*

(n*n)))

n*-(n(+n+/))

2

As linguagens de interesse prtico, como o caso das linguagens de programa-


o, 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, iden-
tificar 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 Linguagens Formais - Teoria, Modelagem e Implementao

pertencente linguagem definida pela gramtica, e nada mais. Assim, as cadeias


no pertencentes linguagem no devem poder ser geradas pela gramtica em
questo. Essa forma de especificao aplicvel para linguagens finitas e infinitas.

2. Reconhecedores: correspondem a especificaes finitas de dispositivos de acei-


tao de cadeias. Um dispositivo desse tipo dever aceitar toda e qualquer ca-
deia pertencente linguagem por ele definido, e rejeitar todas as cadeias no-
pertencentes linguagem. O mtodo aplicvel para a especificao formal de
linguagens finitas e infinitas.

3. Enumeraes: relacionam, de forma explcita e exaustiva, todas as cadeias per-


tencentes particular linguagem a ser especificada. Toda e qualquer cadeia per-
tencente linguagem deve constar desta relao. As cadeias no pertencentes
linguagem no fazem parte dessa relao. Aplicam-se apenas para a especificao
de linguagens finitas e preferencialmente no muito extensas.

Na prtica, as gramticas e os reconhecedores, alm de oferecerem uma grande


conciso na representao de linguagens de cardinalidade elevada, tambm podem ser
empregados na definio de linguagens infinitas, ao contrrio das enumeraes. Em
contraste com o que ocorre com as enumeraes, as gramticas e os reconhecedores ge-
ralmente possibilitam uma percepo melhor da estrutura sinttica inerente s sentenas
das linguagens por eles definidas.
Diz-se que uma gramtica equivalente a um reconhecedor se as duas seguintes
condies forem simultaneamente verificadas (lembrar que os formalismos devem definir
todas as sentenas da linguagem desejada, e nenhuma outra cadeia):

1. Toda cadeia gerada pela gramtica tambm aceita pelo reconhecedor.

2. Toda cadeia aceita pelo reconhecedor tambm gerada pela gramtica.

Exemplo 2.20 Considerem-se a gramtica G e o reconhecedor M, respectivamente definidos atravs


das linguagens gerada e aceita:

G | L1 (G) = { {a, b} | o primeiro smbolo de a}

M | L2 (M ) = { {a, b} | o primeiro smbolo de a e o ltimo smbolo b}

Portanto:
L1 = {a, aa, ab, aaa, aab, aba, abb, aaa...}

L2 = {ab, aab, abb, aaab, aabb, abab, abbb...}

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

Conforme discutido mais adiante, as gramticas e os reconhecedores so formas


duais de representao de linguagens, ou seja, para cada gramtica possvel obter um
reconhecedor que aceite a linguagem correspondente e vice-versa. particular notao
utilizada para representar uma linguagem, seja atravs de gramticas ou de reconhece-
dores, d-se o nome de metalinguagem.
As Sees 2.3 e 2.5 discutem mais detalhadamente os conceitos fundamentais e as
notaes gerais empregadas na formalizao e no estudo de gramticas e reconhecedores.
2 Conceitos Bsicos de Linguagens 45

A Seo 2.6 dedicada ao estudo da classificao de linguagens e gramticas, estabelecido


por Noam Chomsky, um dos primeiros estudiosos e formuladores da teoria das lingua-
gens formais. Nos captulos que seguem, os aspectos de equivalncia entre gramticas e
reconhecedores sero aprofundados, considerando cada classe particular de linguagens,
de acordo com essa classificao.
Para finalizar o presente item, deve-se mencionar que as linguagens apresentam
duas componentes bsicas: sintaxe e semntica. A sintaxe de uma linguagem refere-se
sua apresentao visual, forma, estrutura de suas cadeias, e no leva em considerao
qualquer informao sobre o significado associado s mesmas. O significado que se atribui
a uma cadeia, ou conjunto de cadeias de uma mesma linguagem, deriva do significado que
se atribui s construes da linguagem, ou seja, decorre diretamente da sua semntica.
Sintaxe e semntica constituem tpicos que se complementam, sendo de muito in-
teresse e grande aplicao em computao. O presente texto trata, porm, apenas dos
aspectos referentes formalizao da estrutura das linguagens, bem como do estudo de
suas propriedades sintticas. Devido sua complexidade, muito maior que a da sintaxe,
o estudo da semntica formal das linguagens est bem menos desenvolvido. No entanto,
considerveis progressos tericos e prticos vm sendo obtidos nas duas ltimas dcadas
em semntica formal, configurando tema de estudos avanados na rea das linguagens
formais ([59], [30]). No entanto, o tema escapa ao escopo deste texto.

2.3 Gramticas
Tambm conhecidas como dispositivos generativos, dispositivos de sntese, ou
ainda dispositivos de gerao de cadeias, as gramticas constituem sistemas formais
baseados em regras de substituio, atravs dos quais possvel sintetizar, de forma
exaustiva, o conjunto das cadeias que compem uma determinada linguagem.
Para ilustrar esse conceito, nada melhor do que a prpria noo intuitiva, adquirida
poca do ensino fundamental, do significado do termo gramtica: o livro atravs do
qual so aprendidas as regras que indicam como falar e escrever corretamente um idioma.
Como se sabe, as regras assim definidas especificam combinaes vlidas dos sm-
bolos que compem o alfabeto os diversos verbos, substantivos, adjetivos, advrbios,
pronomes, artigos etc. , e isso feito com o auxlio de entidades abstratas denomi-
nadas classes sintticas: sujeito, predicado etc. Assim, por exemplo, a frase O menino
atravessou a rua distraidamente considerada correta, do ponto de vista gramatical,
pois ela obedece a uma das inmeras regras de formao de frases, baseada no padro
sujeito + predicado + complemento.
De acordo com tais regras, um sujeito pode ser composto por um artigo (O) se-
guido de um substantivo (menino), o predicado pode conter um verbo (atravessou)
e um correspondente objeto direto (a rua), e o complemento pode modificar a ao
(distraidamente). O objeto direto, por sua vez, pode seguir o mesmo padro estru-
tural do sujeito: artigo (a) seguido de substantivo (rua).
Naturalmente, o conjunto das regras que formam uma gramtica deve ser sufici-
ente para permitir a elaborao de qualquer frase ou discurso corretamente construdo
em um determinado idioma, e no deve permitir a construo de qualquer cadeia que
no pertena linguagem. Convm notar, no exemplo do pargrafo acima, que os termos
em itlico correspondem s denominadas classes sintticas do portugus, e os termos em
negrito, aos smbolos que efetivamente fazem parte do seu alfabeto.
Assim como ocorre no caso das linguagens naturais, as linguagens formais tambm
podem ser especificadas atravs de gramticas a elas associadas. No caso das gram-
46 Linguagens Formais - Teoria, Modelagem e Implementao

ticas das linguagens formais, que constituem o objeto deste estudo, a analogia com as
gramticas das linguagens naturais muito grande. Tratam-se, as primeiras, de con-
juntos de regras que, quando aplicadas de forma recorrente, possibilitam a gerao de
todas as cadeias pertencentes a uma determinada linguagem.
Diferentemente das gramticas das linguagens naturais, que so descritas por in-
termdio de linguagens tambm naturais (muitas vezes a mesma que est sendo descrita
pela gramtica), as gramticas das linguagens formais so descritas utilizando notaes
matemticas rigorosas que visam, entre outros objetivos, evitar dvidas na sua interpre-
tao. Tais notaes recebem a denominao de metalinguagens linguagens que so
empregadas para definir outras linguagens.
Formalmente, uma gramtica G pode ser definida como sendo uma qudrupla2 :

G = (V , , P , S )

onde:

V o vocabulrio da gramtica; corresponde a um conjunto (finito e no-vazio)


de smbolos;

o conjunto (finito e no-vazio) dos smbolos terminais da gramtica; tambm


denominado alfabeto;

P o conjunto (finito e no-vazio) de produes ou regras de substituio da


gramtica;

S a raiz da gramtica, S V .

Adicionalmente, define-se N = V como sendo o conjunto dos smbolos no-


terminais da gramtica. corresponde ao conjunto dos smbolos que podem ser justa-
postos 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
Em outras palavras, uma cadeia qualquer constituda por elementos de V ,
contendo pelo menos um smbolo no-terminal, e uma cadeia qualquer, eventualmente
vazia, de elementos de V .
De fato, uma relao sobre os conjuntos V NV e V , uma vez que:

P = {(, ) | (, ) V NV V }

ou seja, P um subconjunto de V NV V .
Exemplo 2.21 Seja G1 = (V1 , 1 , P1 , S ), com:

2 Dependendo da preferncia dos autores, as gramticas podem ser definidas de outras maneiras, modificando-se
a ordem dos componentes, ou explicitando/implicitando determinados conceitos. Ao ler textos sobre este
assunto, importante verificar antes qual foi a notao adotada pelo autor, para que se possa interpret-la
corretamente.
2 Conceitos Bsicos de Linguagens 47

V1 = {0, 1, 2, 3, S , A}
1 = {0, 1, 2, 3}
N1 = {S , A}
P1 = {S 0S 33, S A, A 12, A }

fcil verificar que G1 est formulada de acordo com as regras gerais acima enunciadas para
a especificao de gramticas. 2

Denomina-se forma sentencial qualquer cadeia obtida pela aplicao recorrente


das seguintes regras de substituio:

1. S (a raiz da gramtica) por definio uma forma sentencial;

2. Seja uma forma sentencial, com e cadeias quaisquer de terminais e/ou


no-terminais da gramtica, e seja uma produo da gramtica. Nessas
condies, a aplicao dessa produo forma sentencial, substituindo a ocorrncia
de por , produz uma nova forma sentencial .

Denota-se a substituio acima definida, tambm conhecida como derivao di-


reta, por:
G
O ndice G designa o fato de que a produo aplicada, no caso , pertence
ao conjunto de produes que define a gramtica G. Nos casos em que a gramtica em
questo puder ser facilmente identificada, admite-se a eliminao de referncias explcitas
a ela. Note-se a distino grfica e de significado que se faz entre o smbolo empregado
na denotao das produes da gramtica () e o smbolo utilizado na denotao das
derivaes ().
Uma seqncia de zero ou mais derivaes diretas, como, por exemplo,
... chamada simplesmente derivao, e pode ser abreviada como .
Derivaes em que ocorre a aplicao de pelo menos uma produo so denominadas
derivaes no-triviais, e so denotadas por + .
Se, pela aplicao de uma derivao no-trivial raiz S de uma gramtica, for
possvel obter uma cadeia w formada exclusivamente de smbolos terminais, diz-se que w ,
alm de ser uma forma sentencial, tambm uma sentena, e denota-se a sua derivao
por:
S + w
Gramticas so sistemas formais baseados na substituio, em uma forma senten-
cial, de uma cadeia, coincidente com o lado esquerdo de uma regra de produo, pela
cadeia correspondente ao lado direito da mesma regra, visando com isso, ao final de uma
seqncia de substituies, a obteno de uma cadeia sobre . O processo de substituio
tem incio sempre a partir da raiz S da gramtica, e finalizado assim que for obtida
uma forma sentencial isenta de smbolos no-terminais, isto , assim que se obtiver uma
sentena.
Exemplo 2.22 Considere-se a gramtica G1 , definida no Exemplo 2.21.

S por definio uma forma sentencial;

0S 33 uma forma sentencial, pois S 0S 33;


S 0S 33 uma derivao direta;
48 Linguagens Formais - Teoria, Modelagem e Implementao

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;

S + 00A3333 e S + 0S 33 so exemplos de derivaes no-triviais;

00S 3333 00S 3333 e 0S 33 00A3333 so exemplos de derivaes;


12 e 00123333 so exemplos de sentenas, pois ambas so formadas exclusivamente por
smbolos terminais e S A 12, ou seja, S + 12, e S 0S 33 00S 3333
00A3333 00123333, ou seja, S + 00123333.
2

Ao conjunto de todas as sentenas w geradas por uma gramtica G d-se o nome


de linguagem definida pela gramtica G, ou simplesmente L(G). Formalmente,

L(G) = {w | S + w }

Exemplo 2.23 Pela inspeo das produes da gramtica G1 do Exemplo 2.21, pode-se concluir
que:
L1 (G1 ) = {0m 1n 2n 32m | m 0 e (n = 0 ou n = 1)}
So exemplos de sentenas pertencentes a L1 : , 12, 033, 01233, 003333, 00123333 etc. 2

Como se pode perceber, diferentes seqncias de produes aplicadas (nica)


raiz da gramtica possibilitam a gerao das diferentes (em geral, infinitas) sentenas da
linguagem. Por outro lado, muitas vezes h mais de uma alternativa de substituio para
um mesmo trecho de uma forma sentencial, ou, ainda, pode haver mais de um trecho
em uma mesma forma sentencial que pode ser objeto de substituio pelo lado direito de
alguma produo. Assim, a identificao correta das sentenas de uma dada linguagem
deve ser feita levando-se em conta a possibilidade de ocorrncia de todos esses fatores
durante o processo de sntese de cadeias.
A completa identificao da linguagem gerada por uma determinada gramtica
uma tarefa que exige abstrao e alguma prtica na manipulao das produes. Algumas
gramticas, como o caso de G1 , podem ser analisadas sem dificuldade. Contudo, na
prtica, podem ocorrer gramticas consideravelmente mais complexas. Observe-se, a
ttulo de ilustrao, o caso da gramtica G2 apresentada no Exemplo 2.24.
Exemplo 2.24 Considere G2 = (V2 , 2 , P2 , S ), com:

V2 = {a, b, c, S , B , C }
2 = {a, b, c}
P2 = {S aSBC , S abC , CB BC , bB bb, bC bc, cC cc}

Uma anlise mais profunda de G2 permite concluir que L2 (G2 ) = {a n b n c n | n 1}. A


sentena aabbcc, por exemplo, derivada da seguinte forma nessa gramtica:
S aSBC aabCBC aabBCC aabbCC aabbbcC aabbcc
pela aplicao, respectivamente, das produes:
S aSBC , S abC , CB BC , bB bb, bC bc e cC cc
2

possvel definir uma mesma linguagem atravs de duas ou mais gramticas distin-
tas. Quando isso ocorre, diz-se que as gramticas que definem a linguagem em questo
so sintaticamente equivalentes ou, simplesmente, equivalentes uma outra.
2 Conceitos Bsicos de Linguagens 49

Exemplo 2.25 As gramticas G3 e G4 a seguir definidas so equivalentes:

G3 = ({a, b, S }, {a, b}, {S aS , S a, S bS , S b, S aSb}, S )


G4 = ({a, b, S , X }, {a, b}, {S XS , S X , X a, X b}, S )
Uma rpida anlise de G3 e G4 permite concluir que L3 (G3 ) = L4 (G4 ) = {a, b}+ . 2

So muitas as notaes (metalinguagens) utilizadas na definio gramatical das lin-


guagens formais e de programao. Nos exemplos acima, bem como na maior parte do
presente texto, utiliza-se a notao algbrica. No entanto, diversas outras metalingua-
gens 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 lin-
guagens e utilizada com especial nfase no estudo terico das propriedades das linguagens
formais, outras notaes, como, por exemplo, as Expresses Regulares, o BNF (Backus-
Naur Form ou Notao de Backus-Naur), a Notao de Wirth (ou Expresses Regulares
Estendidas) e os Diagramas de Sintaxe (tambm conhecidos como Diagramas Ferro-
virios), so bastante populares e amplamente utilizadas na definio de linguagens de
programao de alto nvel.

2.4 Linguagens, Gramticas e Conjuntos


Linguagens so conjuntos. Conjuntos que formam linguagens so colees de cadeias
construdas sobre um alfabeto, por exemplo, atravs de gramticas. A fim de explicitar e
facilitar o entendimento de linguagens vistas como conjuntos, conveniente considerar-
se uma coleo finita de linguagens distintas, todas infinitas, definidas sobre um mesmo
alfabeto qualquer. Analisando-se as respectivas gramticas, sugere-se que o leitor procure
compreender de que modo as linguagens foram definidas e, principalmente, verifique a
relao que existe entre elas.
interessante verificar: estas linguagens possuem elementos (sentenas) em co-
mum? Qual a sua interseco? Alguma dessas linguagens subconjunto de outra?
Superconjunto? Subconjunto prprio? So inmeras as possibilidades. O importante
desenvolver a percepo de que linguagens so conjuntos. Isso facilitar o estudo de
novas operaes sobre linguagens, e tambm de suas propriedades.
Exemplo 2.26 A gramtica G0 = ({a, b, S }, {a, b}, {S aS , S bS , S }, S ) tal que
L0 (G0 ) = .
Substituindo a regra S pelas regras S a e S b, em G, obtm-se uma nova
gramtica G1 = ({a, b, S }, {a, b}, {S aS , S bS , S a, S b}, S ), de tal forma que agora
L1 (G1 ) = + .
A linguagem L2 , formada por cadeias sobre = {a, b}, de tal modo que todas elas sejam
iniciadas pelo smbolo a, gerada pela gramtica G2 = ({a, b, S , X }, {a, b}, {S aX , X
aX , X bX , X }, S ). So exemplos de cadeias pertencentes a L2 : a, abb, abaaa, aabbbba, aaa
etc.
Por outro lado, considere-se a linguagem L3 , composta por cadeias sobre = {a, b}, de tal
forma que todas elas sejam iniciadas com o smbolo a e terminadas com o smbolo b. Uma possvel
gramtica que gera L3 G3 = ({a, b, S , X }, {a, b}, {S aX , X aX , X bX , X b}, S ).
Perceba a sutil diferena que existe entre G2 e G3 .
Em seguida, considere-se a linguagem L4 que compreende todas as cadeias sobre = {a, b}
que possuam exatamente dois smbolos b (nem mais, nem menos). So exemplos: bb, bab, abb,
aaaaabaab etc. L4 gerada pela gramtica G4 = ({a, b, S , X }, {a, b}, {S XbXbX , X
aX , X }, S ).
50 Linguagens Formais - Teoria, Modelagem e Implementao

Finalmente, a linguagem L5 definida pelas cadeias sobre = {a, b}, de tal forma que todas
elas sejam iniciadas com o smbolo b e contenham um nico smbolo b. So exemplos b, ba, baa, baaa
etc. A linguagem L5 gerada por G5 = ({a, b, S , X }, {a, b}, {S bX , X aX , X }, S ).
Esquematicamente, a relao entre as linguagens L0 , L1 , L2 , L3 , L4 e L5 pode ser observada
na Figura 2.5 ( bom ter em mente que linguagens so conjuntos).

Figura 2.5: As linguagens do Exemplo 2.26 como conjuntos

Observe-se a relao de incluso prpria entre as linguagens estudadas. A cadeia ilustra a


incluso prpria de L1 em L. A cadeia bbba, de L2 em L1 . Atravs da cadeia abaa, exemplifica-se a
incluso prpria de L3 em L2 . Sobre L4 pode-se apenas dizer que est includa propriamente em L1 .
A cadeia abb pertence simultaneamente s linguagens L0 , L1 , L2 , L3 e L4 . A cadeia abaabab
pertence a L0 , L1 , L2 e L3 apenas. A cadeia ababa, somente s linguagens L0 , L1 , L2 e L4 , e assim
por diante.
Cumpre, novamente, notar que:

A maior linguagem que pode ser definida sobre {a, b} {a, b} , que, neste caso, corresponde
a L0 ;

O conjunto de todas as linguagens que podem ser definidas sobre {a, b} dado por 2{a,b} .

Assim, L0 , L1 , L2 , L3 , L4 e L5 pertencem, todas, a 2{a,b} . Em outras palavras, cada uma

dessas linguagens um elemento de 2{a,b} , que por sua vez um conjunto infinito.
2

2.5 Reconhecedores
Conhecidos tambm como dispositivos cognitivos, dispositivos de aceitao, acei-
tadores sintticos ou simplesmente autmatos, os reconhecedores so sistemas for-
mais capazes de aceitar todas as sentenas que pertenam a uma determinada linguagem,
rejeitando todas as demais. Por esse motivo, constituem uma forma alternativa s gra-
mticas para a representao finita de linguagens.
Diferentemente das gramticas, para as quais possvel definir e empregar uma
notao formal adequada para todas as classes de linguagens (notao algbrica vista
na Seo 2.3), os reconhecedores, ao contrrio, so mais convenientemente estudados
2 Conceitos Bsicos de Linguagens 51

se forem utilizadas notaes (metalinguagens) diversas, cada qual apropriada para a


correspondente classe de linguagens, de acordo com a classificao apresentada adiante,
na Seo 2.6.
No obstante, possvel estudar genericamente os reconhecedores do ponto de vista
conceitual, sem entrar nos pormenores de sua formalizao, uma vez que todos eles
constituem instncias de um modelo conceitual nico. Assim, no presente texto, os
aspectos de notao so considerados apenas no contexto do estudo de cada tipo de
linguagem, sem prejuzo para o entendimento do modelo geral a seguir apresentado.
Os reconhecedores esboados em sua forma geral na Figura 2.6 apresentam
quatro componentes fundamentais: uma memria (fita) contendo o texto de entrada do
reconhecedor, um cursor, que indica o prximo elemento da fita a ser processado, uma
mquina de estados finitos, sem memria, e uma memria auxiliar opcional.

Figura 2.6: Organizao de um reconhecedor genrico

A fita de entrada contm a cadeia a ser analisada pelo reconhecedor. Ela dividida
em clulas, e cada clula pode conter um nico smbolo da cadeia de entrada, pertencente
ao alfabeto de entrada escolhido para o reconhecedor. A cadeia de entrada disposta
da esquerda para a direita, sendo o seu primeiro smbolo colocado na posio mais
esquerda da fita.
Dependendo do tipo de reconhecedor considerado, a fita (ou o conjunto de fitas) de
entrada pode apresentar comprimento finito ou infinito. Neste ltimo caso, a fita pode
ter ou no limitao esquerda e/ou direita. A cadeia de entrada registrada na fita
de entrada pode estar delimitada por smbolos especiais, no pertencentes ao alfabeto de
entrada, sua esquerda e/ou sua direita, porm isso no obrigatrio.
A leitura dos smbolos gravados na fita de entrada feita atravs de um cabeote
de acesso, normalmente denominado cursor, o qual sempre aponta o prximo smbolo
da cadeia a ser processado. Os movimentos do cursor so controlados pela mquina
de estados, e podem, dependendo do tipo de reconhecedor, ser unidirecionais (podendo
deslocar-se para um lado apenas, tipicamente para a direita) ou bidirecionais (podendo
deslocar-se para a esquerda e para a direita). Determinados tipos de reconhecedores
utilizam o cursor no apenas para lerem os smbolos da fita de entrada, mas tambm
para escreverem sobre a fita, substituindo smbolos nela presentes por outros, de acordo
com comandos determinados pela mquina de estados.
A mquina de estados funciona como um controlador central do reconhecedor, e
contm uma coleo finita de estados, responsveis pelo registro de informaes colhidas
52 Linguagens Formais - Teoria, Modelagem e Implementao

no passado, mas consideradas relevantes para decises futuras, e transies, que pro-
movem as mudanas de estado da mquina em sincronismo com as operaes efetuadas
atravs do cursor sobre a fita de entrada. Alm disso, a mquina de estados finitos pode
utilizar uma memria auxiliar para armazenar e consultar outras informaes, tambm
coletadas ao longo do processamento, que sejam eventualmente necessrias ao completo
reconhecimento da cadeia de entrada.
A memria auxiliar opcional, e torna-se necessria apenas em reconhecedores de
linguagens que apresentam uma certa complexidade. Normalmente, ela assume a forma
de uma estrutura de dados de baixa complexidade, como, por exemplo, uma pilha (no
caso do reconhecimento de linguagens livres de contexto). As informaes registradas na
memria auxiliar so codificadas com base em um alfabeto de memria, e todas as
operaes de manipulao da memria auxiliar (leitura e escrita) fazem referncia apenas
aos smbolos que compem esse alfabeto. Os elementos dessa memria so referenciados
atravs de um cursor auxiliar que, eventualmente, poder coincidir com o prprio
cursor da fita de entrada. Seu tamanho no obrigatoriamente limitado e, por definio,
seu contedo pode ser consultado e modificado.
O diagrama abaixo resume os componentes de um reconhecedor genrico e as di-
versas formas como cada um deles pode se apresentar:



Mquina de Estados Finita




Limitada / No limitada




Fita de entrada + Cursor Leitura apenas / Leitura e escrita

Reconhecedor
Direita apenas / Direita e esquerda







No limitada



Memria auxiliar + Cursor

Leitura e escrita
A operao de um reconhecedor baseia-se em uma seqncia de movimentos que
o conduzem, de uma configurao inicial nica, para alguma configurao de parada,
indicativa do sucesso ou do fracasso da tentativa de reconhecimento da cadeia de entrada.
Cada configurao de um autmato caracterizada pela qudrupla:

1. Estado;

2. Contedo da fita de entrada;

3. Posio do cursor;

4. Contedo da memria auxiliar.

A configurao inicial de um autmato definida como sendo aquela em que as


seguintes condies so verificadas:

1. Estado: inicial, nico para cada reconhecedor;

2. Contedo da fita de entrada: com a cadeia completa a ser analisada;

3. Posio do cursor: apontando para o smbolo mais esquerda da cadeia;

4. Contedo da memria auxiliar: inicial, pr-definido e nico.


2 Conceitos Bsicos de Linguagens 53

A configurao final de um autmato aquela na qual as seguintes condies so


obedecidas:

1. Estado: algum dos estados finais, que no so necessariamente nicos no reconhe-


cedor;

2. Contedo da fita de entrada: inalterado ou alterado, em relao configurao


inicial, conforme o tipo de reconhecedor;

3. Posio do cursor: apontando para a direita do ltimo smbolo da cadeia de entrada


ou apontando para qualquer posio da fita, conforme o tipo de reconhecedor;

4. Contedo da memria auxiliar: final e pr-definido, no necessariamente nico ou


idntico ao da configurao inicial, ou apenas indefinido.

A especificao de uma possibilidade de movimentao entre uma configurao e


outra denominada transio. A movimentao do autmato da configurao corrente
para uma configurao seguinte feita, portanto, levando-se em conta todas as transies
passveis de serem aplicadas pelo reconhecedor configurao corrente. Uma transio
mapeia triplas formadas por:

Estado corrente;

Smbolo correntemente apontado pelo cursor da fita de entrada;

Smbolo correntemente apontado pelo cursor da memria auxiliar;

em triplas formadas por:

Prximo estado;

Smbolo que substituir o smbolo correntemente apontado pelo cursor da fita de


entrada e o sentido do deslocamento do cursor;

Smbolo que substituir o smbolo correntemente apontado pelo cursor da memria


auxiliar.

A identificao das transies passveis de serem aplicadas a uma determinada con-


figurao determinada pela mquina de estados. Ela tambm responsvel, na ocasio
da aplicao de uma transio, pelo deslocamento do cursor, acompanhado de uma even-
tual 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 tran-
sio, 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 Linguagens Formais - Teoria, Modelagem e Implementao

de entrada, tambm constituem possibilidades adicionais de movimentao se estiverem


associadas a outras transies (vazias ou no-vazias) em uma mesma configurao.
Diz-se que um autmato aceita (ou reconhece) uma cadeia se lhe for possvel atingir
alguma configurao final a partir de sua configurao inicial nica, atravs de movimen-
tos executados sobre tal cadeia. Caso contrrio, diz-se que o autmato rejeita a cadeia.
A maneira como tais configuraes sucedem umas s outras durante o reconhecimento (ou
aceitao) da cadeia de entrada define uma caracterstica fundamental dos autmatos,
conforme explicado a seguir.
possvel que ocorram, durante o reconhecimento de uma cadeia de entrada, con-
figuraes para as quais se apresentem nenhuma, apenas uma ou eventualmente diversas
possibilidades distintas de movimentao.
No caso de haver uma nica possibilidade de movimentao, diz-se que a transio
efetuada determinstica, dado que no existem outras opes de evoluo para o aut-
mato em tal configurao. Quando todos os movimentos passveis de serem executados
por um autmato forem movimentos determinsticos, independentemente de qual seja a
cadeia de entrada, e s neste caso, diz-se que o autmato determinstico.
No caso de haver mais de uma alternativa de movimentao em uma ou mais confi-
guraes do autmato (independentemente da cadeia de entrada), todas as possibilidades
devem ser consideradas legtimas, e o autmato dever optar, sucessiva e aleatoriamente,
por todas as alternativas apresentadas, uma de cada vez, at que uma das duas seguintes
condies seja satisfeita:

1. Uma configurao final seja atingida, ou

2. Esgotadas todas as possibilidades, nenhuma configurao final possa ser atingida.

Um autmato com tal caracterstica denominado no-determinstico. Uma


cadeia de entrada aceita por ele se pelo menos uma das mltiplas seqncias de movi-
mentaes realizadas pelo autmato for capaz de conduzi-lo a alguma configurao final,
partindo de sua configurao inicial nica. Diz-se que o autmato rejeita a cadeia de
entrada quando, esgotadas todas as seqncias de movimentao possveis, o mesmo no
puder atingir uma configurao final qualquer.
Do ponto de vista conceitual, o no-determinismo de um autmato pode ser enten-
dido a partir do modelo de paralelismo que inerente sua operao. De acordo com
esse modelo, sempre que o autmato se depara com mais de uma possibilidade de movi-
mentao, considera-se que mltiplas instncias do mesmo so criadas (em nmero igual
quantidade de movimentaes distintas previstas pela funo de transio, a partir da
configurao corrente), cada qual herdando da instncia anterior a configurao corrente
do autmato (estado, situao da cadeia de entrada e situao da memria auxiliar),
porm evoluindo para configuraes distintas. Dessa forma, todas as possibilidades so
consideradas.
Fazendo-se uma analogia com o modelo de implementao baseado em programao,
o modelo paralelo de operao corresponde criao de mltiplos threads de execuo,
cada qual sendo responsvel pela verificao de uma seqncia possvel de movimentaes.
Autmatos determinsticos, por um lado, podem ser facilmente abstrados a partir do
modelo seqencial, no-paralelo de computao, uma vez que no existe a necessidade
de se considerarem vrios threads. Por outro lado, como se pode intuir, a criao
de modelos de execuo para autmatos no-determinsticos em mquinas estritamente
seqenciais no direta, requerendo do programador e/ou do ambiente de execuo
artifcios que viabilizem o modelo paralelo de computao.
2 Conceitos Bsicos de Linguagens 55

Quando no h alternativas de movimentao a partir da configurao corrente do


autmato, constata-se um impasse, caracterizando a impossibilidade de prosseguimento
da operao de reconhecimento. Se o autmato for determinstico, isso ser interpretado
como sucesso do reconhecimento se e apenas se for atingida alguma configurao de acei-
tao (configurao final), sendo constatado um fracasso na operao de reconhecimento
nos demais casos.
Caso o autmato seja do tipo no-determinstico, tal impasse indicar apenas que a
particular seqncia de movimentaes em andamento (thread) no conduziu ao reco-
nhecimento da sentena. Diz-se que a cadeia aceita por um autmato no-determinstico
se pelo menos um thread for capaz de conduzi-lo at impasse em uma configurao final.
Caso todas as seqncias (threads) conduzam a impasses em configuraes no-finais,
diz-se que o autmato rejeita a cadeia de entrada.
Seja o autmato determinstico ou no-determinstico, a linguagem por ele aceita
(ou definida) corresponde ao conjunto de todas as cadeias que ele aceita.
Do ponto de vista prtico, existe um interesse muito maior nos autmatos deter-
minsticos, visto que sua operao no exige repetidas pesquisas exaustivas em rvores
de alternativas. Tal fato possibilita a construo de autmatos eficientes, constituindo
uma opo muito atraente para vrias aplicaes, como o caso do projeto da lgica de
controladores finitos, ou de compiladores para linguagens de programao de alto nvel.
Os conceitos acima apresentados podem ser formalizados representando-se os reco-
nhecedores como dispositivos cujas configuraes so definidas como elementos do pro-
duto cartesiano:
Q ( )
onde:

Q o conjunto de estados do controle finito;

o alfabeto de entrada do reconhecedor;

o alfabeto de sua memria auxiliar.

Dessa forma, as configuraes de um reconhecedor genrico podem ser represen-


tadas 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:

representa o contedo da fita esquerda do cursor;

representa o contedo da fita direita do cursor, incluindo o smbolo apontado


pelo cursor, na configurao considerada.

Interpreta-se como a parte da fita j analisada pelo reconhecedor, e a parte


ainda a analisar.
Assim, por exemplo, se = , com e , ento o smbolo apontado
pelo cursor nessa configurao, e corresponde cadeia situada sua direita.
As transies de um reconhecedor podem ser representadas como funes totais
que mapeiam configuraes correntes em novas configuraes:

)
: Q ( ) 2Q(
56 Linguagens Formais - Teoria, Modelagem e Implementao

Como normalmente o cursor permite o acesso a apenas um smbolo da fita de entrada


de cada vez (aquele apontado pelo cursor em cada configurao), a funo costuma ser
simplificada para:
: 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(

Ainda por uma questo de praticidade, em vez de se especificar os elementos de


e que devero substituir integralmente a cadeia de entrada e o contedo
da memria auxiliar aps a execuo da respectiva transio pelo autmato, costuma-se
especificar apenas o efeito que tal transio produz sobre a configurao corrente.
No caso da cadeia de entrada, especifica-se apenas o novo smbolo que substituir
o smbolo recm-lido, bem como o sentido de deslocamento do cursor (para a esquerda
ou para a direita) aps ser efetuada essa substituio. No caso da memria auxiliar,
especifica-se uma cadeia, que dever substituir o smbolo consultado pela transio exe-
cutada. Para tanto, a funo assume a sua nova e definitiva forma:

: Q ( {}) 2Q(({}){E ,D,})

{E , D , } um conjunto cujos elementos indicam as possibilidades de sentido de


deslocamento do cursor aps a consulta do smbolo corrente na cadeia de entrada pelo
autmato. E indica deslocamento para a esquerda, D para a direita e ausncia de
movimento do cursor.
A funo de transio especifica um conjunto de possibilidades de movimentao,
podendo, em cada uma, produzir os seguintes efeitos sobre a configurao corrente do
autmato:

1. Mudana no estado corrente de qi para qj com qi , qj Q ;

2. Alterao da cadeia de entrada a partir da consulta do smbolo corrente 1 e


de sua subseqente substituio por um novo elemento 2 ;

3. Eventual modificao da cadeia de entrada sem que haja consulta do smbolo


corrente (caso {} no domnio de ); por outro lado, tambm possvel que no
haja modificao da cadeia de entrada como resultado da aplicao da transio
(caso {} no contradomnio de );

4. Eventual deslocamento do cursor da fita de entrada para a direita ou para a es-


querda, aps a aplicao da transio; no caso em {E , D , }, o cursor permanece
na posio original, sem se deslocar;

5. Alterao do contedo da memria auxiliar, a partir da consulta de um smbolo


1 e de sua subseqente substituio por uma cadeia 2 ;

6. Deslocamento do cursor da memria auxiliar, de forma compatvel com a maneira


como a mesma estiver estruturada. Exemplo: tipicamente, para memria auxiliar
2 Conceitos Bsicos de Linguagens 57

estruturada como pilha, o cursor se move de forma compatvel com as operaes


de movimentao das pilhas, ou seja, realizando operaes de push e pop.
Note, adicionalmente, que:

7. possvel associar uma mesma configurao corrente a mais de uma nova confi-
gurao seguinte (uma possvel forma de no-determinismo);

8. possvel haver configuraes tais que () = . Trata-se de configuraes


para as quais no foram definidas possibilidades de movimentao (nessas confi-
guraes o reconhecedor pra por falta de opes para prosseguir as operaes de
reconhecimento).

A operao de movimentao de um reconhecedor, de uma dada configurao para


a configurao seguinte, por meio da aplicao de uma transio, denotada atravs do
smbolo :
: Q ( ) Q ( )
Denota-se uma determinada movimentao do reconhecedor como:

(qi , (, ), ) (qj , (, ), )

O smbolo denota, portanto, uma relao binria sobre o conjunto das configu-
raes Q ( ) de cada autmato.
Exemplo 2.27 Considere-se o seguinte autmato, parcialmente definido:
Q = {q0 , q1 }; = {0, 1}; = {A, B }, com:

1. (q0 , 0, A) = {(q1 , (0, D), AA)}

2. (q0 , 0, B ) = {(q1 , (0, D), )}

3. (q1 , , A) = {(q1 , (0, D), BA)}

4. (q1 , 1, B ) = {(q1 , (1, E ), AB )}

5. (q1 , 0, A) = {(q0 , (0, E ), B )}

Supondo que a cadeia de entrada seja 0110, que o contedo corrente da memria auxiliar seja
A e que o cursor de leitura esteja apontando para o smbolo mais esquerda da cadeia de entrada,
a seguinte seqncia de movimentos poderia fazer parte do reconhecimento de tal cadeia:

(q0 , (, 0110), A)
(q1 , (0, 110), AA)
(q1 , (00, 10), BAA)
(q1 , (0, 010), ABAA)
(q0 , (, 0010), BBAA)
(q1 , (0, 010), BAA)
Tais movimentos correspondem, respectivamente, aplicao das transies 1, 3, 4, 5 e 2,
nesta ordem.
Naturalmente, outros movimentos poderiam ter sido executados partindo-se da mesma confi-
gurao inicial. Por exemplo, a transio 5 poderia ter sido executada na configurao em que se
faz uso da transio 3 e vice-versa. Neste caso, uma nova seqncia de movimentaes seria obtida,
correspondendo aplicao das transies 1, 5, 2, 3 e 4, nesta ordem:
58 Linguagens Formais - Teoria, Modelagem e Implementao

(q0 , (, 0110), A)
(q1 , (0, 110), AA)
(q0 , (, 0110), BA)
(q1 , (0, 110), A)
(q1 , (00, 10), BA)
(q1 , (0, 010), ABA)

Um reconhecedor considerado no-determinstico se e apenas se pelo menos uma


das condies abaixo, referentes definio da funo , for verificada. Caso contrrio,
ele ser determinstico:

q Q , , tal que |(q, , )| 2;

q Q , tal que |(q, , )| 2;

q Q , , tal que, simultaneamente, |(q, , )| 1 e |(q, , )| 1.

A verificao de qualquer das condies acima implica a necessidade de o reconhe-


cedor 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, possi-
bilidades 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 cor-
rente, 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 mo-
vimentao) possui carter esttico, ou seja, ela est associada a uma descrio esttica
do comportamento de um reconhecedor. Transies descrevem movimentaes potenci-
ais, 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 no-
determinstico 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 ,
2 Conceitos Bsicos de Linguagens 59

1 e 1 correspondem, respectivamente, aos smbolos correntemente referenciados pelos cur-


sores 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 con-
figurao 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 )
2

Reconhecedores determinsticos costumam ter suas transies definidas atravs de


uma verso simplificada e particularizada da funo genrica, visando com isso expli-
citar a associao unvoca entre cada uma de suas configuraes com uma nica confi-
gurao seguinte, conforme mostrado a seguir:

: Q ( {}) Q ( {E , D })

Transies em vazio, em reconhecedores determinsticos, so admitidas apenas em


configuraes para as quais no existam outras possibilidades de movimentao, vazias
ou no-vazias, visando, dessa maneira, preservar o carter determinstico da escolha da
transio a ser aplicada.
A configurao inicial de um reconhecedor costuma ser expressa como:

(q0 , (, w ), 0 )

q0 Q o estado inicial;

w a cadeia de entrada a ser analisada;

0 o contedo inicial da memria auxiliar;


60 Linguagens Formais - Teoria, Modelagem e Implementao

Definindo-se QF Q como sendo o conjunto dos estados finais do reconhecedor, e


F como o conjunto dos contedos possveis da memria auxiliar, convencionados
como sendo finais, as configuraes finais de um reconhecedor podem ser caracterizadas
como:
(qF , (, ), F )

qF QF

F F

Em particular, para os reconhecedores estudados nos Captulos 3 e 4, = w e


= , ou seja, a cadeia de entrada deve necessariamente ser esgotada e a cadeia
de entrada deve permanecer inalterada. Para os reconhecedores dos Captulos 5,
6 e 7, e so quaisquer, indicando com isso que o cursor pode ser deixado em
qualquer posio da fita e, tambm, que o contedo original da mesma no precisa
ser necessariamente preservado ao trmino do processamento.

A linguagem L aceita por um reconhecedor M , definida como o conjunto de cadeias


capaz de moviment-lo desde a sua configurao inicial at alguma configurao final,
pode, portanto, ser definida formalmente como:

L(M ) = {w | (q0 , (, w ), 0 ) (qF , (, ), F )}

Note-se que denota novamente o fechamento reflexivo e transitivo da relao


, ou seja, a movimentao do reconhecedor ao longo de zero ou mais configuraes
sucessivas.
O modelo genrico de reconhecedor apresentado nesta seo adequado para as
especializaes que so discutidas nos captulos seguintes, conforme a classe de lingua-
gens que se esteja considerando. Tais reconhecedores especializados so utilizados no
desenvolvimento terico da matria, incluindo a demonstrao de teoremas e tambm de
diversas propriedades importantes para cada uma dessas classes de linguagens.
Quando, no entanto, se consideram modelos de implementao para tais reconhe-
cedores, em particular quando se trata de modelos de simulao por software, muitas
vezes conveniente acrescentar sua especificao extenses que costumam facilitar a
realizao de tais modelos.
Entre as extenses mais comuns, usual encontrar-se a insero de delimitadores
especiais em torno da cadeia de entrada (smbolos BOF e EOF, begin-of-file e end-
of-file, respectivamente indicativos de incio e fim da cadeia de entrada), e tambm
o desmembramento da caracterizao da configurao do reconhecedor em termos da
caracterizao da configurao de cada uma das suas partes (da mquina de estados, da
cadeia de entrada e da memria auxiliar).
Tais extenses no apresentam qualquer prejuzo ao modelo ou aos resultados te-
ricos apresentados, e constituem, como mencionado, mera convenincia de representao
conforme a tecnologia de implementao adotada.
No caso particular da classe de reconhecedores estudados nos Captulos 5, 6 e 7,
o modelo terico (Mquina de Turing) tambm faz uso dos delimitadores BOF e EOF.
Nesses casos, a definio de configurao inicial estabelece que o cursor de acesso deve
apontar inicialmente para o smbolo imediatamente direita do BOF, smbolo esse que,
por isso, corresponde ao segundo smbolo da cadeia de entrada (da esquerda para a
direita) e ao primeiro smbolo a ser analisado de fato.
2 Conceitos Bsicos de Linguagens 61

2.6 Hierarquia de Chomsky


O estudo sistemtico das linguagens formais teve um forte impulso no final da dcada de
1950, quando o lingista Noam Chomsky publicou dois artigos ([61] e [62]) apresentando o
resultado de suas pesquisas relativas classificao hierrquica das linguagens. At ento,
a teoria dos autmatos se apresentava razoavelmente evoluda, porm a das linguagens
formais ainda no se havia, de fato, estabelecido como disciplina.
A partir da publicao dos referidos artigos, houve uma significativa concentrao
de pesquisas na rea das linguagens formais, e a teoria resultante, juntamente com a
teoria dos autmatos, teve a oportunidade de se consolidar definitivamente, a partir do
final da dcada de 1960, como uma disciplina coesa e fundamental para as reas de
engenharia e de cincia da computao.
Como terico e estudioso das linguagens naturais, Chomsky se dedicava pesquisa
de modelos que permitissem a formalizao de tais linguagens. Ainda hoje esse objetivo
parece um tanto ambicioso, porm o trabalho de Chomsky logo chamou a ateno de
especialistas de outras reas, em particular os da rea de computao, que viam, para suas
teorias, grande aplicabilidade para a formalizao e o estudo sistemtico de linguagens
artificiais, especialmente as de programao.
A prtica confirmou a intuio dos especialistas. A classificao das linguagens, por
ele proposta, conhecida como Hierarquia de Chomsky, tem como principal mrito
agrupar as linguagens em classes, de tal forma que elas possam ser hierarquizadas de
acordo com a sua complexidade relativa. Como resultado, possvel antecipar as pro-
priedades fundamentais exibidas por uma determinada linguagem, ou mesmo vislumbrar
os modelos de implementao mais adequados sua realizao, conforme a classe a que
pertena.
Assim, o interesse prtico pela Hierarquia de Chomsky se deve especialmente ao
fato de ela viabilizar a escolha da forma mais econmica para a realizao dos reconhe-
cedores das linguagens, de acordo com a classe a que elas pertenam nessa hierarquia,
evitando-se, portanto, o uso de formalismos mais complexos que o necessrio, e o emprego
de reconhecedores desnecessariamente ineficientes para as linguagens de menor comple-
xidade. De um ponto de vista estritamente de engenharia, a Hierarquia de Chomsky
permite determinar e selecionar o modelo de implementao (no que diz respeito apenas
ao reconhecedor sinttico) de menor custo para cada linguagem considerada.
A Hierarquia de Chomsky define quatro classes distintas de linguagens, denomina-
das tipos 0, 1, 2 e 3, as quais so geradas por gramticas particularizadas em relao ao
caso geral anteriormente apresentado, por intermdio de restries que so aplicadas ao
formato das produes .
D-se o nome de gramtica linear direita quela cujas produes obedeam
todas s seguintes condies:

, N , N , ou = , de forma no exclusiva.

Exemplo 2.29 A gramtica G1 = ({0, 1, 2, 3, S , A}, {0, 1, 2, 3}, {S 0S , S 1S , S A, A


2, A 3}, S ) linear direita. 2
Gramtica linear esquerda aquela em que todas as produes exibem as
seguintes caractersticas:

N
62 Linguagens Formais - Teoria, Modelagem e Implementao

, N , N , ou = , de forma no exclusiva.

Exemplo 2.30 A gramtica G2 = ({0, 1, 2, 3, S , A}, {0, 1, 2, 3}, {S S 2, S S 3, S A, A


1, A 0}, S ) linear esquerda. 2

Gramticas lineares, esquerda ou direita, tambm conhecidas como gramticas


do tipo 3, geram linguagens denominadas regulares, ou simplesmente do tipo 3. As
linguagens regulares constituem a classe de linguagens mais simples dentro da Hierar-
quia de Chomsky, a qual prossegue com linguagens de complexidade crescente at as
linguagens mais gerais, do tipo 0.
Uma gramtica dita livre de contexto, ou do tipo 2, se as suas produes
possurem apenas um smbolo no-terminal em seu lado esquerdo, e uma combinao
qualquer de smbolos terminais e no-terminais no lado direito. Gramticas desse tipo
geram linguagens denominadas livres de contexto, ou do tipo 2. Formalmente:

Exemplo 2.31 A gramtica G3 = ({0, 1, S }, {0, 1}, {S 0S 1, S }, S ) livre de contexto. 2

Deve-se notar que toda gramtica do tipo 3 tambm se enquadra na definio de


gramtica do tipo 2, constituindo caso particular deste ltimo. Logo, correto dizer que
toda gramtica do tipo 3 tambm uma gramtica do tipo 2. Por outro lado, nem toda
gramtica do tipo 2 pode ser caracterizada tambm como gramtica do tipo 3. Existe,
portanto, uma relao de incluso prpria entre o conjunto das gramticas do tipo 3 e o
conjunto das gramticas do tipo 2.
Exemplo 2.32 As gramticas G1 e G2 so simultaneamente lineares e livres de contexto. A gramtica
G3 livre de contexto porm no regular. 2

Conseqentemente, correto dizer que todas as linguagens do tipo 3 (aquelas ge-


radas 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, cons-
tituem 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

| | ||
2 Conceitos Bsicos de Linguagens 63

Note-se que a definio de gramticas sensveis ao contexto no permite, a priori,


que as respectivas linguagens por elas geradas incluam a cadeia vazia, justamente devido
ao fato de que | | ||. No entanto, comum (ver [49]) se considerar L uma linguagem
sensvel ao contexto, ou simplesmente do tipo 1, mesmo que L, se L {} puder
ser gerada por uma gramtica sensvel ao contexto. Em outras palavras, linguagens
sensveis ao contexto so aquelas que so geradas por gramticas sensveis ao contexto,
com a eventual incorporao da cadeia vazia.
Exemplo 2.33 A gramtica G4 = ({a, b, c, S , X , Y }, {a, b, c}, {S aXb, S aXa, Xa
bc, Xb cb}, S ) sensvel ao contexto. 2

Nem toda gramtica do tipo 2 pode ser considerada uma gramtica do tipo 1. De
fato, gramticas do tipo 2 permitem a gerao da cadeia vazia, ao passo que gramticas
do tipo 1 no prevem essa possibilidade. Nem toda gramtica do tipo 1, no entanto,
pode ser considerada uma gramtica do tipo 2. Em particular, aquelas que apresentam
produes cujo lado esquerdo seja composto por cadeias de dois ou mais smbolos.
Exemplo 2.34 As gramticas lineares G1 e G2 so tambm sensveis ao contexto. A gramtica livre
de contexto G3 , no entanto, no sensvel ao contexto, devido presena da produo S . 2

Por outro lado, possvel provar, como veremos nos prximos captulos, que toda
linguagem livre de contexto tambm uma linguagem sensvel ao contexto. O contrrio,
porm, no verdadeiro, pois existem linguagens sensveis ao contexto, inclusive lingua-
gens que no contm a cadeia vazia, que no podem ser geradas por gramticas livres de
contexto, quaisquer que sejam estas. Logo, existe uma relao de incluso prpria entre
as linguagens livres de contexto e as linguagens sensveis ao contexto.
As gramticas pertencentes ltima classe definida pela Hierarquia de Chomsky
recebem a denominao de irrestritas, ou do tipo 0. Como o prprio nome sugere, trata-
se de gramticas sobre as quais no imposta nenhuma restrio quanto ao formato de
suas produes, exceto pelo fato de que o lado esquerdo das mesmas deva sempre conter
pelo menos um smbolo no-terminal:

V NV ;

V ;

No se exige a validade de qualquer relao restritiva entre | | e ||.

Exemplo 2.35 A gramtica G5 = ({a, b, c, S , X , Y }, {a, b, c}, {S aXb, S aXa, Xa


c, Xb c, X }, S ) irrestrita, porm no sensvel ao contexto, devido presena das
produes Xa c, Xb c e S . As gramticas G1 , G2 , G3 e G4 so todas irrestritas. 2

Diferentemente do que ocorre com as gramticas sensveis ao contexto, as formas


sentenciais obtidas pela aplicao das regras de uma gramtica irrestrita no possuem
comprimento necessariamente crescente: elas podem aumentar ou diminuir de compri-
mento, conforme as produes que forem aplicadas.
s linguagens geradas por gramticas do tipo 0 d-se o nome de recursivamente
enumerveis, irrestritas ou, ainda, do tipo 0. Como se pode perceber pela definio,
toda gramtica do tipo 1 tambm uma gramtica do tipo 0, porm o contrrio no
verdadeiro. Em particular, aquelas que possuem produes em que | | < ||.
Logo, toda linguagem sensvel ao contexto pode tambm ser considerada uma lin-
guagem irrestrita. Demonstra-se, por outro lado, que existem linguagens irrestritas que
64 Linguagens Formais - Teoria, Modelagem e Implementao

no podem ser geradas por qualquer gramtica sensvel ao contexto. Portanto, as lin-
guagens sensveis ao contexto constituem subconjunto prprio das linguagens irrestritas.
Resumidamente, a Hierarquia de Chomsky original estabelece que:

1. Toda linguagem do tipo i, 0 i 3 gerada por uma gramtica do tipo i;

2. A classe das linguagens do tipo i, 1 i 3 est includa propriamente na classe


das linguagens i 1. Conseqentemente, toda linguagem do tipo i, 1 i 3
tambm uma linguagem do tipo i 1.

Conforme o trabalho original de Chomsky, no caso das linguagens do tipo 2 (livres


de contexto), as regras acima so vlidas apenas para linguagens que no contm a
cadeia vazia. Como esse texto considera L do tipo 1 se e apenas se L {} for gerada por
alguma gramtica do tipo 1, ento as regras acima so sempre verdadeiras, sem qualquer
restrio.
Exceto por esse detalhe, a hierarquia de incluso prpria das linguagens definida
por Chomsky pode ser representada graficamente atravs da Figura 2.7:

Figura 2.7: Hierarquia de Chomsky

A relao entre as gramticas dos tipos 0, 1, 2 e 3 pode ser resumida da seguinte


forma:

Toda gramtica do tipo 3 (linear) tambm do tipo 2 (livre de contexto);

Nem toda gramtica do tipo 2 tambm do tipo 1 (sensvel ao contexto). So do


tipo 1 apenas aquelas que no possuem produes em que = ;

Toda gramtica do tipo 1 tambm do tipo 0 (irrestrita).

Os critrios que levaram Chomsky a classificar as linguagens em quatro classes


diferentes foram baseados nos seguintes aspectos (os quais, na verdade, esto intimamente
relacionados um ao outro). Em todos os casos a seguir, constatam-se semelhanas para
linguagens pertencentes a uma mesma classe e diferenas para linguagens pertencentes a
classes diferentes:

1. O conjunto das propriedades exibidas pela linguagem;


2 Conceitos Bsicos de Linguagens 65

2. As caractersticas estruturais mais significativas exibidas pela linguagem;

3. O modelo de reconhecedor mais simples necessrio ao seu reconhecimento.

Do ponto de vista estrutural, as linguagens estritamente livres de contexto, ou seja,


as livres de contexto que no podem ser geradas por gramticas lineares esquerda ou
direita, distinguem-se das linguagens regulares por exibirem caractersticas de ani-
nhamento, como o caso da estruturao em blocos e comandos, ou ainda do uso de
parnteses em expresses aritmticas nas linguagens de programao tradicionais. Gra-
mticas livres de contexto possibilitam a formalizao gramatical de tais aninhamentos,
ao passo que gramticas lineares no oferecem tal possibilidade.
As linguagens estritamente sensveis ao contexto, ou seja, as sensveis ao contexto
que no podem ser geradas por gramticas livres de contexto, distinguem-se das lingua-
gens livres de contexto por conterem sentenas as quais, por sua vez, exibem construes,
ou conjuntos de smbolos, cuja validade vinculada presena de construes associa-
das em regies distintas da mesma cadeia. Tais vinculaes (como, por exemplo, aquelas
que existem entre a declarao e o uso de variveis) so caractersticas de linguagens do
tipo 1, e recebem a designao de sensibilidade ou dependncia de contexto.
As linguagens estritamente irrestritas, ou seja, as irrestritas que no podem ser
geradas por gramticas sensveis ao contexto, distinguem-se das linguagens sensveis ao
contexto por apresentarem caractersticas de indecidibilidade que lhes so particulares:
demonstra-se, por exemplo, nos prximos captulos, que no h soluo para o problema
genrico de se decidir se uma cadeia qualquer pertence ou no linguagem gerada por
uma gramtica quando esta for do tipo 0. No entanto, o mesmo problema, quando
aplicado a gramticas do tipo 1, pode sempre ser resolvido.
Do ponto de vista analtico, verifica-se que cada classe de linguagens mencionada
demanda, de acordo com sua complexidade, classes de reconhecedores progressivamente
mais poderosos, porm sempre aderentes ao modelo genrico anteriormente apresentado.
Por outro lado, possvel demonstrar formalmente a equipotncia das vrias classes de
linguagens com os correspondentes modelos especficos de reconhecedores e gramticas,
caracterizando cada modelo como sendo necessrio e suficiente para a anlise ou sntese
de linguagens pertencentes a cada classe.
Naturalmente, sempre ser possvel reconhecer linguagens de tipo i com reconhe-
cedores apropriados para linguagens do tipo i 1, 1 i 3. No entanto, para efeitos
prticos, o custo e a complexidade exibida pelos modelos mais complexos no justificam
a sua utilizao, dada a sensvel reduo de complexidade observada quando se adotam
modelos equivalentes mais simples.
So quatro as particularizaes do modelo geral de reconhecedor que sero estudadas
em detalhes nos prximos captulos: os autmatos finitos, os autmatos de pilha, as
Mquinas de Turing com limitao de memria e, finalmente, as Mquinas de Turing
sem limitao de memria.
A associao das quatro classes de linguagens definidas pela Hierarquia de Chomsky,
com os respectivos modelos de autmato necessrios ao seu reconhecimento, est resu-
mida na Tabela 2.1.
66 Linguagens Formais - Teoria, Modelagem e Implementao

Classe de Modelo de Modelo de


Tipo
linguagens gramtica reconhecedor
Recursivamente
0 Irrestrita Mquina de Turing
enumerveis
Sensveis ao Sensvel ao Mquina de Turing
1
contexto contexto com fita limitada
Livres de Livre de
2 Autmato de pilha
contexto contexto
Linear (direita
3 Regulares Autmato finito
ou esquerda)

Tabela 2.1: Linguagens, gramticas e reconhecedores

As propriedades, as caractersticas estruturais e tambm os modelos de reconheci-


mento mais adequados para cada uma das classes de linguagens definidas pela Hierarquia
de Chomsky sero estudados em detalhes nos captulos seguintes.
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;

Conjuntos regulares (mais usualmente representados atravs das expresses regu-


lares);

Autmatos finitos.

Em primeiro lugar, sero apresentados cada um desses formalismos. Depois, mos-


trada 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 lingua-
gens 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 m-
nimo (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 regulari-
dade 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.

3.1 Gramticas Regulares


As gramticas lineares direita ou esquerda foram apresentadas anteriormente na seo
2.6. Trata-se de gramticas cujas regras atendem s seguintes condies:

N;

( {})(N {}) se linear direita, ou


(N {})( {}) se linear esquerda.

Demonstra-se que as gramticas lineares esquerda ou direita geram exatamente


a mesma classe de linguagens. Portanto, indiferente o emprego de uma ou outra dessas
68 Linguagens Formais - Teoria, Modelagem e Implementao

duas variantes de gramtica, j que ambas possuem a mesma capacidade de representao


de linguagens.
Por esse motivo, as gramticas lineares direita ou esquerda so tambm de-
nominadas gramticas regulares. Este termo serve para designar ambos os tipos de
gramtica linear. As linguagens geradas por gramticas regulares recebem o nome de lin-
guagens regulares. O Teorema 3.1 estabelece a equivalncia entre gramticas lineares,
direita e esquerda.
Teorema 3.1 (Linear direita linear esquerda) Se G1 uma gramtica li-
near direita, ento existe uma gramtica linear esquerda G2 tal que L(G1 ) = L(G2 ),
e vice-versa.

Justificativa Considere-se LR = LR (G1 ), o reverso da linguagem definida por G1 .1


Considere-se a gramtica linear direita G tal que LR = L(G ). Considere-se
tambm G , obtida a partir de G , de tal forma que as cadeias de comprimento no-
unitrio de G sejam invertidas em G , conforme o Algoritmo 3.1:
Algoritmo 3.1 (Linguagem reversa) Obteno de uma gramtica linear esquerda
que gera LR a partir de uma gramtica linear direita que gera L.

Entrada: uma gramtica linear direita G = (V , , P , S );

Sada: uma gramtica linear esquerda G = (V , , P , S ), tal que L(G ) =


L(G )R ;

Mtodo:

1. P ;

2. Se P , ( N {}), ento P ;

3. Se P , (N ), ento R P ;

Com G construda dessa forma, possvel demonstrar que L(G ) = LR (G ) =


L(G1 ). Como G , por construo, linear esquerda, segue que G = G2 e L(G1 ) =
L(G2 ). A demonstrao no sentido oposto obtida de forma anloga.
As gramticas lineares direita geram formas sentenciais em que o smbolo no-
terminal sempre o ltimo smbolo das mesmas (X , , X N ). Portanto, as
sentenas da linguagem vo sendo construdas atravs da insero de novos smbolos
terminais sempre direita das formas sentenciais, imediatamente antes do smbolo no-
terminal (da o nome linear direita).
O algoritmo deste teorema mostra como obter uma gramtica linear esquerda que
gera a mesma linguagem de uma dada gramtica linear direita. De fato, a linguagem
gerada a mesma, com a nica diferena de que agora as sentenas so construdas no
sentido oposto, ou seja, atravs da insero de smbolos terminais sempre esquerda
das formas sentenciais, imediatamente depois do smbolo no-terminal, que agora o
primeiro das formas sentenciais geradas (X , , X N ). S muda, portanto, o
sentido em que as sentenas so geradas.
1 Se L regular, ento, conforme demonstrado no Teorema 3.22, LR tambm regular. E, de acordo com o
Teorema 3.6, existe uma gramtica linear direita G que gera LR .
3 Linguagens Regulares 69

Dada uma gramtica linear direita G1 , o procedimento completo consiste, por-


tanto, nos passos descritos no Algoritmo 3.2:
Algoritmo 3.2 (Linear direita esquerda) Obteno de gramtica linear es-
querda G2 equivalente a uma gramtica linear direita G1 .

Entrada: uma gramtica linear direita G1 ;

Sada: uma gramtica linear esquerda G2 , tal que L(G2 ) = L(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.

Exemplo 3.1 Considere a gramtica linear direita G1 definida a seguir:

S aS
S bS
S P
P cQ
Q cR
R dR
R d

L(G1 ) corresponde ao conjunto das cadeias w sobre {a, b, c, d } tais que:

1. w comea com zero ou mais smbolos a ou b;

2. w continua com exatamente dois smbolos c;

3. w termina com um ou mais smbolos d .

Logo, LR (G1 ) tal que:


1. w comea com um ou mais smbolos d .

2. w continua com exatamente dois smbolos c;

3. w termina com zero ou mais smbolos a ou b;

Uma gramtica linear direita G tal que L(G ) = LR (G1 ) :

S dS
S dP
P cQ
70 Linguagens Formais - Teoria, Modelagem e Implementao

Q cR
R aR
R bR
R

A gramtica G2 , obtida a partir de G pela aplicao do Algoritmo 3.1, :

S S d
S P d
P Q c
Q R c
R R a
R R b
R

Como fcil observar, G2 linear esquerda e L(G2 ) = L(G1 ). Por exemplo, considerem-se
as derivaes da sentena abaccdd , respectivamente em G1 e G2 :
G G G G G G G G
S 1 aS 1 abS 1 abaS 1 abaP 1 abacQ 1 abaccR 1 abaccdR 1 abaccdd
G G G G G G G G
S 2 S d 2 P dd 2 Q cdd 2 R ccdd 2 R accdd 2 R baccdd 2 R abaccd 2
abaccdd
2

Alguns autores consideram as seguintes extenses na definio das regras de


gramticas lineares direita e esquerda:

N;

(N {}) se linear direita, ou


(N {}) se linear esquerda.

Nessas extenses, admite-se uma quantidade qualquer de smbolos terminais no


lado direito das produes gramaticais, e no no mximo um, como foi estabelecido na
definio original. Tais extenses em nada alteram a classe de linguagens representveis
por esses tipos de gramticas, constituindo o seu uso mera convenincia. O Teorema 3.2
traz a demonstrao dessa equivalncia.

Teorema 3.2 (Desmembramento de uma gramtica linear direita) Se G1


uma gramtica composta apenas de produes do tipo , N , (N {}),
ento existe uma gramtica equivalente G2 composta apenas de produes do tipo
, N , ( {})(N {}).

Justificativa G2 pode ser obtida a partir de G1 pelo Algoritmo 3.3, o qual substitui
as regras , N , por um conjunto equivalente de novas regras ,
( {})(N {}).2
Algoritmo 3.3 ( , (N {}) , ( {})(N {}))
Desmembramento das produes de uma gramtica linear direita, na forma ,
2 Tal tipo de gramtica recebe, em alguns textos, a denominao de gramtica linear unitria direita.
3 Linguagens Regulares 71

(N {}), em conjuntos de produes equivalentes, na forma , (


{})(N {}).

Entrada: uma gramtica linear direita G1 = (V1 , , P1 , S1 ), cujas produes so


da forma , (N {});

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:

N2 N2 {Y1 , Y2 , ..., Yn1 }

P2 P2 { 1 Y1 , Y1 2 Y2 , ..., Yn2 n1 Yn1 ,


Yn1 n }

Se | | 3 e N , ou seja, se N , ento:

N2 N2 {X1 , X2 , ..., Xn1 }

P2 P2 { 1 X1 , X1 2 X2 , ..., Xn2 n1 Xn1 ,


Xn1 n K }

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 abcdP
P efP
P Q
Q g
A aplicao do Algoritmo 3.3 resulta na gramtica G2 :

S2 aP1

3 Tambm conhecida como gramtica linear unitria esquerda.


72 Linguagens Formais - Teoria, Modelagem e Implementao

P1 bP2
P2 cP3
P3 dP
P eP4
P4 fP
P Q
Q g
A ttulo de ilustrao, considerem-se as derivaes da sentena abcdefg, respectivamente em
G1 e G2 :
G G G G
S1 1 abcdP 1 abcdefP 1 abcdefQ 1 abcdefg
G G G G G G G G
S2 2 aP1 2 abP2 2 abcP3 2 abcdP 2 abcdeP4 2 abcdefP 2 abcdefQ 2 abcdefg
2

3.2 Conjuntos e Expresses Regulares


Conjuntos e expresses regulares so notaes alternativas utilizadas para representar a
classe de linguagens mais simples que se conhece: a classe das linguagens regulares, a
mais restrita dentro da Hierarquia de Chomsky.
Conjuntos regulares sobre um alfabeto finito so linguagens definidas recursi-
vamente da seguinte forma:

1. um conjunto regular sobre ;

2. {} um conjunto regular sobre ;

3. {}, , um conjunto regular sobre ;


Se X e Y so conjuntos regulares sobre , ento tambm so conjuntos regulares
sobre :

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 = {0}
L2 = {1}
3 Linguagens Regulares 73

L3 = {0i | i 0}
L4 = {1i | i 0}
L5 = {0p 1q | p 0, q 0}
Os conjuntos L1 e L2 so conjuntos regulares sobre , por definio. L3 e L4 so obtidos a
partir de L1 e L2 , respectivamente, pela aplicao da operao fechamento reflexivo e transitivo, ou
seja, L3 = L1 e L4 = L2 . Por sua vez, o conjunto L5 = L pode ser expresso pela concatenao dos
conjuntos L3 e L4 , isto , L5 = L3 L4 . Dessa maneira, demonstra-se que L = {0m 1n | m 0, n 0}
um conjunto regular sobre {0, 1}. Na notao dos conjuntos regulares, L pode ser denotado por
{0} {1} . 2

Exemplo 3.4 A linguagem N formada pelos nmeros naturais decimais um conjunto regular sobre
o alfabeto dos algarismos arbicos e pode ser representada atravs do seguinte conjunto regular:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Se D = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, ento N = DD .


O conjunto R dos nmeros reais decimais sem sinal um conjunto regular sobre D {.}, e
pode ser representado por:
DD .D D .DD
Observe-se que a definio acima inclui nmeros iniciando ou terminando com o caractere
. (como, por exemplo, .315 ou 47.), porm exclui da linguagem a cadeia .. O conjunto P dos
nmeros em ponto flutuante com expoente (denotado por E ) e sinal opcional (+ ou ) pode
ser representado por:

{+, , }(DD .D D .DD ){E }{+, , }DD


Assim, por exemplo, 27 N , 915.4 R e 211.56E + 3 P . Deve-se notar que N R
P , P 6= R e R 6= N . 2

A definio de conjuntos regulares envolve a aplicao de trs operaes j estudadas


para os conjuntos: unio, concatenao e fechamento reflexivo e transitivo. No caso do
fechamento, no entanto, cabem algumas observaes adicionais vlidas para o caso em
que o seu operando seja no apenas um alfabeto, conforme anteriormente mencionado,
mas eventualmente uma linguagem, como ocorre na definio acima.
Seja L uma linguagem qualquer, e considerem-se as novas linguagens L e L+ obtidas
pela aplicao, respectivamente, das operaes de fechamento reflexivo e transitivo e do
fechamento transitivo sobre L. Neste caso, deve-se observar que, diferentemente do que
ocorre com os alfabetos, as seguintes identidades so verdadeiras:

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 Linguagens Formais - Teoria, Modelagem e Implementao

Se x e y so expresses regulares sobre que denotam, respectivamente, os con-


juntos regulares X e Y , ento:

4. (x );

5. x | y ou x + y;

6. x y ou xy;

7. x

tambm so expresses regulares e denotam, respectivamente, os conjuntos regulares


X , X Y , XY e X . Note-se a eliminao, nas expresses regulares, do uso dos smbolos
{ e }, bem como a substituio do operador pelo operador + ou | (a critrio
de cada autor). Visando tornar ainda mais cmoda a utilizao das expresses regulares,
admite-se a eliminao dos pares de parnteses envolvendo sub-expresses que contenham
seqncias exclusivas de operadores, de unio ou de concatenao, uma vez que se trata
de operaes associativas. Alm disso, so designadas precedncias distintas para as trs
operaes, reduzindo ainda mais a necessidade de emprego de parnteses nas expresses
regulares. A Tabela 3.1 resume esses aspectos.

Precedncia Operador Representao


Mais alta Fechamento x
Intermediria Concatenao x y ou xy
Mais baixa Unio x | y ou x + y

Tabela 3.1: Precedncia dos operadores nas expresses regulares

Os parnteses so empregados para modificar localmente a precedncia ou a asso-


ciatividade pr-definida dos operadores, assim como ocorre nas expresses aritmticas
tradicionais da matemtica.
Exemplo 3.5 A expresso regular (ab | c ) = ((ab) | c ) = ((ab) | (c )) representa o conjunto
{ab, , c, cc, ccc...}. A expresso regular a(b | c) representa o conjunto {a, ab, ac, abc, abb, acc,
...}. Finalmente, (ab | c) representa o conjunto {, ab, c, abc, cab, abab, cc, ...}. 2

Uma abreviao muito comum consiste na substituio da expresso regular xx por


x , denotando com isso o conjunto regular correspondente ao fechamento transitivo de
+

X (que composto por todas as cadeias de comprimento maior ou igual a 1 que podem
ser construdas sobre o conjunto X ).
Exemplo 3.6 Considerem-se o alfabeto = {a, b, c, d } e os dois subconjuntos A = {a}, B = {b, c}.
A seguir so apresentadas diferentes linguagens sobre , definidas atravs da notao dos conjuntos
e das expreses regulares:

Sentenas que possuem no mnimo um smbolo a:


A ou (a | b | c | d ) a(a | b | c | d )

Sentenas que possuem exatamente dois smbolos a:


( A) A( A) A( A) ou (b | c | d ) a(b | c | d ) a(b | c | d )
3 Linguagens Regulares 75

Sentenas que possuem um nmero par de smbolos a:


(( A) A( A) A( A) ) ou ((b | c | d ) a(b | c | d ) a(b | c | d ) )

Sentenas que so iniciadas com o smbolo a e terminam com o smbolo b ou c:


A B ou a(a | b | c | d ) (b | c)

Sentenas contendo apenas os smbolos a, b, c, com no mnimo um smbolo:


(A B )+ ou (a | b | c)+

Sentenas formadas por smbolos do alfabeto {a, b, c, d } contendo uma (e somente uma)
subcadeia constituda por um smbolo do conjunto A e dois (e somente dois) do conjunto B ,
nesta ordem:
(( A) B ) ABB (( A) B ) ou d a(b | c)(b | c)d
2

Exemplo 3.7 Utilizando-se a notao das expresses regulares, a linguagem L = {0m 1n | m


0, n 0} pode ser reescrita como ((0) (1) ), ou, simplesmente, 0 1 . Para m 0 e n 1, a
expresso correspondente seria 0 11 . Note-se que 0 11 = 0 1 1 = 0 1+ . 2

A seguir sero apresentadas algumas relaes de identidade vlidas para as expres-


ses 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 Linguagens Formais - Teoria, Modelagem e Implementao

tempo, permite a plena representao dos conjuntos regulares, as expresses regulares


so bastante utilizadas em reas que abrangem desde a especificao de linguagens de
programao e de comandos, entre outras, at a entrada de dados em editores de texto,
programas de busca, anlise de padres etc.
As linguagens regulares foram definidas no captulo anterior como a classe das lin-
guagens geradas por gramticas lineares, esquerda ou direita. No presente item foram
apresentados os conjuntos regulares e a notao mais comumente utilizada para a sua
representao, as expresses regulares.

3.3 Autmatos Finitos


Da mesma forma como ocorre com as expresses regulares e com as gramticas linea-
res direita, os autmatos finitos tambm possibilitam a formalizao das linguagens
regulares, ou seja, das linguagens do tipo 3. No entanto, diferentemente daquelas no-
taes, que constituem dispositivos de gerao de sentenas, os autmatos finitos so
dispositivos de aceitao de sentenas e constituem um caso particular do modelo geral
de reconhecedores apresentado no Captulo 2.
A seguir sero introduzidas as notaes, as convenes, as caractersticas de opera-
o e algumas variantes mais comuns dos autmatos finitos. O item seguinte mostra que
a classe de linguagens por eles aceita coincide exatamente com a classe das linguagens
definidas pelos conjuntos regulares e tambm pelas gramticas lineares direita.
Os autmatos finitos podem ser determinsticos ou no-determinsticos, apresen-
tando ou no transies em vazio. Conforme analisado mais adiante, a eventual presena
de no-determinismos e/ou de transies em vazio no altera a classe de linguagens
aceita pelos autmatos finitos. Por motivos estritamente didticos, sero introduzidos
inicialmente os autmatos finitos determinsticos, sendo feitas extenses posteriores para
contemplar a existncia de no-determinismos e de transies em vazio.
Os autmatos finitos correspondem instncia mais simples do modelo geral de
reconhecedores apresentado na Seo 2.5. As suas principais particularidades em relao
ao modelo geral so:

1. Inexistncia de memria auxiliar;

2. Utilizao do cursor da fita de entrada apenas para leitura de smbolos, no ha-


vendo operaes de escrita sobre a fita;

3. Movimentao do cursor de leitura em apenas um sentido, da esquerda para a


direita;

4. A fita de entrada possui comprimento limitado, suficiente apenas para acomodar


a cadeia a ser analisada.

Os autmatos finitos podem ser representados em notao algbrica ou atravs de


diagramas de transio de estados, introduzidos a seguir, mais adequados sua visuali-
zao.
3 Linguagens Regulares 77

Autmatos Finitos Determinsticos


Algebricamente, um autmato finito determinstico M pode ser definido como uma qun-
tupla:
M = (Q , , , q0 , F )

Q um conjunto finito de estados;

um alfabeto (finito e no-vazio) de entrada;

uma funo de transio, : Q Q ;

q0 o estado inicial, q0 Q ;

F um conjunto de estados finais, F Q .

A mquina de estados de um autmato finito, tambm denominada controle finito,


definida pelo conjunto de estados Q e pela funo de transio , que associa pares
ordenados do tipo (estado corrente, entrada corrente) com um novo estado a ser assumido
pelo autmato quando da aplicao da transio.
Deve-se notar que a funo de transio pode ser, no caso dos autmatos finitos
determinsticos, uma funo total, ou seja, uma funo que definida para todos os
elementos de Q , ou ainda uma funo parcial. Se total, isso implica a especificao
de transies com cada um dos possveis smbolos de entrada para cada um dos
possveis estados q Q do autmato finito. Assim, se || = m e |Q | = n, ento o
autmato finito determinstico possuir, exatamente, m n transies distintas.
As transies de um autmato finito podem ser denotadas atravs de expresses do
tipo (p, ) q, com p, q Q , . Alternativamente, pode-se explicitar a funo ,
representando uma transio na forma (p, ) = q.
A utilizao do termo determinstico para designar esse tipo de autmato finito
decorre do fato de que, enquanto houver smbolos na fita de entrada, ser sempre possvel
determinar o estado seguinte a ser assumido pelo autmato, o qual ser nico em todas
as situaes.
Em certos casos, especialmente na demonstrao de alguns teoremas, torna-se con-
veniente estender o domnio da funo para , em vez de apenas , conforme indicado
abaixo:

(q, ) = q;

(q, x ) = ((q, ), x ), x , .

Ao longo deste texto, a definio considerada para a funo dever variar conforme
o contexto em que estiver sendo empregada.
A configurao de um autmato finito definida pelo seu estado corrente e pela
parte da cadeia de entrada ainda no analisada (incluindo o smbolo apontado pelo
cursor). A configurao inicial de um autmato finito aquela em que o estado corrente
q0 (estado inicial) e o cursor de leitura se encontra posicionado sobre o smbolo mais
esquerda da cadeia de entrada. Uma configurao final aquela em que o cursor
aponta para a posio imediatamente alm do ltimo smbolo da cadeia (indicando com
isso j ter ocorrido a leitura do ltimo smbolo da cadeia de entrada), e o estado corrente
pertence ao conjunto F de estados finais, especificado para o autmato. Note que ambas
78 Linguagens Formais - Teoria, Modelagem e Implementao

as condies devem ser simultaneamente verificadas para permitir a caracterizao de


uma configurao como sendo, respectivamente, inicial ou final.
O autmato finito opera efetuando uma srie de movimentos que o conduzem atravs
dos seus estados a partir da configurao inicial. Pela inspeo do estado corrente e
tambm do smbolo apontado pelo cursor, determina-se o prximo estado a ser atingido
pelo autmato e avana-se o cursor de leitura uma clula para a direita. Esse processo
repetido seguidas vezes at que na fita de entrada no haja mais smbolos a serem lidos.
Quando ocorre o esgotamento da cadeia de entrada, deve-se analisar o tipo do estado
corrente do autmato. Se for um estado final, diz-se que o autmato reconheceu, ou
aceitou, a cadeia de entrada; se for um estado no-final, diz-se que a cadeia de entrada
foi rejeitada pelo autmato logo, a cadeia analisada no pertence linguagem por
ele definida.
Quando definidos atravs de funes de transio totais, os correspondentes aut-
matos finitos determinsticos sempre percorrem integralmente toda e qualquer cadeia de
entrada (sobre ) que lhes forem apresentadas para anlise. Nesses casos, portanto, a
configurao final definida para um autmato finito sempre satisfeita no que se refere ao
esgotamento da cadeia de entrada, restando apenas a anlise do tipo do estado atingido
em tal configurao (final ou no-final) para se determinar, respectivamente, a aceitao
ou a rejeio da cadeia de entrada.
Tais conceitos podem ser formalizados denotando-se a configurao de um autmato
finito como um par (q, y), em que q representa o estado corrente e y a parte da cadeia
de entrada ainda no analisada. A configurao inicial, com vistas ao reconhecimento
de uma cadeia x , representada como (q0 , x ), e a configurao final como (qi , ), qi F .
A movimentao de um autmato de uma configurao para a configurao seguinte
denotada atravs do smbolo :

(qi , ) (qj , ), com qi , qj Q , , , (qi , ) = qj

A linguagem L definida por um autmato finito M o conjunto de todas as cadeias


w sobre o alfabeto que levam M da sua configurao inicial para alguma configurao
final atravs da aplicao sucessiva de transies definidas pela funo . Denota-se
como:
L(M ) = {w | (q0 , w ) (qF , ), qF F }
Alternativamente, conforme a extenso introduzida para a funo , pode-se denotar
o mesmo processo assim:

L(M ) = {w | (q0 , w ) F }

Diagramas de transio de estados so grafos orientados no-ordenados, rotu-


lados nos vrtices com os nomes dos estados e nos arcos com os smbolos do alfabeto de
entrada do autmato finito. Trata-se de uma representao grfica equivalente notao
algbrica, oferecendo porm uma melhor visualizao do autmato. Nessa representao,
crculos representam os estados, e arcos as transies. O estado inicial identificado por
um arco cuja extremidade inicial no ligada a nenhum outro estado. Os estados finais
so representados por crculos duplos concntricos.
Exemplo 3.8 Seja M um autmato finito determinstico, com funo de transio total, definido
abaixo. Sua representao algbrica M = (Q, , , q0 , F ), onde:

Q = {q0 , q1 , q2 , q3 }
3 Linguagens Regulares 79

= {0, 1, 2}
= {(q0 , 0) q0 , (q0 , 1) q1 , (q0 , 2) q3 ,
(q1 , 0) q3 , (q1 , 1) q1 , (q1 , 2) q2 ,
(q2 , 0) q3 , (q2 , 1) q3 , (q2 , 2) q2 ,
(q3 , 0) q3 , (q3 , 1) q3 , (q3 , 2) q3 }
F = {q1 , q2 }
A Figura 3.1 mostra o diagrama de transio de estados para esse autmato:

0 1 2

1 2
q0 q1 q2

2 0
0, 1

q3

0, 1, 2

Figura 3.1: Autmato finito determinstico com funo de


transio total

A linguagem aceita por esse autmato finito formada pelo conjunto de sentenas x que o
levam da configurao inicial (q0 , x ) at a configurao final (q1 , ) ou (q2 , ). A inspeo cuidadosa
desse autmato finito revela que as sentenas por ele aceitas contm, nesta ordem, uma seqncia
de smbolos 0 (incluindo nenhum), seguida de uma seqncia de smbolos 1 (no mnimo um)
e, finalmente, de uma seqncia de smbolos 2 (incluindo nenhum). Na notao das expresses
regulares, L(M ) = 0 1+ 2 .
As seguintes identidades, por exemplo, so verdadeiras:
(q0 , 00001) = q1

(q0 , 0122) = q2

(q1 , 12) = q2

(q2 , 222) = q2

Esquematicamente, a configurao inicial para o reconhecimento de uma cadeia de entrada,


por exemplo, a cadeia 0011222, pode ser representada conforme a figura abaixo:

Figura 3.2: Configurao inicial


80 Linguagens Formais - Teoria, Modelagem e Implementao

A sucesso de movimentos efetuados pelo autmato finito com essa cadeia apresentada a
seguir:
(q0 , 0011222) (q0 , 011222) (q0 , 11222) (q1 , 1222) (q1 , 222) (q2 , 22) (q2 , 2)
(q2 , )

Portanto, (q0 , 0011222) (q0 , ), e 0011222 L(M ). Esquematicamente, a configurao


final do autmato aps o reconhecimento da cadeia de entrada 0011222 pode ser representada
conforme a figura a seguir:

Figura 3.3: Configurao final

Analisa-se a seguir o comportamento desse autmato em relao cadeia de entrada 0022:

(q0 , 0022) (q0 , 022) (q0 , 22) (q3 , 2) (q3 , )

Aps a seqncia de movimentos acima, chega-se configurao (q3 , ), em que ocorre o


esgotamento da cadeia de entrada. Como no se trata de uma configurao final, pois q3 6 F ,
conclui-se que a cadeia 0022 no pertence linguagem aceita por M . 2

Exemplo 3.9 O autmato finito determinstico da Figura 3.4 possui funo de transio parcial, uma
vez que ela no definida para os seguintes elementos de Q : (q0 , 2), (q1 , 0), (q2 , 1) e (q2 , 0).

0 1 2

1 2
q0 q1 q2

Figura 3.4: Autmato finito determinstico com funo de


transio parcial

Note-se que os autmatos das Figuras 3.1 e 3.4 definem a mesma linguagem. Os movimentos
executados pelo autmato da Figura 3.4 com as cadeias 0011222 e 0022 so apresentados abaixo:
(q0 , 0011222) (q0 , 011222) (q0 , 11222) (q1 , 1222) (q1 , 222) (q2 , 22) (q2 , 2)
(q2 , )

(q0 , 0022) (q0 , 022) (q0 , 22)

No primeiro caso, a cadeia 0011222 completamente esgotada e o autmato pra em um


estado final. Logo, 0011222 aceita pelo autmato. No segundo caso, a cadeia de entrada
apenas parcialmente consumida, e o autmato pra no estado qo , no-final. Logo, a cadeia 0022
rejeitada. 2
3 Linguagens Regulares 81

Autmatos Finitos No-Determinsticos


Apesar do elevado interesse prtico que recai sobre os autmatos finitos determinsti-
cos, uma vez que eles servem como base para a construo de programas extremamente
eficientes, do ponto de vista terico h tambm um interesse muito grande pelos aut-
matos finitos no-determinsticos, devido maior facilidade com que eles permitem a
demonstrao de certos teoremas. Do ponto de vista prtico, os autmatos finitos no-
determinsticos so, muitas vezes, mais intuitivos do que os correspondentes autmatos
finitos determinsticos, o que os torna, geralmente, mais adequados para a anlise e es-
pecificao de linguagens regulares.
Um autmato finito no-determinstico, sem transies em vazio, difere dos
autmatos finitos determinsticos pelo fato de o co-domnio da funo de transio ser
2Q e no simplesmente Q :
: Q 2Q
Como conseqncia, os autmatos finitos no-determinsticos generalizam o modelo
dos autmatos finitos determinsticos atravs das seguintes extenses:

Introduz-se o impasse em configuraes no-finais;


Como 2Q , possvel no especificar transies para certas combinaes de
estado corrente e prximo smbolo de entrada.

Introduz-se o no-determinismo, no sentido literal da palavra.


Nos casos em que |((q, ))| 2, haver mais de uma possibilidade de movimen-
tao para o autmato finito no-determinstico na configurao corrente.

Devido principalmente segunda condio que autmatos deste tipo recebem a


designao de no-determinsticos: havendo pelo menos uma configurao em que, para
uma mesma combinao de estado corrente e smbolo de entrada, exista mais de uma
alternativa de escolha do prximo estado, torna-se necessrio efetuar uma opo entre
elas, para permitir o prosseguimento do reconhecimento.
Note-se que esse tipo de situao nunca ocorre com os autmatos finitos determi-
nsticos. Note-se ainda que, de acordo com a nova definio para a funo , torna-se
possvel tambm caracterizar autmatos finitos determinsticos como casos particulares
dos no-determinsticos, em que cada elemento da imagem da funo possui exatamente
um nico estado.
Diz-se que um autmato finito no-determinstico aceita uma cadeia de entrada
quando houver alguma seqncia de movimentos que o leve da configurao inicial para
uma configurao final. Diferentemente do autmato finito determinstico, em que essa
seqncia, se existir, nica para cada cadeia de entrada, no caso do autmato finito no-
determinstico possvel que exista mais de uma seqncia que satisfaa a essa condio
para uma dada cadeia de entrada. Sempre que o autmato finito no-determinstico se
deparar com mais de uma possibilidade de movimentao, feita a escolha (arbitrria)
de uma das alternativas; em caso de insucesso no reconhecimento, deve-se considerar
sucessivamente cada uma das demais alternativas ainda no consideradas, at o seu
esgotamento; persistindo o insucesso, e esgotadas as alternativas, diz-se que o autmato
rejeita a cadeia. A Tabela 3.2 resume esses critrios.
82 Linguagens Formais - Teoria, Modelagem e Implementao

Dada uma Aceita a cadeia Rejeita a cadeia


cadeia de de entrada se: de entrada se:
entrada, ele:
Autmato Executa uma Pra em uma Pra em uma
finito nica seqncia configurao configurao
determinstico de movimentos. final. no-final.
Autmato Pode executar Pra em uma Pra sem
finito no- vrias configurao conseguir
determinstico seqncias final. atingir
distintas de nenhuma
movimentos. configurao
final.

Tabela 3.2: Aceitao e rejeio de cadeias em autmatos finitos

importante notar que, diferentemente do que ocorre com os autmatos finitos


determinsticos com funo de transio total, no necessariamente os autmatos finitos
no-determinsticos esgotam completamente a cadeia de entrada que lhes oferecida para
anlise, mesmo que a sua funo de transio seja total.
A impossibilidade de movimentao do autmato em determinadas configuraes
caracteriza um impasse e pode ocorrer no apenas em funo do esgotamento da cadeia
de entrada, como nos autmatos finitos determinsticos, mas tambm pela possibilidade
de inexistncia de transies que permitam a evoluo a partir da configurao corrente
devido s caractersticas da funo . Assim, a condio que determina a aceitao de
uma cadeia em um autmato finito no-determinstico deve sempre ser analisada em sua
totalidade: estado final associado ao esgotamento da cadeia de entrada (lembrar que esta
ltima condio sempre verificada no caso dos autmatos finitos determinsticos cuja
funo de transio seja total).
Exemplo 3.10 Seja M = (Q, , , {q0 }, F ) um autmato finito no-determinstico:

Q = {q0 , q1 , q2 }
= {a, b, c}
= {(q0 , a) {q1 , q2 }, (q1 , b) {q1 , q2 }, (q2 , c) {q2 }}
F = {q1 , q2 }

O diagrama de transio de estados para esse autmato, que reconhece a linguagem ab |


ab bc | ac , ou simplesmente ab c , apresentado na Figura 3.5.

b c

a b
q0 q1 q2

Figura 3.5: Autmato no-determinstico


3 Linguagens Regulares 83

Considere-se a cadeia abbccc e faa-se uma simulao da operao do autmato a partir de


sua configurao inicial:
(q0 , abbccc) (q2 , bbccc)
Nesta seqncia, a escolha do ramo inferior, em resposta ao smbolo de entrada a, conduz
o autmato a um impasse, pois no h possibilidade de movimentao em q2 com o smbolo b.
Deve-se, ento, tentar a segunda alternativa de movimentao em q0 :
(q0 , abbccc) (q1 , bbccc) (q2 , bccc)
Apesar do avano no reconhecimento, novo impasse atingido no estado q2 como conseqncia
da escolha efetuada em q1 para a transio usando o smbolo b. Como no restam outras alternativas
em q0 , deve-se considerar a segunda alternativa de movimentao em q1 :
(q0 , abbccc) (q1 , bbccc) (q1 , bccc)
Admitindo-se que a opo inicial de movimentao em q1 em resposta ao smbolo b seja
novamente q2 , a seguinte seqncia de movimentos conduz finalmente o autmato sua configurao
final (que, neste caso, nica):
(q1 , bccc) (q2 , ccc) (q2 , cc) (q2 , c) (q2 , )
Seja agora a cadeia aab. Como se pode perceber, no h nenhuma seqncia de movimen-
tos, mesmo considerando-se as duas alternativas para a transio usando a em q0 , que conduza o
autmato sua configurao final. Em um caso, o impasse atingido no estado q1 em decorrncia
do smbolo a; no outro ele ocorre em q2 , tambm provocado por a. Como no h mais opes
decorrentes de no-determinismos a serem consideradas, conclui-se que essa cadeia no pertence
linguagem definida pelo autmato. 2

Os autmatos no-determinsticos operam pela busca exaustiva de seqncias que


possibilitem o reconhecimento das cadeias que lhes so apresentadas. Do ponto de vista
terico, admite-se que, toda vez em que houver mais de uma possibilidade de movimen-
tao, o autmato finito no-determinstico se desdobra na quantidade correspondente
de instncias paralelas, cada qual prosseguindo anlise de forma autnoma, a partir
da configurao corrente, e atravs de opes distintas de movimentao. Desse modo, a
aceitao (ou rejeio) da sentena por um autmato finito no-determinstico deve ser
analisada em funo das ltimas configuraes atingidas por todas as suas instncias; se
pelo menos uma delas tiver atingido uma configurao final, a cadeia ter sido aceita;
caso contrrio, ser rejeitada.
Do ponto de vista prtico, no entanto, no econmico realizar o modelo terico de
operao paralela, acima apresentado, em mquinas seqenciais. Em vez disso, autma-
tos finitos no-determinsticos costumam ser implementados, dentro do modelo seqen-
cial de processamento, atravs de mecanismos de busca exaustiva e de backtracking,
percorrendo-se todos os possveis caminhos que os conduzam (ou no) a configuraes
finais. Por esse motivo, os autmatos finitos no-determinsticos no costumam ter muito
interesse prtico, uma vez que suas realizaes podem tornar-se antieconmicas dentro
desse modelo de implementao. Por outro lado, arquiteturas paralelas, em que cada
processador percorre uma seqncia distinta de movimentaes, possibilitam a obteno
de implementaes bastante eficientes para autmatos finitos no-determinsticos.
A seguir mostrada a equivalncia entre os autmatos finitos no-determinsticos
e os determinsticos, no que diz respeito classe de linguagens que eles so capazes de
reconhecer. A equivalncia, ou equipotncia, de tais classes de autmato, constitui
um dos mais importantes resultados da teoria dos autmatos finitos, sem paralelo para a
maioria dos demais modelos de reconhecedores anteriormente mencionados, uma vez que
garante ser sempre possvel a aceitao de toda e qualquer linguagem regular atravs de
um autmato determinstico.
Antes, porm, preciso introduzir a notao tabular para a representao de
autmatos finitos. De acordo com essa notao, cada linha da tabela representa um
84 Linguagens Formais - Teoria, Modelagem e Implementao

estado distinto q do autmato, e cada coluna associada a um elemento distinto de


seu alfabeto de entrada. As clulas correspondentes interseco de cada linha com cada
coluna so preenchidas com o elemento (conjunto) de 2Q determinado por (q, ).
Exemplo 3.11 Considere-se novamente o autmato finito no-determinstico M do Exemplo 3.10
cujo diagrama de estados apresentado na Figura 3.5. A representao tabular de M apresentada
na Tabela 3.3.

a b c
q0 {q1 , q2 }
q1 {q1 , q2 }
q2 {q2 }

Tabela 3.3: Notao tabular para o autmato finito no-


determinstico M da Figura 3.5
2

Na notao tabular, como se pode perceber, o estado inicial indicado atravs do


smbolo , ao passo que os estados finais so indicados por . O smbolo indica
um estado que seja simultaneamente inicial e final.
Teorema 3.3 (Eliminao de no-determinismos) Seja L a linguagem aceita por
um autmato finito no-determinstico sem transies em vazio. Ento possvel definir
um autmato finito determinstico equivalente que aceita L.

Justificativa A equivalncia dos autmatos finitos no-determinsticos sem transies em


vazio com os autmatos finitos determinsticos mostrada atravs de um algoritmo que
permite a construo de autmatos do segundo tipo a partir de autmatos do primeiro
tipo, quaisquer que sejam eles.
O mecanismo de mapeamento baseado na substituio de todas as transies
no-determinsticas do autmato finito no-determinstico original por transies deter-
minsticas para novos estados criados no novo autmato construdo. A fim de garantir a
equivalncia das linguagens aceitas pelos dois autmatos, deve-se copiar, para cada um
desses novos estados do autmato finito determinstico resultante, todas as transies que
partem de estados que seriam atingidos pelas transies no-determinsticas do autmato
finito no-determinstico original.
Em outras palavras, para cada transio no-determinstica distinta presente no
autmato original, o algoritmo cria um novo estado e a substitui por uma transio
determinstica para esse novo estado, copiando as transies dos estados que seriam
atingidos pela realizao da transio no-determinstica. Como desse processo pode
resultar a introduo de novos no-determinismos, torna-se necessrio aplic-lo de forma
iterativa at a completa eliminao dos no-determinismos. A Figura 3.6 ilustra essas
idias.
3 Linguagens Regulares 85

a b
qj ql

qi

a qk qm
c

Figura 3.6: Situao no-determinstica original

Suponha-se um autmato qualquer que apresente, como parte de sua especifica-


o, uma transio no-determinstica (qi , a) = {qj , qk }. Ao criar um novo estado
qj qk e substituir as transies anteriores por uma nica e nova transio determinstica
(qi , a) = qj qk , consegue-se fazer com que o autmato modificado aceite a mesma lin-
guagem que o original, sem no entanto apresentar comportamento no-determinstico.
De fato, neste exemplo, em ambas as verses os estados atingidos pelas cadeias ab e ac
so os mesmos: respectivamente ql e qm . A Figura 3.7 ilustra o autmato modificado.

b
qj ql

b
a
qi qj qk
c

qk qm
c

Figura 3.7: Situao determinstica equivalente da Figura 3.6

Fica claro, tambm, que se pelo menos um dos estados, qj ou qk , for um estado
final, o mesmo dever acontecer com o estado qj qk , j que em ambas as verses a cadeia
a deve ser aceita pelo autmato. Por outro lado, caso haja coincidncia entre os smbolos
b e c, um novo no-determinismo ser introduzido no estado qj qk . Da a necessidade de
se repetir o procedimento, removendo a cada iterao todos os novos no-determinismos
que venham a ser introduzidos.
Seja M1 = (Q1 , , 1 , q01 , F1 ) o autmato finito no-determinstico originalmente
considerado e M2 = (Q2 , , 2 , q02 , F2 ) o autmato finito determinstico correspondente
que se deseja obter. A obteno de M2 a partir de M1 pode ser efetuada atravs do
Algoritmo 3.4.
Algoritmo 3.4 (Eliminao de no-determinismos) Obteno de um autmato fi-
nito determinstico M2 a partir de um autmato finito no-determinstico M1 .

Entrada: um autmato no-determinstico M1 = (Q1 , , 1 , q01 , F1 ), com 1 : Q1


2Q1 ;
86 Linguagens Formais - Teoria, Modelagem e Implementao

Sada: um autmato determinstico M2 = (Q2 , , 2 , q02 , F2 ), com 2 : Q2


Q2 , tal que L(M2 ) = L(M1 );

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 con-


sidere 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 for-
mando 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.
3 Linguagens Regulares 87

a b c
q0 q1 q2
q1 q1 q2
q2 q2
q1 q2 q1 q2 q2

Tabela 3.4: Autmato determinstico equivalente ao aut-


mato M da Tabela 3.3

Observe-se, inicialmente, a criao de um novo estado, denominado q1 q2 , em decorrncia


da presena do no-determinismo {q1 , q2 } na tabela de transio de estados original. As clulas
desse novo estado, ou seja, suas transies, so preenchidas de acordo com o seguinte critrio: como
(q0 , a) = {q1 , q2 }, deve-se considerar todas as transies que partem de q1 e de q2 , respectivamente
(q1 , b) e (q2 , c). Assim, o contedo de (q1 , b) copiado para (q1 q2 , b) e o contedo de (q2 , c)
copiado para (q1 q2 , c). Finalmente, como (q2 , c) um estado final, o novo estado q1 q2 tambm
torna-se final.
Note-se ainda que, apesar de o autmato inicial deste exemplo apresentar duas transies no-
determinsticas ((q0 , a) e (q1 , b)), apenas um novo estado foi adicionado (q1 q2 ). Isso decorre do
fato de que os estados de destino, em ambos os casos, so os mesmos, no havendo necessidade de
se memorizar a forma atravs da qual tais estados foram atingidos.
Como se pode perceber, a eliminao de no-determinismos implica a criao de novos estados
(Q ), altera a funo de transio de estados ( ) e, eventualmente, acrescenta estados finais ao
autmato resultante (F ). comum que, aps essa transformao, o autmato finito determinstico
resultante contenha estados inacessveis, ou seja, estados que no podem ser atingidos a partir do
estado inicial por nenhum caminho.
A Figura 3.8 mostra o diagrama de estados do autmato determinstico obtido neste exemplo.
Deve-se observar que o estado q1 tornou-se inacessvel como resultado da aplicao do mtodo de
eliminao de no-determinismos.

b c

a b
q0 q1 q2 q2

q1

Figura 3.8: Autmato determinstico equivalente ao aut-


mato M da Figura 3.5
2

Exemplo 3.13 Considere-se o autmato finito no-determinstico representado na Figura 3.9.


88 Linguagens Formais - Teoria, Modelagem e Implementao

q2 c

a
a

c
q0 q3

a
b

a, b
q1 b

Figura 3.9: Autmato no-determinstico do Exemplo 3.13

A Tabela 3.5 representa o autmato da Figura 3.9.

a b c
q0 {q1 , q2 } {q3 }
q1 {q0 } {q0 , q1 }
q2 {q2 }
q3 {q2 } {q1 }

Tabela 3.5: Eliminao de no-determinismos, autmato


inicial

Os seguintes passos correspondem aplicao do Algoritmo 3.4.

Substituir {q0 } por q0 , {q1 } por q1 , {q2 } por q2 e {q3 } por q3 :

a b c
q0 {q1 , q2 } q3
q1 q0 {q0 , q1 }
q2 q2
q3 q2 q1

Tabela 3.6: Eliminao de no-determinismos, passo 1

Criar um novo estado q1 q2 , substituindo {q1 , q2 } na tabela por q1 q2 .


3 Linguagens Regulares 89

a b c
q0 q1 q2 q3
q1 q0 {q0 , q1 }
q2 q2
q3 q2 q1
q1 q2 q0 {q0 , q1 } q2

Tabela 3.7: Eliminao de no-determinismos, passo 2

Criar um novo estado q0 q1 , substituindo {q0 , q1 } na tabela por q0 q1 .

a b c
q0 q1 q2 q3
q1 q0 q0 q1
q2 q2
q3 q2 q1
q1 q2 q0 q0 q1 q2
q0 q1 {q1 q2 , q0 } q0 q1 q3

Tabela 3.8: Eliminao de no-determinismos, passo 3

Criar um novo estado q0 q1 q2 , substituindo {q1 q2 , q0 } na tabela por q0 q1 q2 .

a b c
q0 q1 q2
q1 q0 q0 q1
q2 q2
q3 q2 q1
q1 q2 q0 q0 q1 q2
q0 q1 q0 q1 q2 q0 q1
q0 q1 q2 q0 q1 q2 q0 q1 {q2 , q3 }

Tabela 3.9: Eliminao de no-determinismos, passo 4

Criar um novo estado q2 q3 , substituindo {q2 , q3 } na tabela por q2 q3 .


90 Linguagens Formais - Teoria, Modelagem e Implementao

a b c
q0 q1 q2
q1 q0 q0 q1
q2 q2
q3 q2 q1
q1 q2 q0 q0 q1 q2
q0 q1 q0 q1 q2 q0 q1
q0 q1 q2 q0 q1 q2 q0 q1 q2 q3
q2 q3 q2 q1 q2

Tabela 3.10: Eliminao de no-determinismos, autmato


final

A Figura 3.10 apresenta o diagrama de estados do autmato determinstico obtido. O estado


q3 , que inacessvel, no est mostrado na figura.

q1

b a b
b
a
a b a
q0 q1 q2 q0 q1 q0 q1 q2

a c
b c

q2 q2 q3
a, c

Figura 3.10: Autmato determinstico equivalente ao da


Figura 3.9
2

Os estados criados de acordo com o Algoritmo 3.4 tm como funo reproduzir


o comportamento do autmato no-determinstico original no novo autmato determi-
nstico, considerando-se todas as transies possveis de serem executadas em cada um
dos estados que so destinos de uma mesma transio no-determinstica do autmato
original.
Se, por exemplo, (qi , ) = {qj , qk , qm }, o estado qj qk qm do autmato determins-
tico atender ao propsito de permitir que o novo autmato se movimente, a partir deste
estado, com transies similares s originalmente presentes em cada um dos estados qj ,
qk e qm do autmato no-determinstico.
Dessa forma, o surgimento de novos estados no autmato determinstico limi-
tado pela quantidade de combinaes distintas que podem ser feitas entre os estados do
autmato no-determinstico original. Se M1 = (Q1 , , 1 , q0 , F1 ) o autmato original
3 Linguagens Regulares 91

no-determinstico, e M2 = (Q2 , , 2 , q0 , F2 ) o autmato determinstico equivalente,


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.

a b
q0 {q1 , q2 }
q1
q2 {q0 , q2 } {q0 , q1 }

Tabela 3.11: Autmato finito no-determinstico do Exem-


plo 3.14

a b
q0 q1 q2
q1
q2 q0 q2 q0 q1
q1 q2 q0 q2 q0 q1
q0 q1 q1 q2
q0 q2 q1 q2 , q0 q2 q0 q1
q0 q1 q2 q0 q1 q2 q0 q1

Tabela 3.12: Autmato finito determinstico equivalente


ao da Tabela 3.11
2

Note-se que nem sempre a eliminao de no-determinismos de um autmato finito


faz surgir tantos novos estados, como acontece no Exemplo 3.14. Na prtica, costumam
surgir alguns estados novos, mas no todos os possveis, e tambm alguns dos estados
antigos eventualmente tornam-se inacessveis, podendo ser eliminados, de forma que,
tipicamente, h um aumento do nmero de estados, mas em geral esse nmero no
costuma atingir esse limite extremo.
Como concluso da apresentao do Teorema 3.3, e com base no Algoritmo 3.4,
deve-se acrescentar que possvel garantir, no caso geral, a existncia de um autmato
finito determinstico equivalente a qualquer autmato finito no-determinstico fornecido.
Dessa maneira, o fato de um autmato finito ser no-determinstico no o torna mais
poderoso quanto classe de linguagens que capaz de reconhecer, quando comparado
com os autmatos finitos determinsticos. Por se tratar, este ltimo, de um modelo de
reconhecimento que permite gerar implementaes extremamente eficientes, conclui-se
ser sempre possvel a obteno de modelos com tais caractersticas, independentemente
da forma como o autmato se manifesta originalmente quanto ao seu determinismo.
Por outro lado, a existncia de autmatos no-determinsticos que sejam equivalen-
tes a autmatos determinsticos imediata, pois a incorporao de no-determinismos
92 Linguagens Formais - Teoria, Modelagem e Implementao

pode ser feita trivialmente, sem alterar a linguagem aceita pelo autmato: basta, por
exemplo, incorporar um caminho adicional alternativo que aceite qualquer seqncia de
smbolos, a partir de qualquer estado, iniciada por um smbolo que j seja consumido
a partir daquele estado, sem, no entanto, permitir que alguma configurao final seja
atingida.
Exemplo 3.15 Considere-se M , o autmato determinstico da Figura 3.11:

a
q0 q1

c b

q2

Figura 3.11: Autmato M determinstico que aceita


a(bca)

O acrscimo de um nico novo estado q3 e da transio (q2 , c) = q3 j seria suficiente


para tornar M no-determinstico, sem no entanto alterar a linguagem por ele aceita (a(bca) ).
Naturalmente, inmeros autmatos podem ser construdos dessa maneira. A Figura 3.12 apresenta
um exemplo.

a
q0 q1

c b
a
c
q2 q3 q4

Figura 3.12: Autmato no-determinstico equivalente ao


autmato da Figura 3.11
2

Autmatos Finitos No-Determinsticos com Transies em Vazio


Autmatos finitos no-determinsticos que apresentam transies em vazio so aqueles
que admitem transies de um estado para outro com , alm das transies normais, que
utilizam os smbolos do alfabeto de entrada. Transies em vazio podem ser executadas
sem que seja necessrio consultar o smbolo corrente da fita de entrada, e sua execuo
nem sequer causa o deslocamento do cursor de leitura. Com a introduo de transies
em vazio, a funo de transio para autmatos finitos no-determinsticos passa a ter
seu domnio alterado para:
: Q ( {}) 2Q
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

acarreta a necessidade de uma escolha arbitrria da transio a ser aplicada na respectiva


configurao, e isso, por sua vez, caracteriza a manifestao de um no-determinismo.
Exemplo 3.16 Seja M = (Q, , , q0 , F ) um autmato finito com transies em vazio.

Q = {q0 , q1 }
= {a, b}
= {(q0 , a) {q0 }, (q0 , ) {q1 }, (q1 , b) {q1 }}
F = {q1 }

A linguagem aceita por esse autmato a b , conforme pode ser deduzido a partir do diagrama
de estados da Figura 3.13.

a b


q0 q1

Figura 3.13: Autmato com transio em vazio

Tomando-se a cadeia de entrada ab como exemplo, as duas seqncias de movimentao


possveis a partir da configurao inicial seriam:
1. (q0 , ab) (q0 , b) (q1 , b) (q1 , ) (sucesso)

2. (q0 , ab) (q1 , ab) (impasse)

No segundo caso, o impasse ocorre devido aplicao da transio (q0 , ) q1 logo ao


incio do reconhecimento, antes de ser efetuada a leitura do smbolo a. No primeiro caso, ocorre a
aceitao da sentena, pois a utilizao da transio em vazio foi efetuada em um ponto favorvel
pelo autmato, ou seja, entre a utilizao dos smbolos a e b da cadeia de entrada. 2

Apesar de constituir uma generalizao da definio dos autmatos finitos no-


determinsticos (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 Linguagens Formais - Teoria, Modelagem e Implementao

Algoritmo 3.5 (Eliminao de transies em vazio, verso 1) Obteno de um


autmato finito N , sem transies em vazio, a partir de um autmato finito M , com
transies em vazio.

Entrada: um autmato finito com transies em vazio M ;

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 cumu-
lativamente 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.


O algoritmo funciona atravs da substituio de transies em vazio por cpias das
transies que partem dos estados que seriam atingidos pelas transies em vazio. As
nicas mudanas do autmato dizem respeito funo de transio , que se torna
definida para alguns elementos do domnio de anteriormente indefinidos ( , na notao
tabular, torna-se menos esparsa), e ao conjunto de estados finais F , que eventualmente
se amplia se existirem caminhos formados exclusivamente por transies em vazio que
interligam estados finais a outros estados do autmato.
Exemplo 3.17 Considere-se o autmato finito M do Exemplo 3.16, representado na Tabela 3.13.
3 Linguagens Regulares 95

a b
q0 q0 q1
q1 q1

Tabela 3.13: Autmato original apresentando transies


em vazio

Como h uma transio em vazio de q0 para q1 , deve-se copiar as transies de q1 para q0


((q1 , b) apenas, neste caso) e, alm disso, considerar q0 como estado final, uma vez que q1 estado
final. A Tabela 3.14 representa a funo de transio .

a b
q0 q0 q1
q1 q1

Tabela 3.14: Autmato equivalente ao da Tabela 3.13,


porm isento de transies em vazio

O diagrama de estados do autmato finito correspondente, sem transies em vazio, apre-


sentado na Figura 3.14.

a b

b
q0 q1

Figura 3.14: Autmato equivalente ao da Tabela 3.14, eli-


minadas as transies em vazio
2

A seguir, ser apresentado um algoritmo alternativo para a eliminao de transi-


es 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 .

Entrada: um autmato finito M = (Q , , , Q0 , F ) e um estado qi Q ;

Sada: Fechamento-(qi );

Mtodo:

1. Fechamento-(qi ) {qi };
96 Linguagens Formais - Teoria, Modelagem e Implementao

2. Fechamento-(qi ) Fechamento-(qi ) (qi , );

3. qj (qi , ), Fechamento-(qi ) Fechamento-(qi ) Fechamento-(qj ).

A funo Fechamento-(qi ) corresponde ao conjunto de estados que podem ser atin-


gidos a partir do estado qi pela aplicao exclusiva de transies em vazio.
Exemplo 3.18 Considere-se o autmato da Figura 3.15:

a b c


q0 q1 q2

Figura 3.15: Autmato com transies em vazio

De acordo com a definio:

Fechamento-(q0 ) = {q0 , q1 , q2 }

Fechamento-(q1 ) = {q1 , q2 }

Fechamento-(q2 ) = {q1 , q2 }
2

A funo de transio estendida : Q 2Q tambm definida de forma


indutiva, conforme o Algoritmo 3.7.
Algoritmo 3.7 (Funo de transio estendida ) Clculo da funo de transio
estendida .

Entrada: um autmato finito M = (Q , , , Q0 , F ), um estado qi Q e uma


cadeia ;

Sada: (qi , );

Mtodo:

1. (qi , ) Fechamento-(qi );
[
2. (qi , ) Fechamento-(qk ), com qj (qi , ), qk (qj , ),
k
, .

Exemplo 3.19 Considerando-se o autmato do Exemplo 3.18:

O clculo de (q0 , a) corresponde a:


(q0 , ) = Fechamento-(q0 ) = {q0 , q1 , q2 }
3 Linguagens Regulares 97

(q0 , a) = {q0 }
(q1 , a) =
(q2 , a) =
Fechamento-(q0 ) = Fechamento-(q0 ) = {q0 , q1 , q2 }
Logo, (q0 , a) = {q0 , q1 , q2 }.

O clculo de (q0 , ab) corresponde a:


(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 }
Logo, (q0 , ab) = {q1 , q2 }.
2
Considere-se . Se = , ento (qi , ) corresponde ao conjunto dos estados
que podem ser alcanados a partir de qi pelo uso exclusivo de transies em vazio. Se,
no entanto, 6= , (qi , ) deve ser interpretado como sendo o conjunto dos estados
que podem ser atingidos a partir do estado qi , considerando-se todas as possibilidades
de movimentao em vazio que o autmato oferece. Note-se que todos os smbolos de
devero ser consumidos nessa operao.
Um caso particular da funo especialmente interessante: aquele em que a
cadeia contm um nico smbolo : (qi , ), qi Q , . Neste caso, (qi , )
corresponde ao conjunto dos estados que podem ser atingidos aps o consumo de ,
considerando-se todas as possibilidades de transies em vazio que podem ocorrer antes
e depois do consumo do mesmo: ... , ... , ...... ou simplesmente . Esse
aspecto pode ser melhor compreendido com o auxlio da Figura 3.16, que apresenta a
especificao parcial de um autmato contendo transies em vazio:

a
qj ql

qi

a

qk qm

Figura 3.16: Autmato original, com transies em vazio

As seguintes relaes so verdadeiras:

(qi , a) = {qj , ql , qk , qm }, pois:


98 Linguagens Formais - Teoria, Modelagem e Implementao

(qi , a) (qj , a) (ql , )

(qi , a) (qj , a) (ql , ) (qj , )

(qi , a) (qk , )

(qi , a) (qk , ) (qm , )

(qj , a) = {qj , ql }, pois:

(qj , a) (ql , )

(qj , a) (ql , ) (qj , )

(ql , a) = {qj , ql }, pois:

(ql , a) (qj , a) (ql , )

(ql , a) (qj , a) (ql , ) (qj , )

(qk , a) =

(qm , a) =

A Figura 3.17 apresenta uma verso modificada desse mesmo trecho do autmato,
tendo a funo de transio original sido substituda pela nova funo de transio ,
acima calculada:

a
a

a
a qj ql a

a
qi
a

a qk qm

Figura 3.17: Autmato equivalente ao da Figura 3.16, elimina-


das 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 99

(q0 , a) (q0 , ) (q1 , )

(q0 , a) (q0 , ) (q1 , ) (q2 , )

(q0 , a) (q0 , ) (q1 , ) (q2 , ) (q1 , )

(q0 , a) (q0 , ) (q1 , ) (q2 , ) (q1 , ) (q2 , )

etc.

(q1 , a) =

O smbolo a no pode ser consumido a partir do estado q1

(q2 , a) =

O smbolo a no pode ser consumido a partir do estado q2

(q0 , b) = {q1 , q2 }

(q0 , b) (q1 , b) (q1 , )

(q0 , b) (q1 , b) (q1 , ) (q2 , )

(q0 , b) (q1 , b) (q1 , ) (q2 , ) (q1 , )

etc.

(q1 , b) = {q1 , q2 }

(q1 , b) (q1 , )

(q1 , b) (q1 , ) (q2 , )

(q1 , b) (q1 , ) (q2 , ) (q1 , )

(q1 , b) (q1 , ) (q2 , ) (q1 , ) (q2 , )

etc.

(q2 , b) = {q1 , q2 }

(q2 , b) (q1 , b) (q1 , )

(q2 , b) (q1 , b) (q1 , ) (q2 , )

(q2 , b) (q1 , b) (q2 , b) (q1 , b) (q1 , )

(q2 , b) (q1 , b) (q2 , b) (q1 , b) (q1 , ) (q2 , )

etc.

(q0 , c) = {q1 , q2 }

(q0 , c) (q1 , c) (q2 , c) (q2 , )

(q0 , c) (q1 , c) (q2 , c) (q2 , ) (q1 , )


100 Linguagens Formais - Teoria, Modelagem e Implementao

(q0 , c) (q1 , c) (q2 , c) (q2 , ) (q1 , ) (q2 , )


etc.

(q1 , c) = {q1 , q2 }

(q1 , c) (q2 , c) (q2 , )

(q1 , c) (q2 , c) (q2 , ) (q1 , )

(q1 , c) (q2 , c) (q1 , c) (q2 , c) (q2 , )

(q1 , c) (q2 , c) (q1 , c) (q2 , c) (q2 , ) (q1 , )

etc.

(q2 , c) = {q1 , q2 }

(q2 , c) (q2 , )

(q2 , c) (q2 , ) (q1 , )

(q2 , c) (q2 , ) (q1 , ) (q2 , )

(q2 , c) (q1 , c) (q2 , c) (q2 , )

(q2 , c) (q1 , c) (q2 , c) (q1 , c) (q2 , c) (q2 , )


etc.
2

A linguagem L aceita por um autmato finito M definido atravs da funo de


transio pode ser, portanto, representada tambm como:

L(M ) = {w | (q0 , w ) F 6= }

O Teorema 3.4, que estabelece a equivalncia dos autmatos finitos com e sem tran-
sies em vazio, est demonstrado novamente a seguir, usando desta vez como argumento
o Algoritmo 3.8, que sintetiza a segunda tcnica estudada. O teorema complementar,
acerca da existncia de autmatos com transies em vazio que sejam equivalentes a
autmatos sem transies em vazio, dispensa demonstrao, pois a adio de transies
em vazio pode ser feita com facilidade, sem alterar a linguagem aceita pelo autmato.
Teorema 3.5 (Eliminao de transies em vazio, verso 2) Todo autmato que
contenha transies em vazio gera uma linguagem que aceita por algum autmato finito
que no contm transies em vazio.

Justificativa Sejam M1 = (Q1 , , 1 , q10 , F1 ) um autmato finito contendo transies


em vazio e 1 a funo de transio estendida que o caracteriza. O autmato M2 =
(Q2 , , 2 , q20 , F2 ), construdo de acordo com os passos do Algoritmo 3.8, tal que
L(M2 ) = L(M1 ).
Algoritmo 3.8 (Eliminao de transies em vazio, verso 2) Eliminao de tran-
sies em vazio usando a funo de transio estendida .

Entrada: um autmato finito M1 = (Q1 , , 1 , q10 , F1 ), com transies em vazio;


3 Linguagens Regulares 101

Sada: um autmato finito M2 = (Q2 , , 2 , q20 , F2 ), sem transies em vazio, e


tal que L(M2 ) = L(M1 );

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 }}.

A definio da funo 2 a partir da funo 1 faz com que as transies em vazio de


M1 sejam substitudas por transies no-vazias em M2 , de tal forma que todos os estados
possveis de serem atingidos pela ao de transies que consumam algum smbolo em
M1 sejam os mesmos quando as transies ocorrem em M2 . Assim, M2 simula M1 .
Por outro lado, a eliminao das transies em vazio de M1 pode provocar um efeito
colateral indesejado em M2 : caso a cadeia vazia pertena linguagem aceita por M1 , a
mesma no ser aceita por M2 . Se a cadeia vazia aceita por M1 , ento uma das duas
situaes verdadeira:

q01 estado final, ou

Fechamento-(q01 ) F1 6=

Se q01 F1 , ento q02 F2 e L(M2 ), logo L(M1 ) = L(M2 ). Se, no entanto,


q01 6 F1 , ento q02 dever ser acrescentado ao conjunto de estados finais de M2 , a fim de
que a cadeia vazia possa ser aceita por M2 tambm. Se 6 L(M1 ), no h nada a fazer.
Em outras palavras: se houver um caminho formado apenas por transies vazias entre
q01 e algum estado final de M1 , q02 dever ser tornado tambm um estado final em M2 .

Exemplo 3.21 A eliminao de transies em vazio no autmato do Exemplo 3.20 d origem ao


autmato da Tabela 3.15.

2 a b c
q20 {q20 , q21 , q22 } {q21 , q22 } {q21 , q22 }
q21 {q21 , q22 } {q21 , q22 }
q22 {q21 , q22 } {q21 , q22 }

Tabela 3.15: Autmato equivalente ao do Exemplo 3.20,


eliminadas as suas transies em vazio
102 Linguagens Formais - Teoria, Modelagem e Implementao

Como q12 Fechamento-(q10 ), ento q20 torna-se um estado final no novo autmato cujas
transies em vazio foram eliminadas. A Figura 3.18 representa o autmato da Tabela 3.15 na forma
de um diagrama de estados.

a
b, c

a, b, c b, c
q20 q21 q22 b, c

b, c

a, b, c

Figura 3.18: Autmato equivalente ao do Exemplo 3.20,


eliminadas as suas transies em vazio
2

Os modelos de autmato finito considerados at o presente momento foram:

1. Determinstico sem transies em vazio, com : Q Q ;

2. No-determinstico sem transies em vazio, com : Q 2Q ;

3. No-determinstico com transies em vazio, com : Q ( {}) 2Q ;

Para completar o quadro de possibilidades, define-se o modelo de autmato finito


determinstico com transies em vazio:

4. Determinstico com transies em vazio, com : Q ( {}) Q .

Considerados todos os casos, cumpre retomar a discusso sobre o conceito de no-


determinismo e a relao do mesmo com a forma atravs da qual so definidas as funes
de transio dos autmatos finitos.
Se, por um lado, os autmatos dos modelos (2) e (3) so ditos no-determinsticos,
isso no significa que, em casos particulares, sua operao no possa ocorrer de forma
determinstica (ver Exemplo 3.22). Por outro lado, os autmatos do modelo (4), apesar
de denominados determinsticos, podem perfeitamente exibir um comportamente no-
determinstico durante sua operao (ver Exemplo 3.23). Os autmatos do modelo (1),
por sua vez, exibem sempre um comportamento determinstico.
Exemplo 3.22 Seja M1 = ({q0 , q1 , q2 }, {a, b}, , q0 , {q2 }) um autmato finito no-determinstico
cuja funo de transio definida como:

(q0 , a) = {q0 }
(q0 , b) = {q1 }
(q1 , ) = {q2 }

Qualquer que seja a configurao corrente (qi , ) considerada, existe sempre, no mximo,
uma nica transio de M1 que pode ser aplicada e, portanto, no mximo, uma nica prxima
configurao possvel. Logo, a operao de M1 sempre determinstica. 2
3 Linguagens Regulares 103

Exemplo 3.23 Seja M2 = ({q0 , q1 }, {a, b}, , q0 , {q1 }) um autmato finito no-determinstico cuja
funo de transio definida como:

(q0 , a) = q0
(q0 , b) = q0
(q0 , ) = q1
Considere-se a cadeia de entrada a. As seguintes seqncias de movimentaes so vlidas em
M2 :

(q0 , a) (q0 , )

(q0 , a) (q1 , a)
Logo, a operao de M2 , nesse caso, no-determinstica. 2

Como mostram os Exemplos 3.22 e 3.23, o que efetivamente determina o comporta-


mento 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 de-
terminstica se:

q Q , , tal que |(q, )| 2;

Um autmato no-determinstico do modelo (3) pode operar de forma determinstica


se:

q Q , , tal que |(q, )| 2, e

q Q , tal que |(q, )| 2, e

q Q , , tal que |(q, )| 1 e |(q, )| 1.

Um autmato determinstico do modelo (4), por sua vez, pode operar de forma
no-determinstica, se:

q Q , tal que (q, ) e (q, ) so definidas.

Portanto, o (no-)determinismo de um autmato transcende o formato geral de sua


funo de transio , dependendo, efetivamente, das caractersticas especficas dessa
mesma funo. A nica exceo so os autmatos do modelo (1), cuja operao sempre
determinstica, independentemente de como seja definida a funo de transio.

Estados Inacessveis e Inteis


Nem todos os estados de um autmato necessariamente contribuem para a definio da
linguagem por ele aceita. Estados inacessveis e estados inteis so os mais importantes
representantes desta categoria de estados, os primeiros porque no podem ser alcanados
a partir do estado inicial do autmato, e os demais porque no levam a nenhum dos
estados finais. Na Figura 3.19, q1 um estado inacessvel e q2 um estado intil.
104 Linguagens Formais - Teoria, Modelagem e Implementao

c
q0 q1 q3
b

q2

Figura 3.19: Ilustrao dos conceitos de estado inacessvel (q1 )


e de estado intil (q2 )

Por se tratar de estados sem relevncia, no que se refere linguagem que se est
definindo, geralmente desejvel que os mesmos sejam simplesmente eliminados do aut-
mato, possibilitando assim sua simplificao.
Estados inacessveis so aqueles para os quais no existe no autmato qualquer
caminho, formado por transies vlidas, que permita atingi-los a partir do estado inicial
do autmato. Eles podem ocorrer, por exemplo, como conseqncia direta da aplicao
dos mtodos anteriormente propostos para a eliminao de no-determinismos e/ou da
remoo de transies em vazio. O mtodo a seguir apresentado permite a identificao e
a eliminao sistemtica de estados inacessveis eventualmente presentes em um autmato
M qualquer. Observe-se que o estado inicial de um autmato sempre acessvel, fato este
que ser explorado como base do raciocnio indutivo implcito no algoritmo proposto.
Seja M = (Q1 , , 1 , q10 , F1 ) um autmato finito qualquer. Formalmente, um estado
q1i Q1 dito inacessvel quando no existir caminho, formado por transies vlidas,
que conduza o autmato do seu estado inicial q10 at o estado q1i . Em outras palavras,
no existe tal que (q10 , ) = q1i . Caso contrrio, o estado q1i dito acessvel.
Estados inacessveis no contribuem para a definio da linguagem aceita por M ,
podendo ser sistematicamente identificados e eliminados do conjunto de estados, sem
prejuzo para a linguagem aceita pelo autmato. O Algoritmo 3.9, a seguir esboado,
permite construir um autmato finito N = (Q2 , , 2 , q20 , F2 ) isento de estados inacess-
veis, tal que L(N ) = L(M ).
Algoritmo 3.9 (Eliminao de estados inacessveis, verso 1) Obteno de um
autmato sem estados inacessveis equivalente a outro com estados inacessveis.

Entrada: um autmato finito M = (Q1 , , 1 , q10 , F1 );

Sada: um autmato finito N = (Q2 , , 2 , q20 , F2 ), isento de estados inacessveis,


e tal que L(N ) = L(M );

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 ;
3 Linguagens Regulares 105

5. F2 {q2k Q2 | q1k F1 };

6. 2 {(q2i , ) q2j | (q1i , ) q1j 1 e q2i , q2j Q2 }.

Considere-se a funo de transio representada na forma tabular. Acrescentem-se


duas novas colunas tabela: a primeira, denominada acessvel, com a funo de marcar
os estados acessveis, e a segunda, denominada considerado, cuja funo indicar que o
correspondente estado j foi levado em conta pelo mtodo. O Algoritmo 3.10 apresenta
um mtodo prtico que sistematiza a identificao de estados inacessveis.
Algoritmo 3.10 (Eliminao de estados inacessveis, verso 2) Obteno de um
autmato sem estados inacessveis equivalente a outro com estados inacessveis.

Entrada: um autmato finito M = (Q1 , , 1 , q10 , F1 ), representado na notao


tabular;

Sada: um autmato finito N = (Q2 , , 2 , q20 , F2 ), isento de estados inacessveis,


e tal que L(N ) = L(M );

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 previa-


mente 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.

Exemplo 3.24 Seja M = (Q, , , q0 , F ), representado atravs da Tabela 3.16.

a b c d e f g
q0 q0 q4 q3
q1 q4 q1
q2 q4 q1
q3 q4
q4 q3 q5
q5 q0 q5

Tabela 3.16: Autmato original com estados inacessveis


106 Linguagens Formais - Teoria, Modelagem e Implementao

Iniciando o procedimento:
Marca-se q0 como acessvel

a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X
q1 q4 q1
q2 q4 q1
q3 q4
q4 q3 q5
q5 q0 q5

Tabela 3.17: Autmato original com estados inacessveis,


q0 acessvel

Tratando o (nico) estado acessvel ainda no considerado q0 (o qual referencia q0 , q4 e q3 ):

q0 j estava marcado como acessvel


q4 marcado como acessvel

q3 tambm marcado como acessvel

Ao final, q0 marcado como considerado

a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X
q4 q3 q5 X
q5 q0 q5

Tabela 3.18: Autmato original com estados inacessveis,


q0 considerado

Tratando (arbitrariamente) o estado acessvel no-considerado q3 (o qual referencia q4 ):

q4 j estava marcado como acessvel

Ao final, q3 marcado como considerado


3 Linguagens Regulares 107

a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X X
q4 q3 q5 X
q5 q0 q5

Tabela 3.19: Autmato original com estados inacessveis,


q3 considerado

Tratando o (nico) estado acessvel no-considerado q4 (o qual referencia q3 e q5 ):


q3 j estava marcado como acessvel

q5 marcado como acessvel

Ao final, q4 marcado como considerado

a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X X
q4 q3 q5 X X
q5 q0 q5 X

Tabela 3.20: Autmato original com estados inacessveis,


q4 considerado

Tratando o (nico) estado acessvel no-considerado q5 (o qual referencia q0 e q5 ):

q0 j estava marcado como acessvel

q5 tambm j estava marcado como acessvel

Ao final, q5 marcado como considerado

a b c d e f g Acessvel Considerado
q0 q0 q4 q3 X X
q1 q4 q1
q2 q4 q1
q3 q4 X X
q4 q3 q5 X X
q5 q0 q5 X X

Tabela 3.21: Autmato original com estados inacessveis,


q5 considerado
108 Linguagens Formais - Teoria, Modelagem e Implementao

Nada mais havendo para fazer, o algoritmo se encerra descartando as duas colunas auxiliares
e as linhas correspondentes aos estados q1 e q2 , que permaneceram sem a marca acessvel at o
final. Resulta o autmato da Tabela 3.22.

a b c d e f g
q0 q0 q4 q3
q3 q4
q4 q3 q5
q5 q0 q5

Tabela 3.22: Autmato equivalente ao da Tabela 3.16,


eliminados os estados inacessveis
2

Estados inteis so estados que, apesar de poderem ser alcanados a partir do


estado inicial do autmato, no conduzem a nenhum de seus estados finais. Logo, eles
em nada contribuem para a aceitao de sentenas da linguagem definida pelo autmato,
podendo portanto ser removidos sem qualquer prejuzo para a linguagem reconhecida.
Estados inteis podem ser sistematicamente identificados e eliminados usando-se
para isso o Algoritmo 3.11. A base de induo usada no algoritmo de eliminao de
estados inteis ser o conjunto dos estados finais do autmato, que, por definio, so
sempre teis (todo estado final reconhece pelo menos uma cadeia, a cadeia vazia). Na-
turalmente, se no houver estados finais no autmato, todos os seus estados podem ser
declarados inteis, e a linguagem por ele definida ser vazia.
Seja M = (Q1 , , 1 , q10 , F1 ) o autmato original e N = (Q2 , , 2 , q20 , F2 ) o aut-
mato que se deseja obter. O Algoritmo 3.11 permite a obteno sistemtica de N a partir
de M .
Algoritmo 3.11 (Eliminao de estados inteis, verso 1) Obteno de um aut-
mato sem estados inteis equivalente a outro com estados inteis, porm sem estados
inacessveis.

Entrada: um autmato finito M = (Q1 , , 1 , q10 , F1 );

Sada: um autmato finito N = (Q2 , , 2 , q20 , F2 ), isento de estados inteis, e tal


que L(N ) = L(M );

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

6. 2 {(q2i , ) q2j | (q1i , ) q1j 1 e q2i , q2j Q2 }.

A aplicao deste algoritmo pode ser sistematizada de forma semelhante que foi
elaborada para o algoritmo de eliminao de estados inacessveis. Basta representar
a funo de transio na forma tabular e acrescentar duas novas colunas tabela: a
primeira, denominada til, e a segunda, denominada considerado, e executar os passos
do Algoritmo 3.12.
Algoritmo 3.12 (Eliminao de estados inteis, verso 2) Mtodo prtico para
obteno de um autmato sem estados inteis equivalente a outro com estados inteis,
porm sem estados inacessveis.

Entrada: um autmato finito M = (Q1 , , 1 , q10 , F1 ), representado na notao


tabular;

Sada: um autmato finito N = (Q2 , , 2 , q20 , F2 ), isento de estados inteis, e tal


que L(N ) = L(M );

Mtodo:

1. Considerem-se as linhas correspondentes aos estados finais de M . Marquem-


se 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 se-
lecionado. 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 Linguagens Formais - Teoria, Modelagem e Implementao

q3

a c

c
q0 q1 q4

b
c c
c

q2

Figura 3.20: Autmato contendo estados inteis

Conforme o Algoritmo 3.11, obtm-se:

Q0 = {q4 }

Q1 = {q3 } {q4 }

Q2 = {q0 } {q3 , q4 }

Q3 = Q2

Logo, os estados q1 e q2 deste autmato so inteis e podem ser removidos sem prejuzo para
a linguagem por ele definida. O autmato resultante torna-se:

q3
a c

q0 q4

Figura 3.21: Autmato da Figura 3.20 aps a remoo dos


estados inteis

Na notao tabular, obtm-se o seguinte resultado, descrito em suas etapas intermedirias.


Inicia-se estendendo a tabela de transio com as colunas til e considerado, e marcando como
teis todos os estados finais (no caso, apenas q4 ):

Marca-se como til o estado q4 (final)


3 Linguagens Regulares 111

a b c til Considerado
q0 q3 q2 q1
q1 q2
q2 q1
q3 q4
q4 q4 X

Tabela 3.23: Autmato da Figura 3.20, estado q4 til

Seleciona-se a linha correspondente ao nico estado til (caso houvesse mais de um, poder-se-
ia escolher arbitrariamente dentre eles). Verifica-se por inspeo que q4 referenciado por q4 e q3 .
Assim, marca-se q3 como til, e q4 j est marcado. Pode-se ento marcar q4 como considerado.

As duas nicas referncias a q4 esto nos estados q3 e q4 ;


Marca-se q3 como til;

q4 j estava marcado;

Ao final, marca-se q4 como considerado.

a b c til Considerado
q0 q3 q2 q1
q1 q2
q2 q1
q3 q4 X
q4 q4 X X

Tabela 3.24: Autmato da Figura 3.20, estado q4 conside-


rado

Seleciona-se em seguida q3 , o nico estado til no considerado:

A nica referncia a q3 est no estado q0 ;

Marca-se q0 como til;

Ao final, marca-se q3 como considerado.

a b c til Considerado
q0 q3 q2 q1 X
q1 q2
q2 q1
q3 q4 X X
q4 q4 X X

Tabela 3.25: Autmato da Figura 3.20, estado q0 til

Seleciona-se q0 , o nico estado til no considerado. Como q0 no referenciado por nenhum


outro estado, nenhum novo estado til foi encontrado. Marca-se q0 como considerado e, no havendo
estados teis no considerados na tabela, o algoritmo se encerra: q1 e q2 so estados inteis:
112 Linguagens Formais - Teoria, Modelagem e Implementao

a b c til Considerado
q0 q3 q2 q1 X X
q1 q2
q2 q1
q3 q4 X X
q4 q4 X X

Tabela 3.26: Autmato da Figura 3.20, estado q0 conside-


rado

O autmato resultante, sem as colunas auxiliares e sem os estados inteis, apresentado na


Tabela 3.27. Note-se que as transies (q0 , b) = q2 e (q0 , c) = q1 tambm foram removidas.

a b c
q0 q3
q3 q4
q4 q4

Tabela 3.27: Autmato equivalente ao da Figura 3.20,


estados inteis eliminados
2

Tendo visto os algoritmos de eliminao de transies em vazio, de eliminao de


no-determinismos e de eliminao de estados inacessveis e inteis, cumpre responder
s questes:

1. Dado um autmato finito qualquer, ser possvel obter uma verso determinstica,
isenta de transies em vazio e estados inacessveis ou inteis, aplicando-se uma
s vez cada um dos algoritmos descritos?

2. Em caso afirmativo, em qual seqncia devem eles ser aplicados?

Para responder a essas questes, suficiente observar que:

A eliminao de transies em vazio:

Pode introduzir no-determinismos;

Pode fazer surgir estados inacessveis ou inteis.

A eliminao de no-determinismos:

Pode fazer surgir estados inacessveis ou inteis;

No introduz transies em vazio.

A eliminao de estados inacessveis ou inteis:

No faz surgir no-determinismos;


3 Linguagens Regulares 113

No introduz transies em vazio.

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 mani-
pulado, acarretar a necessidade de se aplicar um mesmo algoritmo mais de uma vez.
Por exemplo, a eliminao de no-determinismos seguida da eliminao de transies em
vazio pode fazer com que o autmato se torne novamente no-determinstico, exigindo
portanto uma nova aplicao do algoritmo usado anteriormente.
De acordo com as definies previamente apresentadas, fcil perceber que os aut-
matos finitos determinsticos isentos de transies em vazio constituem casos particulares
do modelo mais geral, os autmatos finitos no-determinsticos com transies em vazio.
No entanto, apesar de se tratar de um modelo conceitualmente mais simples, pode-se
demonstrar que a todo autmato finito no-determinstico que apresente transies em
vazio corresponde um outro autmato finito determinstico que aceita a mesma lingua-
gem.
Desse modo, no-determinismos e transies em vazio no contribuem em nada
para aumentar o poder dos autmatos finitos quanto a uma eventual ampliao da classe
de linguagens por eles reconhecida. Por esse motivo, nos demais captulos, sero refe-
renciados apenas os autmatos finitos, de uma forma geral, sem preocupaes com a
existncia de eventuais no-determinismos, transies em vazio, estados inacessveis ou
estados inteis.
Exemplo 3.26 Considere-se um autmato finito M , conforme a Tabela 3.28, que apresenta transies
em vazio e no-determinismo (conseqncia, no caso, das transies em vazio existentes).

a b c d e
q0 q1 q1 q2
q1 q3 q1 q4
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0

Tabela 3.28: Autmato original com transies em vazio

A obteno de um autmato equivalente, porm sem transies em vazio e determinstico,


feita de acordo com os seguintes passos:

1. Eliminao de transies em vazio


Seleciona-se arbitrariamente uma linha da tabela que descreva o comportamento do autmato
em um estado do qual parta alguma transio em vazio. H trs estados nessas condies:
q0 , q1 e q4 , dos quais partem transies em vazio para q2 , q4 e q0 , respectivamente.
Escolhendo arbitrariamente q0 para remover a transio em vazio correspondente, verifica-se
que essa transio referencia o estado q2 . Assim, copiam-se todas as transies referenciadas
114 Linguagens Formais - Teoria, Modelagem e Implementao

por q2 nas clulas da tabela correspondentes, relativas ao estado q0 , e elimina-se a transio


em vazio (q0 , ) q2 .

Seleciona-se a linha q0 ;

Copiam-se transies para q2 e q3 no estado q0 , obtendo-se os conjuntos de estados-


destino {q1 , q2 } e {q1 , q3 }, respectivamente, no estado q0 ;

Ao final, elimina-se a transio em vazio (q0 , ) q2 .

O resultado apresentado na Tabela 3.29.

a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 q1 q4
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0

Tabela 3.29: Eliminao de (q0 , ) q2

Seleciona-se arbitrariamente q1 dentre q1 e q4 , que fazem referncia em vazio aos estados


q4 e q0 , respectivamente. Observa-se que q1 faz referncia a q4 , e portanto os estados
referenciados por q4 sero copiados nas clulas correspondentes de q1 , conforme a Tabela
3.30.

a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 q2 q1 q4 q0
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0

Tabela 3.30: Eliminao de (q1 , ) q4

Note-se que q1 recebe tambm de q4 o atributo de estado final. Na tabela resultante,


apesar de ser eliminada a transio em vazio (q1 , ) q4 , o estado q1 recebeu uma nova
transio em vazio (q1 , ) q0 e, por essa razo, q1 deve incorporar agora tambm os estados
referenciados por q0 , como mostra a Tabela 3.31.
3 Linguagens Regulares 115

a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 q2 q4 q0

Tabela 3.31: Eliminao de (q1 , ) q0

Resta a transio em vazio (q4 , ) q0 , que eliminada analogamente, como mostra a


Tabela 3.32.

a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 {q1 , q2 } {q1 , q3 } q4

Tabela 3.32: Eliminao de (q4 , ) q0

Resulta finalmente o autmato no-determinstico da Tabela 3.33.

a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 {q1 , q2 } {q1 , q3 } q4

Tabela 3.33: Autmato equivalente ao da Tabela 3.28,


eliminadas as transies em vazio

2. Eliminao de no-determinismos
Atravs da inspeo da funo de transio, torna-se evidente a necessidade de criao ime-
diata de dois novos estados: um representando o conjunto {q1 , q2 } e outro representando o
conjunto {q1 , q3 }. Aps a incorporao desses novos estados ao autmato, bem como das
transies que partem de cada um dos estados individualmente considerados, obtm-se o
autmato da Tabela 3.34.
116 Linguagens Formais - Teoria, Modelagem e Implementao

a b c d e
q0 {q1 , q2 } {q1 , q3 }
q1 q3 {q1 , q2 } {q1 , q3 } q4
q2 q2 q3
q3 q4 q3
q4 {q1 , q2 } {q1 , q3 } q4
{q1 , q2 } q3 {q1 , q2 } {q1 , q3 } q4
{q1 , q3 } {q3 , q4 } {q1 , q2 } q3 {q1 , q3 } q4

Tabela 3.34: Autmato isento de no-determinismos, ver-


so inicial

Ao efetuar a combinao das transies que emergem de q1 e q3 , deve-se observar o sur-


gimento 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.

a b c d e
q0 q1 q2 q1 q3
q1 q3 q1 q2 q1 q3 q4
q2 q2 q3
q3 q4 q3
q4 q1 q2 q1 q3 q4
q1 q2 q3 q1 q2 q1 q3 q4
q1 q3 q3 q4 q1 q2 q3 q1 q3 q4
q3 q4 q4 q1 q2 q3 q1 q3 q4

Tabela 3.35: Autmato isento de no-determinismos, ver-


so final

3. Estados renomeados
Renomeando-se os estados, a fim de aumentar a legibilidade da Tabela 3.35, obtm-se a
Tabela 3.36.
3 Linguagens Regulares 117

a b c d e
q0 q5 q6
q1 q3 q5 q6 q4
q2 q2 q3
q3 q4 q3
q4 q5 q6 q4
q5 q3 q5 q6 q4
q6 q7 q5 q3 q6 q4
q7 q4 q5 q3 q6 q4

Tabela 3.36: Autmato da Tabela 3.35, com estados re-


nomeados

4. Eliminao de estados inacessveis


Atravs da marcao dos estados acessveis e considerados, obtm-se a Tabela 3.37.

a b c d e Acessvel Considerado
q0 q5 q6 X X
q1 q3 q5 q6 q4
q2 q2 q3
q3 q4 q3 X X
q4 q5 q6 q4 X X
q5 q3 q5 q6 q4 X X
q6 q7 q5 q3 q6 q4 X X
q7 q4 q5 q3 q6 q4 X X

Tabela 3.37: Autmato da Tabela 3.36, logo aps a exe-


cuo do algoritmo de eliminao de estados inacessveis

ou, simplesmente:

a b c d e
q0 q5 q6
q3 q4 q3
q4 q5 q6 q4
q5 q3 q5 q6 q4
q6 q7 q5 q3 q6 q4
q7 q4 q5 q3 q6 q4

Tabela 3.38: Autmato final obtido pela eliminao de


transies em vazio, no-determinismos e estados inacess-
veis
118 Linguagens Formais - Teoria, Modelagem e Implementao

Observe-se que o autmato resultante no possui estados inteis, sendo portanto desnecessria
a aplicao do algoritmo de eliminao de estados inteis. 2

Um importante aspecto de extenso que costuma ser considerado no estudo dos


autmatos finitos diz respeito possibilidade de movimentao do cursor de leitura em
ambos os sentidos, em contraste com a movimentao em um s sentido, mais freqen-
temente adotada na literatura sobre o assunto.
Os autmatos finitos, por definio, efetuam a leitura de smbolos na fita de entrada
em apenas um sentido (normalmente da esquerda para a direita). A questo que surge
: se fosse permitido aos autmatos finitos deslocar o cursor de leitura em ambos os
sentidos, ser que isso os tornaria mais potentes, aptos a reconhecer uma classe de lin-
guagens mais complexa que a das linguagens regulares? A resposta negativa: possvel
demonstrar (ver [46]) que a classe de linguagens reconhecida pelos autmatos finitos de
duplo sentido exatamente a mesma que aceita pelos de sentido nico, ou seja, as
linguagens do tipo 3.
Para finalizar este item, algumas consideraes sobre a importncia prtica dos
autmatos finitos. Conforme mencionado anteriormente, as linguagens regulares so
muito utilizadas na especificao de linguagens de programao e como linguagens para a
especificao de dados em ambientes interativos, tais como editores de texto e linguagens
de comando. Os autmatos finitos representam, nesse caso, os modelos de implementao
para tais linguagens, sendo largamente empregados em compiladores e outras ferramentas
de apoio ao desenvolvimento de programas e ao processamento de dados.
A profuso e a importncia dos resultados tericos existentes, referentes a esta
classe de reconhecedores, torna-os especialmente atraentes em aplicaes prticas, uma
vez que eles permitem a obteno de programas muito eficientes e compactos, e ao mesmo
tempo adequadamente estruturados e autodocumentados. Devido a essas caractersticas
interessantes, diversas ferramentas tm sido desenvolvidas para a gerao automtica
de programas e/ou de circuitos seqenciais que realizam abstraes representadas pelos
autmatos finitos, obtidos a partir de notaes tais como as expresses regulares. Es-
sas ferramentas vm sendo cada vez mais utilizadas por profissionais de computao,
tornando seu trabalho mais abrangente, simples, rpido e confivel.

3.4 Equivalncia entre Gramticas Regulares e Conjuntos


Regulares
As linguagens regulares foram definidas no Captulo 2 como sendo aquelas geradas por
gramticas lineares, em particular as gramticas lineares direita. Inicialmente foi apre-
sentada a definio dos conjuntos regulares, tendo sido tambm definidas as expresses
regulares, que constituem uma notao mais cmoda para a representao de tais con-
juntos. Em seguida foram caracterizados os autmatos finitos como mecanismos de
reconhecimento para os conjuntos regulares.
O objetivo das Sees 3.4 e 3.5 discutir e demonstrar a plena equivalncia, no
que diz respeito classe de linguagens que so capazes de representar, dos diversos tipos
de formalismos at aqui estudados: os conjuntos (expresses) regulares, as gramticas
lineares direita e os autmatos finitos.
Na presente seo mostrada a equivalncia entre as linguagens caracterizadas pelos
conjuntos regulares e as geradas pelas gramticas lineares direita, ou seja, prova-se que
toda e qualquer linguagem gerada por alguma gramtica linear um conjunto regular, e
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.

Figura 3.22: Equivalncia dos formalismos parte 1

Teorema 3.6 (Conjuntos regulares gramticas lineares direita) Todo con-


junto regular gerado por uma gramtica linear direita.

Justificativa Deseja-se demonstrar que todo e qualquer conjunto regular define uma
linguagem que tambm pode ser gerada por uma gramtica linear direita.
Por definio, , {}, {}, , onde um alfabeto (conjunto finito e no-vazio),
so conjuntos regulares. Da mesma forma, X Y , XY e X , com X e Y conjuntos
regulares, tambm so conjuntos regulares. A equivalncia de tais conjuntos regulares
com as correspondentes gramticas lineares direita que os geram mostrada a seguir:

uma linguagem linear direita, pois:


G = ({S } , , , S ) tal que L(G) =

{} uma linguagem linear direita, pois:


G = ({S } , , {S }, S ) tal que L(G) = {}

{} uma linguagem linear direita, pois:


G = ({, S }, {}, {S }, S ) tal que L(G) = {}
Suponha-se agora que X e Y sejam dois conjuntos regulares, gerados por gram-
ticas lineares direita. vlido, nesse caso, admitir que X e Y sejam gerados
pelas gramticas Gx e Gy :

X = L(Gx ), Gx = (x Nx , x , Px , Sx )
Y = L(Gy ), Gy = (y Ny , y , Py , Sy )

Admita-se ainda, sem perda de generalidade, que Nx Ny = . Caso isso no


seja verdadeiro, podem-se renomear os no-terminais, de modo que essa condio
seja satisfeita. Nessa situao, a aplicao das operaes de unio, concatenao
120 Linguagens Formais - Teoria, Modelagem e Implementao

e fechamento reflexivo sobre X e Y geram novas linguagens lineares direita, as


quais podem ser representadas, com base em Gx e Gy , da seguinte forma:

Z = X Y uma linguagem linear direita, pois:


Gz = (x y Nx Ny {Sz }, x y , Px Py {Sz Sx , Sz Sy }, Sz )
tal que L(Gz ) = X Y .

Z = XY uma linguagem linear direita, pois:


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 .

Z = X uma linguagem linear direita, pois:


Gz = (x Nx {Sz }, x , {Sz Sx , Sz } Pz , Sz ), sendo Pz obtido pela
aplicao das regras:

a) Se A B Px , ento A B Pz

b) Se A Px , ento A Sz Pz

tal que L(Gz ) = X .



As regras acima relacionadas podem ser entendidas da seguinte forma: a unio
de duas linguagens lineares direita representada atravs de uma gramtica em que
uma nova raiz e duas novas produes so introduzidas, sendo que cada alternativa
de substituio para a nova raiz conduz gerao das sentenas de um ou do outro
conjunto original; a concatenao obtida fazendo-se com que, ao trmino da derivao de
sentenas pertencentes ao primeiro conjunto, seja ativado o no-terminal que representa
a raiz da gramtica do segundo conjunto, possibilitando a justaposio da cadeia j
formada com aquela que ser gerada pela segunda gramtica; finalmente, o fechamento
reflexivo e transitivo representado, em termos gramaticais, de maneira similar ao caso
anterior: ao trmino de uma derivao, reativa-se o no-terminal que representa a raiz da
gramtica, de tal forma que seja permitida a concatenao de novas sentenas geradas
pela mesma gramtica (note-se a necessidade da produo que gera a cadeia vazia a
partir da raiz).
Exemplo 3.27 Considere-se o alfabeto = {0, 1, 2}. Os conjuntos regulares L0 = {0}, L1 =
{1}, L2 = {2} so definidos, respectivamente, pelas gramticas:

G0 = ({0, S0 }, {0}, {S0 0}, S0 )

G1 = ({1, S1 }, {1}, {S1 1}, S1 )

G2 = ({2, S2 }, {2}, {S2 2}, S2 )


3 Linguagens Regulares 121

Atravs da aplicao das regras correspondentes ao fechamento reflexivo e transitivo, obtm-


se, a partir de G0 e G1 , novas gramticas G3 e G4 representando, respectivamente, os conjuntos
{0} e {1} :

G3 = ({0, S0 , S3 }, {0}, {S3 S0 , S3 , S0 0S3 }, S3 )

G4 = ({1, S1 , S4 }, {1}, {S4 S1 , S4 , S1 1S4 }, S4 )

Da concatenao dos conjuntos {0} e {1} resulta o conjunto regular {0} {1} , representado
atravs da gramtica linear direita G5 :

G5 = ({0, 1, S0 , S1 , S3 , S4 }, {0, 1}, P5 , S3 )


P5 = {S3 S0 , S3 S4 , S0 0S3 , S4 S1 , S4 , S1 1S4 }
| {z } | {z }
G3 G4

Finalmente, a linguagem obtida pela unio de L(G5 ) com L(G2 ) pode ser representada pela
gramtica linear G6 :
G6 = ({0, 1, 2, S0 , S1 , S2 , S3 , S4 , S6 }, {0, 1, 2}, P6 , S6 )
P6 = {S6 S2 , S6 S3 , S2 2,
| {z }
G2
S3 S0 , S3 S4 , S0 0S3 , S4 S1 , S4 , S1 1S4 }
| {z }
G5

Portanto, L(G6 ) = {0} {1} {2}. 2

Por se tratar de um mtodo cannico de manipulao, a gramtica resultante, como


conseqncia da aplicao da tcnica exposta, nem sempre corresponder, necessaria-
mente, a uma verso muito concisa ou intuitiva, devendo-se efetuar em seguida as sim-
plificaes julgadas necessrias.
Exemplo 3.28 A gramtica G6 do Exemplo 3.27 poderia ser simplificada, mantendo-se a linguagem
original e reduzindo-se a quantidade de smbolos no-terminais e o nmero de produes. Uma
possibilidade seria:
G6 = ({0, 1, 2, S , A, B }, {0, 1, 2}, P6 , S )
P6 = {S 2
| {z }, |S A,{zA 0A}, A
|
{z B} , |B 1B , B }
{z }
{2} {0} {0} {1} {1}
2

Teorema 3.7 (Conjuntos regulares gramticas lineares direita) Toda gra-


mtica linear direita gera um conjunto regular.

Justificativa Mostra-se agora a proposio inversa, ou seja, que toda e qualquer lin-
guagem gerada por uma gramtica linear direita constitui um conjunto regular. Para
tanto, deve-se lembrar que gramticas lineares direita se caracterizam por apresentarem
apenas produes com os formatos seguintes:

Xi Xj

Xi Xj

Xi

Xi
122 Linguagens Formais - Teoria, Modelagem e Implementao

com e Xi , Xj N .
O Algoritmo 3.13, a seguir apresentado, permite a obteno, de forma sistemtica,
de uma expresso que representa o conjunto regular definido por uma gramtica linear
direita fornecida como entrada.
Inicialmente, a representao algbrica da gramtica deve ser modificada, para
permitir a representao explcita dos conjuntos denotados pelos seus smbolos no-
terminais:

Xi Xj torna-se Xi = {}Xj

Xi Xj torna-se Xi = {}Xj

Xi torna-se Xi = {}

Xi torna-se Xi = {}

Note-se, no primeiro caso, que a expresso {}Xj denota a concatenao da cadeia


elementar com os elementos do conjunto Xj , disso resultando o conjunto Xi . Tal
interpretao compatvel, portanto, com o significado atribudo produo algbrica
correspondente. Consideraes semelhantes valem nos demais casos. Uma vez efetuada
essa converso de notao, devem-se agrupar todas as alternativas de substituio para
um mesmo smbolo no-terminal Xi , utilizando para isso o operador de unio.
Como resultado, obtm-se um sistema de equaes regulares, em que cada
equao corresponde a uma diferente varivel (no-terminal) da gramtica original. A
soluo desse sistema de m variveis e m equaes fornece as expresses que definem os
conjuntos regulares representados pelos diversos smbolos no-terminais. Em particular,
o conjunto regular associado ao no-terminal raiz da gramtica define a linguagem por
ela descrita. Nesse sistema, cada equao possui o seguinte formato geral:

Xi = Ai1 X1 Ai2 X2 ... Aim Xm Bi1 Bi2 ...Bik

onde:

Aij = {ij } se Xi ij Xj P , ij ( {}), ou Aij = em caso contrrio;

Bij = {ij } se Xi ij P , ij ( {}).

O sistema de equaes propriamente dito assume ento a forma genrica:

X1 = A11 X1 A12 X2 ... A1m Xm B11 B12 ...B1p


X2 = A21 X1 A22 X2 ... A2m Xm B21 B22 ...B2q
... ...
Xm = Am1 X1 Am2 X2 ... Amm Xm Bm1 Bm2 ...Bmr

Observe-se que cada equao assim obtida pode conter referncias a todos os sm-
bolos no-terminais da gramtica (X1 a Xm ) bem como a termos constantes (Bij ), em
quantidade varivel conforme a equao.
A seguir, coloca-se em evidncia o smbolo no-terminal Xi definido em cada equa-
o. Isso, e o agrupamento de todos os termos que no dependem de Xi , pela aplicao
3 Linguagens Regulares 123

da propriedade associativa da unio dos conjuntos, altera a representao da equao


para:
Xi = Aii Xi (Ai Bi )
onde:

Ai = Aij Xj , 1 j m, j 6= i

Bi = Bi1 Bi2 ...Bik

Fazendo-se Ci = Ai Bi , so obtidas expresses do tipo:

Xi = Aii Xi Ci

onde Ci representa todos os termos da i-sima equao que no contm referncias diretas
ao smbolo no-terminal Xi , e Aii representa o conjunto de todas as cadeias sobre que
prefixam Xi na equao em que este no-terminal definido.
possvel demonstrar, por induo, que equaes com o formato genrico Xi =
Aii Xi Ci possuem, como soluo geral, o conjunto:

Xi = Aii Ci

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:

Xi = Aii Xi Ci = Aii (Aii Ci ) Ci = A+


ii Ci Ci = Aii Ci

Teorema 3.8 (Soluo de X = AX C ) A equao regular X = AX C tem como


soluo geral o conjunto regular X = A C .

Justificativa Partindo-se de X = AX C , pode-se levantar o conjunto de valores da


varivel X que satisfazem a essa igualdade. H dois caminhos possveis:

1. X = C , que uma soluo trivial, obtida pela simples inspeo de X = AX C ;

2. X = AX , que deve ser assim interpretada: para obter um novo valor de X , utiliza-
se algum valor j conhecido, e concatene-se-lhe um A esquerda. Aplicando-se
essa interpretao soluo obtida em (1), tem-se: X = AC , que passa a ser uma
nova soluo conhecida. Aplicando-se outra vez essa interpretao soluo X =
AC , obtm-se X = AAC , e assim por diante. Note-se que dessa forma foi obtida
uma seqncia de solues progressivamente mais longas, partindo-se da soluo
trivial, atravs da concatenao de elementos A esquerda. Generalizando-se,
tem-se a forma X = A C como soluo geral da equao X = AX C .

Uma vez obtido o sistema de equaes regulares no formato Xi = Aii Ci , a soluo
do mesmo dada pelo Algoritmo 3.13.
Algoritmo 3.13 (Equaes regulares) Resoluo de um sistema de equaes regula-
res.

Entrada: Uma srie de equaes regulares sobre variveis Xi , 1 i m, cujos


coeficientes Aij so conjuntos regulares sobre um alfabeto .
124 Linguagens Formais - Teoria, Modelagem e Implementao

Sada: Uma srie de conjuntos regulares i sobre , de tal forma que Xi = i .

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 percorri-
das em ordem crescente de ndices, eliminam-se, de cada equao relativa a uma varivel
Xi distinta, todas as referncias s demais variveis Xj , j < i. Assim, obtm-se um novo
conjunto de equaes em que, para cada varivel Xi do lado esquerdo da equao, exis-
tem referncias apenas a variveis Xj , j i, ou ento a elementos de , do lado direito.
Note-se, em particular, que a m-sima equao contm apenas referncias a elementos
de prpria varivel Xm .
No passo seguinte do algoritmo, efetuado na ordem decrescente dos ndices das
equaes, so eliminadas todas as referncias s variveis do sistema, as quais so subs-
titudas, a partir da m-sima equao, por conjuntos regulares definidos exclusivamente
sobre . Ao trmino da execuo do algoritmo, so obtidos, dessa maneira, conjuntos
regulares sobre , que definem a linguagem gerada pelas diversas variveis do sistema
de equaes (correspondentes aos smbolos no-terminais da gramtica original). Devido
ao fato de terem sido empregadas apenas operaes que preservam a regularidade dos
conjuntos manipulados, fcil demonstrar que os conjuntos i so regulares, o que mos-
tra, intuitivamente, que toda e qualquer gramtica linear direita gera uma linguagem
regular.
Exemplo 3.29 Considere-se a gramtica linear direita G0 :

G0 = ({a, b, c, X0 , X1 , X2 }, {a, b, c, d }, P0 , X0 )
P0 = {X0 aX0 , X0 aX1 , X0 b,
X1 bX1 , X1 cX1 , X1 cX2 , X1 d ,
X2 aX0 , X2 bX1 , X2 cX2 , X2 c, X2 d }
Convertendo-se as produes algbricas para a notao de conjuntos, obtm-se:

X0 = {a}X0 , X0 = {a}X1 , X0 = {b},

X1 = {b}X1 , X1 = {c}X1 , X1 = {c}X2 , X1 = {d },

X2 = {a}X0 , X2 = {b}X1 , X2 = {c}X2 , X2 = {c}, X2 = {d }


3 Linguagens Regulares 125

Do agrupamento das alternativas de substituio de cada smbolo no-terminal resulta o sis-


tema de equaes seguinte:
X0 = {a}X0 {a}X1 {b}

X1 = {b}X1 {c}X1 {c}X2 {d }

X2 = {a}X0 {b}X1 {c}X2 {c} {d }

Colocando-se em evidncia os smbolos no-terminais definidos em cada equao, o novo


sistema toma o seguinte aspecto:

X0 = {a}X0 ({a}X1 {b}) = A00 X0 C0

X1 = {b, c}X1 ({c}X2 {d }) = A11 X1 C1

X2 = {c}X2 ({a}X0 {b}X1 {c, d }) = A22 X2 C2

com:

A00 = {a}, A0 = {a}X1 , B0 = {b}

A11 = {b, c}, A1 = {c}X2 , B1 = {d }

A22 = {c}, A2 = {a}X0 {b}X1 , B2 = {c, d }

e:
C0 = A0 B0 = {a}X1 {b}

C1 = A1 B1 = {c}X2 {d }

C2 = A2 B2 = ({a}X0 {b}X1 ) {c, d }

Eliminando-se as referncias aos smbolos no-terminais Xi , 0 i 2, nas equaes em que


os mesmos so definidos, resulta:

X0 = {a} ({a}X1 {b})

X1 = {b, c} ({c}X2 {d })

X2 = {c} ({a}X0 {b}X1 {c, d })

A aplicao do algoritmo de clculo dos conjuntos regulares definidos pelos smbolos no-
terminais da gramtica feita conforme apresentado a seguir.

Passos 1 e 2 do algoritmo, primeira passagem:

X0 = {a} ({a}X1 {b}) e substituio nas equaes de X1 e X2 :


X0 = {a} ({a}X1 {b})
X1 = {b, c}X1 ({c}X2 {d })
X2 = {c}X2 ({a}({a} ({a}X1 {b})) {b}X1 {c, d })
= {c}X2 ({a}({a} {a}X1 {a} {b}) {b}X1 {c, d })
= {c}X2 ({a}{a} {a}X1 {a}{a} {b} {b}X1 {c, d })
= {c}X2 {a}{a} {a}X1 {a}{a} {b} {b}X1 {c, d }
= {c}X2 {a}{a}+ X1 {a}+ {b} {b}X1 {c, d }
= {c}X2 ({a}{a}+ {b})X1 ({a}+ {b} {c, d })
126 Linguagens Formais - Teoria, Modelagem e Implementao

Passos 1 e 2 do algoritmo, segunda passagem:

X1 = {b, c} ({c}X2 {d }) e substituio na equao de X2 :


X0 = {a} ({a}X1 {b})
X1 = {b, c} ({c}X2 {d })
X2 = {c}X2 ({a}{a}+ {b})({b, c} ({c}X2 {d })) {a}+ {b} {c, d })
= {c}X2 ({a}{a}+ {b})({b, c} {c}X2 {b, c} {d }) {a}+ {b} {c, d }
= {c}X2 ({a}{a}+ {b}){b, c} {c}X2 ({a}{a}+ {b}){b, c} {d }
{a}+ {b} {c, d }
= {c}X2 ({a}{a}+ {b}){b, c} {c}X2 {a}{a}+ {b, c} {d }
{b}{b, c} {d } {a}+ {b} {c, d }
= ({c} ({a}{a}+ {b}){b, c} {c})X2 {a}{a}+ {b, c} {d }
{b}{b, c} {d } {a}+ {b} {c, d }

Passos 1 e 2 do algoritmo, terceira passagem:

X2 = A22 C2 , com :
A22 = ({c} ({a}{a}+ {b}){b, c} {c})
C2 = {a}{a}+ {b, c} {d } {b}{b, c} {d } {a}+ {b} {c, d }

Passos 4 e 5 do algoritmo, primeira passagem:


Substituio de X2 por A22 C2 nas equaes de X0 e X1 :

X0 = {a} ({a}X1 {b})


X1 = {b, c} ({c}(A22 C2 ) {d }) = {b, c} {c}A22 C2 {b, c} {d }
X2 = A22 C2

Passos 4 e 5 do algoritmo, segunda passagem:


Substituio de X1 por {b, c} {c}A22 C2 {b, c} {d } na equao de X0 :

X0 = {a} ({a}({b, c} {c}A22 C2 {b, c} {d }) {b})


= {a} ({a}{b, c} {c}A22 C2 {a}{b, c} {d } {b})
= {a} {a}{b, c} {c}A22 C2 {a} {a}{b, c} {d } {a} {b}
X1 = {b, c} {c}A22 C2 {b, c} {d }
X2 = A22 C2

Portanto, o conjunto regular definido por G0 0 1 3 4 , com:

0 = {a} {a}{b, c} {c}({c} ({a}{a}+ {b}){b, c} {c})


1 = {a}{a}+ {b, c} {d } {b}{b, c} {d } {a}+ {b} {c, d }
3 = {a} {a}{b, c} {d }
4 = {a} {b}
2
3 Linguagens Regulares 127

Exemplo 3.30 Seja G1 uma gramtica linear direita:

G1 = ({0, 1, 2, X1 , X2 , X3 }, {0, 1, 2}, P1 , X1 )


P1 = {X1 0X1 , X1 X2 ,
X2 1X2 , X2 1X3 ,
X3 2X3 , X3 22}
Efetuando-se a mudana de notao e agrupando-se as alternativas, obtemos o sistema de
equaes:

X1 = {0}X1 {}X2
X2 = {1}X2 {1}X3
X3 = {2}X3 {22}
Pelo fato de esta gramtica no conter referncias varivel (no-terminal) X1 nas equaes
de X2 e X3 , nem tampouco referncias varivel X2 na equao da varivel X3 , torna-se prtico
em primeiro lugar resolver diretamente a equao referente varivel X3 :
X3 = {2} {22}
A seguir, substituem-se pela expresso acima todas as ocorrncias da varivel X3 nas equaes
anteriores. O sistema de equaes torna-se ento:

X1 = {0}X1 {}X2
X2 = {1}X2 {1}{2} {22}
X3 = {2} {22}
De forma anloga, obtm-se X2 = {1} {1}{2} {22} e efetua-se a substituio desta expresso
em todas as ocorrncias da varivel X2 nas equaes anteriores, que ento se tornam:

X1 = {0}X1 {}{1} {1}{2} {22}


X2 = {1} {1}{2} {22}
X3 = {2} {22}
Finalmente, obtm-se X1 = {0} {1} {1}{2} {22}, que representa tambm o conjunto regular
definido pela gramtica linear direita G1 . Resulta:

X1 = {0} {1} {1}{2} {22}


X2 = {1} {1}{2} {22}
X3 = {2} {22}
2

Exemplo 3.31 Seja G2 uma gramtica linear direita:

G2 = ({0 , 1 , 2 , A0 , A1 , A2 }, {0 , 1 2 }, P2 , A0 )
P2 = {A0 0 A1 , A0 0 ,
A1 1 A2 , A1 1 ,
A2 2 A0 , A2 2 }
Atravs de manipulaes, obtm-se o sistema:

A0 = {0 }A1 {0 }
A1 = {1 }A2 {1 }
A2 = {2 }A0 {2 }
128 Linguagens Formais - Teoria, Modelagem e Implementao

Substituindo-se todas as ocorrncias de A0 nas demais equaes por {0 }A1 {0 }:

A0 = {0 }A1 {0 }
A1 = {1 }A2 {1 }
A2 = {2 }({0 }A1 {0 }) {2 }

Substituindo-se todas as ocorrncias de A1 nas demais equaes por {1 }A2 {1 }:

A0 = {0 }A1 {0 }
A1 = {1 }A2 {1 }
A2 = {2 }({0 }({1 }A2 {1 }) {0 }) {2 }

Reescrevendo-se a equao referente varivel A2 , tem-se:

A2 = {2 0 1 }A2 {2 0 1 , 2 0 , 2 }
= {2 0 1 } {2 0 1 , 2 0 , 2 }

Substituindo-se essa expresso na equao referente varivel A1 , tem-se:

A1 = {1 }{2 0 1 } {2 0 1 , 2 0 , 2 } {1 }

Finalmente, substituindo-se esta expresso na equao referente varivel A0 , vem:

A0 = {0 }({1 }{2 0 1 } {2 0 1 , 2 0 , 2 } 1 }) {0 }
= {0 1 }{2 0 1 } {2 0 1 , 2 0 , 2 } 0 1 } {0 }
2

Exemplo 3.32 Seja G3 uma gramtica linear direita:

G3 = ({0, 1, 2, S , A}, {0, 1, 2}, P3 , S )


P3 = {S 0A, S 1, A 0S , A 2}
Os passos seguintes levam caracterizao do conjunto regular definido por G3 :

S = {0}A {1}
A = {0}S {2}
Substituindo-se a definio de S na equao de A, vem:

A = {0}({0}A {1}) {2}


= {00}A {01} {2}
= {00} {01, 2}
Substituindo-se todas as ocorrncias de A pela expresso acima na equao de S , tem-se:

S = {0}({00} {01, 2}) {1}


= {0}{00} {01, 2} {1}
= {00} {02, 1}
2
3 Linguagens Regulares 129

3.5 Equivalncia entre Gramticas Regulares e Autmatos


Finitos
Dando seqncia ao contedo cuja discusso foi iniciada na Seo 3.4, mostrada a seguir
a equivalncia entre as gramticas lineares direita e os autmatos finitos, no que diz
respeito classe de linguagens que tais dispositivos so capazes de definir. Finalmente,
e embora redundante do ponto de vista terico (pois a equivalncia dos conjuntos regu-
lares com os autmatos finitos pode ser verificada indiretamente atravs das gramticas
lineares direita), apresentada uma forma direta de grande interesse prtico para a
obteno de autmatos finitos a partir de expresses regulares.
As equivalncias discutidas nesta seo esto representadas com destaque na Figura
3.23.

Figura 3.23: Equivalncia dos formalismos parte 2

Teorema 3.9 (Gramticas lineares direita autmatos finitos) Seja G uma


gramtica linear direita. Ento possvel definir um autmato finito M de tal modo
que L(G) = L(M ).

Justificativa Considere-se G = (V , , P , S ). As produes de P so do tipo:

1. X aY

2. X Y

3. X a

4. X

com X , Y N , a .
Seja M = (Q , , , q0 , F ) o autmato que se deseja obter. O Algoritmo 3.14 mostra
como construir M (no-determinstico, com transies em vazio) a partir de G:
Algoritmo 3.14 (Gramtica autmato) Construo de um autmato finito a
partir de uma gramtica linear direita.

Entrada: uma gramtica linear direita G;

Sada: um autmato finito M tal que L(M ) = L(G);

Mtodo:
130 Linguagens Formais - Teoria, Modelagem e Implementao

1. Conjunto de estados:
Cada estado de M corresponde a um dos smbolos no-terminais de G.
A esse conjunto acrescenta-se um novo smbolo (estado) Z 6 N , ou seja,
Q = N {Z }. O estado inicial de M S , a raiz da gramtica. O estado
final de M Z , o novo estado acrescentado.

2. Alfabeto de entrada:
O alfabeto de entrada de M o mesmo alfabeto de G.

3. Funo de transio:
;
Para cada regra de produo em P da gramtica G, e conforme seu tipo:

a) Se X aY ento {(X , a) Y };

b) Se X Y ento {(X , ) Y };

c) Se X a ento {(X , a) Z };

d) Se X ento {(X , ) Z }.

Note-se que, pela aplicao do Algoritmo 3.14, |Q | = |N | +1 e | | = |P |. 


O algoritmo acima apresentado pode ser melhor compreendido considerando-se que
no apenas a raiz S da gramtica, mas tambm cada no-terminal X dessa gramtica
gera, por si s, uma linguagem:

L(X ) = { | X }

Assim, por exemplo, produes do tipo X aY podem ser interpretadas como a


linguagem gerada pelo no-terminal X corresponde ao smbolo a concatenado lingua-
gem gerada pelo no-terminal Y . Situao semelhante ocorre com os autmatos finitos:
no apenas o estado inicial, mas qualquer estado X tambm define uma linguagem:

L(X ) = { | (X , ) (Y , ), Y F }

Dessa maneira, ao transformar smbolos no-terminais em estados, a produo cor-


respondente (S , a) Y adota o significado a linguagem aceita pelo estado X corres-
ponde ao smbolo a seguido da linguagem aceita pelo estado Y , o que sugere a validade
do algoritmo proposto quando da aplicao desse raciocnio raiz da gramtica, trans-
formada em estado inicial do autmato correspondente, bem como para quaisquer outros
no-terminais e respectivos estados.
Novamente, cabe frisar que todas as linguagens assim definidas a partir dos diver-
sos no-terminais da gramtica so linguagens geradas por gramticas lineares direita
(definidas por subconjuntos do conjunto de produes P original).
Exemplo 3.33 Seja G uma gramtica linear direita:
3 Linguagens Regulares 131

G = (V , , P , S )
V = {a, b, c, S , K , L}
= {a, b, c}
P = {S a, S aK , K bK , K L, L cL, L }
Aplicando-se o algoritmo de converso a G, obtm-se o autmato da Tabela 3.39.

P
S a (S , a) = Z
S aK (S , a) = K
K bK (K , b) = K
K L (K , ) = L
L cL (L, c) = L
L (L, ) = Z

Tabela 3.39: Mapeamento das produes da gramtica G


para as regras de transio do autmato M

O autmato finito completo M assim especificado apresentado na Figura 3.24. Note-se que
L(G) = L(M ) = ab c .

M = (Q, , , S , F )
Q = {S , K , L, Z }
= {a, b, c}
= {(S , a) Z , (S , a) K , (K , b) K , (K , ) L, (L, c) L, (L, ) Z }
F = {Z }

b c

a
S K L Z

Figura 3.24: Autmato resultante do mapeamento mos-


trado na Tabela 3.39

Considere-se a sentena abbcc, e as correspondentes seqncias de derivaes em G e de


movimentaes em M :
S aK abK abbK abbL abbcL abbccL abbcc

(S , abbcc) (K , bbcc) (K , bcc) (K , cc) (L, cc) (L, c) (L, ) (Z , )

Comparando-se as formas sentenciais geradas por G com as configuraes assumidas por M ,


fcil perceber que h uma relao direta entre elas, expressa na idia anteriormente exposta de que
a linguagem gerada por um certo smbolo no-terminal de G corresponde linguagem reconhecida
pelo respectivo estado de M . Note-se, em particular, que o nmero de formas sentenciais geradas
por G igual ao nmero de configuraes assumidas por M no reconhecimento da mesma cadeia
de entrada (no caso, oito formas sentenciais e oito configuraes). 2
132 Linguagens Formais - Teoria, Modelagem e Implementao

Teorema 3.10 (Gramticas lineares direita autmatos finitos) Seja M um


autmato finito qualquer. Ento possvel definir uma gramtica linear direita G, de
tal modo que L(M ) = L(G).

Justificativa Considere-se M = (Q , , , q0 , F ) um autmato finito genrico, no-


determinstico e com transies em vazio. O Algoritmo 3.15 mostra como construir uma
gramtica linear direita G = (V , , P , S ) a partir de M .
Algoritmo 3.15 (Gramtica autmato) Construo de uma gramtica linear
direita a partir de um autmato finito.

Entrada: um autmato finito M ;

Sada: uma gramtica linear direita G tal que L(G) = L(M );

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 ;
Para cada elemento de da mquina M , e conforme o tipo das transies
de M :

a) Se (X , a) = Y , ento P {X aY };

b) Se (X , ) = Y , ento P {X Y }.

F
Para cada elemento de Q da mquina M :

a) Se X F , ento P {X }.

Note-se que, pela aplicao do Algoritmo 3.15, |N | = |Q | e |P | = | | + | F |.


O funcionamento desse algoritmo de mapeamento simples e pode ser compreendido
atravs de consideraes similares s efetuadas no Teorema 3.9. 

Exemplo 3.34 Seja M representado na Figura 3.25:

M = (Q, , , q0 , F )
Q = {q0 , q1 , q2 }
= {a, b, c}
3 Linguagens Regulares 133

= {(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q2 , (q1 , ) q2 , (q2 , c) q2 }


F = {q2 }

b c

c
a
q0 q1 q2

Figura 3.25: Autmato original M do Exemplo 3.34

Aplicando-se o algoritmo de converso mquina M , obtm-se a gramtica linear direita G


apresentada na Tabela 3.40, cujo conjunto de produes P corresponde segunda coluna da mesma.
Note que L(M ) = L(G) = ab c .

G = (V , , P , q0 )
V = {a, b, c, q0 , q1 , q2 }
= {a, b, c}

P
(q0 , a) = q1 q0 aq1
(q1 , b) = q1 q1 bq1
(q1 , c) = q2 q1 cq2
(q1 , ) = q2 q1 q2
(q2 , c) = q2 q2 cq2
Q P
q2 F q2

Tabela 3.40: Gramtica G equivalente ao autmato M da


Figura 3.25

Considere-se a cadeia abbbc, e as correspondentes seqncias de movimentaes em M e de


derivaes em G:

(q0 , abbbc) (q1 , bbbc) (q1 , bbc) (q1 , bc) (q1 , c) (q2 , )

q0 aq1 abq1 abbq1 abbbq1 abbbcq2 abbbc


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 , )

q0 aq1 abq1 abbq1 abbbq1 abbbq2 abbbcq2 abbbc

Assim como no caso do Exemplo 3.33, a comparao entre as configuraes assumidas por
M e as formas sentenciais geradas por G revela que h uma relao direta entre elas, expressa na
mesma idia de que a linguagem reconhecida por um certo estado de M corresponde linguagem
gerada pelo respectivo smbolo no-terminal de G. Note-se, em particular, que o nmero de formas
sentenciais obtidas por G na gerao da cadeia igual ao nmero de configuraes assumidas por M
134 Linguagens Formais - Teoria, Modelagem e Implementao

no reconhecimento da mesma cadeia, porm acrescido de um (no primeiro caso seis configuraes e
sete formas sentenciais, e no segundo caso sete configuraes e oito formas sentenciais). 2
Os resultados apresentados at este ponto so suficientes para estabelecer intuitiva-
mente a equivalncia completa dos conjuntos (expresses) regulares com as gramticas
lineares direita e tambm com os autmatos finitos, no que se refere classe de lingua-
gens que tais dispositivos so capazes de representar.
No obstante, a fim de possibilitar uma visualizao mais completa da relao de
equivalncia entre os autmatos finitos e as expresses regulares, apresentado em se-
guida um algoritmo que permite a construo sistemtica de autmatos finitos no-
determinsticos diretamente a partir de expresses regulares quaisquer.
Teorema 3.11 (Expresses regulares autmatos finitos) Seja r uma expresso
regular sobre o alfabeto . Ento existe um autmato finito M que aceita a linguagem
definida por r .

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 fi-
nito a partir de uma expresso regular.

Entrada: uma expresso regular r sobre um alfabeto ;

Sada: um autmato finito M tal que L(M ) = r ;

Mtodo:

1. r =
r aceita por:

Figura 3.26: Autmato que aceita

2. r =
r aceita por:

Figura 3.27: Autmato que aceita


3 Linguagens Regulares 135

3. r = ,
r aceita por:

Figura 3.28: Autmato que aceita

4. r3 = r1 | r2 , com L(M1 ) = r1 e L(M2 ) = r2


r3 aceita por:

Figura 3.29: Autmato que aceita r1 | r2

As cadeias aceitas por M3 correspondem quelas que so aceitas por M1 e


tambm quelas que so aceitas por M2 . Logo, L(M3 ) = L(M1 ) L(M2 ).

5. r3 = r1 r2 , com L(M1 ) = r1 e L(M2 ) = r2


r3 aceita por:

Figura 3.30: Autmato que aceita r1 r2

As cadeias aceitas por M3 correspondem quelas cujos prefixos sejam cadeias


aceitas por M1 e cujos sufixos sejam cadeias que sejas aceitas por M2 . Logo,
L(M3 ) = L(M1 )L(M2 ).

6. r3 = r1 , com L(M1 ) = r1
136 Linguagens Formais - Teoria, Modelagem e Implementao

r3 aceita por:

Figura 3.31: Autmato que aceita r1

M3 aceita a cadeia vazia e tambm a concatenao, em nmero arbitrrio de


vezes, de quaisquer cadeias que so aceitas por M1 . Logo, L(M3 ) = L(M1 ) .

Adicionalmente, valem as seguintes regras para os autmatos M1 e M2 represen-


tados nos casos (4), (5) e (6):

Os estados originalmente finais desses autmatos tornam-se no-finais na


composio e se comportam apenas como estados de sada do autmato;

Convenciona-se que a entrada dos mesmos pelo lado esquerdo e a sada


pelo lado direito das respectivas figuras.

Exemplo 3.35 Considere-se a expresso regular ab | c. possvel identificar, nessa expresso, as


seguintes linguagens triviais: L1 = a, L2 = b, L3 = c. Portanto, L1 = L1 (M1 ), M1 =

a
q10 q11

Figura 3.32: Autmato que aceita a

L2 = L2 (M2 ), M2 =

b
q20 q21

Figura 3.33: Autmato que aceita b

L3 = L3 (M3 ), M3 =
3 Linguagens Regulares 137

c
q30 q31

Figura 3.34: Autmato que aceita c

Seja L4 = b = L2 . Ento, L4 = L4 (M4 ) com M4 igual a:

b
q40 q41 q20 q21 q42 q43

Figura 3.35: Autmato que aceita b

L5 = ab = L1 L4 . Ento, L5 = L5 (M5 ) com M5 igual a:

a
q10 q11 q51

b
q40 q41 q20 q21 q42 q43

Figura 3.36: Autmato que aceita ab

Finalmente, L6 = ab | c = L5 L3 = L6 (M6 ) com M6 igual a:


138 Linguagens Formais - Teoria, Modelagem e Implementao

c
q30 q31


q60 q61


a
q10 q11 q51

b
q40 q41 q20 q21 q42 q43

Figura 3.37: Autmato que aceita ab | c

Como se pode observar, o autmato assim construdo apresenta uma quantidade desnecessa-
riamente grande de estados, alm de diversas transies em vazio. Este fenmeno, comum quando se
aplicam mtodos cannicos de construo de autmatos, pode ser contornado atravs da aplicao
dos algoritmos de eliminao de transies em vazio e de estados inacessveis, alm da aplicao de
algoritmos de minimizao, assunto da Seo 3.6. O autmato da Figura 3.38 corresponde a uma
verso equivalente, porm mais compacta, ao autmato M6 anteriormente obtido.

q1
a

q0
c

q2

Figura 3.38: Outro autmato que aceita ab | c


2

comum se considerar uma simplificao do autmato apresentado na Figura 3.31,


no qual, ao invs de quatro novos estados, so criados apenas dois novos estados, como
ilustrado na Figura 3.39.
3 Linguagens Regulares 139

Figura 3.39: Autmato alternativo que aceita r1

Assim como no caso dos autmatos apresentados nas Figuras 3.29 e 3.30, o autmato
da Figura 3.31 preserva as funes de transio dos autmatos originais inalteradas. O
autmato da Figura 3.39, por outro lado, exige o acrscimo de uma transio em vazio
do (ento) estado final para o (ento) estado inicial do autmato original, porm produz
resultados equivalentes aos obtidos com o autmato da Figura 3.31.
Exemplo 3.36
O autmato da Figura 3.40 reconhece a linguagem gerada pela expresso regular a b .

a
q0 q1 q2 q3

b
q4 q5 q6 q7

Figura 3.40: Autmato que reconhece a b


2

Para finalizar, a Tabela 3.41 apresenta um resumo que oferece uma viso abrangente
das vrias possibilidades de converso direta entre os diversos formalismos estudados para
representar as linguagens regulares, conforme discutido nas Sees 3.1 a 3.5.
140 Linguagens Formais - Teoria, Modelagem e Implementao

Expresso
regular
(3.11)

Autmato finito
Autmato finito Autmato
(3.3) (3.4) sem
determinstico finito
transies em vazio
(3.10)
(3.9)
Gramtica Gramtica
linear direita (3.1) linear esquerda
(3.7)
(3.6)
Conjunto
regular

Tabela 3.41: Viso geral da equivalncia dos formalismos e


respectivos teoremas

3.6 Minimizao de Autmatos Finitos


Um importante resultado da teoria dos autmatos refere-se equivalncia da classe
dos autmatos finitos determinsticos com a dos no-determinsticos, ou seja, no-
determinismos em autmatos finitos em nada contribuem para ampliar a classe de lin-
guagens por eles reconhecveis. Conforme mostrado anteriormente, sempre possvel
transformar autmatos finitos no-determinsticos que contenham transies em vazio
em outros equivalentes, determinsticos, isentos de tais transies.
Nesta seo apresentado talvez o mais importante resultado terico conhecido
para a classe das linguagens regulares: o da existncia de autmatos finitos determins-
ticos, mnimos e nicos, que reconhecem os respectivos conjuntos regulares. Em outras
palavras, pode-se provar que cada conjunto regular reconhecido por um autmato finito
mnimo e nico. O termo mnimo empregado para designar um autmato finito que
tenha o nmero mnimo possvel de estados.
A importncia desse resultado decorre de uma srie de fatores. Em primeiro lugar,
porque foi demonstrado que ele vlido apenas para a classe das linguagens definidas
por autmatos finitos, no havendo correspondente para outras classes de linguagens; em
segundo lugar, porque ele extrapola o interesse puramente terico, despertando muito in-
teresse prtico, j que possibilita a construo de reconhecedores sintticos extremamente
compactos e eficientes; em terceiro lugar, porque possvel automatizar a minimizao
de autmatos finitos, ou seja, existe um algoritmo que capaz de transformar qualquer
autmato finito em uma verso equivalente mnima; e, finalmente, em quarto lugar, por-
que o autmato finito mnimo nico para cada linguagem regular, e isso possibilita a
elaborao de novos mtodos no estudo de linguagens formais, como, por exemplo, a de-
monstrao da equivalncia de duas linguagens atravs da reduo dos correspondentes
autmatos finitos s suas verses equivalentes mnimas.
O mtodo apresentado neste item parte da hiptese de que o autmato a ser mini-
mizado determinstico e portanto, obviamente, isento de transies em vazio. Dado um
autmato finito qualquer, a aplicao dos algoritmos apresentados na Seo 3.3 permite
3 Linguagens Regulares 141

a sua transformao em autmatos equivalentes sem transies em vazio ou qualquer


outro tipo de no-determinismo.
A minimizao do nmero de estados de um autmato finito feita em duas etapas:

1. Eliminao de estados inacessveis e inteis;

2. Agrupamento e fuso de estados equivalentes.

Estados inacessveis e inteis podem ser eliminados atravs da aplicao dos algo-
ritmos apresentados anteriormente, ficando ento o autmato finito determinstico apto
a ser reduzido sua verso mnima atravs da fuso dos seus estados equivalentes.
O princpio desse mtodo consiste em se efetuar o particionamento sistemtico do
conjunto de estados do autmato em grupos de estados sucessivamente mais abrangentes,
at que cada grupo contenha o maior nmero de estados possvel, o que caracteriza a
respectiva classe de equivalncia. Uma vez esgotado o processo, ou seja, quando no
mais for possvel modificar os grupos construdos, escolhe-se um representante nico para
cada classe, descartando-se os demais estados da mesma classe, uma vez que se trata de
estados equivalentes.
A seguir sero apresentadas algumas definies e os mtodos que permitem efetuar a
identificao sistemtica das classes de equivalncia de um autmato finito determinstico
M , bem como a construo do autmato finito mnimo equivalente M a partir de M .
Considerem-se M = (Q , , , q0 , F ), um autmato finito determinstico, e dois de
seus estados, q1 , q2 Q . Diz-se que a cadeia x distingue q1 de q2 se (q1 , x )
(q3 , ), (q2 , x ) (q4 , ) e, de forma exclusiva, ou q3 F ou ento q4 F . Em outras
palavras, uma cadeia x distingue q1 de q2 , quando, para ser integralmente consumida a
partir de cada um desses dois estados, ela conduzir o autmato a um estado final em
apenas um desses casos.
k
Dois estados q1 e q2 so ditos k -indistinguveis (denotado por q1 q2 ) se e apenas
se no houver cadeia x , |x | k , que permita distinguir q1 de q2 . Finalmente, q1 e q2
so ditos indistinguveis, ou equivalentes (denotado por q1 q2 ), se e apenas se eles
forem k -indistinguveis para todo k 0.
Observe-se que, de acordo com a definio, para qualquer par de estados qi , qj Q ,
valem as duas seguintes condies:
0
1. qi qj se e apenas se ou qi , qj F , ou ento qi , qj (Q F ), e
k k 1 k 1
2. qi qj se e apenas se qi qj e (qi , ) (qj , ), .

A relao possibilita o agrupamento dos estados de um autmato finito M atra-


vs da obteno das denominadas classes de equivalncia, em que os estados pertencentes
a cada classe so todos equivalentes (indistinguveis) entre si. Uma vez agrupados os es-
tados equivalentes, basta escolher um nico representante para cada classe, substituir
por este todas as referncias aos demais estados da mesma classe, e eliminar todos estes,
garantindo-se assim a total ausncia de redundncias de estados da verso final de M .
No entanto, a identificao de pares de estados indistinguveis requer, conforme
visto acima, a indistinguibilidade para cadeias de comprimento qualquer. Naturalmente,
a verificao exaustiva da equivalncia de estados para cadeias de comprimento arbitrrio
um srio limitante para a elaborao de um algoritmo que possa automatizar essa
operao. Por tal motivo, o Teorema 3.12 fundamental como base para permitir a
142 Linguagens Formais - Teoria, Modelagem e Implementao

realizao prtica do mtodo de minimizao de estados pela identificao das classes de


equivalncia.
Teorema 3.12 (Estados equivalentes) Seja M = (Q , , , q0 , F ) um autmato finito
determinstico com n estados, e considere dois estados quaisquer q1 , q2 Q . Ento,
n2
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
De acordo com o critrio , o conjunto Q pode ser particionado inicialmente em dois
grandes subconjuntos: o primeiro, formado por todos os estados finais (F ), e o segundo,
por todos os estados no-finais (Q F ). Trata-se, portanto, do primeiro de uma srie
de sucessivos refinamentos com o objetivo de determinar as classes de equivalncia de
estados no autmato M .
0
Executa-se em seguida, para cada um dos dois subconjuntos obtidos atravs de ,
i
o seu refinamento (particionamento) atravs de relaes , i = 1, 2, 3 etc. Como M
0
possui n estados, o maior subconjunto de Q criado atravs de contm no mximo
n 1 estados. Admitindo-se o pior caso, ou seja, que cada um desses estados constitua
individualmente uma classe de equivalncia distinta das demais, ento haver no mximo
0
mais n 2 refinamentos sucessivos de gerando conjuntos de classes de equivalncia,
distintas umas das outras.
Para completar a demonstrao do teorema, basta provar, conforme descrito a se-
guir, que cada um desses n 2 particionamentos distintos sucessivos (no mximo) refere-se
ao uso correspondente de cadeias de comprimento 1, 2, ..., n 2, para efetuar o teste de
distinguibilidade do par de estados. Conseqentemente, no h possibilidade de ocor-
rer um novo particionamento distinto dos anteriores para cadeias de comprimento x se
os particionamentos obtidos para cadeias de comprimento x 1 e x 2 se mostrarem
idnticos. Dito ainda de outra maneira, se um certo particionamento feito sobre cadeias
de comprimento x ainda no representa as classes de equivalncia de M , ento um novo
particionamento deve necessariamente existir quando cadeias de comprimento x +1 forem
consideradas.
Para provar essa afirmao, considere-se o conjunto de todas as classes de equiva-
k k +1
lncia de M que satisfazem simultaneamente s relaes e . No difcil perceber,
k +2 k +3
nesse caso, que essas mesmas classes de equivalncia satisfazem a , e assim suces-
sivamente.
k
Considere-se, por exemplo, uma situao hipottica em que (i) a relao parti-
k +1
ciona um certo conjunto Q em trs subconjuntos Q0 , Q1 e Q2 ; (ii) a relao preserva
k k +2
o particionamento da relao inalterado; e, finalmente, a relao produz uma
partio diferente, por exemplo, Q0 , R, S e Q2 , com Q1 = R S :
3 Linguagens Regulares 143

k
: Q0 , Q1 , Q2
k +1
: Q0 , Q1 , Q2
k +2
: Q0 , R, S , Q2

onde Q0 , Q1 , Q2 , R e S so conjuntos de estados, Q = Q0 Q1 Q2 , Q1 = R S e


R S = .
Admitindo-se, por hiptese, que Q1 seja particionado em duas novas classes de
k +2
equivalncia R e S , isso significa que existe qi , qj Q1 , de modo que qi 6 qj . Ora, para
que isso fosse verdade, seria necessrio, de acordo com a definio, que:
k +1
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
ao conjunto Q1 , logo qi qj . A condio (2) tambm falsa, pois, se qi qj , ento
k k k +1
(qi , ) (qj , ). Como, por hiptese, as parties produzidas pelas relaes e
k +1
so idnticas, ento (qi , ) (qj , ).
Fica, portanto, demonstrado por contradio que, na hiptese de serem obtidos
dois conjuntos idnticos de classes de equivalncia para k e k + 1, no haver mais
necessidade de se analisar a equivalncia de tais classes para valores maiores do que
k . Fica tambm demonstrado que, para um autmato finito com n estados, haver
0
no mximo n 1 conjuntos distintos de classes de equivalncia ( e os demais n
2), cada qual respectivamente associado a cadeias de comprimento 0 at n 2, no
havendo, portanto, necessidade de se examinar a equivalncia de tais classes para cadeias
de comprimento superior a n 2. 
A seguir apresenta-se o Algoritmo 3.17, que permite efetuar o particionamento
sistemtico do conjunto Q de estados de um autmato finito, produzindo como resultado
as classes de equivalncias mais amplas existentes em Q .
Algoritmo 3.17 (Classes de equivalncia) Determinao das classes de equivalncia
existentes no conjunto Q de estados de um autmato finito.

Entrada: um autmato finito M = (Q , , , q0 , F );

Sada: uma partio Q0 , Q1 , ..., Qn do conjunto Q de estados, de tal forma que


seus elementos correspondem s mais amplas classes de equivalncias de estados
existentes em Q .

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 Linguagens Formais - Teoria, Modelagem e Implementao

justifica facilmente, j que um estado final, qualquer que seja ele, sempre
distinguvel de um estado no-final, qualquer que seja ele (condio vlida
apenas para autmatos isentos de transies em vazio): a cadeia , aceita
por um estado final e no aceita por um estado no-final, distingue um do
outro. Essa partio inicial corresponde, portanto, ao resultado da aplicao
0
da relao ao conjunto Q .

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

(A, ) 6= (B , ), mas (A, ) e (B , ) so equivalentes.

Caso contrrio, eles no so equivalentes e devem, portanto, ensejar uma


partio de Qi .

Note-se, no Algoritmo 3.17, que a definio da equivalncia entre dois estados A e B


quaisquer elaborada, inicialmente, a partir da identificao das entradas aceitas em cada
um desses estados e, posteriormente, a partir da anlise dos estados que so atingidos
quando se transita com cada uma dessas entradas em A e B se os estados atingidos
so idnticos ou equivalentes. As Figuras 3.41, 3.42 e 3.43 ilustram tais situaes para
os estados A e B de um autmato que aceita duas entradas diferentes 1 e 2 .

1
A C
2

1
2
B D

Figura 3.41: Transies com as mesmas entradas para estados


idnticos
3 Linguagens Regulares 145

2 1
E A C

2 1
F B D

Figura 3.42: Transies com as mesmas entradas para estados


equivalentes

2
D A
1

C
1
2
E B

Figura 3.43: Transies com as mesmas entradas para estados


idnticos e equivalentes

Exemplo 3.37 Considere-se o autmato da Tabela 3.42, similar ao autmato do Exemplo 3.38:

a b c d e
q0 q1 q3
q1 q3 q1 q2
(f) q2 q6
q3 q1 q3 q4
(f) q4
q5 q4
q6

Tabela 3.42: Autmato original do Exemplo 3.37

Atravs da aplicao do algoritmo de eliminao de estados inacessveis (Algoritmo 3.10)


obtm-se um novo autmato pela excluso do estado q5 . Pela aplicao do algoritmo de eliminao
de estados inteis (Algoritmo 3.12), obtm-se um novo autmato sem o estado q6 .
Procede-se ento determinao das classes de equivalncia partindo-se do conjunto de estados
Q = {q0 , q1 , q2 , q3 , q4 }, pela aplicao do algoritmo 3.17. A partio inicial de Q :

Estados finais = {q2 , q4 }

Estados no-finais = {q0 , q1 , q3 }

a) O conjunto {q2 , q4 } constitui uma classe de equivalncia, pois q2 e q4 aceitam as mesmas


entradas (nenhuma, neste caso).
146 Linguagens Formais - Teoria, Modelagem e Implementao

b) O conjunto {q0 , q1 , q3 } pode ser particionado em {q0 } e {q1 , q3 }, pois seus elementos tran-
sitam com entradas diferentes: q0 transita com {a, b} e q1 e q3 transitam com {c, d , e}.

c) {q1 , q3 } constitui uma classe de equivalncia, pois ambos os estados transitam com as mesmas
entradas (no caso, {c, d , e}) e, alm disso:

(q1 , c) = q3 e (q3 , c) = q1 ;

(q1 , d ) = q1 e (q3 , d ) = q3 ;

(q1 , e) = q2 e (q1 , e) = q4 , sendo que, conforme (a), q2 e q4 so equivalentes.

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 indistin-


guveis 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.

Entrada: um autmato finito M = (Q , , , q0 , F );

Sada: um autmato finito M = (Q , , , q0 , F ), tal que L(M ) = L(M ) e M


no contenha qualquer par de estados equivalentes;

Mtodo:

0 1 k
1. Construir as parties produzidas pelas relaes de equivalncia , , ..., ,
k +1
, at que, para algum valor de k , as parties produzidas pelas relaes
k k +1
e sejam idnticas.

2. Construir M tal que:


3 Linguagens Regulares 147

Q : o conjunto das classes de equivalncia [q] determinadas no passo


(1);

: {([q], ) = [r ] | (q, ) = r };

q0 : [q0 ], ou seja, o estado correspondente classe de equivalncia que


contm q0 Q ;

F : {[q] | q F }, ou seja, os estados correspondentes s classes de


equivalncia que contm algum q F .


Exemplo 3.38 Considere o autmato finito da Figura 3.44:

q1 q2
a e

q0 c c

b
q3 q4
e

Figura 3.44: Autmato finito original para o Exemplo 3.38

k
As sucessivas parties do conjunto de estados Q, produzidas pelas relaes , k = 0, 1, 2,
so as seguintes:

0
: {q0 , q1 , q3 }, {q2 , q4 }
1
: {q0 }, {q1 , q3 }, {q2 , q4 }
2
: {q0 }, {q1 , q3 }, {q2 , q4 }

Logo, Q = {[q0 ], [q1 ], [q2 ]} e o autmato resultante apresentado na Figura 3.45:

a, b e
[q0 ] [q1 ] [q2 ]

Figura 3.45: Autmato finito mnimo equivalente ao da


Figura 3.44
2
148 Linguagens Formais - Teoria, Modelagem e Implementao

Com o intuito de tornar mais simples a identificao das classes de equivalncia em


autmatos finitos, apresenta-se a seguir um mtodo alternativo, porm equipotente ao
mtodo original.
Este outro mtodo opera em dois passos. No primeiro, eliminam-se do autmato
os no-determinismos, os estados inacessveis e os estados inteis. No segundo, criam-
se classes de equivalncia com base no critrio da coincidncia do conjunto de entradas
aceitas pelos possveis pares de estados considerados.
O mtodo descrito pode ser enunciado na forma do Algoritmo 3.19, uma alternativa
simples e prtica para a minimizao de autmatos finitos. Como o algoritmo baseado
na anlise exaustiva de todos os possveis pares de estados de um autmato M , torna-se
conveniente representar tais pares na forma de uma matriz, considerada apenas da dia-
gonal principal (inclusive) para cima, uma vez que, para efeito de anlise da equivalncia
de estados, o par (qi , qj ) e o par (qj , qi ), com i 6= j , so idnticos.
Seja, portanto, M um autmato finito com n estados. A Tabela 3.43 mostra uma
forma de representar todos os possveis pares de estados de M , sem repetio de pares e
sem repetio de estados dentro de um mesmo par.

q1 q2 ... qn1 qn
q0 (q0 , q1 ) (q0 , q2 ) ... (q0 , qn1 ) (q0 , qn )
q1 (q1 , q2 ) ... (q1 , qn1 ) (q1 , qn )
... ... ...
qn2 (qn2 , qn1 ) (qn2 , qn )
qn1 (qn1 , qn )

Tabela 3.43: Representao dos pares de estados de um aut-


mato M com n estados


Adicionalmente, a notao (qi , qj ) (qm , qn ) usada para indicar que as duas
seguintes condies so simultaneamente verificadas por M :

1. (qi , ) = qm , e

2. (qj , ) = qn .

Algoritmo 3.19 (Minimizao de autmatos) Mtodo prtico para a minimizao


do nmero de estados de um autmato finito.

Entrada: Um autmato finito determinstico M , com funo de transio total,


cujos pares de estados esto representados conforme a Tabela 3.43.

Sada: Uma partio do conjunto de estados Q de M , correspondente s maiores


classes de equivalncia encontradas em M ;

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 arbitrari-


amente), fazer:
3 Linguagens Regulares 149

Se para toda entrada aceita por qa e qb :

Se (qa , ) = (qb , ), ou

Se (qa , ) 6= (qb , ), mas (qa , ) e (qb , ) forem equivalen-


tes.

Ento marcar o par (qa , qb ), na tabela, como equivalente (); caso


contrrio, marcar o par como no-equivalente (6); em seguida,
deve-se verificar se existem pares cuja relao de equivalncia esteja
na dependncia do resultado obtido e, em caso afirmativo, marcar os
respectivos pares na tabela de forma correspondente;

Caso no seja possvel concluir pela equivalncia (ou no) de um par


de estados, prosseguir com a anlise de outros pares, deixando o par
corrente na dependncia dos resultados que forem obtidos para os
demais pares;

3. Marcar os pares restantes, se houver, como equivalentes ();

4. A inspeo dos pares marcados indica as classes de equivalncia obtidas.

Observe-se, neste algoritmo, que a exigncia de que a funo de transio seja total
dispensa a verificao de que os estados de cada par considerado aceitem exatamente as
mesmas entradas.
Observe-se tambm que, se houver um ciclo de pares para cujos membros a deciso
dependa sempre da de outro par, esses pares devem todos pertencer mesma classe de
equivalncia, pois no so distinguveis em nenhuma instncia.
Finalmente, cumpre notar que uma forma conveniente de se registrar e de se mani-
pular a dependncia de um par em relao a outros, cuja relao de equivalncia ainda
no foi estabelecida, e tambm de se concluir, posteriormente, pela equivalncia de um
par a partir da verificao da equivalncia de um outro par, atravs do uso de listas
ligadas, em que o primeiro elemento da lista representa o par em relao ao qual os
demais apresentam dependncias. Essa estrutura de dados mostra-se particularmente
conveniente na realizao, em forma de programa de computador, do referido algoritmo.
Exemplo 3.39 Considere-se o autmato finito determinstico com a funo de transio total da
Tabela 3.44.
150 Linguagens Formais - Teoria, Modelagem e Implementao

a b
q0 q1 q6
q1 q2 q3
(f) q2 q2 q3
q3 q4 q2
(f) q4 q2 q3
(f) q5 q4 q5
q6 q4 q4

Tabela 3.44: Autmato original do Exemplo 3.39

A Tabela 3.45 representa todos os possveis pares de estados desse autmato, e tambm indica
a partio inicial de seu conjunto de estados (finais x no-finais).

q1 q2 q3 q4 q5 q6
q0 6 6 6
q1 - 6 6 6
q2 - - 6 6
q3 - - - 6 6
q4 - - - - 6
q5 - - - - - 6

Tabela 3.45: Partio inicial dos estados do autmato da


Tabela 3.44

Passa-se, ento, a considerar cada um dos pares no marcados dessa tabela (escolhidos arbi-
trariamente). 4
a
(q0 , q1 ) (q1 , q2 ) 6
Como q1 e q2 no so equivalentes (ver Tabela 3.45), marca-se o par (q0 , q1 ) como 6 e
torna-se desnecessria a anlise das transies desses estados com a entrada b.
a
(q0 , q3 ) (q1 , q4 ) 6
Similar ao item acima. O par (q0 , q3 ) marcado como 6.
a
(q1 , q3 ) (q2 , q4 ) ?
b
(q1 , q3 ) (q3 , q2 ) 6
Apesar de ainda no se dispor de nenhuma informao sobre o par (q2 , q4 ), o par (q3 , q2 ) j
foi determinado como sendo no-equivalente (ver tabela 3.45). Logo, marca-se o par (q1 , q3 )
como 6.
a
(q0 , q6 ) (q1 , q4 ) 6
Como q1 e q4 no so equivalentes (ver tabela 3.45), marca-se o par (q0 , q6 ) como 6 e
torna-se desnecessria a anlise das transies desses estados com a entrada b.
a
(q1 , q6 ) (q2 , q4 ) ?
b
(q1 , q6 ) (q3 , q4 ) 6
Apesar de ainda no se dispor de nenhuma informao sobre o par (q2 , q4 ), o par (q3 , q4 ) j
foi determinado como sendo no-equivalente (ver tabela 3.45). Logo, marca-se o par (q1 , q6 )
como 6.
4 Com base nas informaes j processadas sobre cada par de estados, o smbolo indica equivalncia, 6
indica no-equivalncia, e ? indica indefinio e dependncia.
3 Linguagens Regulares 151

a
(q3 , q6 ) (q4 , q4 )
b
(q3 , q6 ) (q2 , q4 ) ?
Neste caso, q3 e q6 transitam para o mesmo estado q4 com a entrada a. Por outro lado,
ainda no se dispe de nenhuma informao sobre o par (q2 , q4 ). Assim, a equivalncia do
par (q3 , q6 ) fica condicionada verificao da equivalncia do par (q2 , q4 ). O par (q3 , q6 ) no
recebe nenhuma marcao neste momento.
a
(q2 , q4 ) (q2 , q2 )
b
(q2 , q4 ) (q3 , q3 )
Os estados q2 e q4 transitam com as mesmas entradas para estados idnticos (com a entrada
a para q2 e com a entrada b para q3 ). Logo, esses estados so equivalentes e o par recebe
a marcao na tabela. Alm disso, conclui-se que o par (q3 , q6 ) (ver item acima)
equivalente, e o mesmo deve ser marcado como .
a
(q2 , q5 ) (q2 , q4 )
b
(q2 , q5 ) (q3 , q5 ) 6
Apesar de o par (q2 , q4 ) ser equivalente (ver os dois itens anteriores), o par (q3 , q5 ) j foi
determinado como sendo no-equivalente (ver Tabela 3.45). Logo, marca-se o par (q2 , q5 )
como 6.
a
(q4 , q5 ) (q2 , q4 )
b
(q4 , q5 ) (q3 , q5 ) 6
Similar ao item acima. O par (q4 , q5 ) marcado como 6.

Ao trmino do algoritmo, a Tabela 3.46 resume o resultado da anlise.

q1 q2 q3 q4 q5 q6
q0 6 6 6 6 6 6
q1 - 6 6 6 6 6
q2 - - 6 6 6
q3 - - - 6 6
q4 - - - - 6 6
q5 - - - - - 6

Tabela 3.46: Resultado final da anlise da equivalncia de


estados para o autmato da Tabela 3.44

As classes de equivalncia desse autmato so, portanto, {q0 }, {q1 }, {q2 , q4 }, {q3 , q6 } e {q5 }.
O autmato resultante (ver Tabela 3.47) possui cinco estados, denominados respectivamente [q0 ],
[q1 ], [q2 , q4 ], [q3 , q6 ] e [q5 ], e corresponde verso mnima do autmato da Tabela 3.44.

a b
[q0 ] [q1 ] [q3 , q6 ]
[q1 ] [q2 , q4 ] [q3 , q6 ]
(f) [q2 , q4 ] [q2 , q4 ] [q3 , q6 ]
[q3 , q6 ] [q2 , q4 ] [q2 , q4 ]
(f) [q5 ] [q2 , q4 ] [q5 ]

Tabela 3.47: Autmato mnimo equivalente ao da Tabela


3.44
2
152 Linguagens Formais - Teoria, Modelagem e Implementao

Note-se, no Algoritmo 3.19, a exigncia de que o autmato a ser minimizado possua


funo de transio total. Tal exigncia visa unicamente a garantir que todos os pares
de estados, quaisquer que sejam os estados considerados, possam sempre ser comparados
em relao a todas as entradas.
No entanto, ao tornar total a funo de transio de algum autmato cuja funo
de transio seja parcial, isso normalmente implica a incorporao de um estado intil
ao autmato, o qual acaba sendo agrupado com outros estados inteis eventualmente
existentes no autmato original e preservado na verso mnima correspondente. Caso
o autmato original possua estados inacessveis, estes tambm sero agrupados em um
nico estado no autmato mnimo equivalente.
Assim, o autmato mnimo obtido tal que a funo de transio total e, alm
disso, isento de estados equivalentes. Eventualmente, a eliminao de estados inteis, e
tambm de estados inacessveis, em um autmato minimizado de acordo com o Algoritmo
3.19, poder resultar em um nmero ainda menor de estados, porm em um autmato
cuja funo de transio seja parcial. Isso no significa que o autmato inicialmente
obtido no seja o mnimo, mas apenas que ele o autmato mnimo com funo de
transio total e sem estados equivalentes.
Dois estados A e B de um autmato finito so ditos equivalentes se, em ltima
instncia, o conjunto de cadeias aceitas em cada um deles for o mesmo. Considere-se a
linguagem aceita a partir de um estado X como sendo definida da seguinte forma:

L(X ) = {w | (X , w ) (, qF ), qF F }

Logo, fcil perceber que A B se e somente se L(A) = L(B ). Esse resultado


pode simplificar a verificao da equivalncia de estados para os quais a determinao
da linguagem aceita em cada um deles seja uma tarefa simples de ser feita (por inspeo
visual ou pela aplicao de um mtodo qualquer).
Exemplo 3.40 Considere-se o autmato da Figura 3.46:

b
q1 q3
a a

q0
a
b
q2 q4
b

Figura 3.46: Autmato original do Exemplo 3.40

Uma rpida inspeo visual permite concluir que:

L(q0 ) = (a | b)c (a | b)

L(q1 ) = c (a | b)

L(q2 ) = c (a | b)
3 Linguagens Regulares 153

L(q3 ) =

L(q4 ) =

Portanto, como L(q1 ) = L(q2 ) e L(q3 ) = L(q4 ), ento q1 q2 e q3 q4 , e a verso mnima


corresponde apresentada na Figura 3.47.

a, b a, b
q0 q1 q3

Figura 3.47: Autmato mnimo equivalente ao da Figura


3.46
2

O Teorema 3.13 apresenta dois resultados fundamentais para as linguagens regula-


res, 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 lin-


guagem 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.

3.7 Transdutores Finitos


Estudadas as definies, notaes e conceitos fundamentais associados aos autmatos
finitos, analisam-se a seguir algumas importantes extenses dessa classe de autmatos.
Inicialmente, considerem-se os denominados transdutores finitos. Os autmatos
finitos, como foi visto, so simples dispositivos de reconhecimento de sentenas e, como
tal, so muito pobres quanto s suas informaes de sada: a nica por eles emitida a da
aceitao ou rejeio da cadeia analisada. Com o intuito de ampliar a aplicabilidade dos
autmatos finitos, foram definidas extenses que associam, a cada sentena de entrada,
uma correspondente cadeia de sada sobre um segundo alfabeto, eventualmente distinto
do alfabeto de entrada.
A associao de smbolos de um alfabeto de sada com a movimentao do autmato
finito no reconhecimento de uma sentena pode ser feita de duas formas distintas: a partir
da seqncia de estados percorridos ou das transies de que se compe o autmato finito
no qual se baseia o transdutor em questo. O primeiro caso caracteriza as denominadas
Mquinas de Moore, e o segundo as chamadas Mquinas de Mealy.
154 Linguagens Formais - Teoria, Modelagem e Implementao

Formalmente, um transdutor finito do tipo Mquina de Moore definido como


sendo uma stupla TMoore = (Q , , , , , q0 , F ) sobre um autmato finito M = (Q , ,
, q0 , F ), em que o alfabeto de sada do transdutor e : Q a funo de
transduo5 de T .
Na notao dos Diagramas de Estado, cada estado do autmato finito rotulado
com a identificao do smbolo do alfabeto de sada que deve ser gerado toda vez que o
estado for atingido.
Exemplo 3.41 Seja T um transdutor finito do tipo Mquina de Moore:

T = (Q, , , , , q0 , F )
Q = {q0 , q1 }
= {a, b, c}
= {1}
= {(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q0 }
= {q0 1, q1 }
F = {q1 }
O grafo correspondente a esse transdutor apresentado na Figura 3.48:
b

a
q0 /1 q1 /

Figura 3.48: Transdutor do tipo Mquina de Moore

A linguagem aceita por esse transdutor ab (cab ) , ou seja, uma seqncia de uma ou
mais cadeias ab separadas pelo smbolo c. A funo de transio , neste caso, faz com que o
transdutor emita o smbolo 1 toda vez que estiver iniciando o reconhecimento de uma nova cadeia
com o formato ab . Assim, T funciona como um contador do nmero de subcadeias ab presentes
na cadeia de entrada. Como exemplo, a Tabela 3.48 apresenta um conjunto de cadeias que so
respectivamente aceitas e geradas por T .

Sentena aceita Cadeia Gerada


abbcabbbcab 111
abbbcab 11
acacaca 1111
a 1

Tabela 3.48: Sentenas aceitas e cadeias geradas pelo


transdutor do tipo Mquina de Moore T
2
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 .
5 Alternativamente, alguns autores preferem adotar : Q .
6 Alguns autores adotam : Q .
3 Linguagens Regulares 155

No caso das Mquinas de Mealy, associam-se os smbolos do alfabeto de sada s


transies, e no aos estados, como ocorre com as Mquinas de Moore (o domnio da
funo se altera para Q ).
Exemplo 3.42 Seja T um transdutor finito do tipo Mquina de Mealy:

T = (Q, , , , , q0 , F )
Q = {q0 , q1 }
= {a, b, c}
= {a, b, c}
= {(q0 , a) q1 , (q1 , b) q1 , (q1 , c) q0 }
= {(q0 , a) ab, (q1 , b) , (q1 , c) c}
F = {q1 }
O grafo correspondente apresentado na Figura 3.49:
b/

a/ab
q0 q1

c/c

Figura 3.49: Transdutor do tipo Mquina de Mealy

Como se pode notar, o autmato finito que serve de base para esse transdutor o mesmo do
exemplo anterior. Assim, a linguagem aceita por ambos os transdutores a mesma. No entanto,
o transdutor deste exemplo mapeia as subcadeias ab aceitas pelo autmato finito em cadeias do
tipo ab, mantendo o smbolo c como separador na sentena de sada. Observe que a funo de
transduo foi definida, neste caso, sobre (devido utilizao da cadeia ). A Tabela 3.49
apresenta alguns exemplos de cadeias respectivamente aceitas e geradas por T :

Sentena aceita Cadeia Gerada


abbcabbbcab abcabcab
abbbcab abcab
acacaca abcabcabcab
a ab

Tabela 3.49: Sentenas aceitas e cadeias geradas pelo


transdutor do tipo Mquina de Mealy T
2

Apesar de se tratar de dois modelos distintos de transdutores finitos, pode-se de-


monstrar 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 Linguagens Formais - Teoria, Modelagem e Implementao

Justificativa Pode ser encontrada em [46]. 

Exemplo 3.43 Considere-se a linguagem L1 = xx (xx ) , definida sobre o alfabeto {x , }.


Considere-se tambm a linguagem L2 , definida sobre o alfabeto de sada {x , y, #}, de tal forma
que as cadeias de L2 reproduzem na sada as cadeias de L1 , com as seguintes modificaes:

As subcadeias de entrada xx que contiverem trs ou menos smbolos x devem ser reprodu-
zidas de forma idntica na sada (com um, dois ou trs smbolos x );

As subcadeias de entrada xx que contiverem quatro ou mais smbolos x devem ser repro-
duzidas na sada como xxxy;

Todos os smbolos - da cadeia entrada devem ser substitudos pelo smbolo # na cadeia
de sada.

A Tabela 3.50 apresenta exemplos de cadeias de entrada e correspondentes cadeias de sada:

Sentena aceita Cadeia Gerada


x x x #x
xxx xxxx xxx #xxxy
xxxxxx xxx xx xxxy#xxx #xx
x xx xxx xxxx xxxxx x #xx #xxx #xxxy#xxxy

Tabela 3.50: Sentenas aceitas e cadeias geradas pelos


transdutores do Exemplo 3.43

Os transdutores finitos das Figuras 3.50 e 3.51 respectivamente Mquina de Mealy e M-


quina de Moore so equivalentes, pois possuem autmatos subjacentes que reconhecem a mesma
linguagem L1 (apesar de serem diferentes) e geram a mesma linguagem L2 , conforme as especifica-
es acima.
x /

x /x x /x x /x x /y
q0 q1 q2 q3 q4

/#

/#
/#

/#

Figura 3.50: Transdutor do tipo Mquina de Mealy do


Exemplo 3.43
3 Linguagens Regulares 157

q0 /

x
x

x x x x
q1 /x q2 /x q3 /x q4 /y q5 /

x
#
#
q6 /# #
#

Figura 3.51: Transdutor do tipo Mquina de Moore equi-


valente ao transdutor do tipo Mquina de Mealy da Figura
3.50
2

Alm de definirem a linguagem de entrada associada ao autmato finito subjacente,


os transdutores, sejam eles de um tipo ou de outro, definem uma segunda linguagem,
denominada linguagem de sada, denotada por L(T ), correspondente ao conjunto das
sentenas sobre que so geradas quando do reconhecimento de sentenas pertencentes
a L(M ), onde M o autmato finito em que o transdutor baseado. Demonstra-se
que a classe de linguagens que pode ser gerada por um transdutor finito corresponde
exatamente classe de linguagens que pode ser reconhecida pelo autmato finito em que
ele se baseia: a classe das linguagens regulares.

3.8 Linguagens que no so Regulares


No Captulo 2 foi mencionado que as linguagens regulares, ou do tipo 3, constituiriam
um subconjunto prprio das linguagens livres de contexto, ou do tipo 2. Para verificar
a veracidade dessa proposio, necessrio antes demonstrar a existncia de linguagens
que no so regulares.
Uma das formas mais usuais para se provar que determinadas linguagens no so
regulares atravs da utilizao do Pumping Lemma, a seguir apresentado. Em li-
nhas gerais, o Pumping Lemma 7 estabelece uma propriedade que sempre verdadeira
para toda e qualquer linguagem regular. Caso a linguagem considerada no exiba tal
propriedade, pode-se concluir imediatamente que a mesma no regular.
Teorema 3.15 (Pumping Lemma para linguagens regulares) Seja L um con-
junto regular infinito. Ento existe uma constante n, dependente apenas de L, tal que,
para quaisquer sentenas w L, com |w | n, w pode ser subdividida em trs subcadeias
x , y e z , de tal forma que w = xyz , 1 |y |, |xy | n, ou seja, 1 |y | n, e, alm disso,
xy i z L, i 0.

Justificativa O reconhecimento de qualquer cadeia x L, com |x | n, sendo L aceita


7 Referido por alguns autores em portugus como Lema do Bombeamento.
158 Linguagens Formais - Teoria, Modelagem e Implementao

por um autmato finito M com n estados, ocorre percorrendo-se pelo menos dois estados
idnticos entre as n + 1 configuraes assumidas por M durante o reconhecimento dos
primeiros n smbolos de x .
Seja w = a1 a2 ...am , |w | = m, m n. A seqncia abaixo ilustra a evoluo da
configurao do autmato M no reconhecimento de w :
a a a an1 a an+1 am 1 a
q0 1 q1 2 q2 3 q3 ... qn1
n
qn qn+1 ... qm1
m
qm

onde q0 ...qm so os estados sucessivamente percorridos por M (no necessariamente dis-


tintos 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 possibili-
dades 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;
Portanto, 1 |y | n, pois |y | |xy |.

Caso haja, entre os n + 1 estados inicialmente percorridos pelo autmato, trs ou


mais ocorrncias de um mesmo estado, permanecem vlidos os limites superior (n) e
inferior (1) previamente determinados para o comprimento da cadeia y.
Como se pode perceber, o fato de a subcadeia y levar o autmato de um estado
qi , anterior ao seu reconhecimento, para o mesmo estado qj = qi , posterior ao seu
reconhecimento, caracteriza como um ciclo o caminho percorrido pelos estados de M ,
com os smbolos de y. Pelo fato de se tratar de um ciclo, repeties arbitrrias do mesmo
conduzem ao reconhecimento de sentenas tambm pertencentes linguagem definida
pelo autmato. Dessa forma, todas as sentenas do tipo xy i z , com i 0, pertencem
necessariamente a L(M ).
O Pumping Lemma se baseia no fato de que cadeias com uma certa quantidade
mnima de smbolos no podem ser reconhecidas por autmatos finitos sem que haja
repetio de configuraes. Por esse motivo, a limitao da quantidade de estados
explorada para demonstrar a existncia de ciclos, e estes, por sua vez, para demonstrar
que outras sentenas devem necessariamente pertencer linguagem.
O Pumping Lemma das linguagens regulares estabelece a propriedade de que,
dada uma sentena de comprimento mnimo n pertencente a esta linguagem, sempre
possvel identificar, na subcadeia formada pelos seus n primeiros smbolos, uma nova
subcadeia cujo comprimento est entre 1 e n, de tal modo que repeties arbitrrias da
mesma geram sentenas que tambm pertencem linguagem definida.
3 Linguagens Regulares 159

Assim, a constante n corresponde ao nmero de estados do autmato finito utili-


zado para definir a linguagem regular. No entanto, como sabido, uma mesma linguagem
regular pode ser definida por autmatos finitos distintos, os quais podem possuir, even-
tualmente, 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. (q0 , ab) (q0 , b) (q0 , )

2. (q0 , ab) (q0 , b) (q1 , )

3. (q0 , ab) (q1 , b) (q0 , )

4. (q0 , ab) (q1 , b) (q1 , )


Considerando-se os demais elementos de M desconhecidos, pode-se apenas especular sobre a
real seqncia que corresponde aceitao da cadeia ab por M . De qualquer forma, as seguintes
concluses so vlidas:

1. Se (q0 , ab) (q0 , b) (q0 , ), ento pelo menos uma das seguintes possibilidades verdadeira:

a) x = , y = ab, z = ;

b) x = a, y = b, z = ;

c) x = , y = a, z = b.

2. Se (q0 , ab) (q0 , b) (q1 , ), ento:


160 Linguagens Formais - Teoria, Modelagem e Implementao

a) x = , y = a, z = b.

3. (q0 , ab) (q1 , b) (q0 , )

a) x = , y = ab, z = .

4. (q0 , ab) (q1 , b) (q1 , )

a) x = a, y = b, z = .

Portanto, qualquer que seja o caso, sempre possvel identificar, na cadeia ab, cujo compri-
mento coincide com o nmero de estados do autmato que a aceita, uma subcadeia y, de compri-
mento maior ou igual a 1 e menor ou igual a 2, que provoca um ciclo na seqncia de movimentaes
executada pelo autmato. 2

Exemplo 3.46 Considere-se o autmato da Figura 3.52:

a c
q0 q1 q2

Figura 3.52: Aplicao do Pumping Lemma ao autmato


finito que aceita ab c

A aplicao das propriedades enunciadas atravs do Pumping Lemma a este autmato podem
ser verificadas atravs do uso de cadeias de comprimento maior ou igual a 3, uma vez que ele possui
trs estados:

Considere-se a cadeia w = abc, |w | = 3. Ento, w pode ser reescrito como xyz , |xy | 3, 1
|y | 3 e, finalmente, xy i z
L, i 0. Nesse caso, deve-se escolher x = a, y = b, z = c.
Assim, xz = ac, xyyz = abbc, xyyyz = abbbc etc. so todas cadeias que pertencem a L.

Considere-se a cadeia w = abbbc, |w | = 5. Ento, w pode ser reescrito como xyz , |xy |
3, 1 |y | 3 e, finalmente, xy i z L, i 0. Nesse caso podem-se fazer trs escolhas
distintas de subdiviso da cadeia w , todas em conformidade com os critrios do Pumping
Lemma:

x = a, y = b, z = bbc. As cadeias (a)(b) (bbc) esto contidas em L.

x = a, y = bb, z = bc. As cadeias (a)(bb) (bc) esto contidas em L.

x = ab, y = b, z = c. As cadeias (ab)(b) (c) esto contidas em L.

Nem todas as subdivises de uma cadeia w geram cadeias que produzem cadeias que perten-
cem linguagem. Note-se, em particular, no exemplo acima, que seria possvel relacionar,
entre as subdivises possveis da cadeia de comprimento 5, as seguintes alternativas:

i) x = , y = a, z = bbbc;

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

A principal aplicao do Pumping Lemma consiste na demonstrao da existncia


de linguagens no-regulares. Outras aplicaes importantes podem ser encontradas na
demonstrao de certas questes decidveis da classe das linguagens regulares.
A demonstrao de que uma dada linguagem no regular pode ser feita por con-
tradio, da seguinte forma:

1. Admite-se inicialmente, por hiptese, que a linguagem sob anlise seja regular;

2. Atravs de manipulaes, demonstra-se que a linguagem no exibe as propriedades


descritas pelo Pumping Lemma;

3. Conclui-se, por contradio, que a hiptese no verdadeira, e portanto que a


linguagem no regular.

Na prtica, a aplicao do mtodo se inicia com a escolha de uma sentena da


linguagem que possua o comprimento mnimo exigido pelo Pumping Lemma. Como
normalmente o valor de n no conhecido, admite-se n como parmetro do problema,
e expressa-se a sentena escolhida em funo de n. Na prtica, a determinao do
valor numrico de n desnecessria, bastando o conhecimento terico da sua existncia.
A seguir, atravs de manipulaes da sentena selecionada, busca-se identificar outras
cadeias dela derivadas conforme as premissas do Pumping Lemma, mas que violem a
definio da linguagem. Havendo sucesso nesse passo, conclui-se que o Pumping Lemma
das linguagens regulares no vlido para a linguagem considerada e, portanto, que tal
linguagem no regular.
O Pumping Lemma no se aplica aos casos em que se deseja demonstrar que
uma determinada linguagem regular. Para que isso fosse uma possibilidade concreta,
seria necessrio mostrar que, para toda e qualquer sentena da linguagem (xyz ), toda e
qualquer outra sentena obtida a partir dela, atravs da aplicao do Pumping Lemma
(xy i z ), tambm pertence mesma linguagem. Na prtica isso invivel, uma vez que:

As linguagens que exibem maior interesse so infinitas (linguagens finitas so tri-


vialmente regulares); 8

A quantidade de cadeias geradas a partir de cada sentea considerada infinita.

A demonstrao de que uma linguagem regular s pode ser feita atravs da apre-
sentao de uma enumerao, de uma expresso regular, de um autmato finito ou de
uma gramtica regular que defina a linguagem.
Exemplo 3.47 Seja L = {a k b k | k 0}. Supondo que L seja uma linguagem regular, tome-se a
sentena a n b n , onde n a constante definida pelo Pumping Lemma. Essa sentena pertence a L
e possui comprimento 2n, portanto maior ou igual a n. De acordo com o Lemma, essa sentena
pode ser decomposta em trs subcadeias x , y e z , tais que xyz = a n b n , |xy | n, |y | 1.

8 Linguagens trivialmente regulares so reconhecidas por autmatos finitos isentos de ciclos, e portanto a eles o
Pumping Lemma no se aplica, j que exprime uma propriedade peridica da linguagem, e em linguagens
finitas no se podem detectar periodicidades. Em outras palavras, nas cadeias xyz , y = , e isso contraria a
hiptese do Pumping Lemma
162 Linguagens Formais - Teoria, Modelagem e Implementao

Logo, y = a i , 1 i n, e xyz pode ser reescrito como a ni a i b n . No entanto, nenhuma das


seguintes cadeias pertence a L:

1. xy 0 z = a ni b n

2. xyyz = a ni a i a i b n = a n+i b n
uma vez que as ocorrncias do smbolo a esto desbalanceadas em relao s ocorrncias dos smbolos
b. Logo, L no regular. 2

Exemplo 3.48 Seja L = {0k 10k | k 1} e considere-se uma sentena w de comprimento suficiente-
mente longo pertencente a esta linguagem, w = 0...010...0. Admitindo-se que seja possvel escrever
w como xyz , tem-se que 1 y n, onde n a constante de L, e y pode assumir uma das cinco
formas seguintes:
1. y =1

2. y 0+

3. y 0+ 1

4. y 10+

5. y 0+ 10+

Como fcil perceber, se y = 1, ento xy 0 z 6 L, pois faltar o smbolo 1, obrigatrio em


todas as sentenas de L.
Se y 0+ , ento xyyz 6 L, pois haver quantidades diferentes do smbolo 0 antes e aps o
smbolo 1 na sentena.
Se y 0+ 1, y 10+ ou, ainda, y 0+ 10+ , ento xyyz 6 L, uma vez que xyyz ter mais
que um nico smbolo 1. Fica assim demonstrado, por contradio, que L no uma linguagem
regular, visto que no atende ao Pumping Lemma. 2

Exemplo 3.49 Considere-se a linguagem L = {a kk | k Z+ }. De acordo com essa definio, as


sentenas de L so seqncias formadas por smbolos a de comprimento 1, 4, 9, 16 etc. Seja n a
constante de L e considere-se a sentena a nn .
Essa cadeia pode ser reescrita como xyz , em que 1 |y | n. Pelo Pumping Lemma, se
xyz L, ento xyyz L. Considerando a sentena xyyz , tem-se que n 2 < |xyyz | n 2 + n. Por
outro lado, n 2 + n < (n + 1)2 , portanto, n 2 < |xyyz | < (n + 1)2 . Ora, isso contraria a hiptese
de que o comprimento de todas as sentenas dessa linguagem correspondem ao quadrado de algum
nmero inteiro positivo, uma vez que no existe i Z+ tal que n 2 < i 2 < (n + 1)2 , n Z+ . Fica
assim demonstrado, por contradio, que L no uma linguagem regular. 2

Exemplo 3.50 Seja L = {a k b k c k | k 1}. Supondo que L seja uma linguagem regular, tome-
se a sentena a n b n c n , onde n a constante definida pelo Pumping Lemma. Claramente essa
sentena pertence a L. Mas, de acordo com o Lemma, essa sentena pode ser decomposta em trs
subcadeias x , y e z , tais que xyz = a n b n c n , |xy | n, |y | 1.
Logo, y = a i , 1 i n, e xyz pode ser reescrito como a ni a i b n c n . No entanto, nenhuma
das seguintes cadeias pertence a L:

1. xy 0 z = a ni b n c n

2. xyyz = a ni a i a i b n c n = a n+i b n c n

uma vez que as ocorrncias do smbolo a esto desbalanceadas em relao s dos smbolos b e c.
Logo, L no regular. Observe-se a semelhana da presente demonstrao com a que foi efetuada
para a linguagem a k b k no Exemplo 3.47. 2
3 Linguagens Regulares 163

Exemplo 3.51 Considere-se L = {a k | k 1 um nmero primo}. Admitindo-se que L seja uma


linguagem regular, tome-se a sentena a m , onde m o primeiro nmero primo superior constante
n definida pelo Pumping Lemma. Logo, m > n. De acordo com o Lemma, como |a m | = m n,
essa sentena pode ser decomposta em trs subcadeias x , y e z , com xyz = a m , |xy | n, |y | 1.
Alm disso, xy i z L, i 0. Em particular, pode-se fazer i = m + 1. Logo, de acordo com o
Lemma, a cadeia xy m+1 z deveria pertencer a L. No entanto, |xy m+1 z | = |xyzy m | = |xyz | + | y m |.
Como |xyz | = m e |y m | = m |y |, ento |xy m+1 z | = m + m |y | = m (1 + |y |).
Esse resultado mostra que o comprimento de xy m+1 z , ou seja, m (1 + |y |), no um nmero
primo, uma vez que:

m (1 + |y |)
Ele divisvel por m, pois = (1 + |y |);
m
m 6= 1, pois n 1 e m > n;

m 6= m (1 + |y |), pois, de acordo com o Pumping Lemma, |y | 1.

Logo, L no regular. 2

3.9 Propriedades de Fechamento


Conforme definido na Seo 1.2, diz-se que uma determinada classe de linguagens
fechada em relao a uma operao se da aplicao da operao a quaisquer linguagens
dessa classe resultar sempre uma linguagem que tambm pertena classe em questo.
O estudo de uma classe de linguagens do ponto de vista das operaes em relao s
quais ela fechada muito importante, uma vez que auxilia, na prtica, na determinao
da classe de linguagens a que uma certa linguagem possa ou no pertencer.
A seguir so apresentadas, na forma de teoremas, as principais propriedades de
fechamento para as linguagens regulares.
Teorema 3.16 (Fecho na unio, concatenao e fecho) A classe das linguagens re-
gulares fechada em relao s operaes de unio, concatenao e fechamento reflexivo
e transitivo.

Justificativa Imediata, a partir da definio dos conjuntos regulares. 

Teorema 3.17 (Fecho na complementao) A classe das linguagens regulares fe-


chada 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 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 3.53: Representao de , e L(M )

contm as sentenas que possuem pelo menos um elemento de , e


L(M ) as sentenas sobre rejeitadas por M .

A linguagem L(M ) aceita pelo autmato M = (Q , , , q0 , Q F ), em que


os estados finais de M tornam-se no-finais em M e vice-versa. Assim, se x L(M ), ou
seja, se (q0 , x ) F , ento x 6 L(M ), uma vez que (q0 , x ) 6 (Q F ).
Logo, conclui-se que, se L for uma linguagem regular, ento L(M ) ser tambm
uma linguagem regular, uma vez que ela aceita pelo autmato finito M .
Por outro lado, a linguagem , de acordo com a sua interpretao (conjunto
de sentenas que possuem pelo menos um elemento de ), pode ser reescrita como:

= ( )

Portanto, como decorrncia do fechamento das linguagens regulares sobre as ope-


raes 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 .

c d e

a b e
q0 q1 q2 q3
a, c, d , e a, b, c

b, d , e a, b, c, d

q4

a, b, c, d , e

Figura 3.54: Autmato finito que aceita L

Atravs do mtodo apresentado na demonstrao do Teorema 3.17 obtm-se M , representado


na Figura 3.55, de modo que L(M ) = L(M ), com = = {a, b, c, d , e}.
3 Linguagens Regulares 165

c d e

a b e
q0 q1 q2 q3
a, c, d , e a, b, c

b, d , e a, b, c, d

q4

a, b, c, d , e

Figura 3.55: Autmato finito que aceita L (ver Figura 3.54)


2

Observe-se que foi fundamental, para a demonstrao deste teorema, a garantia de


que a linguagem L seja sempre definida atravs de um autmato finito determinstico e
com funo de transio total. Assim, qualquer que seja a cadeia de entrada, ela ser
sempre completamente consumida por M e, em conseqncia, a aceitao ou rejeio
da mesma por M depender apenas do tipo do ltimo estado assumido por M (final ou
no-final). Ao trocar estados finais por no-finais e vice-versa em M , todas as cadeias de
entrada sempre sero tambm completamente consumidas por M e, por fim, as cadeias
aceitas por M (ou seja, as que o conduzem a um estado final) sero rejeitadas por M
(por o conduzirem a um estado no-final) e vice-versa.
Caso essa providncia no tivesse sido tomada, certas cadeias de entrada poderiam
no ser completamente esgotadas, e, nessa situao, a simples inverso de estados seria
insuficiente para garantir que M aceitasse o complemento da linguagem aceita por M .
Suponha-se, por exemplo, que M rejeite uma cadeia em um estado final sem esgot-la.
Neste caso, M iria tambm rejeit-la, uma vez que o estado no-final de M teria se
convertido em final de M , porm a cadeia de entrada no teria sido esgotada. O correto,
no entanto, seria que M aceitasse essa cadeia, como se pode notar atravs do Exemplo
3.53.
Exemplo 3.53 O autmato finito no-determinstico da Figura 3.56 aceita a linguagem ab .

a b
q0 q1 q2

Figura 3.56: Autmato finito M que aceita L = ab

Caso o mtodo fosse aplicado a este autmato, na forma em que ele se encontra, o resultado
corresponderia ao apresentado na Figura 3.57.
166 Linguagens Formais - Teoria, Modelagem e Implementao

a b
q0 q1 q2

Figura 3.57: Autmato finito M que aceita L = ab

Como se pode perceber, L (M ) = ab = L(M ) e, portanto, frustra-se o objetivo de se obter


um autmato que aceite o complemento de L. Tal resultado decorre da no observncia da exigncia
de se eliminar, a priori, os no-determinismos de M , alm do fato de que no uma funo total.2

Teorema 3.18 (Fecho na interseco) A classe das linguagens regulares fechada


em relao operao de interseco.

Justificativa Considere-se a linguagem L1 sobre 1 , e L2 sobre 2 , sendo 1 , 2 . En-


to, considerando-se as complementaes em relao a , a seguinte relao verdadeira
(Lei de De Morgan, ver Teorema 1.1):

L1 L2 = L1 L2

Portanto, a regularidade da linguagem resultante da interseco de duas outras


linguagens regulares depende da preservao da regularidade pelas operaes de unio
e complemento. Como esse fato j foi constatado nos Teoremas 3.16 e 3.17, possvel
afirmar, com base no presente teorema, que L1 L2 ser necessariamente uma linguagem
regular. 

Teorema 3.19 (Fecho na substituio) A classe das linguagens regulares fechada


em relao operao de substituio.

Justificativa Considere-se R uma expresso regular que denota o conjunto regular L



sobre , e seja s : 2 uma funo de substituio. Para cada , seja s() o
conjunto regular determinado pela expresso regular R .
Substituindo-se cada ocorrncia em R de por R , obtm-se uma nova expres-
so regular R em que cada smbolo do alfabeto original substitudo pela correspondente
expresso regular. possvel constatar que R = s(R). A prova pode ser feita atravs
da induo sobre o nmero de operadores presentes em R (ver [46]), notando que:

1. s(L1 L2 ) = s(L1 ) s(L2 )

2. s(L1 L2 ) = s(L1 )s(L2 )

3. s(L1 ) = (s(L1 ))


Exemplo 3.54 Considere-se L = 0 (1 | 2 ), e a substituio s abaixo definida:

s(0) = a | b
3 Linguagens Regulares 167

s(1) = c d

s(2) = e

Ento, s(L) = s(0 (1 | 2 )) = s(0 )s(1 | 2 ) = (s(0)) (s(1 ) | s(2 )) = (s(0)) ((s(1)) |
(s(2)) ) = (a | b) ((c d ) | (e) ). 2

Teorema 3.20 (Fecho no homomorfismo e homomorfismo inverso) A classe das


linguagens regulares fechada em relao s operaes de homomorfismo e homomor-
fismo inverso.

Justificativa O fechamento em relao operao de homomorfismo imediato, uma


vez que os homomorfismos so casos particulares de substituies.
A prova do fechamento em relao operao de homomorfismo inverso pode ser
baseada na construo de um autmato finito M que aceita a imagem homomrfica
inversa de uma linguagem regular L = L(M ) qualquer. A demonstrao formal pode ser
feita por induo sobre o comprimento das sentenas x h 1 (L) em seu reconhecimento
por M (ver [46]).
Seja M = (Q , , , q0 , F ) um autmato finito determinstico que aceite L, e
considere-se o homomorfismo h:
h :
Ento, o autmato M = (Q , , , q0 , F ), com:
(q, a) = (q, h(a)), a
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
a
b
c d

a b c d
q0 q1 q2 q3 q4

e e
b a

q8 q7

Figura 3.58: Autmato finito que aceita L

Suponha-se que L tenha sido obtida atravs do homomorfismo h:


168 Linguagens Formais - Teoria, Modelagem e Implementao

h(0) = ab

h(1) = cd

h(2) = e

O autmato M , que aceita a imagem homomrfica inversa de L, apresentado na Figura


3.59.
1

0 2
q0 q2 q4

2
0 1

q8
2

Figura 3.59: Autmato finito que aceita h 1 (L)


2

Teorema 3.21 (Fecho no quociente) A classe das linguagens regulares fechada em


relao operao de quociente com linguagens de tipo arbitrrio.

Justificativa Sejam M = (Q , , , q0 , F ) um autmato finito que aceita L1 e L2 uma


linguagem qualquer. Pode-se ento definir o autmato M = (Q , , , q0 , F ), de modo
que q Q :

1. q F se y L2 , tal que (q, y) F ;

2. q 6 F , caso contrrio.

Como se pode perceber, (q0 , x ) F se e apenas se existir y L2 , tal que


((q0 , x ), y) F . Logo, L(M ) = L1 /L2 uma linguagem regular. 

Exemplo 3.56 Sejam as linguagens L1 = a b e L2 = a | b. O autmato finito M da Figura 3.60


aceita L1 .

a
q0 q1

Figura 3.60: Autmato finito que aceita L1

A linguagem L = L1 /L2 = a aceita pelo autmato M da Figura 3.61.


3 Linguagens Regulares 169

b
q0 q1

Figura 3.61: Autmato finito que aceita L1 /L2

De fato,

1. A linguagem aceita por q1 em M . Como 6 L2 , ento q1 6 F .

2. A linguagem aceita por q0 em M a b. Como a b L2 , ento q0 F .


2

Teorema 3.22 (Fecho na reverso) A classe das linguagens regulares fechada em


relao operao de reverso de suas sentenas (linguagem reversa).

Justificativa Seja M = (Q , , , q0 , F ) um autmato finito que aceita L. O Algoritmo 3.20


mostra como construir M = (Q {q0 }, , , q0 , F ), eventualmente no-determinstico,
de tal modo que L(M ) = LR .
Algoritmo 3.20 (Autmato para L autmato para LR ) Construo do aut-
mato finito que aceita LR a partir do autmato finito que aceita L.

Entrada: um autmato finito M = (Q , , , q0 , F );

Sada: um autmato finito M = (Q {q0 }, , , q0 , F ), tal que L(M ) = L(M )R ;

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 .

Observe que as condies a) e b) so mutuamente exclusivas, e que, no entanto, as


condies c) e d) so satisfeitas simultaneamente no caso de transies que conduzem a
estados finais. Em outras palavras, se uma transio conduz a um estado final em M ,
ela d origem a duas transies em M .
O algoritmo consiste, na essncia, em promover a inverso do sentido das transies
de M em M , tomando-se o cuidado de convergir todas as transies que levam a estados
170 Linguagens Formais - Teoria, Modelagem e Implementao

finais de M para um nico estado inicial em M . O estado inicial de M torna-se o estado


final de M . possvel demonstrar formalmente (ver [46]) que:

(q0 , x ) (qf , ) se e somente se (q0 , x R ) (q0 , ).

Em outras palavras, L(M ) = L(M )R = LR . 

Exemplo 3.57 Considere a linguagem a bc aceita por M , conforme a Figura 3.62:

a c

b
q0 q1

Figura 3.62: Autmato finito que aceita L = a bc

A aplicao do algoritmo descrito conduz obteno do autmato M da figura 3.63:

a c

q0 q1
b
c
b

q0

Figura 3.63: Autmato finito que aceita LR = (a bc )R =


c ba

Como se pode observar, L(M ) = ba | cc ba = c ba = L(M )R . 2

Uma das principais aplicaes do estudo do fechamento de uma classe de linguagens


em relao a um determinado conjunto de operaes consiste na possibilidade de se
determinar a classe de uma linguagem a partir da decomposio da mesma em linguagens
mais simples, de classe conhecida, e que, combinadas por intermdio de operadores que
preservam a classe dessas linguagens mais simples, nos permitem inferir diretamente a
classe das linguagens resultantes.
Exemplo 3.58 Considere-se a linguagem L = {a bc | o comprimento das sentenas maior ou
igual a 3}. L regular?
L pode ser representada como L1 L2 , onde L1 = {a bc } e L2 = (a | b | c)(a | b | c)(a | b |
c)(a | b | c) . Como L1 e L2 so regulares (pois esto expressas atravs de expresses regulares), e
a classe das linguagens regulares fechada em relao operao de interseco, ento L tambm
regular. De fato, no difcil perceber que L = a (aab | abc | bcc)c . 2

Exemplo 3.59 Seja a linguagem L = {w {a, b, c, d } | w contm a subcadeia bb e w no


contm a subcadeia dd }. L regular?
L = L1 L2 , onde L1 = {w {a, b, c, d } | w contm a subcadeia bb} e L2 = {w
{a, b, c, d } | w contm a subcadeia dd }:
3 Linguagens Regulares 171

L1 = (a | b | c | d ) bb(a | b | c | d )

L1 = (a | b | c | d ) dd (a | b | c | d )

Como L1 e L2 so regulares, e a classe das linguagens regulares fechada em relao s


operaes de complemento e interseco, segue que L tambm regular. 2

Exemplo 3.60 Considere-se a linguagem L1 definida sobre o alfabeto {a, b}, de tal forma que perten-
cem a L1 todas as cadeias que podem ser formadas com os smbolos de seu alfabeto, excetuando-se
aquelas que contm exatamente trs smbolos a. L1 regular?
No difcil perceber que L1 = L2 , onde L2 = b ab ab ab , ou seja, L1 corresponde comple-
mentao da linguagem que contm todas as cadeias com exatamente trs smbolos a (L2 ). Portanto,
L1 regular. Uma expresso regular que representa L1 b | b ab | b ab ab | b ab ab ab a(a | b)2
.

Exemplo 3.61 Considere-se o alfabeto {a, b, c} e a linguagem L definida de tal forma que suas
cadeias satisfazem todas s seguintes regras:

1. Possuem a subcadeia aaa como prefixo;

2. Possuem comprimento total mltiplo de 4;


3. Possuem quantidade par de smbolos c;

4. No contm a subcadeia bb.

So exemplos de cadeias pertencentes a L: aaabcccc, aaabcbca, aaaa, aaaaaaba, aaaacccbaaac


etc. L regular? Para responder, basta notar que L = ((L1 L2 ) L3 ) L4 , onde:

L1 gerada por aaa(a | b | c) :


Cadeias que possuem aaa como prefixo.

L2 gerada por ((a | b | c)(a | b | c)(a | b | c)(a | b | c)) :


Cadeias que possuem comprimento total mltiplo de 4.

L3 gerada por ((a | b) c(a | b) c(a | b) ) :


Cadeias que possuem quantidade par de smbolos c.

L4 gerada por (a | b | c) bb(a | b | c) :


Cadeias que contm a subcadeia bb.
Como L1 , L2 , L3 e L4 so regulares, e a classe das linguagens regulares fechada em relao
s operaes de interseco e complementao, conclui-se que L regular. 2

Portanto, a demonstrao da regularidade de uma linguagem no precisa ficar res-


trita 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 direta-
mente 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 Linguagens Formais - Teoria, Modelagem e Implementao

3.10 Questes Decidveis


Para cada uma das classes de linguagens consideradas pela Hierarquia de Chomsky,
possvel formular uma srie de questionamentos de ordem geral sobre as linguagens a elas
pertencentes. Por exemplo, pode-se questionar se uma sentena aceita por um dado
reconhecedor, se uma linguagem igual a outra, se uma linguagem infinita, se uma
linguagem no-vazia etc.
Conforme discutido a seguir, vrios desses problemas so muito simples de serem
resolvidos quando se trata de linguagens regulares. No entanto, quando se consideram
outras classes de linguagens, verifica-se que nem sempre algumas dessas questes po-
dem ser respondidas. Por esse motivo, a classe de problemas considerados a seguir
genericamente denominada de questes decidveis.
importante notar que no costumam ser considerados, no estudo geral das lin-
guagens formais, os casos particulares, ou seja, os problemas particularizados para uma
certa linguagem ou grupo de linguagens, como, por exemplo: A linguagem L, a seguir
apresentada, vazia?.
Ao contrrio, o interesse recai sobre problemas gerais parametrizados, que podem
ser instanciados para uma ou mais linguagens especficas quando de sua aplicao, como,
por exemplo: possvel descobrir se uma linguagem regular L, qualquer que seja L,
vazia?.
Quando se diz que um problema (ou questo) desse tipo decidvel, isso significa
que ele sempre tem soluo, qualquer que seja a sua instncia considerada (ou argumentos
aplicados). Mais do que isso, cada questo decidvel caracterizada pela existncia de um
algoritmo que permite resolver o problema geral com garantias de obteno do resultado
afirmativo ou negativo, dependendo do caso.
As questes apresentadas neste item referem-se classe das linguagens regulares.
Questes referentes a outras classes de linguagens sero consideradas nos captulos cor-
respondentes. Cada questo decidvel est apresentada na forma de um teorema, acom-
panhado de um algoritmo que possibilita a automatizao da implementao da soluo
do problema proposto. Certas questes indecidveis relevantes, prprias de outras classes
de linguagens, so apresentadas na forma de teoremas com a respectiva prova formal (ou
informal, conforme o caso) de sua indecidibilidade.
Antes de iniciar, convm fazer algumas consideraes sobre os critrios de escolha do
tipo de representao de linguagens adotado nas demonstraes seguintes. Analogamente
ao que foi feito na Seo 3.9, certos resultados esto mostrados com base em um ou outro
tipo de representao expresses regulares, autmatos finitos ou gramticas lineares
direita , dependendo de qual seja mais conveniente em cada caso. A escolha de um
ou outro tipo de representao no possui implicao sobre os resultados apresentados,
uma vez que elas so equivalentes, sendo sempre possvel efetuar a converso de um tipo
para outro mecanicamente, se for o caso.
Os trs teoremas iniciais referem-se a questes decidveis cuja demonstrao ba-
seada nos resultados do Pumpimg Lemma das linguagens regulares.
Teorema 3.23 (A linguagem vazia?) A linguagem L aceita por um autmato finito
com n estados no-vazia se e somente se o autmato aceita pelo menos uma cadeia
w , |w | < n.

Justificativa A condio necessria (aceita uma sentena de comprimento inferior a


n linguagem no-vazia) bvia e no necessita ser demonstrada.
3 Linguagens Regulares 173

A condio suficiente (linguagem no-vazia aceita uma sentena de compri-


mento 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 sucessi-
vamente 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:

No existem estados finais no autmato, ou

Os estados finais do autmato no so acessveis desde o estado inicial

e, portanto, a linguagem por ele aceita vazia.


Em outras palavras, qualquer estado acessvel de um autmato finito com n estados
alcanvel por meio de cadeias de comprimento mximo n 1. Se algum desses estados
for final, ento a linguagem aceita no-vazia. Caso contrrio, vazia.
A importncia deste teorema se deve ao algoritmo alternativo por ele implicita-
mente proposto: para determinar se uma linguagem, aceita por um autmato finito com
n estados, no-vazia, basta verificar se o autmato aceita alguma sentena de com-
primento entre 0 (inclusive) e n 1 (inclusive). Como a quantidade de cadeias sobre
um alfabeto finito que satisfazem a tal condio finita (conforme mostrado a seguir),
ento pode-se demonstrar que o problema proposto pode sempre ser resolvido atravs da
pesquisa exaustiva da aceitao dessas cadeias por M : se pelo menos uma dessas cadeias
for aceita, constata-se que a linguagem no-vazia, no sendo necessrio testar outras
cadeias de comprimento maior. Se nenhuma dessas cadeias for aceita, pode-se concluir
que a linguagem vazia, sem testar quaisquer outras cadeias.
174 Linguagens Formais - Teoria, Modelagem e Implementao

Para um autmato finito com n estados, cujo alfabeto de entrada tenha m smbolos,
a quantidade de cadeias que devem ser testadas dada pela frmula:
n1
X
mi
i=0

pois, conforme pode ser verificado na Tabela 3.51, essa frmula representa a quantidade
total de cadeias distintas cujos comprimentos esto entre 0 (inclusive) e n 1 (inclusive),
e que podem ser construdas a partir de um alfabeto com m smbolos.

Comprimento Cadeias distintas Cadeias distintas


0 1 m0
1 m m1
2 m m m2
3 m m m m3
... ... ...
n 1 m m m ... m m n1

Tabela 3.51: Quantidade de cadeias que podem ser obtidas a


partir de um alfabeto com m smbolos, com comprimento entre 0
e n 1

Exemplo 3.62 Seja L uma linguagem regular sobre o alfabeto {a, b, c} e aceita por um autmato
finito M com trs estados. Ento, para determinar se L no-vazia, basta verificar se alguma das
seguintes cadeias aceita por M :

Comprimento 0 (uma cadeia):

Comprimento 1 (trs cadeias): a, b, c

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 fi-


nito 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 lin-


guagem 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.
3 Linguagens Regulares 175

Se |w | 2n, ento, de acordo com o Pumping Lemma, w = xyz , |xy | n, 1


|y | n. Logo, a cadeia xz tambm pertence a L, |xz | < |w |, |xz | n (pois, como
|w | 2n e, na pior das hipteses, |y | = n, ento |xz | = |w | | y | n).
Duas possibilidades podem ento ocorrer com a cadeia xz : ou |xz | 2n ou |xz | <
2n.
Se |xz | < 2n, ento a hiptese verdadeira e o teorema est demonstrado.
Se |xz | 2n, pode-se considerar agora w = xz e aplicar o Pumping Lemma
novamente sobre essa cadeia. Atravs da iterao deste passo, enquanto o comprimento
de w for maior ou igual a 2n, possvel obter cadeias de comprimentos sucessivamente
menores, porm sempre de comprimento maior ou igual a n. Logo, necessariamente
existe uma cadeia pertencente linguagem, de comprimento maior ou igual a n e menor
que 2n, e o teorema est demonstrado.
Assim, se a linguagem for infinita, ela dever obrigatoriamente conter pelo menos
uma cadeia de comprimento entre n (inclusive) e 2n (exclusive). 
A condio somente se do Teorema 3.24 pode tambm ser compreendida da se-
guinte forma: por se tratar de uma linguagem infinita, e portanto no-vazia, o autmato
correspondente aceita pelo menos uma cadeia w0 , 0 |w0 | < n (ver Teorema 3.23).
Por outro lado, como se trata de uma linguagem infinita, ento fato que este
autmato possui pelo menos um ciclo, correspondente cadeia y, 1 |y | n (conforme
o Pumping Lemma).
Logo, a combinao desses resultados (ou seja, o bombeamento da cadeia y na
cadeia w0 , resultando em uma nova cadeia cujo comprimento corresponde soma dos
comprimentos mnimos e mximos das outras duas) garante a existncia de pelo menos
uma cadeia w1 , 1 < |w1 | < 2n 1, que aceita pelo autmato.
Se |w1 | n, ento a condio est provada. Se |w1 | < n, pode-se bombear y
novamente, desta vez em w1 , resultando na cadeia w2 , 2 < |w2 | < 2n 1.
A iterao desse passo, enquanto wi < n, garante a existncia de uma cadeia wj ,
aceita pelo autmato, tal que n |wj | < 2n 1, como se quer demonstrar.
Em outras palavras, a existncia de ciclos acessveis desde o estado inicial garante
que o autmato aceita pelo menos uma cadeia w tal que n |w | < 2n 1.
A principal aplicao deste teorema se encerra no algoritmo por ele sugerido, o
qual permite determinar se a linguagem aceita por um autmato finito com n estados
infinita ou no: basta verificar se o autmato aceita alguma cadeia de comprimento entre
n (inclusive) e 2n 1 (inclusive). Como a quantidade de cadeias com essa caracterstica
finita, conclui-se ser sempre possvel determinar se uma linguagem regular infinita ou
no, bastando para isso analisar, exaustivamente, se alguma dessas cadeias pertence
linguagem definida.
A quantidade de cadeias que devem ser testadas em um autmato com n estados e
cujo alfabeto de entrada possui m smbolos dada pela frmula:
2n1
X
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 2 (quatro cadeias): aa, ab, ba, bb

Comprimento 3 (oito cadeias): aaa, aab, aba, abb, baa, bab, bba, bbb
176 Linguagens Formais - Teoria, Modelagem e Implementao

Se alguma dessas 12 (= 4 + 8) cadeias for aceita por M , ento L infinita. Caso contrrio,
conclui-se que a linguagem finita. 2

Teorema 3.25 (A linguagem finita?) A linguagem L aceita por um autmato finito


com n estados finita se e somente se o autmato no aceita nenhuma sentena w tal
que n |w | < 2n.

Justificativa Decorre diretamente do teorema anterior. L infinita se e somente se o


autmato finito correspondente aceita pelo menos uma cadeia w , n |w | < 2n. Logo,
se no existir nenhuma cadeia que satisfaa a essa condio, a linguagem L ser finita.
Para determinar se, alm de finita, L no-vazia, basta verificar se o autmato finito
correspondente aceita pelo menos uma cadeia de comprimento menor do que n (Teorema
3.23). 
A Tabela 3.52 resume os resultados at aqui obtidos.

L: uma linguagem aceita por um autmato finito com n estados


w L, |w | < n? w L, n |w | < 2n? L ...
Sim Sim Infinita
Sim No Finita, no-vazia
No No Finita, vazia
No Sim N.A. (contradio)

Tabela 3.52: Cardinalidade de uma linguagem regular

Exemplo 3.64 Seja uma linguagem L1 sobre o alfabeto {a}, aceita por um autmato M1 com
trs estados. Para determinar se L1 vazia, basta verificar se alguma das cadeias pertencentes ao
seguinte conjunto aceita por M1 : X = {, a, aa}. Para determinar se L1 infinita, deve-se verificar
as cadeias do conjunto Y = {aaa, aaaa, aaaaa}.
Seja o autmato M1 , representado na Figura 3.64.

a a
q0 q1 q2

Figura 3.64: Autmato M1 que aceita L1 = {a, aa}, finita


e no-vazia

fcil perceber, neste caso, que L1 (M1 ) = {a, aa} finita e no-vazia. De fato, as cadeias
a, aa de X so aceitas por M1 . No entanto, nenhuma das cadeias aaa, aaaa, aaaaa de Y so
aceitas por M1 .
Suponha-se agora M2 , correspondente ao autmato da Figura 3.65:
3 Linguagens Regulares 177

a a
q0 q1 q2

Figura 3.65: Autmato M2 que aceita L2 = aa(aaa) ,


infinita

A linguagem L2 (M2 ) , neste caso, aa(aaa) , e portanto infinita. A infinitude de L2


comprovada pelo fato de M2 aceitar a cadeia aaaaa de Y . O fato de M2 aceitar aa de X indica
que L2 no-vazia.
Por ltimo, considere-se M3 como sendo o autmato da Figura 3.66:

a
q0 q1 q2

Figura 3.66: Autmato M3 que aceita L = , finita e vazia

Nenhuma das cadeias , a, aa de X aceita por M3 . Logo, como se pode comprovar


observando-se a Figura 3.66, L3 vazia (e portanto finita). 2

Teorema 3.26 (A cadeia pertence?) Seja L uma linguagem regular sobre , ,


e uma cadeia. Ento, a questo L decidvel.

Justificativa Seja M = (Q , , , q0 , F ) tal que L = L(M ). O Algoritmo 3.21 mostra


como decidir se a cadeia pertence ou no linguagem L.
Algoritmo 3.21 (A cadeia pertence?) Determina se uma cadeia sentena da lin-
guagem definida por um autmato finito.

Entrada: um autmato finito M = (Q , , , q0 , F ), , e uma cadeia ;

Sada: Se L(M ), SIM; caso contrrio, NO;

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 ine-
xistncia de ciclos formados exclusivamente por transies desse tipo, as quais poderiam,
eventualmente, provocar um processamento interminvel da cadeia de entrada.
178 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 3.65 Considere-se o autmato da Figura 3.67, que possui um ciclo formado por transies
em vazio.

q0 q1

b
q2 q3

Figura 3.67: Autmato com ciclo de transies em vazio

Os movimentos executados por esse autmato na anlise da cadeia ba no permitem que o


mesmo pare em qualquer configurao, final ou no-final, como mostra a seguinte seqncia:
(q0 , ba) (q1 , ba) (q0 , ba) (q1 , ba) (q0 , ba) (q1 , ba) ...
O autmato equivalente, da Figura 3.68, isento de transies em vazio, e, portanto, de ciclos
formados por transies em vazio.

q0

b
q2 q3

Figura 3.68: Autmato equivalente ao da Figura 3.67, po-


rm 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 regu-


lares 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 re-
gulares so idnticas.
3 Linguagens Regulares 179

Entrada: dois autmatos finitos M1 = (Q1 , 1 , 1 , q01 , F1 ) e M2 = (Q2 , 2 , 2 ,


q02 , F2 );

Sada: Se L1 (M1 ) = L2 (M2 ), SIM; caso contrrio, NO;

Mtodo:

1. Basta construir M3 tal que L3 (M3 ) = (L1 L2 ) (L1 L2 ). Se L3 = ,


ento SIM; caso contrrio, NO

A construo de M3 pode ser efetuada diretamente a partir dos algoritmos utilizados


na apresentao de resultados anteriores (fechamento dos conjuntos regulares em relao
s operaes de unio, complementao e interseco, respectivamente Teoremas 3.16,
3.17 e 3.18). Alm disso, a questo L3 (M3 ) = pode ser decidida em funo do Teorema
3.23. 

Teorema 3.28 (A linguagem ?) Seja M um autmato que aceita L sobre . En-


to, a questo L = decidvel.

Justificativa Esta questo pode ser decidida pelo Algoritmo 3.23.


Algoritmo 3.23 (A linguagem ?) Determina se a linguagem aceita por um aut-
mato finito .

Entrada: um autmato finito M = (Q , , , q0 , F );

Sada: Se L(M ) = , 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.

A validade deste algoritmo e, conseqentemente, a correo desta demonstrao


decorrem de resultados anteriormente demonstrados. 

Teorema 3.29 (A linguagem subconjunto?) Sejam L1 1 e L2 2 duas lin-


guagens regulares. Ento, a questo L1 L2 decidvel.

Justificativa A condio L1 L2 tambm pode ser formulada como:

( L2 ) L1 = L2 L1 =

onde a operao de complementao se refere a um alfabeto tal que 2 . Para


decidir se L1 L2 , basta executar o Algoritmo 3.24.
Algoritmo 3.24 (A linguagem subconjunto?) Determina se uma linguagem regu-
lar subconjunto de uma outra linguagem regular.
180 Linguagens Formais - Teoria, Modelagem e Implementao

Entrada: dois autmatos finitos M1 = (Q1 , 1 , 1 , q01 , F1 ) e M2 = (Q2 , 2 , 2 ,


q02 , F2 );

Sada: Se L1 (M1 ) L2 (M2 ), SIM; caso contrrio, NO;

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 resul-


tados anteriormente apresentados. 
4 Linguagens Livres de Contexto
As linguagens e as gramticas livres de contexto foram inicialmente concebidas com a
inteno de permitir a formalizao sinttica das linguagens naturais ([46], [53]). Logo
se percebeu, no entanto, que as linguagens naturais (ingls, portugus etc.) so signi-
ficativamente mais complexas do que a classe de linguagens representveis atravs das
gramticas livres de contexto, diminuindo em muito, em conseqncia, o interesse dos
estudiosos das linguagens naturais pelas gramticas desse tipo.
Por outro lado, as linguagens livres de contexto despertaram um interesse muito
grande na comunidade cientfica ligada rea de computao, que via grandes possibili-
dades de aplicao dessa classe de linguagens na anlise e na formalizao de linguagens
artificiais, em particular as linguagens de programao.
Vale lembrar que, poca em que isso aconteceu, em meados da dcada de 1950, a
linguagem FORTRAN j havia sido definida, e algumas implementaes experimentais
estavam sendo utilizadas no desenvolvimento de aplicaes. Como a teoria de linguagens
ainda principiava o seu desenvolvimento, no surpreende o fato de que a linguagem
FORTRAN tenha sido originalmente especificada e implementada de maneira quase
que totalmente emprica, sem que houvesse, como h hoje, um slido lastro terico e
conceitual para fundamentar seu projeto.
Por esse motivo, inmeras dificuldades foram enfrentadas no incio do projeto FOR-
TRAN, as quais tiveram como conseqncia os seguintes registros de poca:

1. Elevada complexidade aparente dos problemas de formalizao sinttica e de


construo dos aceitadores sintticos das linguagens de programao.

2. Arbitrariedade na imposio de restries nos projetos de linguagens de alto nvel,


tornando mais difcil sua utilizao por parte dos usurios.

Como conseqncia das limitaes tericas verificadas na poca, praticamente ine-


xistiam mtodos para a formalizao sinttica das linguagens de programao e para a
construo sistemtica de seus reconhecedores. O advento da teoria das linguagens e seu
posterior relacionamento com a teoria dos autmatos ocorreram justamente no momento
em que a necessidade de mtodos e tcnicas havia se tornado bastante clara, em funo
dessa primeira experincia, a fim de possibilitar a evoluo das novas reas de conhe-
cimento emergentes dentro da computao: a das linguagens de programao e a dos
compiladores.
Nesse sentido, o papel das gramticas livres de contexto foi extremamente impor-
tante, uma vez que, se de um lado permitiu o desenvolvimento de notaes bastante
adequadas para a formalizao da sintaxe das linguagens artificiais, por outro ensejou
o desenvolvimento de tcnicas muito eficientes de construo de reconhecedores sintti-
cos, algumas delas inclusive atravs de mapeamentos efetuados diretamente a partir das
gramticas das respectivas linguagens.
Assim, as gramticas livres de contexto contriburam significativamente para desmi-
tificar a complexidade dos ento novos problemas que se apresentavam, simplificando-os
consideravelmente. Um exemplo disso foi a definio da notao BNF ([31]), logo aps a
182 Linguagens Formais - Teoria, Modelagem e Implementao

definio das gramticas livres de contexto por Chomsky ([61]). A notao BNF (sigla
de Backus-Naur Form) era tambm destinada representao de gramticas livres de
contexto e foi concebida especificamente para uso em linguagens artificiais, em particular
em linguagens de programao. Ela foi utilizada pela primeira vez na especificao da
linguagem de programao Algol 60 ([32], [33]), tendo seu uso se difundido bastante at
os dias de hoje.
Atualmente, graas ao grande desenvolvimento terico verificado nas ltimas dca-
das, tais problemas, longe de terem se tornado triviais, tiveram bem determinados os
limites de sua complexidade, e, como conseqncia, a diversificao de mtodos e resul-
tados tericos conhecidos permite que os mesmos possam ser tratados de forma rotineira
e sistemtica no dia-a-dia do profissional de computao.
Neste captulo ser mostrada a importncia das gramticas livres de contexto na
formalizao das linguagens de programao de alto nvel e sero definidos os conceitos
de rvores de derivao e ambigidade, entre outros. A seguir, sero apresentados e
demonstrados alguns importantes resultados referentes simplificao das gramticas
livres de contexto e sua representao em formas normais.

4.1 Gramticas Livres de Contexto


As gramticas livres de contexto podem ser utilizadas, entre outras aplicaes, para re-
presentar subconjuntos (bastante limitados) de linguagens naturais. Considere o seguinte
exemplo:

<frase> <sujeito><verbo><complemento>
<sujeito> O homem
<sujeito> A mulher
<verbo> leu
<verbo> escreveu
<complemento> um <adjetivo> livro
<adjetivo> timo
<adjetivo> pssimo
<adjetivo>

Como se pode perceber, os smbolos no-terminais em gramticas livres de contexto


podem ser utilizados para representar classes sintticas bem definidas, permitindo um
elevado grau de intuio e de clareza na interpretao e na estruturao das sentenas
pertencentes linguagem.
Quando utilizadas para representar subconjuntos de linguagens naturais, ou mesmo
linguagens pseudonaturais, como, por exemplo, as linguagens empregadas em sistemas
de consulta a bancos de dados e em diversos outros tipos de interfaces homem-mquina,
especialmente nos aplicativos voltados para usurios leigos em computao, as gram-
ticas livres de contexto desempenham um papel muito importante para os projetistas
de tais sistemas, pois permitem a formalizao da linguagem de interface, facilitando a
construo de seu respectivo reconhecedor.
No entanto, a maior aplicao das gramticas livres de contexto ocorre na forma-
lizao sinttica das linguagens de programao de alto nvel. Rigorosamente, no se
4 Linguagens Livres de Contexto 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 represen-
tao de construes aninhadas, que so freqentemente encontradas em linguagens
dessa categoria. Construes aninhadas costumam ocorrer em linguagens de programa-
o, por exemplo, na construo de expresses aritmticas, em que subexpresses so
delimitadas, atravs do uso de parnteses; na estruturao do fluxo de controle, em que
comandos internos so inseridos como parte integrante de outros externos; na estrutu-
rao do programa, em que blocos, mdulos, procedimentos e funes so empregados
para criar diferentes escopos, etc.
Conforme definido no Captulo 2, uma gramtica livre de contexto uma qudrupla
(V , , P , S ) com os seguintes componentes:

V : conjunto (finito e no-vazio) dos smbolos terminais e no-terminais;

: conjunto (finito e no-vazio) dos smbolos terminais; corresponde ao alfabeto


da linguagem definida pela gramtica;

P : conjunto (finito e no-vazio) das regras de produo, todas no formato ,


com (V ) e V ;

S : raiz da gramtica, S (V ).

Exemplo 4.1 Seja P o conjunto de regras abaixo e considerem-se , V e S subentendidos.

{E T + E, (4.1)
E T, (4.2)
T F T, (4.3)
T F, (4.4)
F (E ), (4.5)
F a} (4.6)

Considere-se a sentena a (a + a). Ela pode ser obtida atravs da seguinte seqncia de
derivaes:
184 Linguagens Formais - Teoria, Modelagem e Implementao

E T F T a T a F a (E ) a (T + E ) a (F + E ) a (a + E )
a (a + T ) a (a + F ) a (a + a)
correspondente aplicao das produes 4.2, 4.3, 4.6, 4.4, 4.5, 4.1, 4.4, 4.6, 4.2, 4.4, 4.6, nesta or-
dem.
Observe-se que a linguagem gerada pela gramtica deste exemplo compreende as sentenas
que representam expresses aritmticas corretamente formadas sobre o operando a com os opera-
dores e +. Subexpresses delimitadas atravs de parnteses tambm so admitidas, e podem
ser compostas com base nas mesmas regras utilizadas para construir a expresso inicial. No fazem
parte da linguagem definida por esta gramtica, por exemplo, cadeias em que no haja plena cor-
respondncia do smbolo ( com seu par ). Em outras palavras, trata-se de uma linguagem que
admite o aninhamento de expresses atravs do uso de parnteses como delimitadores. 2

O aninhamento de construes a caracterstica que distingue as linguagens estri-


tamente 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 gram-
ticas 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 proprie-
dade 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 pos-


svel 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 auto-


recursivo central, diz-se que G auto-embutida (do ingls self-embedded).
Um smbolo no-terminal essencial aquele que no pode ser removido da gra-
mtica (ou substitudo) sob pena de provocar modificaes na linguagem sendo definida.
Uma linguagem L dita estritamente livre de contexto, ou livre de contexto no-
regular, 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-
4 Linguagens Livres de Contexto 185

cas com no-terminais auto-recursivos centrais que, nesses casos, no so essenciais. O


Exemplo 4.2 ilustra essa situao.
Exemplo 4.2 A gramtica cujas regras constituem o conjunto abaixo do tipo 2 e possui um no-
terminal auto-recursivo central (S , em decorrncia da produo S aSa), podendo portanto ser
caracterizada como uma gramtica auto-embutida:

{S aS ,
S bS ,
S a,
S b,
S aSa}

No entanto, a linguagem gerada por essa gramtica {a, b} , ou seja, a linguagem regular.
Na verdade, fcil observar que essa linguagem tambm pode ser gerada por um conjunto de regras
equivalente, em que a ltima produo da gramtica acima removida:

{S aS ,
S bS ,
S a,
S b}
Tal fato ocorre, neste caso particular, porque a produo S aSa no-essencial gramtica,
ou seja, a sua incluso no conjunto P de produes em nada contribui para modificar a linguagem
definida pelas demais produes. 2

Quando todas as alternativas de substituio para um smbolo no-terminal so no-


essenciais, 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. Observe-
se que E T F (E ), ou seja, E (E ).
Logo, E um no-terminal auto-recursivo central, e a gramtica a que ele pertence auto-
embutida. possvel demonstrar que todas as gramticas que geram essa linguagem so auto-
embutidas, 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 con-


texto, 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 Linguagens Formais - Teoria, Modelagem e Implementao

conhecimento de sentenas, o que se busca, na verdade, localizar uma seqncia de


produes que, quando aplicada raiz da gramtica, fornea como resultado, atravs
da srie correspondente de derivaes, a sentena fornecida para anlise. Sendo possvel
completar a derivao, diz-se que a sentena pertence linguagem; caso contrrio, que
ela no pertence linguagem.
No entanto, para cada sentena pertencente linguagem definida atravs de uma
gramtica livre de contexto, geralmente possvel identificar uma grande quantidade de
seqncias distintas de derivao, resultado de escolhas arbitrrias do particular smbolo
no-terminal a ser substitudo em cada passo da derivao, todas elas resultando na
mesma sentena analisada. Na prtica, no entanto, costuma-se fixar alguns critrios
de derivao de sentenas, para permitir a construo e a operao sistemticas dos
reconhecedores sintticos.
Assim, diz-se que a derivao de uma forma sentencial em uma gramtica livre
de contexto uma derivao mais esquerda, quando a substituio de um no-
terminal pelo lado direito de uma produo que o define feita substituindo-se sempre o
no-terminal que ocorre mais esquerda na cadeia que representa a forma sentencial em
questo. De maneira anloga, uma derivao mais direita aquela em que sempre
o no-terminal mais direita, na forma sentencial, que substitudo pela sua definio.
Exemplo 4.4 Considere-se a gramtica do Exemplo 4.3. A seguir so apresentadas duas seqncias
de derivao para a sentena a + a. Na primeira, todas as derivaes so mais esquerda, e na
segunda, mais direita. Note-se que as seqncias de produes utilizadas em cada caso so distintas,
e tambm que diversas outras seqncias poderiam ser obtidas combinando-se arbitrariamente os
no-terminais a serem substitudos em cada forma sentencial:

1. Derivaes com substituies mais esquerda apenas:


E T +E F +E a +E a +T a +F a +a
Produes aplicadas: 4.1, 4.4, 4.6, 4.2, 4.4, 4.6

2. Derivaes com substituies mais direita apenas:


E T +E T +T T +F T +a F +a a +a
Produes aplicadas: 4.1, 4.2, 4.4, 4.6, 4.4, 4.6

3. Derivaes com substituies de diversos tipos:


E T +E F +E F +T a +T a +F a +a
Produes aplicadas: 4.1, 4.4, 4.2, 4.6, 4.4, 4.6
2

Como conseqncia do elevado interesse prtico despertado pelas gramticas livres


de contexto, inmeras notaes foram desenvolvidas para facilitar a formalizao sinttica
das linguagens artificiais, permitindo criar definies formais mais legveis e concisas do
que as obtidas usualmente com a notao algbrica.
Tais notaes, denominadas metalinguagens, permitem a representao de lingua-
gens livres de contexto, sendo equipotentes, portanto, notao algbrica introduzida na
Seo 2.3. A primeira e talvez mais importante delas a BNF, abreviatura de Backus-
Naur Form.
Na notao BNF, os no-terminais so representados por textos delimitados pelos
metasmbolos < e >; para distingui-los dos smbolos terminais, o metasmbolo
substitudo por ::= e, finalmente, todas as alternativas de substituio para um mesmo
no-terminal so agrupadas, separando-se umas das outras com o metasmbolo |. Os
terminais so denotados sem delimitadores.
4 Linguagens Livres de Contexto 187

Exemplo 4.5 Em BNF, a gramtica que representa expresses aritmticas aninhveis, sobre ope-
randos a, com os operadores adio e multiplicao, anteriormente apresentada no Exemplo 4.1,
torna-se:

<E> ::= <T> + <E> | <T>


<T> ::= <F> <T> | <F>
<F> ::= a | (<E>)
2

Empregada pela primeira vez no incio da dcada de 1960, na publicao que definiu
formalmente a linguagem de programao Algol 60 ([32], [33]), a notao BNF se tornou
extremamente popular justamente por ter demonstrado na prtica, pela primeira vez,
a viabilidade de uso de uma notao formal para a representao da sintaxe de uma
linguagem de programao, representando um dos primeiros resultados prticos advindos
do interesse dos profissionais de computao pelas ento recm descobertas gramticas
livres de contexto.
Embora largamente utilizada ainda hoje, a notao BNF enfrenta atualmente a
concorrncia de outras metalinguagens igualmente importantes, como o caso de v-
rios de seus dialetos, da Notao de Wirth, dos Diagramas de Sintaxe, das Expresses
Regulares Estendidas e de inmeras outras ([24]). Apesar disso, a notao algbrica
continuar sendo empregada preferencialmente neste texto por ser a mais adequada ao
estudo terico e conceitual das linguagens formais. Eventualmente, poder ser empregada
a BNF, em exemplos de linguagens de programao.

4.2 BNF Estendida


Expresses regulares foram definidas como uma notao bastanta concisa e adequada
para a representao de linguagens regulares. Uma importante extenso das expresses
regulares so as expresses regulares estendidas, que, em combinao com a BNF, dispo-
nibilizam as vantagens do uso de expresses regulares para a classe das linguagens livres
de contexto, constituindo assim uma metalinguagem alternativa para a representao das
mesmas.
Essa metalinguagem, denominada BNF estendida (ou EBNF), resulta da fuso
das definies da BNF (conforme a Seo 4.1) e da expresso regular (conforme a Seo
3.2).
Uma expresso regular estendida , por definio, uma expresso regular que
admite como operandos os smbolos no-terminais da gramtica, em adio aos terminais.
Um conjunto de regras gramaticais representado atravs da notao BNF esten-
dida um conjunto de expresses regulares estendidas, cada uma delas associada a um
smbolo no-terminal distinto.
Exemplo 4.6 Considere-se a gramtica livre de contexto:
G = ({S , X , Y , Z , a, b, c, d , e, f , g}, {a, b, c, d , e, f , g}, P , S )
com P apresentado a seguir, que gera uma linguagem L estritamente livre de contexto.

P = {S XYZ | g
X aX | a
Y Sb
Z cdZ | eZ | f }
188 Linguagens Formais - Teoria, Modelagem e Implementao

Transcrito para a BNF, este conjunto de produes resulta:

<S> ::= <X><Y><Z> | g


<X> ::= a<X> | a
<Y> ::= <S>b
<Z> ::= 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:

<S> ::= <X><Y><Z> | g


<X> ::= aa
<Y> ::= <S>b
<Z> ::= (cd | e) f

A substituio das definies dos smbolos <X>, <Y> e <Z> na regra do smbolo <S> resulta
em:

<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 no-


tao 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 propor-
ciona 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 defini-
o 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 caracters-
tica 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
4 Linguagens Livres de Contexto 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> ::= a<S> | b<X>


<X> ::= <X>b | c<S> | <Y>bc
<Y> ::= <X>d | <Z> | e
<Z> ::= <X>f | <W>
<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

O lado direito de uma regra A , V , em uma gramtica livre de contexto,


dito termo independente de A, se A no for uma subcadeia de .
Seja G uma gramtica livre de contexto, e A N um smbolo no-terminal de G.
Ento, as regras de A podem exibir um ou mais dos seguintes formatos gerais (considera-
se , , , , e V , e (V {A}) ):

recurso direita: A A;

recurso esquerda: A A;

recurso esquerda e direita: A AA;

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 Linguagens Formais - Teoria, Modelagem e Implementao

A1 A | A2 A | ... | Ak A |
1 A1 | 2 A2 | ... | m Am |
1 | 2 | ... | p

possvel demonstrar, conforme discusso a seguir, que a frmula geral que permite
representar a linguagem gerada por A, sem no entanto fazer uso de recurses esquerda
e/ou direita, :

A =
(1 | ... | i ) (1 | ... | p | 1 A1 | ... | m Am )(1 | ... | j )
(
(1 | ... | k )
(1 | ... | i ) (1 | ... | p | 1 A1 | ... | m Am )(1 | ... | j )
)

As recurses centrais no podem, naturalmente, ser eliminadas na expresso re-


sultante, 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) )

Nesta frmula, constatam-se as seguintes relaes de causa e efeito (ver Exerccio


?? da Seo ??):

As cadeias geradas por A so iniciadas com uma repetio arbitrria do termo ,


decorrente das recurses direita existentes na gramtica;

As cadeias geradas por A so terminadas com uma repetio arbitrria do termo


, decorrente das recurses esquerda existentes na gramtica;

Os termos independentes () e as recurses centrais ( A) so preservados no


centro das cadeias geradas por A, isto , direita dos termos e esquerda dos
termos ;

As regras que so simultaneamente recursivas esquerda e direita permitem a


concatenao de mltiplas cadeias geradas por A, tendo o termo como separador
entre elas.

Exemplo 4.8 Alguns casos simples, envolvendo apenas recurses esquerda, direita, e termos
independentes, so apresentados a seguir.
Se X aX | , ento X = a ;
4 Linguagens Livres de Contexto 191

Se X aX | b, ento X = a b;

Se X Xb | a, ento X = ab ;

Se X Xb | , ento X = b ;

Se X aX | bX | c, ento X = (a | b) c;

Se X Xa | Xb | c, ento X = c(a | b) ;

Se X aX | b | c, ento X = a (b | c);

Se X aX | Xb | , ento X = a b ;

Se X aX | Xc | b, ento X = a bc ;

Se X aX | Xd | b | c, ento X = a (b | c)d ;

Se X aX | bX | Xe | c | d , ento X = (a | b) (c | d )e ;

Se X aX | bX | Xe | Xf | c | d , ento X = (a | b) (c | d )(e | f ) .
2

Exemplo 4.9 Os casos abaixo contm, alm de recurses esquerda, direita e termos indepen-
dentes, recurses centrais, regras recursivas simultaneamente esquerda e direita, e regras com
mltiplas recurses em outros formatos. Note-se que, nos casos em que o valor de X pode ser
representado na forma de um termo independente, utilizada a notao X=... para indicar a
associao de valor ao smbolo. Nos casos em que isso no possvel, utiliza-se a notao EBNF
<X>::=....
Se X XcX | e, ento X = e(ce) ;

Se X aX | XcX | e, ento X = a e(ca e) ;

Se X aX | Xb | XcX | e, ento X = a eb (ca eb ) ;

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) ;

Se X aX | Xd | bXc | XeX | XXX | f ,


ento <X> ::= a (f | b<X>c)d ((e | <X>)(a (f | b<X>c)d )) .
2

A notao EBNF teve origem em um artigo publicado em 1977 ([35]). Nessa pu-
blicao, Wirth questionava a grande diversidade de notaes para a representao de
sintaxe existente naquela poca, e propunha uma nova variante da BNF como alternativa
a todas elas. Tal notao viria a ser denominada, posteriormente, Notao de Wirth.
Outras extenses foram sendo propostas e incorporadas ao longo do tempo, de tal
modo que atualmente existem inmeros dialetos daquilo que conhecemos como BNF
estendida. Uma tentativa de padronizao surgiu com a publicao de um padro inter-
nacional ISO em 1996 ([36]).
192 Linguagens Formais - Teoria, Modelagem e Implementao

Entre as principais extenses que foram sendo desenvolvidas e eventualmente incor-


poradas a algum dialeto da BNF estendida, podem-se destacar:

O uso dos metasmbolos [ e ] para agrupar termos opcionais, dispensando assim


o uso do smbolo para representar a cadeia vazia (por exemplo, S aS | pode
ser reescrito como <S> ::= [a<S>]);

O uso dos metasmbolos { e } para agrupar termos que se repetem zero ou


mais vezes, dispensando assim o uso de recurses explcitas e tambm o uso de
parnteses no agrupamento do termo que se repete (por exemplo, S aS | b, cuja
soluo S = {a}b);

O uso do metasmbolo + para representar a repetio de um termo uma ou mais


vezes (por exemplo, S aS | a, cuja soluo S = a + );

O emprego de aspas duplas para delimitar os smbolos terminais da gramtica (s


vezes tambm o negrito ou o sublinhado), mantendo-se os smbolos no-terminais
sem qualquer tipo de destaque nas regras gramaticais (por exemplo, S ::= aS ,
S ::= aS, ou ainda S ::= aS para denotar S aS ),

O emprego do smbolo =, como alternativa ao de ::=, na separao das partes


esquerda () e direita () das regras de produo gramaticais ( );1

O uso do metasmbolo . para indicar o trmino de uma regra (S aX | bY


torna-se <S> ::= a<X> | b<Y >.).

Considerada hoje um dialeto da EBNF, a Notao de Wirth ser apresentada no


Exerccio ?? da Seo ??.

4.3 rvores de Derivao


A representao da estrutura de sentenas ou formas sentenciais de linguagens livres de
contexto, na forma de rvores bidimensionais, um recurso muito utilizado, tanto na
teoria quanto na prtica da implementao de linguagens, uma vez que:

1. Proporciona meios para uma melhor visualizao da estrutura das sentenas da


linguagem, facilitando a anlise das mesmas.

2. Auxilia na demonstrao formal de teoremas, na interpretao de certos resultados


tericos e na assimilao de vrios conceitos.

3. Facilita a representao interna, nos compiladores e interpretadores, da estrutura


das sentenas analisadas, registrando importantes informaes estruturais sobre
as mesmas, a serem utilizadas em outros estgios do processamento da linguagem.

1 Nestetexto, o smbolo = usado para indicar que um smbolo est ligado a um determinado valor. O seu
uso no lugar do smbolo ::=, ou mesmo do smbolo , desencorajado, uma vez que estes se empregam
na representao de regras gramaticais.
4 Linguagens Livres de Contexto 193

Formalmente, uma rvore de derivao um sistema de representao de seqn-


cias 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 repre-
sentada pela rvore de derivao:
E

F * T

( E )

T + E

F T

a F

Figura 4.1: rvore de derivao para E a (a + a)


194 Linguagens Formais - Teoria, Modelagem e Implementao

Observe-se, nesta rvore, que a sentena a (a + a) pode ser obtida pela concatenao dos
rtulos dos vrtices que so folhas, e corresponde sentena cuja estrutura est sendo representada
pela prpria rvore. 2

Naturalmente, nem toda rvore necessita ter como raiz S , nem tampouco possuir
como fronteira , S . comum que se considerem subrvores cuja raiz seja
um elemento X qualquer, X N , e a fronteira, uma cadeia V , tal que X .
Exemplo 4.11 A derivao no-trivial T a (E ), segundo a gramtica do Exemplo 4.1, pode ser
representada atravs da subrvore:
T

F * T

( E )

Figura 4.2: rvore de derivao para T a (a + a)


2

A seguir, ser apresentado o teorema fundamental das rvores de derivao. Ele


estabelece a existncia de pelo menos uma rvore de derivao para toda e qualquer cadeia
derivvel a partir da raiz da gramtica, e tambm que toda e qualquer fronteira de uma
rvore corretamente construda sobre uma gramtica livre de contexto G corresponde a
uma cadeia derivvel a partir da raiz de G.
Teorema 4.1 (rvores derivaes) Seja G = (V , , P , S ) uma gramtica livre de
contexto. Ento S se e apenas se existir uma rvore de derivao sobre G com
fronteira .

Justificativa Por se tratar de um teorema bastante intuitivo, no ser apresentada a sua


prova formal, que no entanto pode ser encontrada em [46]. A importncia deste teorema
se deve ao fato de que ele credencia as rvores de derivao como uma representao
vlida da estrutura das formas sentenciais geradas por uma gramtica. 
rvores de derivao no contm informao sobre a particular seqncia em que
foram aplicadas as produes para a obteno de uma dada forma sentencial: elas infor-
mam apenas quais foram as produes aplicadas, mas no em que ordem. Assim, para
cada rvore de derivao, possvel identificar diversas seqncias distintas de derivao
que resultem na mesma forma sentencial: basta alterar a ordem em que os no-terminais
so substitudos em cada passo da derivao.

4.4 Ambigidade
Diz-se que uma gramtica livre de contexto no-ambgua se, para toda e qualquer
cadeia pertencente linguagem por ela gerada, existir uma nica seqncia de derivaes
mais esquerda e uma nica seqncia de derivaes mais direita que a geram.
4 Linguagens Livres de Contexto 195

Diz-se que uma gramtica livre de contexto ambgua quando existir pelo menos
uma cadeia, pertencente linguagem por ela gerada, que possua mais de uma seqncia
distinta de derivaes, feitas exclusivamente atravs de substituies de no-terminais
mais esquerda ou mais direita. Na verdade, a primeira condio implica a segunda
e vice-versa, ou seja, se houver mais de uma seqncia com substituies mais es-
querda, ento haver tambm mais de uma com substituies mais direita, conforme
demonstrado no Teorema 4.2.
Teorema 4.2 (Derivaes esquerda derivaes direita) Se w L(G), com
G sendo uma gramtica livre de contexto, e existindo duas (ou mais) derivaes mais
esquerda para w em G, ento existem tambm, correspondentemente, duas (ou mais)
derivaes mais direita para w em G.

Justificativa As gramticas livres de contexto possuem a propriedade de que as deriva-


es 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

Se 1 2 3 L(G) e X 2 , ento existe uma seqncia de derivaes mais


direita S X 3 , com V e, alm disso, 1 . Portanto, S X 3
2 3 1 2 3 .
Como, por hiptese, X 1 2 e X 2 2 , ento existem duas seqn-
cias de derivaes mais direita para a cadeia 1 2 3 :

S X 3 1 3 2 3 1 2 3

S X 3 2 3 2 3 1 2 3

De maneira anloga, possvel demonstrar que, para cada seqncia distinta de


derivaes mais esquerda que geram uma mesma cadeia da linguagem, existe uma
seqncia distinta de derivaes mais direita correspondente, que gera a mesma cadeia.

Exemplo 4.12 A gramtica cujo conjunto de regras est abaixo apresentado equivalente gramtica
anteriormente utilizada na definio da linguagem das expresses aritmticas sobre {a, +, , (, )} do
Exemplo 4.1. Diferentemente daquela, no entanto, apenas um smbolo no-terminal (E ) utilizado:

{E E + E,
E E E,
E a,
E (E )}
Adotando-se o critrio das derivaes mais esquerda, pode-se perceber que a sentena a +a a
pode ser derivada ao menos de duas formas distintas:
196 Linguagens Formais - Teoria, Modelagem e Implementao

1. Aplicando-se inicialmente a produo E E + E :


E E +E a +E a +E E a +a E a +a a

2. Aplicando-se inicialmente a produo E E E :


E E E E +E E a +E E a +a E a +a a

Como conseqncia, a gramtica acima ambgua. possvel provar, no entanto, que a


gramtica do Exemplo 4.1 (com os no-terminais E , T e F ) admite uma nica seqncia de derivao
para cada sentena pertencente linguagem. Note-se, em particular, que isso ocorre com a sentena
acima considerada. Como concluso, esta linguagem pode ser indistintamente definida atravs de
uma gramtica ambgua ou de uma gramtica no-ambgua. 2

Exemplo 4.13
Considere-se o fragmento de gramtica abaixo apresentado, que ilustra um problema tpico de
determinadas linguagens de programao de alto nvel a ambigidade na construo de comandos
condicionais aninhados.

<programa> . . . <comando> . . .
<comando> <condicional>
<condicional> if <condio> then <comando>
<condicional> if <condio> else <comando> else <comando>
<condio> ...
Passa-se a analisar a estrutura da seguinte forma sentencial:
if <condio> then if <condio> then <comando> else <comando>
Para se determinar uma eventual ambigidade nessa forma sentencial, escolhe-se inicialmente
e fixa-se um critrio de substituio de no-terminais por exemplo, as substituies dos no-
terminais mais esquerda. Neste caso, fcil verificar que a forma sentencial acima admite duas
seqncias distintas de derivao:

1. Primeira alternativa:

<programa> . . . <comando> . . .
. . . <condicional> . . .
. . . if <condio> then <comando> else <comando> . . .
. . . if <condio> then <condicional> else <comando> . . .
. . . if <condio> then if <condio> then <comando>
else <comando> . . .

2. Segunda alternativa:

<programa> . . . <comando> . . .
. . . <condicional> . . .
. . . if <condio> then <comando> . . .
. . . if <condio> then <condicional> . . .
. . . if <condio> then if <condio> then <comando>
else <comando> . . .

No primeiro caso, o ramo do else considerado como parte integrante do comando condicio-
nal mais externo e, no segundo, este mesmo ramo considerado como parte do comando condicional
mais interno:
if <condio> then if <condio> then <comando> else <comando>
| {z }
| {z }
4 Linguagens Livres de Contexto 197

if <condio> then if <condio> then <comando> else <comando>


| {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, assun-
tos que no esto sendo considerados no momento. Mas, como se sabe, o significado
de uma sentena costuma estar muito associado sua estrutura, e por esse motivo a
existncia de duas ou mais seqncias distintas de derivaes para uma mesma sentena
sugere a eventual existncia de uma ambigidade semntica a partir de uma ambigidade
sinttica (ou estrutural) concreta constatada.
Ambigidades sintticas (simplesmente ambigidades, neste texto) constituem ge-
ralmente uma caracterstica indesejvel das gramticas de linguagens de programao e
das demais linguagens artificiais em geral, uma vez que comum, em casos como este,
que a construo ambgua seja implementada (isto , seja associada a interpretaes
semnticas) de formas diversas, dependendo da opo efetuada pelo projetista de cada
compilador e/ou interpretador, prejudicando, assim, a portabilidade dos programas de
aplicao entre uma implementao e outra.
Normalmente, ambigidades costumam ser eliminadas atravs da utilizao de cons-
trues gramaticais que impeam a existncia de mais de uma seqncia de derivaes
mais esquerda (e, portant,o tambm mais direita) para cada sentena pertencente
linguagem, desde que fixado e observado a priori, naturalmente, um critrio nico
para a substituio dos no-terminais nas formas sentenciais. Eventualmente, como no
Exemplo 4.14 apresentado a seguir, modificaes mnimas podem vir a ser introduzidas
na linguagem em conseqncia de tais alteraes.
Assim, por exemplo, comum, em linguagens de programao modernas, a definio
de comandos condicionais de maneira semelhante ao abaixo apresentado.
Exemplo 4.14
Seja a seguinte gramtica, inspirada na do Exemplo 4.13:
<comando> . . . <comando> . . .
<comando> <condicional>
<condicional> if <condio> then <comando> fi
<condicional> if <condio> then <comando> else <comando> fi
<condio> ...
A associao do else ao comando condicional mais externo ou mais interno feita, de
acordo com esta nova gramtica, respectivamente:
if <condio> then if <condio> then <comando> fi else <comando> fi
| {z }
| {z }
ou
if <condio> then if <condio> then <comando> else <comando> fi fi
| {z }
| {z }
2
198 Linguagens Formais - Teoria, Modelagem e Implementao

Note-se que, neste caso, sentenas equivalentes anteriormente apresentada pos-


suem apenas uma seqncia de derivaes mais esquerda ou direita, sendo a gram-
tica, portanto, isenta de ambigidade.
Normalmente, o termo ambigidade costuma ser relacionado apenas a sentenas
e gramticas da forma como foi mencionado anteriormente. Diz-se que uma linguagem
livre de contexto ambgua se ela puder ser gerada por uma gramtica livre de contexto
ambgua, e no-ambgua se ela puder ser gerada por uma gramtica livre de contexto
no-ambgua. No entanto, raramente se costuma dizer que uma linguagem ambgua,
uma vez que uma mesma linguagem pode ser gerada por inmeras gramticas distintas
(ambguas e no-ambguas).
H, no entanto, casos em que se pode provar, apesar de isso ser, em geral, uma
tarefa consideravelmente complexa, que determinadas linguagens so inerentemente
ambguas, indicando com isso que toda e qualquer gramtica que gera a linguagem em
questo deve ser necessariamente ambgua. Em casos como esse, o conceito de ambigi-
dade pode ser estendido tambm para caracterizar mais um atributo da linguagem.
Exemplo 4.15
A linguagem {a n b n c m d m | n 1, m 1} {a n b m c m d n | n 1, m 1} inerentemente
ambgua. A demonstrao pode ser encontrada em [46]. 2

Exemplo 4.16
A linguagem {a i b j c k | i = j ou j = k } inerentemente ambgua. A demonstrao pode ser
encontrada em [49]. 2

Quando se consideram gramticas livres de contexto, natural que se questione a


relao que existe entre o nmero de derivaes cannicas que podem ser efetuadas para
uma certa cadeia de uma linguagem e o nmero de rvores de derivao distintas que
podem ser construdas para representar essa mesma cadeia. Este assunto ser tratado
no Teorema 4.3.
Teorema 4.3 (Mltiplas derivaes mltiplas rvores) Seja G uma gramtica
livre de contexto. Para toda cadeia w L(G), o nmero de seqncias distintas de
derivaes mais esquerda (e portanto mais direita) igual ao nmero de rvores de
derivao distintas que representam w .

Justificativa Pode ser encontrada em [46]. No difcil, no entanto, intuir que, para
cada forma sentencial obtida atravs de derivaes mais esquerda, a substituio do
no-terminal mais esquerda por produes distintas, sejam elas quantas forem, d ori-
gem a uma quantidade idntica de rvores distintas, as quais so diferenciadas pelos ns
que representam os filhos do n que representa esse no-terminal. De forma anloga, o
raciocnio inverso tambm se aplica. 
Por outro lado, quando se consideram gramticas livres de contexto no-ambguas,
a ordem em que so feitas as substituies dos smbolos no-terminais nas formas sen-
tenciais irrelevante do ponto de vista das cadeias que podem ser geradas e das respec-
tivas rvores de derivao. Como mostra o Teorema 4.4, qualquer que seja a ordem de
substituio dos no-terminais escolhida na gerao de uma mesma cadeia, a rvore de
derivao ser sempre a mesma.
Teorema 4.4 (Mltiplas derivaes nica rvore) Seja G uma gramtica livre
de contexto no-ambgua. Para toda cadeia w L(G), toda e qualquer seqncia de
derivaes que produz w representada atravs da mesma e nica rvore de derivao.
4 Linguagens Livres de Contexto 199

Justificativa Se G uma gramtica livre de contexto no-ambgua, ento, conforme


a definio, toda e qualquer cadeia w L(G) possui uma nica seqncia de derivaes
mais esquerda ou mais direita, mesmo que existam outras seqncias no-cannicas
de derivao para essa mesma cadeia. Conforme o Teorema 4.3, existe uma nica rvore
de derivao para w . Logo, todas as derivaes de w em G so representadas por uma
mesma rvore de derivao. 
Conforme a definio, uma gramtica livre de contexto no-ambgua aquela para
a qual cada cadeia pertencente linguagem gerada por tal gramtica gerada por uma
nica seqncia de derivaes mais esquerda e por uma nica seqncia de derivaes
mais direita. O Teorema 4.4 estende esse resultado, e estabelece que tais seqncias de
derivaes correspondem a uma mesma rvore de derivao.
Em resumo: cada uma das cadeias pertencentes a uma linguagem gerada por uma
gramtica livre de contexto no-ambgua possui uma nica seqncia de derivaes mais
esquerda, uma nica seqncia de derivaes mais direita e uma nica rvore de
derivao.
Esta importante propriedade das linguagens livres de contexto (e portanto tambm
das linguagens regulares) permite que se adote uma ordem arbitrria para a aplicao
das regras gramaticais na derivao de uma sentena. Tecnologicamente, isso pode ser
aproveitado escolhendo-se uma ordem que seja econmica do ponto de vista algortmico.
A existncia de uma nica seqncia cannica de derivaes (uma mais esquerda
e outra mais direita) para cada sentena de uma linguagem gerada por uma gram-
tica no-ambgua explorada nos algoritmos de construo de reconhecedores sintticos
determinsticos para linguagens livres de contexto, cuja operao consiste exatamente
na busca sistemtica de tal seqncia (e, conseqentemente, da correspondente rvore
de derivao), se essa seqncia existir, para cada cadeia de entrada que lhe seja sub-
metida. Do ponto de vista tecnolgico, esse resultado permite a busca da soluo de
implementao mais barata, conforme a linguagem considerada.
Por outro lado, o Teorema 4.3 permite estender o conceito de gramtica livre de
contexto ambgua, que passa a ser caracterizado de trs formas distintas, porm equi-
valentes entre si. Diz-se que uma gramtica livre de contexto ambgua se for possvel
identificar, na linguagem por ela gerada, pelo menos uma cadeia que:

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

possa ser representada por duas ou mais rvores de derivao distintas.

Exemplo 4.17 Considere-se o fragmento de gramtica utilizado para ilustrar o problema da ambigi-
dade em comandos condicionais (Exemplo 4.13). De acordo com essa gramtica, a forma sentencial:
if <condio> then if <condio> then <comando> else <comando>
pode ser derivada segundo duas seqncias distintas de derivaes mais esquerda. Como con-
seqncia, existem tambm duas rvores de derivao distintas que possuem como fronteira essa
mesma forma sentencial:
200 Linguagens Formais - Teoria, Modelagem e Implementao

<condicional>

if <condio> then <comando> else <comando>

<condicional>

if <condio> then <comando>

Figura 4.3: Ambigidade no comando IF: associao interna

<condicional>

if <condio> then <comando>

<condicional>

if <condio> then <comando> else <comando>

Figura 4.4: Ambigidade no comando IF: associao ex-


terna
2

4.5 Simplificao de Gramticas Livres de Contexto


Por uma questo de convenincia no estudo das gramticas livres de contexto, muitas
vezes necessrio submet-las a simplificaes que visam torn-las mais apropriadas para
a demonstrao de teoremas, para a verificao de propriedades, ou simplesmente para
facilitar a sua anlise.
Tais simplificaes consistem em manipulaes gramaticais que no afetam a lingua-
gem definida pela gramtica original, e so de trs tipos (os novos termos sero definidos
mais adiante):

1. Eliminao de smbolos inacessveis e inteis;

2. Eliminao de produes em vazio;

3. Eliminao de produes unitrias.


4 Linguagens Livres de Contexto 201

Para cada tipo de transformao ser apresentado um algoritmo que mapeia a gra-
mtica original em uma outra gramtica que exiba uma das propriedades acima enumera-
das. Em todos os casos possvel demonstrar formalmente (ver [46]) que a transformao
produz o efeito proposto sem alterar a linguagem definida pela gramtica original.
Considere-se inicialmente a definio e eliminao de smbolos inacessveis e inteis.
Dada uma gramtica livre de contexto G = (V , , P , S ), ento:

Diz-se que um smbolo Y V terminal ou no-terminal inacessvel,


se no for possvel derivar qualquer forma sentencial em que se registre alguma
ocorrncia de Y . Caso contrrio, o smbolo dito acessvel. Formalmente,
smbolos acessveis Y so aqueles para os quais existem derivaes da forma
S Y , com , V . Smbolos inacessveis, portanto, so aqueles para
os quais inexistem derivaes com tais caractersticas.

Diz-se que um smbolo Y no-terminal intil, se no for possvel derivar


pelo menos uma cadeia formada exclusivamente por terminais (ou a cadeia vazia)
a partir de Y . Caso contrrio, o smbolo dito til. Formalmente, smbolos teis
Y so aqueles para os quais existem derivaes da forma Y , com .
Smbolos inteis, portanto, so aqueles para os quais inexistem derivaes com tais
caractersticas. Cumpre notar que smbolos terminais so, por definio, sempre
teis.

Um smbolo Y que seja simultaneamente acessvel e til , portanto, aquele que


satisfaz condio:

S Y , com , V ,

Em outras palavras, um smbolo Y acessvel e til se e somente se:

1. Y est presente em pelo menos uma forma sentencial derivada a partir da raiz da
gramtica, e

2. Y deriva pelo menos uma cadeia pertencente ao conjunto (condio verificada


trivialmente pelos smbolos terminais).

A acessibilidade de um smbolo Y garante a existncia de pelo menos uma forma


sentencial derivvel a partir da raiz da gramtica em que Y tome parte. A utilidade ga-
rante que o smbolo Y gera pelo menos uma cadeia formada exclusivamente por smbolos
terminais (ou a cadeia vazia).
Smbolos inacessveis e inteis em nada contribuem para a linguagem definida pela
gramtica livre de contexto em questo. Ainda que o cojunto de cadeias gerado por um
smbolo inacessvel seja diferente de vazio, a sua inacessibilidade torna-o irrelevante do
ponto da vista da linguagem definida pela raiz da gramtica. Por outro lado, mesmo se
acessveis, os smbolos inteis sempre anulam a linguagem gerada por toda e qualquer
forma sentencial a que possam pertencer.
Dessa forma, a idia de se eliminarem smbolos inacessveis e inteis apresenta
grande interesse, uma vez que permite obter gramticas mais compactas, normalmente
mais legveis, e nas quais todo e qualquer smbolo contribui efetivamente com a linguagem
gerada. Alm disso, a inexistncia de smbolos inacessveis e inteis pr-requisito para
a obteno da algumas importantes formas normais.
202 Linguagens Formais - Teoria, Modelagem e Implementao

A transformao de uma gramtica em outra equivalente, isenta de smbolos ina-


cessveis e inteis, pode ser feita em dois passos, atravs de dois algoritmos distintos: o
primeiro algoritmo encarrega-se de eliminar da gramtica original os smbolos inteis; o
segundo algoritmo elimina todos os smbolos inacessveis.
Teorema 4.5 (Eliminao de smbolos inacessveis e inteis) Toda linguagem li-
vre de contexto pode ser gerada por uma gramtica livre de contexto em que no h
smbolos inacessveis ou inteis.

Justificativa A demonstrao deste teorema pode ser realizada tomando-se como base
os dois algoritmos apresentados a seguir. O Algoritmo 4.1 mostra como eliminar os
no-terminais que no geram cadeias de terminais, bem como as produes em que os
mesmos comparecem, preservando em N apenas os smbolos do conjunto N = {Y N |
Y , com }.
Algoritmo 4.1 (Eliminao de smbolos inteis) Eliminao de smbolos inteis
em gramticas livres de contexto.

Entrada: uma gramtica livre de contexto G = (V , , P , S ), tal que L(G) 6= .

Sada: uma gramtica livre de contexto G = (V , , P , S ), tal que L(G ) = L(G)


e Y N se e apenas se L(Y ) 6= .

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 )}.

Observe-se que N N e P P . Intuitivamente, este algoritmo funciona


incluindo-se seletivamente em um novo conjunto de smbolos no-terminais (inicialmente
vazio) apenas aqueles no-terminais que:

1. Derivam diretamente cadeias de smbolos terminais (primeira iterao do passo 2),


ou
4 Linguagens Livres de Contexto 203

2. Derivam diretamente cadeias que incluem smbolos no-terminais, os quais, por


sua vez, derivam cadeias de smbolos terminais, direta ou indiretamente.

Alm disso, so preservadas em P apenas as produes de P que fazem referncias


exclusivas a elementos de e de N , pois as demais mostram-se sem utilidade. Note-se
que o Algoritmo 4.1 pode ser usado para se determinar se L(G) 6= para uma dada
gramtica livre de contexto G basta determinar, ao fim de sua execuo, se S N .
Em caso afirmativo, L(G) 6= ; caso contrrio, L(G) = .
O segundo algoritmo mostra como eliminar os smbolos terminais e no-terminais
que no fazem parte de qualquer forma sentencial derivvel a partir da raiz da gramtica,
ou seja, Y V se e apenas se S Y , com , V .
Algoritmo 4.2 (Eliminao de smbolos inacessveis) Eliminao de smbolos ina-
cessveis em gramticas livres de contexto.

Entrada: uma gramtica livre de contexto G = (V , , P , S ).

Sada: uma gramtica livre de contexto G = (V , , P , S ), tal que L(G ) = L(G)


e Y V se e apenas se S Y , com , V .

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 }.


Observe-se a similaridade entre as definies e os algoritmos da presente seo com
os da Seo 3.3, sobre autmatos finitos.
De fato, h uma correspondncia direta entre os conceitos de smbolo e estado aces-
svel, bem como entre os de smbolo e estado til. H, tambm, uma relao direta entre
os algoritmos para a eliminao de smbolos inteis (Algoritmo 4.1) e a para eliminao
de smbolos inacessveis (Algoritmo 4.2) com os algoritmos para a eliminao dos esta-
dos inteis e inacessveis em autmatos finitos (respectivamente, Algoritmos 3.11 e 3.9).
204 Linguagens Formais - Teoria, Modelagem e Implementao

Trata-se, como se pode perceber, essencialmente dos mesmos conceitos e dos mesmos
mtodos.
No caso do Algoritmo 4.1, trata-se da identificao sistemtica dos smbolos que
geram alguma cadeia formada apenas por terminais. No Algoritmo 3.9, trata-se da
identificao dos estados que conduzem a algum estado final do autmato. O Algoritmo
4.2 identifica os smbolos que podem ser gerados a partir da raiz S . O Algoritmo 3.11
identifica os estados que podem ser alcanados a partir do estado inicial do autmato.
Note-se tambm que os Algoritmos 4.1 e 4.2 no apenas eliminam smbolos dos
conjuntos N e da gramtica original, no caso geral, como tambm eliminam todas as
produes de P que envolvam quaisquer smbolos inacessveis ou inteis eliminados.
Smbolos inacessveis e inteis podem ser eliminados de uma gramtica livre de
contexto qualquer aplicando-se-lhes inicialmente o Algoritmo 4.1 e, ao resultado deste,
o Algoritmo 4.2, ou vice-versa. A ordem de aplicao dos algoritmos no interfere no
resultado final obtido, como demonstra o Teorema 4.6.
Teorema 4.6 (Eliminao de smbolos inacessveis e inteis) A obteno de uma
gramtica livre de contexto G3 , isenta de smbolos inacessveis ou inteis, a partir de uma
gramtica livre de contexto G1 qualquer, pode ser feita pela aplicao dos Algoritmos 4.1
e 4.2 uma nica vez cada, em qualquer seqncia.

Justificativa Seja G1 = (V1 , 1 , P1 , S1 ). Os smbolos do conjunto V1 podem ser, in-


dividualmente, classificados em uma das seguintes categorias:

i) Acessvel e til;

ii) Acessvel e intil;

iii) Inacessvel e til;

iv) Inacessvel e intil.

Alm disso, os Algoritmos 4.1 e 4.2 no criam novos smbolos, tampouco alteram as
caractersticas de acessibilidade ou de utilidade dos smbolos da gramtica de entrada que
foram preservados na gramtica de sada. Em funo dessas observaes, considerem-se
as duas seguintes seqncias possveis para a aplicao dos Algoritmos 4.1 e 4.2:

1. Inicialmente o Algoritmo 4.1, e depois o Algoritmo 4.2:


A aplicao do Algoritmo 4.1 (eliminao de smbolos inteis) gramtica G1
resulta na gramtica G2 = (V2 , 2 , P2 , S2 ), em que os smbolos de V2 so apenas
dos tipos (i) e (iii). Em seguida, a aplicao do Algoritmo 4.2 (eliminao de
smbolos inacessveis) gramtica G2 resulta na gramtica G3 = (V3 , 3 , P3 , S3 ),
em que os smbolos de V3 so apenas do tipo (i).

2. Inicialmente o Algoritmo 4.2, e depois o Algoritmo 4.1:


A aplicao do Algoritmo 4.2 (eliminao de smbolos inacessveis) gramtica
G1 resulta na gramtica G2 = (V2 , 2 , P2 , S2 ), em que os smbolos de V2 so
apenas dos tipos (i) e (ii). Em seguida, a aplicao do Algoritmo 4.1 (eliminao
de smbolos inteis) gramtica G2 resulta na gramtica G3 = (V3 , 3 , P3 , S3 ),
em que os smbolos de V3 so apenas do tipo (i).
4 Linguagens Livres de Contexto 205

Logo, a ordem de aplicao dos algoritmos de eliminao de smbolos inacessveis


e inteis irrelevante, e a obteno de uma gramtica livre de contexto, isenta de tais
smbolos, pode ser feita pela aplicao de cada um dos correspondentes algoritmos uma
nica vez, em qualquer ordem. 
Exemplo 4.18 Considere-se G = (V , , P , S ), com:

V = {S , A, B , C , a, b}
= {a, b}
P = {S A | B , A aB | bS | b, B AB | Ba, C AS | b}
Aplicando-se o algoritmo de eliminao de no-terminais que no geram cadeias de terminais,
obtm-se:

N0 =
N1 = {A, C }
N2 = {A, C , S }
N3 = {A, C , S }

Logo, G = {V , , P , S }, com:

V = {S , A, C , a, b}
P = {S A | A bS | b, C AS | b}
Note-se que o no-terminal B foi eliminado de N uma vez que no possvel derivar qualquer
cadeia de terminais a partir dele. Aplicando-se a G o Algoritmo 4.2, para a eliminao de smbolos
inacessveis, obtm-se:

V0 = {S }
V1 = {S , A}
V2 = {S , A, b}
e G = {V , , P , S }, com:

V = {S , A}
= {b}

P = {S A | A bS | b}
Observe-se a eliminao dos smbolos C e a de V , uma vez que eles no comparecem
em qualquer forma sentencial derivvel a partir de S . G corresponde, assim, a uma gramtica
equivalente a G, isenta de smbolos inacessveis e inteis, e L(G) = L(G ) = b + . 2
Analisa-se agora a questo da eliminao das produes em vazio. Produes em
vazio so produes da forma A , e a total eliminao de produes desse tipo de
uma gramtica G naturalmente s possvel se 6 L(G).
Teorema 4.7 (Eliminao de produes em vazio) Toda linguagem livre de con-
texto que no contm a cadeia vazia pode ser gerada por uma gramtica livre de contexto
em que no h produes em vazio.

Justificativa O Algoritmo 4.3 mostra como transformar uma gramtica G em outra


equivalente G , isenta de produes em vazio. Se L(G), ento ser admitida uma
nica produo em vazio, cujo lado esquerdo corresponde raiz da gramtica, de modo
que L(G ) = L(G).
206 Linguagens Formais - Teoria, Modelagem e Implementao

Algoritmo 4.3 (Eliminao de produes em vazio) Eliminao de produes em


vazio em gramticas livres de contexto.

Entrada: uma gramtica livre de contexto G = (V , , P , S ).

Sada: uma gramtica livre de contexto G = (N , , P , S ), tal que L(G ) =


L(G) e

i) Se 6 L(G), ento no h produes em vazio em G , ou

ii) Se L(G), ento a nica produo em vazio em G S , onde S a


raiz de G e S no aparece no lado direito de nenhuma produo.

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
A verso final do conjunto P obtida acrescentando-se sua verso anterior
o conjunto das produes obtidas pela substituio dos smbolos Bi , 0
i k por , considerando-se todas as combinaes possveis, sem no entanto
gerar a produo A .

8. Se S E , ento:

a) P P {S S | };

b) N N {S };
4 Linguagens Livres de Contexto 207

Caso contrrio:

a) N N ;

b) S S .

Este algoritmo implementa um mapeamento do conjunto P no conjunto P , em que


as seguintes condies so obedecidas:

1. Produes em vazio A P so eliminadas;

2. As produes A P , = 1 2 . . . n , i V , em que contm smbolos


no-terminais que eventualmente derivam , isto , i , 1 i n, so
expandidas para contemplar todos os possveis casos de eliminao desses no-
terminais, compensando assim a eliminao das produes em vazio.

Os passos (1), (2), (3) e (4) do algoritmo buscam identificar o subconjunto E dos
elementos A de N , E N , tais que A , e em muito se assemelham aos Algoritmos
4.1 e 4.2 anteriormente apresentados. Os passos (5), (6) e (7) realizam o mapeamento
acima descrito, eliminando as produes em vazio e eventualmente expandindo as demais
produes.
Observe-se que o fato de cada produo de P ser considerada no formato genrico:

A 0 B1 1 B2 2 . . . Bk k

visa isolar exatamente os no-terminais Bi , tais que Bi . A seguir so geradas, a


partir de cada produo deste tipo, 2k (no mximo) novas produes distintas, cada qual
correspondente a uma particular combinao de no-terminais Bi substitudos por .
Por fim, note-se que se S E , isso indica que L(G). Assim, para que L(G ) =
L(G), um novo smbolo no-terminal S e a produo S so introduzidos em G no
passo (8). 

Exemplo 4.19 Seja uma gramtica G = (V , , P , S ), com:

V = {S , A, B , C }
= {a, b}
P = {S ABC , A BB | , B CC | a, C AA | b}

Como se pode perceber, E = {A, C , B , S }. Em conseqncia, obtm-se o seguinte conjunto


de produes P :

{C AA | A | b,
B CC | C | a,
A BB | B ,
S ABC | A | B | C | AB | AC | BC }

Pelo fato de S E , a produo S S | deve ainda ser incorporada a P , resultando assim


G = (V {S }, , P , S ). 2
208 Linguagens Formais - Teoria, Modelagem e Implementao

Exemplo 4.20 Considere-se a gramtica G = (V , , P , S ), com

V = {S , B , C }
= {a, b, c, d }
P = {S aBC , B bB | , C cCc | d | }

Neste caso, E = {B , C }. Portanto, P se torna:

{B bB | b,
C cCc | cc | d ,
S aBC | aB | aC }

Como 6 L(G), ento G = (V , , P , S ). 2

O ltimo caso de simplificao de gramticas livres de contexto refere-se elimina-


o 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 con-
texto 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 con-
texto 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 uni-
trias em gramticas livres de contexto.

Entrada: uma gramtica livre de contexto G = (V , , P , S ).

Sada: uma gramtica livre de contexto G = (V , , P , S ), tal que L(G ) = L(G)


e G no contm produes unitrias.

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.
4 Linguagens Livres de Contexto 209

Caso contrrio:

i. NA Ni1 ;

2. P {A P | 6 N };

3. Para todo B NA , se B P , e 6 N , ento P P {A }.

O funcionamento deste algoritmo baseia-se inicialmente na identificao e na as-


sociao de subconjuntos de N a cada no-terminal X da gramtica, sendo que cada
elemento Y desse subconjunto satisfaz condio X Y . Esses subconjuntos so
construdos no passo (1) do algoritmo.
Observe-se que a condio X Y refere-se apenas a derivaes efetuadas ex-
clusivamente atravs do emprego de produes unitrias. Em alguns casos, possvel
que tal condio seja satisfeita atravs do emprego de produes no-unitrias, isto ,
X Y , | |> 1, como ilustrado no Exemplo 4.21.
Exemplo 4.21 Considere-se a gramtica G:

G = ({S , X , Y , a}, {a}, P , S )


P = {S XY ,
X a,
Y }
A derivao S XY X , ou simplesmente S X , feita sem o uso de regras unitrias.2

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 aaAa | B | ,
B bBb | b | C ,
C cC | }
Aplicando-se o Algoritmo 4.4, obtm-se:

NS = {S , A, B , C }
NA = {A, B , C }
NB = {B , C }
NC = {C }

Assim, G = (V , , P , S ), e P torna-se:
210 Linguagens Formais - Teoria, Modelagem e Implementao

{S aaAa | | bBb | b | cC ,
A aaAa | | bBb | b | cC ,
B bBb | b | cC | ,
C cC | }
A ttulo de ilustrao, considere-se a derivao da sentena aabba. Tomando-se como base a
gramtica G, a seqncia de derivaes desta sentena :
S A aaAa aaBa aabBba aabCba aabba
ao passo que, tomando-se como base a gramtica modificada G , a seqncia de derivao desta
sentena se torna:
S aaAa aabBba aabba
(note-se como a eliminao de produes unitrias abrevia a derivao da sentena). 2
Diz-se que uma gramtica livre de contexto isenta de produes em vazio acclica
se e somente se no existir A N , tal que A A. Caso contrrio, diz-se que a
gramtica cclica. O Algoritmo 4.4 pode ser facilmente adaptado para detectar ciclos
em gramticas livres de contexto isentas de produes em vazio, conforme apresentado
no Algoritmo 4.5.
Algoritmo 4.5 (Deteco de ciclos) Deteco de ciclos em gramticas livres de con-
texto isentas de produes em vazio.

Entrada: uma gramtica livre de contexto isenta de produes em vazio G =


(V , , P , S ).

Sada: SIM, se G for cclica. NO, se G for acclica.

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.


4 Linguagens Livres de Contexto 211

4.6 Formas Normais para Gramticas Livres de Contexto


Como se sabe, as gramticas livres de contexto se caracterizam por apresentar produes
p que seguem a forma geral A , A N , V . Conforme foi estudado na
Seo 4.5, tais gramticas podem sofrer simplificaes traduzidas, em alguns casos,
em restries impostas ao formato admitido para as produes p P que visam
torn-las mais concisas, sem no entanto alterar a linguagem por elas definida.
Por outro lado, certos teoremas que sero apresentados no restante deste captulo,
como , por exemplo, o caso daquele que estabelece a equivalncia das gramticas do
tipo 2 com a classe de linguagens reconhecida pelos autmatos de pilha (Teorema 4.13),
podem ser mais facilmente demonstrados considerando-se que as gramticas livres de
contexto estejam normalizadas em relao a algum padro notacional.
Uma gramtica dita normalizada em relao a um certo padro quando todas
as suas produes seguem as restries impostas pelo padro em questo. comum
designar tais padres como formas normais. Nesta seo sero definidas duas das
formas normais mais importantes para as gramticas livres de contexto: a Forma Normal
de Chomsky e a Forma Normal de Greibach. Especial ateno ser dedicada ao estudo de
algoritmos que permitem o mapeamento de gramticas do tipo 2 quaisquer em gramticas
equivalentes, aderentes a uma ou outra dessas formas normais. Mostrar-se- que toda e
qualquer gramtica do tipo 2 corresponde a gramticas equivalentes, expressas em ambas
as formas normais.
Diz-se que uma gramtica G = (V , , P , S ) do tipo 2 obedece Forma Normal de
Chomsky ([62]) se todas as produes p P forem de uma das duas formas seguintes:

1. A BC , ou

2. A a

com A, B , C N e a .
Se L(G), ento admite-se S como nica produo em que comparece do
lado direito.
Teorema 4.9 (Forma Normal de Chomsky) Toda linguagem livre de contexto L
pode ser gerada por uma gramtica livre de contexto na Forma Normal de Chomsky.

Justificativa Seja G uma gramtica livre de contexto qualquer que gera L. Sem perda
de generalidade, considere-se que G no apresenta produes unitrias, smbolos inteis
e nem produes em vazio exceto S , se L(G). possvel demonstrar for-
malmente (ver [46]) que o mapeamento de G em G , a gramtica equivalente na Forma
Normal de Chomsky, pode ser efetuado atravs do Algoritmo 4.6.
Algoritmo 4.6 (Forma Normal de Chomsky) Obteno de uma gramtica livre de
contexto na Forma Normal de Chomsky.

Entrada: uma gramtica livre de contexto G = (V , , P , S ) isenta de produes


unitrias, smbolos inteis e produes em vazio.

Sada: uma gramtica livre de contexto G = (V , , P , S ), na Forma Normal de


Chomsky, tal que L(G) = L(G ).

Mtodo:
212 Linguagens Formais - Teoria, Modelagem e Implementao

1. P ;

2. N N ;

3. Se A BC P , com A, B , C N , ento A BC P ;

4. Se A P , com A N , , ento A P ;

5. Se S P , ento S P ;

6. Para cada produo p P da forma:


A X1 X2 , . . . , Xn , com n 2
se Xi , ento criam-se novos no-terminais Yi e produes Yi Xi
substituindo-se as ocorrncias de Xi por Yi em p. Acrescentam-se os novos
no-terminais Yi a N e as novas produes a P .

7. Para cada produo da forma:


A X1 X2 , . . . , Xn , com n 2 e Xi N , 1 i n
gerada no passo (6), criar um novo conjunto de no-terminais Zi e de pro-
dues da forma:

{A X1 Z1 ,
Z1 X 2 Z2 ,
...
Zn2 Xn1 Xn }

acrescentando-os, respectivamente, aos conjuntos N e P .

Trata-se, como se pode perceber, de um algoritmo bastante intuitivo. Inicialmente,


todas as produes de P que originalmente j se encontram na Forma Normal de Chomsky
so transferidas para P . No passo (6), as produes com mais de um smbolo do lado di-
reito so transformadas em produes contendo apenas smbolos no-terminais, devendo-
se criar um novo smbolo no-terminal e uma nova produo para cada smbolo terminal
a ser eliminado. Finalmente, no passo (7), cada produo neste formato desmembrada
em n 1 novas produes, cada qual com apenas dois smbolos no-terminais do lado
direito e, portanto, aderente Forma Normal de Chomsky. 

Exemplo 4.23 Considere-se a gramtica G = (V , , P , S ) com N = {E , T , F } e o conjunto de


produes P apresentado abaixo:

{E E + T | T,
T T F | F,
F (E ) | a}

Da aplicao do algoritmo acima resulta G = (V , , P , S ), com:


4 Linguagens Livres de Contexto 213

N = {E , T , F , [+T ], [+], [F ], [], [(], [E )], [)]}



P = {E E [+T ] | T ,
[+T ] [+]T ,
[+] +,
T T [F ] | F ,
[F ] []F ,
[] ,
F [(][E )] | a,
[(] (,
[E )] E [)]}
2

Diz-se que uma gramtica livre de contexto G = (V , , P , S ) obedece Forma


Normal de Greibach ([63]) se todas as suas produes p P forem da forma:

A , , N

Se L(G), ento admite-se S como nica produo em que comparece


do lado direito. Como pr-requisito antes de apresentarmos o teorema que mostra como
converter gramticas livres de contexto quaisquer em equivalentes na Forma Normal
de Greibach, ser necessrio apresentar um algoritmo que permita eliminar recurses
esquerda em gramticas livres de contexto quaisquer.
Eliminar recurses esquerda de uma gramtica livre de contexto G = (V , , P , S )
significa obter G = (V , , P , S ), de modo que L(G) = L(G ) e nenhum A N seja
recursivo esquerda. A eliminao de recurses esquerda em gramticas livres de
contexto pode ser feita atravs do Algoritmo 4.7, cuja idia bsica consiste em transfor-
mar G, com no-terminais ordenados arbitrariamente, em G , de modo que Xi Xj
pertence a P se e apenas se j > i.
Sem perda de generalidade, admite-se que a gramtica G de entrada seja isenta de
produes unitrias, smbolos inteis e produes em vazio.
Algoritmo 4.7 (Recurses esquerda) Eliminao de recurses esquerda em gra-
mticas livres de contexto.

Entrada: uma gramtica livre de contexto G = (V , , P , S ) isenta de produes


unitrias, smbolos inteis e produes em vazio.

Sada: uma gramtica livre de contexto G = (V , , P , S ) sem recurses es-


querda 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 Linguagens Formais - Teoria, Modelagem e Implementao

5. Considerem-se todas as alternativas de substituio para Xi agrupadas na


forma:
Xi Xi 1 | . . . | Xi m | 1 | . . . | n
em que todos os k , 1 k m, no contenham Xi , e todos os k , 1 k n,
comeam com smbolos diferentes de Xi . Se k = Xj , j < i, substituir Xj
em Xj pelas suas alternativas conforme as produes em que Xj comparece
do lado esquerdo. Ou seja, se Xj 1 | . . . | r , fazer k 1 | . . . | r .
Repetir este passo at que k , 1 k n, se k = Xj , ento j i.

6. Neste passo, todas as alternativas de substituio para Xi podem ser rea-


grupadas na forma:

Xi Xi 1 | . . . | Xi m | 1 | . . . | n

em que i se inicia com ou Xj N , j > i. Introduzir um novo no-


terminal Xi e criar as produes abaixo em substituio s acima agrupadas:

Xi 1 | . . . | n | 1 Xi | . . . | n Xi
Xi 1 | . . . | m | 1 Xi | . . . | m Xi

Fazer N N {Xi } e acrescentar os dois conjuntos de produes acima


a P .

7. Se i 6= p:

a) i i + 1;

b) Desviar para (5).

Partindo de uma ordenao arbitrria dos no-terminais da gramtica, o funciona-


mento deste algoritmo baseia-se na realizao de substituies sucessivas de no-terminais
de ordem inferior que comparecem como smbolo inicial de alternativas de substituio
de no-terminais de ordem superior pelas suas respectivas definies. Note-se que, ao
trmino de cada execuo do passo (5), todas as alternativas de substituio de no-
terminais Xi possuem necessariamente a forma:

Xi Xi i | . . . | Xi m | 1 | . . . | n

O caso em que i = 1 trivial, pois a condio acima sempre imediatamente


satisfeita. Se i > 1, e k = Xj , com j < i, ento a substituio de Xj pelas suas
respectivas produes, e assim sucessivamente, at um mximo de i j vezes, resulta
sempre em k = Xs , s i. Para facilitar a manipulao, o caso s = i representado
separadamente dos demais casos em que k > i.
O passo (6) visa eliminar recurses diretas esquerda nas produes de Xi . Assim,
aps a aplicao deste passo, todas as produes de Xi iniciam-se exclusivamente com
smbolos terminais ou no-terminais de ordem j > i. Repetindo-se os passos (5) e (6)
sucessivamente para i = 1, 2, . . . , p, obtm-se G isenta de recurses esquerda. Note-se,
4 Linguagens Livres de Contexto 215

como conseqncia da aplicao deste algoritmo, que todas as produes de Xp se iniciam


exclusivamente com smbolos terminais.
Para finalizar, observe-se que a introduo dos no-terminais Xi , e suas respectivas
produes, no passo (6) no prejudica a inteno de eliminao das recurses esquerda.
Isso se deve aos seguintes motivos:

1. Como j 6= , 1 j n, pois no se admitem produes em vazio em G, Xi nunca


poder comparecer como smbolo inicial de j Xi alternativas de substituio
de Xi , prevenindo dessa maneira a eventualidade de introduo de recurses
indiretas esquerda.

2. Como j 6= , 1 j m, pois por hiptese no se admitem produes unitrias


em G, Xi nunca poder comparecer como smbolo inicial de j Xi alternativas
de substituio de Xi , prevenindo dessa maneira a eventualidade de introduo
de recurses diretas direita.

Exemplo 4.24 Considere-se a gramtica G = (V , , P , S ) com N = {E , T , F }, sendo P o conjunto


apresentado abaixo:

{E E + T | T,
T T F | F,
F (E ) | a}

Considere-se a ordenao E < T < F para os no-terminais de G. A aplicao do Algoritmo


4.7 resulta na gramtica G com o seguinte conjunto de produes:

{E T | TE ,
E +T | +TE ,
T F | FT ,
T F | FT ,
F (E ) | a}
2

Exemplo 4.25 Considere-se o conjunto abaixo de regras de uma gramtica G, e a ordenao de seus
no-terminais X1 < X2 < X3 < X4 :

{X1 X2 X3 | a,
X2 X3 X2 | X2 b | b,
X3 X4 X1 | c,
X4 X1 X3 | X3 e | d }

As produes de X1 claramente satisfazem aos requisitos dos passos (5) e (6) do Algoritmo 4.7.
As produes de X2 satisfazem ao passo (5), porm no ao passo (6). Assim, elas so substitudas
por:

X2 X3 X2 | b | X3 X2 X2 | bX2
X2 bX2 | b

Tambm as produes do no-terminal X3 satisfazem s exigncias dos passos (5) e (6), mas
o mesmo no ocorre com as produes de X4 , mais especificamente com a produo X4 X1 X3 ,
216 Linguagens Formais - Teoria, Modelagem e Implementao

que deve ser alterada conforme o determinado pelo passo (5). Substituindo-se X1 pela sua definio,
obtm-se:

X4 X2 X3 X3 | aX3 | X3 e | d
Prosseguindo, substitui-se X2 pela sua definio, obtendo-se:

X4 X3 X2 X3 X3 | bX3 X3 | X3 X2 X2 X3 X3 | bX2 X3 X3 | aX3 | X3 e | d

Finalmente, o passo (5) completado substituindo-se X3 pela sua definio, obtendo-se:

X4 X4 X1 X2 X3 X3 | cX2 X3 X3 | bX3 X3 | X4 X1 X2 X2 X3 X3 |
cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | X4 X1 e | ce | d

Prosseguindo com a aplicao do passo (5) s produes de X4 , obtm-se:

X4 cX2 X3 X3 | bX3 X3 | cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | ce | d | cX2 X3 X3 X4 | bX3 X3 X4 |


cX2 X2 X3 X3 X4 | bX2 X3 X3 X4 | aX3 X4 | ceX4 | dX4
X4 X1 X2 X3 X3 | X1 X2 X2 X3 X3 | X1 e | X1 X2 X3 X3 X4 | X1 X2 X2 X3 X3 X4 | X1 eX4
Como resultado final da aplicao do algoritmo de eliminao de recurses esquerda em G,
obtm-se G , cujas produes formam o conjunto seguinte:

{X1 X2 X3 | a,
X2 X3 X2 | b | X3 X2 X2 | bX2 ,
X2 bX2 | b,
X3 X4 X1 | c,
X4 cX2 X3 X3 | bX3 X3 | cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | ce | d | cX2 X3 X3 X4 | bX3 X3 X4 |
cX2 X2 X3 X3 X4 | bX2 X3 X3 X4 | aX3 X4 | ceX4 | dX4 ,
X4 X1 X2 X3 X3 | X1 X2 X2 X3 X3 | X1 e | X1 X2 X3 X3 X4 | X1 X2 X2 X3 X3 X4 | X1 eX4 }

Note-se que, em G , todas as produes referentes a cada no-terminal Xi N se iniciam,


conforme o esperado, com , ou Xj N , j > i. Note-se ainda que todas as produes de X4
so iniciadas exclusivamente com . 2

Tendo visto que toda gramtica livre de contexto pode ser transformada em uma
gramtica equivalente, isenta de recurses esquerda, pode-se passar finalmente ao algo-
ritmo/teorema que possibilita a normalizao em relao Forma Normal de Greibach.
Teorema 4.10 (Forma Normal de Greibach) Toda linguagem livre de contexto L
pode ser gerada por uma gramtica livre de contexto na Forma Normal de Greibach.

Justificativa Pode ser desenvolvida a partir do Algoritmo 4.8, que permite a conver-
so de uma gramtica livre de contexto qualquer em outra equivalente na Forma Normal
de Greibach.
Algoritmo 4.8 (Forma Normal de Greibach) Obteno de uma gramtica livre de
contexto na Forma Normal de Greibach.

Entrada: uma gramtica livre de contexto G = (V , , P , S ) isenta de produes


unitrias, smbolos inacessveis, smbolos inteis, produes em vazio e recurses
esquerda, tal que L = L(G).
4 Linguagens Livres de Contexto 217

Sada: uma gramtica livre de contexto G = (V , , P , S ) na Forma Normal de


Greibach, tal que L(G) = L(G ).

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 Linguagens Formais - Teoria, Modelagem e Implementao

Como h r no-terminais em N , a obteno desta condio para Xi N , 1 i r ,


exigir no mximo r i substituies sucessivas. Ao trmino deste passo, todas as
alternativas de substituio para Xi sero do tipo , e V .
Finalmente, para fazer com que pertena ao conjunto N , conforme exigido pela
Forma Normal de Greibach, basta criar novos smbolos no-terminais e substitu-los pelos
respectivos smbolos terminais, onde quer que estes apaream em V passo (6).
Naturalmente, novas produes tambm devem ser incorporadas a P passo (7). 

Exemplo 4.26 Retornando ao Exemplo 4.23, anteriormente apresentado:

{E T | TE ,

E +T | +TE ,
T F | FT ,

T F | FT ,
F (E ) | a}

Considerando-se a relao de ordem E < T < E < T < F , obtm-se:

F (E ) | a
T (E ) | a | (E )T | aT
E (E ) | a | (E )T | aT | (E )E | aE | (E )T E | aT E

T F | FT
E +T | +TE

Para finalizar, basta criar o no-terminal ) e introduzir a produo ) ). A gramtica


resultante ser:

{F (E ) | a,
T (E ) | a | (E ) T | aT ,
E (E ) | a | (E ) T | aT | (E ) E | aE | (E ) T E | aT E ,

T F | FT ,
E +T | +TE ,

) )}
2

Exemplo 4.27 No que se refere ao Exemplo 4.25, a obteno da correspondente Forma Normal de
Greibach, com base na relao de ordem X2 < X4 < X1 < X2 < X3 < X4 , passa, inicialmente, pela
substituio da definio de X4 em X3 , de X3 em X2 , de X2 em X1 e, finalmente, de X1 em X4 .
exceo deste ltimo passo, omitido para no estender demais o exemplo, o resultado apresentado
a seguir. Observe-se ainda a criao do novo smbolo no-terminal e , com todas as ocorrncias
do smbolo e substitudas por e , e a adio ao conjunto de produes da regra e e.

{X1 cX2 X3 X3 X1 X2 X3 | bX3 X3 X1 X2 X3 | cX2 X2 X3 X3 X1 X2 X3 |


bX2 X3 X3 X1 X2 X3 | aX3 X1 X2 X 3 | ce X1 X2 X3 | dX1 X2 X3 |
cX2 X3 X3 X4 X1 X2 X3 | bX3 X3 X4 X1 X2 X3 | cX2 X2 X3 X3 X4 X1 X2 X3 |
bX2 X3 X3 X4 X1 X2 X3 | aX3 X4 X1 X2 X3 | ce X4 X1 X2 X3 |
dX4 X1 X2 X3 | cX2 X3 | cX2 X3 X3 X1 X2 X2 X3 | bX3 X3 X1 X2 X2 X3
cX2 X2 X3 X3 X1 X2 X2 X3 | bX2 X3 X3 X1 X2 X2 X3 | aX3 X1 X2 X2 X3 |
4 Linguagens Livres de Contexto 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 |
dX4 X1 X2 X2 X3 | cX2 X2 X3 | bX2 X3 | bX3 | a,
X2 cX2 X3 X3 X1 X2 | bX3 X3 X1 X2 | cX2 X2 X3 X3 X1 X2 |
bX2 X3 X3 X1 X2 | aX3 X1 X2 | ce X1 X2 | dX1 X2 |
cX2 X3 X3 X4 X1 X2 | bX3 X3 X4 X1 X2 | cX2 X2 X3 X3 X4 X1 X2 |
bX2 X3 X3 X4 X1 X2 | aX3 X4 X1 X2 | ce X4 X1 X2 | dX4 X1 X2 | cX2 |
cX2 X3 X3 X1 X2 X2 | bX3 X3 X1 X2 X2 | cX2 X2 X3 X3 X1 X2 X2 |
bX2 X3 X3 X1 X2 X2 | aX3 X1 X2 X2 | ce X1 X2 X2 | dX1 X2 X2 |
cX2 X3 X3 X4 X1 X2 X2 | bX3 X3 X4 X1 X2 X2 | cX2 X2 X3 X3 X4 X1 X2 X2 |
bX2 X3 X3 X4 X1 X2 X2 | aX3 X4 X1 X2 X2 | ce X4 X1 X2 X2 |
dX4 X1 X2 X2 | cX2 X2 | bX2 | b,
X2 bX2 | b,
X3 cX2 X3 X3 X1 | bX3 X3 X1 | cX2 X2 X3 X3 X1 | bX2 X3 X3 X1 | aX3 X1 |
ce X1 | dX1 | cX2 X3 X3 X4 X1 | bX3 X3 X4 X1 | cX2 X2 X3 X3 X4 X1 |
bX2 X3 X3 X4 X1 | aX3 X4 X1 | ce X4 X1 | dX4 X1 | c,
X4 cX2 X3 X3 | bX3 X3 | cX2 X2 X3 X3 | bX2 X3 X3 | aX3 | ce | d |
cX2 X3 X3 X4 | bX3 X3 X4 | cX2 X2 X3 X3 X4 |
bX2 X3 X3 X4 | aX3 X4 | ce X4 | dX4 ,
X4 X1 X2 X3 X3 | X1 X2 X2 X3 X3 | X1 e | X1 X2 X3 X3 X4 | X1 X2 X2 X3 X3 X4 | X1 e X4 ,

e e}
2

4.7 Autmatos de Pilha


Nesta seo sero apresentados os conceitos bsicos ligados representao e interpre-
tao dos autmatos de pilha, sendo o principal a definio de dois modelos de aceitao
distintos, um baseado em estados finais e outro em pilha vazia.
A seguir, mostrada a equivalncia da classe de linguagens aceita pelos autmatos
de pilha com critrio de aceitao baseado em estados finais, com a classe de linguagens
aceita pelos autmatos de pilha cujo critrio baseado em pilha vazia, evidenciando
assim a equipotncia dos modelos.
A equivalncia da classe de linguagens aceita pelos autmatos de pilha com a classe
de linguagens gerada por gramticas do tipo 2 as linguagens livres de contexto
ser discutida na Seo 4.8. Por ltimo, sero efetuadas algumas consideraes sobre a
aplicao e a importncia prtica da teoria dos autmatos de pilha para o profissional
de computao.
Os autmatos de pilha constituem a segunda instncia, em uma escala de com-
plexidade crescente, do modelo genrico de reconhecedor introduzido na Seo 2.5,
prestando-se ao reconhecimento de linguagens livres de contexto. Diferentemente dos
autmatos finitos, que no se utilizam da memria auxiliar prevista no modelo genrico,
os autmatos de pilha tm o seu poder de reconhecimento estendido, quando compa-
rado ao dos autmatos finitos, justamente pela disponibilidade e pela utilizao de uma
memria auxiliar organizada na forma de uma pilha.
220 Linguagens Formais - Teoria, Modelagem e Implementao

A pilha de um autmato de pilha pode ser entendida como uma estrutura de dados,
de capacidade ilimitada, na qual a mquina de estados capaz de armazenar, consultar
e remover smbolos de um alfabeto prprio, denominado alfabeto de pilha, segundo a
conveno usual para estruturas deste tipo (LIFO last-in-first-out). Quanto aos seus
demais componentes e caractersticas, o autmato de pilha se assemelha ao autmato
finito anteriormente estudado.
Formalmente, um autmato de pilha pode ser definido como uma stupla M :
M = (Q , , , , q0 , Z0 , F )
onde:
Q um conjunto finito de estados;
um alfabeto (finito e no-vazio) de entrada;
um alfabeto (finito e no-vazio) de pilha;

uma funo de transio Q ( {}) 2Q ;
q0 o estado inicial de M , q0 Q ;
Z0 o smbolo inicial da pilha, Z0 ;
F o conjunto de estados finais de M , F Q .
Dos sete elementos que compem este sistema formal, apenas trs merecem expli-
cao adicional , e Z0 , uma vez que os demais esto em correspondncia direta
com o que j foi estudado para o caso dos autmatos finitos.
Note-se, inicialmente, a presena de um alfabeto de pilha e de um smbolo inicial
de pilha Z0 . O alfabeto de pilha especifica os smbolos que podem ser armazenados na
pilha. Por conveno, um desses smbolos, denotado Z0 , representa o contedo inicial
da pilha toda vez que o autmato de pilha principia o reconhecimento de uma nova
sentena. Ao longo de sua operao, elementos de so acrescentados e/ou removidos
da pilha, e seu contedo total pode ser interpretado, em um dado instante, como sendo
um elemento de . Por conveno, cadeias de que representam o contedo da pilha em
um determinado instante so interpretadas considerando-se os smbolos mais esquerda
da cadeia no topo da pilha, e os smbolos mais direita da cadeia no fundo da pilha.
Observe-se que, a partir do formato geral apresentado acima para a funo de
transio em autmatos de pilha no-determinsticos e com transies em vazio,
possvel extrair os seguintes casos particulares, equivalentes aos estudados do Captulo
3, para os autmatos finitos:

Autmato de pilha determinstico sem transies em vazio:


: Q Q

Autmato de pilha determinstico com transies em vazio:


: Q ( {}) Q

Autmato de pilha no-determinstico sem transies em vazio:



Q 2Q

Autmato de pilha no-determinstico com transies em vazio:



Q ( {}) 2Q

Diferentemente do Captulo 3, em que os modelos de autmato finito foram consi-


derados 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-
4 Linguagens Livres de Contexto 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:

Figura 4.5: Pilha com ponteiro de topo


2

Os dispositivos que fazem uso de pilha costumam definir a forma de operao da


mesma como uma das seguintes possibilidades:

Pilha Stack: alm das operaes de empilhamento e desempilhamento de ele-


mentos no topo da pilha (push e pop), permite que os demais elementos da
mesma sejam endereados diretamente, somente para consulta;

Pilha Pushdown: permite o acesso apenas ao elemento armazenado no topo


da pilha, atravs das operaes de empilhamento e desempilhamento (push e
pop). No permite o endereamento dos demais elementos da pilha.

A definio de autmato de pilha neste texto considera que a sua memria auxiliar
seja uma pilha pushdown.
A configurao de um autmato de pilha definida pelo seu estado corrente,
pela parte da cadeia de entrada ainda no analisada e pelo contedo da pilha. A confi-
gurao inicial de um autmato de pilha aquela em que o autmato se encontra
no estado inicial q0 , o cursor se encontra posicionado sob a clula mais esquerda na fita
de entrada e o contedo da pilha Z0 . Algebricamente, a configurao de um autmato
de pilha pode ser representada como uma tripla:

(q, , ), com q Q , e

A 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 confi-
gurao 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. Observe-
se, 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 Linguagens Formais - Teoria, Modelagem e Implementao

transies em vazio, em que no h consulta de smbolo na fita de entrada, a posio do


cursor permanece inalterada aps a sua aplicao.
Desejando-se efetuar alguma transio de forma independente do contedo do topo
da pilha, torna-se necessrio especificar para cada elemento do alfabeto de pilha uma
transio que efetue o mesmo tratamento do smbolo de entrada, removendo e reinserindo
o mesmo smbolo da pilha, simulando assim uma transio independente do contedo da
pilha.
Para cada tripla (q, , ) pertencente ao domnio da funo , o elemento (q, , )
pode conter zero, um ou mais elementos de Q . Considere-se inicialmente o caso em
que 6= . Havendo zero elementos em (q, , ), isso indica que no h possibilidade de
movimentao a partir da configurao considerada. Havendo um nico elemento, isso
significa que h apenas uma possibilidade de movimentao e, portanto, a transio
determinstica. Quando todas as transies de um autmato de pilha so determinsticas,
diz-se que o mesmo determinstico.
Nos casos em que h mais de um elemento em (q, , ), isso significa que h mais
de uma opo de movimentao a partir desta configurao, e ento a transio dita
no-determinstica. Havendo pelo menos uma transio no-determinstica, diz-se que o
autmato de pilha no-determinstico.
Autmatos de pilha no-determinsticos e com transies em vazio apresentam um
comportamento dinmico determinstico quando as duas seguintes condies forem si-
multaneamente verificadas:

1. q Q , , se |(, q, , )| 1, ento |(q, , )| = 0, ;

2. q Q , , {}, |(q, , ))| 1.

A primeira condio estabelece que no deve existir, para uma mesma combinao
de estado corrente e smbolo no topo da pilha, a opo de escolha entre uma movimen-
tao com consumo de smbolo na cadeia de entrada e outra sem consumo de smbolo
(transio em vazio). A segunda condio estabelece que, para cada configurao, seja
ela qual for, no deve haver mais de uma opo distinta de movimentao.
Surge, neste ponto, um aspecto de grande relevncia para o estudo dos autmatos
de pilha e das linguagens livres de contexto. Diferentemente do que foi visto para o
caso dos autmatos finitos, no que se refere equivalncia dos modelos determinstico
e no-determinstico quanto classe de linguagens que so capazes de reconhecer, os
autmatos de pilha no apresentam correspondente equivalncia. Conforme ser visto
mais adiante, os autmatos de pilha determinsticos so capazes de reconhecer apenas
um subconjunto das linguagens livres de contexto. Por esse motivo, exceto por ressalvas
em sentido contrrio, os autmatos de pilha mencionados daqui em diante sero no-
determinsticos.
Estando o autmato de pilha em uma configurao (qi , , ), com qi Q , ,
, e , sua movimentao a partir dessa configurao para a seguinte,
como decorrncia da aplicao de uma transio (qi , , ) = (qj , ), com ,
representada por:
(qi , , ) (qj , , )
A aplicao de transies em vazio, em que no h consumo de smbolo, repre-
sentada de maneira similar atravs de:

(qi , , ) (qj , , )
4 Linguagens Livres de Contexto 223

Da mesma forma que no caso dos autmatos finitos, a aplicao de zero ou mais
transies entre duas configuraes quaisquer representada atravs do smbolo , e a
aplicao de no mnimo uma transio, por intermdio do smbolo + .
A configurao final de um autmato de pilha costuma ser caracterizada de
duas maneiras distintas, porm equivalentes. Na primeira delas, exige-se o esgotamento
da cadeia de entrada e tambm que o autmato atinja um estado final. Nesta carac-
terizao, o contedo final da pilha irrelevante. Na segunda caracterizao, exige-se
o esgotamento da cadeia de entrada e tambm que a pilha tenha sido completamente
esvaziada, no importando que o estado atingido seja final ou no-final.
Dependendo do tipo de definio adotada para caracterizar a configurao final de
um autmato de pilha, possvel definir, tambm de duas maneiras distintas, a linguagem
aceita pelo dispositivo.
A linguagem aceita por um autmato de pilha M , com base no critrio de estado
final, denotada L(M ), definida como sendo o conjunto das sentenas w que satisfazem
condio:
(q0 , w , Z0 ) (q, , ), q F ,
Analogamente, a linguagem aceita por um autmato de pilha M , com base no cri-
trio de pilha vazia, denotada V (M ), definida como sendo o conjunto das sentenas
w que satisfazem condio:

(q0 , w , Z0 ) (q, , ), q Q

Assim como no caso dos autmatos finitos, convm lembrar que uma dada cadeia
w aceita por um autmato de pilha se e apenas se o autmato for capaz de atingir
uma configurao final, conforme o critrio estabelecido para o reconhecedor, a partir de
sua configurao inicial. No caso de autmatos de pilha determinsticos, a seqncia de
movimentos que os conduzem de uma configurao a outra, se existir, deve ser nica.
Sendo possvel atingir alguma configurao final, diz-se que a cadeia pertence linguagem
definida pelo autmato. Caso contrrio, que ela no pertence linguagem aceita pelo
autmato de pilha.
Autmatos de pilha no-determinsticos, ao contrrio, necessitam, no pior caso,
percorrer exaustivamente todas as seqncias possveis de configuraes, tendo a cadeia
de entrada w como referncia, at que seja possvel concluir pela sua aceitao ou rejeio.
O simples fato de no se conseguir atingir uma configurao final ao trmino de uma srie
de movimentaes s poder ser considerado como indicativo da rejeio da cadeia de
entrada se no houver novas seqncias de configuraes a serem experimentadas.
Com o intuito de facilitar a leitura do texto no restante deste captulo, as transies
de um autmato de pilha sero denotadas como:

(qi , , X ) (qj , )

indicando, com isso, o par ordenado ((qi , , X ), (qj , )) pertencente funo , ou, sim-
plesmente, (qi , , X ) = (qj , ).
Exemplo 4.29 Seja M1 o autmato de pilha determinstico abaixo discriminado, cujo critrio de
aceitao de sentenas baseado no esvaziamento da pilha.

Q = {q0 , q1 }
= {a, b, c}
= {Z0 , C }
224 Linguagens Formais - Teoria, Modelagem e Implementao

= {(q0 , a, Z0 ) {(q0 , CCZ0 )},


(q0 , a, C ) {(q0 , CCC )},
(q0 , b, Z0 ) {(q1 , Z0 )},
(q0 , b, C ) {(q1 , C )},
(q1 , c, C ) {(q1 , )},
(q1 , , Z0 ) {(q1 , )}}
F =
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, preservando-
se 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 configu-
raes 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 movimen-
tos 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 )
4 Linguagens Livres de Contexto 225

2. Sentena: aabccc
Movimentos: (q0 , aabccc, Z0 ) (q0 , abccc, CCZ0 ) (q0 , bccc, CCCCZ0 )
(q1 , ccc, CCCCZ0 ) (q1 , cc, CCCZ0 ) (q1 , c, CCZ0 ) (q1 , , CZ0 )

No primeiro caso, a sentena abccc contm smbolos c em excesso, e por esse motivo ela
rejeitada ao ser atingida a configurao (q1 , c, Z0 ). No segundo caso, a sentena aabccc apresenta
quantidade insuficiente de smbolos c, e devido a isso ela rejeitada na configurao (q1 , , CZ0 ).
Observe-se que ambas as configuraes no admitem evoluo, conforme a especificao da funo
, e alm disso elas tambm no so configuraes finais do autmato. 2

Convm, neste ponto, introduzir uma extenso na nota dos Diagramas de Estado
estudados para o caso dos autmatos finitos, com o intuito de permitir a representao
grfica tambm dos autmatos de pilha. Diferentemente dos Diagramas de Estado de-
finidos para os autmatos finitos, os arcos entre dois estados p e q so rotulados com
cadeias da forma:
(, Z )/, com , Z e
para cada produo (p, , Z ) = (q, ).
Exemplo 4.30 Considere-se o autmato de pilha no-determinstico M2 a seguir apresentado, cujo
critrio de aceitao de sentenas baseado em estado final.

Q = {q0 , q1 , q2 , q3 , q4 }
= {a, c}
= {Z0 , C }
= {(q0 , a, Z0 ) {(q1 , CCZ0 ), (q2 , CZ0 )},
(q1 , a, C ) {(q1 , CCC )},
(q1 , c, C ) {(q3 , )},
(q2 , a, C ) {(q2 , CC )},
(q2 , c, C ) {(q3 , )},
(q3 , c, C ) {(q3 , )},
(q3 , , Z0 ) {(q4 , Z0 )}}
F = {q4 }
O no-determinismo deste autmato decorre do fato de que, na configurao inicial, existem
duas possibilidades de movimentao quando o smbolo presente na cadeia de entrada for a. O
fato de o critrio de aceitao ser baseado em estado final no tem qualquer vnculo com o no-
determinismo deste autmato, tendo sido introduzido apenas com o intuito de ilustrar a aplicao do
critrio. Conforme mostrado nos Teoremas 4.11 e 4.12, o critrio de aceitao pode ser facilmente
alterado sem prejuzo da linguagem sendo definida. No obstante, o no-determinismo essencial
para a aceitao da linguagem definida por este autmato.
A linguagem definida por M2 :

L2 (M2 ) = {w | (q0 , w , Z0 ) (q4 , , )}


A Figura 4.6 ilustra o Diagrama de Estados para o autmato M2 :
226 Linguagens Formais - Teoria, Modelagem e Implementao

(a, C )/CCC

(a, Z0 )/CCZ0 q1 (c, C )/


(c, C )/

q0 q3 q4
(c, C )/ (, Z0 )/Z0

(a, Z0 )/CZ0 q2

(a, C )/CC

Figura 4.6: Autmato de pilha do Exemplo 4.30

A determinao da linguagem aceita por este autmato pode ser feita analisando-se separada-
mente a linguagem aceita a partir de cada um dos dois ramos em que o reconhecimento se subdivide
aps o no-determinismo inicial.
Para tanto, basta notar que o ramo superior deste autmato (estados q0 e q1 ) acrescenta
dois smbolos C pilha para cada smbolo a localizado na cadeia de entrada. O ramo inferior
(estados q0 e q2 ), por sua vez, acrescenta apenas um smbolo C pilha para cada smbolo a
consumido. Da para a frente, apenas smbolos c da cadeia de entrada sero considerados. Para
cada c consumido, note-se que exatamente um smbolo C removido da pilha. Finalmente, no
estado q3 , caso todos os smbolos C da pilha j tenham sido eliminados, possvel transitar em
vazio para o estado final q4 .
Como concluso, tem-se que a configurao final ser atingida apenas para os casos de cadeias
em que a quantidade de smbolos c seja igual quantidade de smbolos a que a antecede, ou
ento exatamente igual ao dobro da quantidade de smbolos a. Formalmente,

L(M2 ) = {a i c j | i 1 e (j = i ou j = 2i)}
Observe-se que no h, a priori, como o autmato descobrir se ele deve estabelecer a cor-
respondncia de cada a encontrado com apenas um ou ento dois c subseqentes. Por esse
motivo, o no-determinismo inicial oferece duas alternativas, cada qual associada a uma hiptese
sobre a estrutura da cadeia a ser analisada. Havendo fracasso no reconhecimento iniciado por uma
das alternativas, deve-se tentar a outra. Persistindo o fracasso, pode-se ento dizer que a cadeia no
pertence linguagem definida.
A operao deste autmato exemplificada a seguir atravs do reconhecimento das seguintes
sentenas:
1. Sentena: aacc
Movimentos: (q0 , aacc, Z0 ) (q2 , acc, CZ0 ) (q2 , cc, CCZ0 ) (q3 , c, CZ0 ) (q3 , , Z0 )
(q4 , , Z0 )

2. Sentena: aacccc
Movimentos: (q0 , aacccc, Z0 ) (q1 , acccc, CCZ0 ) (q1 , cccc, CCCCZ0 ) (q3 , ccc, CCCZ0 )
(q3 , cc, CCZ0 ) (q3 , c, CZ0 ) (q3 , , Z0 ) (q4 , , Z0 )

Note-se que o reconhecimento, em ambos os casos, pde ser bem-sucedido j na primeira


seqncia de movimentos, uma vez que a escolha da transio a ser aplicada na configurao inicial
foi corretamente adivinhada nas duas situaes. No entanto, a escolha da transio a ser aplicada
na configurao inicial do primeiro caso poderia ter sido diferente da apresentada, e neste caso
ocorreria o seguinte:

1. Sentena: aacc
Movimentos: (q0 , aacc, Z0 ) (q1, acc, CCZ0 ) (q1 , cc, CCCCZ0 ) (q3 , c, CCCZ0 )
(q3 , , CCZ0 )
4 Linguagens Livres de Contexto 227

Como se pode perceber, atinge-se neste caso uma configurao no-final, em que no h
possibilidade de evoluo. Como conseqncia, por se tratar de um autmato no-determinstico,
dever-se-ia retornar configurao inicial e efetuar outra seqncia de movimentaes, adotando-se
a segunda alternativa, em lugar da primeira, para o caso da transio no-determinstica (ou seja,
exatamente o caso correto apresentado anteriormente).
Esquematicamente, as vrias seqncias de configuraes que podem ser percorridas em de-
corrncia da existncia de transies no-determinsticas podem ser representadas graficamente na
forma de uma rvore, conforme ilustrado na Figura 4.7:

Figura 4.7: Aceitao em autmato de pilha no-


determinstico do Exemplo 4.30

Considere-se, agora, o caso de uma cadeia aac que no pertena linguagem definida
por este autmato. Conforme ilustrado na Figura 4.8, a rejeio desta cadeia ocorre apenas aps
o fracasso do reconhecimento em todas as seqncias possveis de movimentao (duas, para este
autmato):

Figura 4.8: Rejeio em autmato de pilha no-


determinstico 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 Linguagens Formais - Teoria, Modelagem e Implementao

A classe de linguagens aceita por autmatos de pilha no-determinsticos com cri-


trio de aceitao baseado em estado final idntica classe de linguagens aceita por
autmatos de pilha no-determinsticos com critrio de aceitao baseado em pilha vazia.
A importncia desse resultado deve-se liberdade de escolha que ele oferece quando
se pretende demonstrar algum teorema relativo aos autmatos de pilha e s linguagens
livres de contexto, podendo-se optar indistintamente entre um e outro critrio de aceita-
o, sem prejuzo para a sua generalizao.
Em particular, este resultado ser empregado na Seo 4.8 na demonstrao da
equivalncia entre a classe de linguagens aceita pelos autmatos de pilha e a classe das
linguagens livres de contexto. Naquele caso, a opo pelo critrio de aceitao baseado
no esvaziamento da pilha permite uma simplificao significativa da demonstrao.
Teorema 4.11 (Estado final pilha vazia) Seja M um autmato de pilha no-
determinstico com critrio de aceitao baseado em estado final. Ento, possvel
definir um autmato de pilha no-determinstico M com critrio de aceitao baseado
em pilha vazia, de modo que L(M ) = V (M ).

Justificativa O Algorimo 4.9 apresenta um mtodo para se efetuar tal converso.


Algoritmo 4.9 (Estado final pilha vazia) Obteno de um autmato de pilha ba-
seado em critrio de aceitao de pilha vazia a partir de outro baseado em critrio de
estado final.

Entrada: um autmato de pilha no-determinstico M = (Q , , , , q0 , Z0 , F ),


com critrio de aceitao baseado em estado final.

Sada: um autmato de pilha no-determinstico M = (Q , , , , q0 , Z0 , ),


com critrio de aceitao baseado em pilha vazia.

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 , , ( {});

d) (q, , ) (q, , ) {(qv , )}, q F , ( {Z0 });

e) (qv , , ) {(qv , )}, ( {Z0 }).

O princpio bsico que justifica a formulao acima apresentada consiste em fazer


M simular M e fazer com que as sentenas que levam M a atingir um estado final levem
4 Linguagens Livres de Contexto 229

M a esvaziar a sua pilha. Dessa maneira, se M atingir uma configurao final, M


tambm a atingir.
No entanto, alguns cuidados especiais devem ser tomados para garantir que no
haja sentenas simultaneamente aceitas por M e rejeitadas por M . Observe que M
possui dois estados a mais que M , e tambm um elemento a mais no alfabeto de pilha. O
smbolo Z0 , que o smbolo inicial de pilha em M , inserido na pilha atravs da transio
descrita no passo (3.b) do algoritmo. O estado inicial q0 foi criado especialmente para
permitir a insero de Z0 no fundo da pilha logo ao incio do reconhecimento. Depois
disso, as transies descritas no passo (3.c) fazem com que M simule o comportamento
de M . Note-se que Z0 , o smbolo inicial de pilha em M , permanece intacto no fundo da
pilha at que seja atingido algum estado final de M .
A inteno de se manter Z0 no fundo da pilha ao longo do reconhecimento dupla.
Por um lado, visa garantir que, na eventualidade de M atingir um estado no-final
com a sua pilha vazia, no haver risco de a correspondente cadeia ser aceita por M
(obviamente, ela rejeitada por M ). Por outro lado, quando M atinge um estado final,
visa garantir que sempre haver pelo menos um smbolo na pilha, permitindo assim a
transio de M para o estado final qv , o que feito atravs das transies do passo (3.d)
preciso lembrar que autmatos de pilha dependem da presena de smbolos no topo
da pilha para poderem evoluir em sua configurao.
No estado qv a pilha esvaziada, por meio das transies do passo (3.d), sem
consumir smbolos da fita de entrada. Assim, toda e qualquer cadeia que seja totalmente
consumida por M , fazendo com que o mesmo atinja um estado final ou seja, toda
e qualquer cadeia aceita por M , far com que M atinja o estado qv , tambm com
a cadeia de entrada esgotada, porm com a pilha vazia ou seja, ser aceita por M .
Logo, M e M aceitam a mesma linguagem. 

Exemplo 4.31 Considere-se o autmato de pilha M :

Q = {q0 , q1 , q2 }
= {a, b, c}
= {Z0 , A, B }
= {(q0 , a, Z0 ) {(q0 , AZ0 )}, (q1 , a, A) {(q1 , )},
(q0 , a, A) {(q0 , AA)}, (q1 , b, B ) {(q1 , )},
(q0 , a, B ) {(q0 , AB )}, (q1 , , Z0 ) {(q2 , )},
(q0 , b, Z0 ) {(q0 , BZ0 )}, (q0 , b, A) {(q0 , BA)},
(q0 , b, B ) {(q0 , BB )}, (q0 , c, Z0 ) {(q2 , )},
(q0 , c, A) {(q1 , A)}, (q0 , c, B ) {(q1 , B )}}
F = {q2 }
230 Linguagens Formais - Teoria, Modelagem e Implementao

(a, Z0 )/AZ0 , ... (b, B )/, (a, A)/

(c, B )/B , (c, A)/A


q0 q1

(c, Z0 )/ (, Z0 )/
q2

Figura 4.9: Autmato M com critrio de aceitao de es-


tado final

A Figura 4.9 ilustra M na notao dos Diagramas de Estados. A linguagem definida por ele
{cR | {a, b} }. Aplicando-se o algoritmo de converso do critrio de aceitao, obtm-se o
seguinte autmato M equivalente, com aceitao baseada no esvaziamento da pilha:

M = (Q , , , , q0 , Z0 , )
Q = {q0 , q1 , q2 , qv , q0 }

= {Z0 , A, B , Z0 }
= {(q0 , a, Z0 ) {(q0 , AZ0 )}, (q1 , a, A) {(q1 , )},
(q0 , a, A) {(q0 , AA)}, (q1 , b, B ) {(q1 , )},
(q0 , a, B ) {(q0 , AB )}, (q1 , , Z0 ) {(q2 , )},
(q0 , b, Z0 ) {(q0 , BZ0 )}, (q0 , b, A) {(q0 , BA)},
(q0 , b, B ) {(q0 , BB )}, (q0 , c, Z0 ) {(q2 , )},
(q0 , c, A) {(q1 , A)}, (q0 , c, B ) {(q1 , B )},
(q0 , , Z0 ) {(q0 , Z0 Z0 )},
(q2 , , Z0 ) {(qv , )},
(q2 , , Z0 ) {(qv , )},
(q2 , , A) {(qv , )},
(q2 , , B ) {(qv , )},
(qv , , Z0 ) {(qv , )},
(qv , , Z0 ) {(qv , )},
(qv , , A) {(qv , )},
(qv , , B ) {(qv , )}}
4 Linguagens Livres de Contexto 231
(b, B )/, (a, A)/
(a, Z0 )/AZ0 , ...

(, Z0 )/Z0 Z0 (c, B )/B , (c, A)/A


q0 q0 q1
(c, Z0 )/
(, Z0 )/, ...
(, Z0 )/

qv q2
(, Z0 )/, ...

Figura 4.10: Autmato M equivalente com critrio de acei-


tao de pilha vazia
2

Teorema 4.12 (Estado final pilha vazia) Seja M um autmato de pilha no-
determinstico com critrio de aceitao baseado em pilha vazia. Ento, possvel defi-
nir um autmato de pilha no-determinstico M com critrio de aceitao baseado em
estado final, de modo que V (M ) = L(M ).

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.

Entrada: um autmato de pilha no-determinstico M = (Q , , , , q0 , Z0 , F ),


com critrio de aceitao baseado em pilha vazia.

Sada: um autmato de pilha no-determinstico M = (Q , , , , q0 , Z0 , ),


com critrio de aceitao baseado em estado final.

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 , , ( {});

d) (q, , Z0 ) {(qf , )}, q Q.

Assim como no caso anterior, o objetivo construir M capaz de simular o compor-


tamento de M . Alm disso, sempre que M esvaziar a sua pilha, o objetivo fazer com
232 Linguagens Formais - Teoria, Modelagem e Implementao

que M transite para um estado final. Dessa maneira, as sentenas que conduzem M a
uma configurao final causaro o mesmo efeito sobre M .
A fim de detectar o esvaziamento da pilha em M , M exibe, inserido no fundo de
sua pilha, logo ao incio do reconhecimento, um novo smbolo de pilha Z0 . A transio
criada no passso (3.b) do algoritmo tem por objetivo inserir na pilha, acima de Z0 , o
smbolo de pilha inicial de M , permitindo que as transies do passo (3.c) reproduzam o
comportamento de M sobre M .
Finalmente, estando M em qualquer estado, a simples presena de Z0 no topo da
pilha informao suficiente para caracterizar o esvaziamento da pilha em M , causando
a transio de M para o estado final qf . Dessa forma, como se pode perceber intuitiva-
mente, cada configurao final em M tem a sua configurao correspondente em M , e
ambos os autmatos de pilha aceitam portanto a mesma linguagem. 

Exemplo 4.32 Considere o autmato de pilha da Figura 4.11, cujo critrio de aceitao baseado
em pilha vazia.
(a, Z0 )/X

q0 (a, X )/XX

(b, X )/

Figura 4.11: Autmato M com critrio de aceitao de


pilha vazia

A linguagem aceita por este autmato constituda pelas sentenas sobre {a, b} que contm
a mesma quantidade de smbolos a e b e, alm disso, cuja quantidade acumulada de smbolos a seja
sempre maior que a quantidade de smbolos b, contando-se os smbolos que formam a sentena, da
esquerda para a direita. Exemplos de cadeias aceitas so aaababbb, ab e abaababb. Exemplos de
cadeias no aceitas so a, ba, aaabb e abbbbaaa.
Aplicando-se o Algoritmo 4.10 de converso do critrio de aceitao, obtm-se um novo aut-
mato que reconhece a mesma linguagem e cujo critrio baseado em estado final (Figura 4.12).
(a, Z0 )/X

(, Z0 )/Z0 Z0 (, Z0 )/
q0 q0 qf

(b, X )/

Figura 4.12: Autmato M equivalente com critrio de acei-


tao de estado final
2
4 Linguagens Livres de Contexto 233

4.8 Equivalncia entre Gramticas Livres de Contexto e


Autmatos de Pilha
Apresentar-se- aqui o resultado terico que estabelece a equivalncia da classe de lin-
guagens aceita pelos autmatos de pilha no-determinsticos com a classe de linguagens
geradas pelas gramticas do tipo 2 as linguagens livres de contexto gerais.
Essa apresentao feita em duas partes. Inicialmente, mostra-se que para qualquer
gramtica livre de contexto possvel definir um autmato de pilha no-determinstico
que reconhece exatamente a mesma linguagem gerada pela gramtica. A seguir, apre-
sentado o resultado inverso, ou seja, de que toda e qualquer linguagem aceita por um
autmato de pilha no-determinstico pode ser gerada por uma gramtica livre de con-
texto.
Teorema 4.13 (Gramtica autmato de pilha) Seja G uma gramtica livre de
contexto. Ento possvel definir um autmato de pilha no-determinstico M , com
critrio de aceitao baseado em pilha vazia, de modo que V (M ) = L(G).

Justificativa Considere-se G = (V , , P , S ) na Forma Normal de Greibach, e 6 L(G).


O Algoritmo 4.11 mostra como obter o autmato M a partir de G.
Algoritmo 4.11 (Gramtica autmato de pilha, verso 1) Obteno de um aut-
mato de pilha no-determinstico a partir de uma gramtica livre de contexto na Forma
Normal de Greibach.

Entrada: uma gramtica livre de contexto G = (V , , P , S ) na Forma Normal de


Greibach, e 6 L(G);

Sada: um autmato de pilha M = (Q , , , , q, S , F ), com critrio de aceitao


de pilha vazia, tal que V (M ) = L(G);

Mtodo:

1. Q {q};

2. N ;

3. F ;

4. Funo de transio:

a) ;

b) (q, , A) = {(q, ) | A P }, A N , , N .

Note-se, no algoritmo acima, que se = , ento {(q, )} (q, , A).


possvel provar (ver [46]), por induo sobre a quantidade de movimentos reali-
zados pelo autmato assim definido, que:

S x
234 Linguagens Formais - Teoria, Modelagem e Implementao

se e somente se
(q, x , S ) (q, , )
Em outras palavras, se existe uma seqncia de derivaes em G que gera uma
cadeia x , ento existe uma seqncia de movimentaes em M que reconhece x , e vice-
versa. Portanto, G e M definem a mesma linguagem. 
Observe-se, no caso geral, que os autmatos construdos conforme o algoritmo 4.11
so no-determinsticos, uma vez que a simples presena de produes do tipo A 1
e A 2 , em P , com 1 6= 2 , propicia a existncia de mais de uma movimentao
possvel a partir da configurao (q, z , A):

(q, z , A) (q, z , 1 ) 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 reconheci-
mento de sentenas atravs de movimentos que simulem a seqncia de derivaes mais
esquerda que seriam efetuadas pela gramtica correspondente na gerao das mesmas
sentenas.
De acordo com essa definio, quando lido no sentido do topo para o fundo, o
contedo da pilha composto, em qualquer instante, por uma seqncia de smbolos no-
terminais, tornados elementos do alfabeto de pilha do autmato. Mantidos nesta ordem,
eles representam os smbolos no-terminais que ainda necessitariam sofrer substituio na
correspondente forma sentencial que seria obtida atravs de derivaes mais esquerda
na gramtica fornecida. Por sua vez, as cadeias formadas pelos smbolos terminais que
compem o prefixo das formas sentenciais obtidas a partir de derivaes mais esquerda,
em vez de serem mantidas na pilha, correspondem sempre seqncia de smbolos que
formam a poro j lida da fita de entrada.
Devido prpria organizao em pilha (o primeiro elemento a entrar o ltimo a
sair), o smbolo no topo da pilha representa sempre o prximo smbolo no-terminal a
sofrer substituio em uma seqncia de derivaes mais esquerda, de acordo com a
gramtica correspondente. Como a gramtica se encontra na Forma Normal de Greibach,
todas as produes so do tipo A , com e N . Assim, a substituio
do smbolo A, presente no topo da pilha, por ocorre apenas no caso em que o prximo
smbolo na cadeia de entrada for . Nos casos em que isso no ocorre, no haver tal
possibilidade de movimentao, e a cadeia ser rejeitada, pois a pilha no estar vazia.
Ao avanar o cursor de leitura e modificar o contedo da pilha, o autmato de pilha
simula exatamente a seqncia de movimentos que seriam executados pela aplicao da
gramtica correspondente atravs de derivaes mais esquerda.
Exemplo 4.33 Tome-se como exemplo a sentena x L(G), e considere-se, em um dado momento
da derivao mais esquerda de x atravs de G, a forma sentencial yA com y , A N e
N . Seja A a prxima produo a ser aplicada:

S yA y yz
com x = yz .
Neste caso, o comportamento do autmato de pilha pode ser representado, em cada uma
dessas quatro fases, atravs das figuras apresentadas a seguir, que ilustram as seguintes seqncias
de movimentos:
(q, x , S ) (q, z , A) (q, z , ) (q, , )
Examinem-se, pois, as figuras que ilustram essas configuraes. Na configurao inicial, a pilha
contm apenas S e o cursor aponta para o primeiro smbolo da cadeia de entrada x :
4 Linguagens Livres de Contexto 235

Figura 4.13: Autmato de pilha do Exemplo 4.33: configu-


rao inicial

Aps alguns movimentos, a parte j consumida da cadeia de entrada y, o smbolo no topo


da pilha A, o restante da pilha , e o prximo smbolo na cadeia de entrada :

Figura 4.14: Autmato de pilha do Exemplo 4.33: antes da


aplicao de uma regra

Imediatamente aps a aplicao da produo A , a parte consumida da cadeia de entrada


torna-se y e o contedo da pilha modificado para :

Figura 4.15: Autmato de pilha do Exemplo 4.33: depois


da aplicao de uma regra

Finalmente, ao trmino da leitura da cadeia x , a parte consumida da cadeia de entrada torna-


se exatamente x e a pilha esvaziada por completo, caracterizando portanto a configurao de
aceitao do autmato:
236 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 4.16: Autmato de pilha do Exemplo 4.33: configu-


rao final
2

Exemplo 4.34 Considere-se a linguagem das expresses aritmticas na notao infixa, cuja gramtica
na Forma Normal de Greibach foi obtida no Exemplo 4.26. Os no-terminais T , E e ) foram
renomeados para Y , Z e X , respectivamente:

{F (EX | a,
T (EX | a | (EXY | aY ,
E (EX | a | (EXY | aY | (EXZ | aZ | (EXYZ | aYZ ,
Y F | FY ,
Z +T | +TZ ,
X )}
Aplicando-se o Algoritmo 4.11, obtm-se o autmato de pilha no-determinstico cuja funo
de transio apresentada a seguir:

{(q, (, F ) {(q, EX )},


(q, a, F ) {(q, )},
(q, (, T ) {(q, EX ), (q, EXY )},
(q, a, T ) {(q, ), (q, Y )},
(q, (, E ) {(q, EX ), (q, EXY ), (q, EXZ ), (q, EXYZ )},
(q, a, E ) {(q, ), (q, Y ), (q, Z ), (q, YZ )},
(q, , Y ) {(q, F ), (q, FY )},
(q, +, Z ) {(q, T ), (q, TZ )},
(q, ), X ) {(q, )}}
2

Cumpre notar, na demonstrao informal do Teorema 4.13, que, como conseqn-


cia 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 acres-
centadas:
(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 .
4 Linguagens Livres de Contexto 237

A transio (q0 , , S ) = {(q1 , S )} preserva o contedo da pilha, conduzindo o autmato


ao estado convencional utilizado para o reconhecimento de L {}.
Observe-se que a simples incluso da transio (q, , S ) = {(q, )} na mquina M
anteriormente definida no soluo para o problema apresentado, uma vez que permite
a remoo do smbolo S em outras configuraes que no apenas a inicial, podendo causar
alterao na linguagem L originalmente definida. Na verdade, a incluso de um estado
adicional simula a existncia de uma nova raiz para a gramtica-base, impedindo que a
remoo de S ocorra em outras configuraes que no a inicial, alm de possibilitar o
reconhecimento da cadeia vazia se esta pertencer linguagem definida por G.
Exemplo 4.35 Considere-se a gramtica G definida pelo seguinte conjunto de produes:

{S aSBS ,
S aB ,
B b}
A linguagem definida por esta gramtica, L(G), aceita por um autmato M que tenha a
seguinte funo de transio:

(q, a, S ) = {(q, SBS ), (q, B )}


(q, b, B ) = {(q, )}
A menor e a segunda menor sentenas pertencentes a L(G) so, respectivamente:

S aB ab

S aSBS aaBBS aabbS aabbab

Logo, L(G) = {ab, aabbab, . . .}. Considerando-se a linguagem L = L {}, pode-se imedia-
tamente observar que a mera incluso da produo S em G no produziria o efeito desejado,
que o de permitir a gerao de L , uma vez que ela incluiria a gerao, por exemplo, da cadeia
aabb, originariamente no pertencente a L. Por esse mesmo motivo, a transio:
(q, , S ) = {(q, )}

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 ) = {(q0 , ), (q1 , S )}


(q1 , a, S ) = {(q1 , SBS ), (q1 , B )}
(q1 , b, B ) = {(q1 , )}

Note a correspondncia do conjunto de produes assim definido com a gramtica G abaixo


apresentada, L = L (G ):

Z S
Z
S aSBS
S aB
B b
2

Naturalmente, dada uma gramtica G em que S a raiz, sendo que S garantida-


mente 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 Linguagens Formais - Teoria, Modelagem e Implementao

permitir o reconhecimento da cadeia vazia em adio linguagem original. Em casos


particulares como esse, a transio:

(q, , S ) = {(q, )}

produz o efeito desejado, podendo ser includa em M sem que haja risco de se alterar a
linguagem definida pelo autmato.
Uma forma alternativa de se especificar um autmato de pilha M que reconhea
exatamente a mesma linguagem definida por uma gramtica livre de contexto qualquer,
no necessariamente na Forma Normal de Greibach, e eventualmente incluindo a cadeia
vazia, pode tambm ser obtida atravs do Algoritmo 4.12, a seguir apresentado.
Algoritmo 4.12 (Gramtica autmato de pilha, verso 2) Obteno de um aut-
mato de pilha no-determinstico a partir de uma gramtica livre de contexto qualquer.

Entrada: uma gramtica livre de contexto G = (V , , P , S );

Sada: um autmato de pilha no-determinstico M = (Q , , , q, S , F ) com cri-


trio 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 gra-


mtica, 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 con-
dicionada 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 tam-
bm 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 no-


terminal no presente topo da pilha e tambm do prximo smbolo de entrada. No-
4 Linguagens Livres de Contexto 239

determinismos, neste caso, ocorrem apenas quando h mais de uma alternativa


de substituio para um mesmo smbolo no-terminal comeando com o mesmo
smbolo terminal:

A 1 e A 2 geram (q, , A) = {(q, 1 ), (q, 2 )}

Por outro lado, regras iniciadas com smbolos distintos no geram no-determinismo:

A 1 1 gera (q, 1 , A) = {(q, 1 1 )}

A 2 2 gera (q, 2 , A) = {(q, 2 2 )}

2. Pelo segundo mtodo, a escolha da produo a ser aplicada depende apenas do


no-terminal presente no topo da pilha. Dessa forma, o conjunto de opes de
substituio para um mesmo smbolo no-terminal geralmente maior do que no
primeiro caso:

A 1 e A 2 geram (q, , A) = {(q, 1 ), (q, 2 )}

Essa situao se repete caso as regras se iniciem com smbolos distintos:

A 1 1 e A 2 2 geram (q, , A) = {(q, 1 1 ), (q, 2 2 )}

Constata-se, dessa maneira, que o segundo mtodo gera uma situao de no-
determinismo para regras que se iniciam com smbolos diferentes, o que no ocorre no
primeiro mtodo. Assim, o segundo mtodo tende a apresentar mais situaes no-
determinsticas do que o primeiro, dando a este uma certa vantagem quanto potencial
eficincia do reconhecimento.
Irrelevante do ponto de vista terico, a questo da escolha de um ou outro mtodo
para a obteno de autmatos de pilha a partir de gramticas livres de contexto apre-
senta um certo interesse quando se trata da realizao fsica de reconhecedores sintticos
eficientes para linguagens livres de contexto quaisquer, uma vez que o primeiro mtodo
possibilita, no caso geral, a construo de autmatos no-determinsticos mais eficientes
do que os obtidos atravs da aplicao do segundo mtodo, em decorrncia da limitao
na quantidade de movimentos considerados vlidos em cada configurao.
Na prtica, no entanto, o maior interesse recai sobre os autmatos de pilha deter-
minsticos. Porm, conforme ser visto na Seo 4.11, a classe de linguagens por eles
reconhecida apenas um subconjunto das linguagens livres de contexto. Linguagens
livres de contexto genricas s podem ser reconhecidas atravs de autmatos de pilha
no-determinsticos, e por esse motivo o primeiro mtodo mais interessante do ponto
de vista de engenharia, quando se trata da realizao fsica de tais reconhecedores.
Exemplo 4.36 Considere-se a gramtica das expresses aritmticas utilizada no Exemplo 4.26, em-
pregada originalmente como base para a obteno da gramtica equivalente na Forma Normal de
Greibach. No conjunto de produes abaixo, os no-terminais E e T foram respectivamente reno-
meados para Z e Y .

{E T | TZ ,
T F | FY ,
240 Linguagens Formais - Teoria, Modelagem e Implementao

F (E ) | a,
Y F | FY ,
Z +T | +TZ }

Aplicando-se o mtodo alternativo (Algoritmo 4.12), obtm-se o autmato de pilha no-


determinstico cuja funo de transio :

{(q, , E ) {(q, T ), (q, TZ )},


(q, , T ) {(q, F ), (q, FY )},
(q, , F ) {(q, (E )), (q, a)},
(q, , Y ) {(q, F ), (q, FY )},
(q, , Z ) {(q, +T ), (q, +TZ )},
(q, a, a) {(q, )},
(q, (, () {(q, )},
(q, ), )) {(q, )},
(q, +, +) {(q, )},
(q, , ) {(q, )}}
2

Ser examinada a seguir a equivalncia entre os autmatos de pilha e as gramticas


do tipo 2, no que se refere classe de linguagens que ambos os dispositivos so capazes
de definir.
Teorema 4.14 (Gramtica autmato de pilha) Seja M um autmato de pilha
com critrio de aceitao de pilha vazia. Ento possvel definir uma gramtica livre de
contexto G, de modo que L(G) = V (M ).

Justificativa Seja M = (Q , , , , q0 , Z0 , F ). A gramtica G = (V , , P , S ), tal que


L(G) = V (M ), pode ser obtida pela aplicao do Algoritmo 4.13.
Algoritmo 4.13 (Gramtica autmato de pilha) Obteno de uma gramtica
livre de contexto a partir de um autmato de pilha.

Entrada: um autmato de pilha M = (Q , , , , q0 , Z0 , F ) com critrio de aceita-


o de pilha vazia;

Sada: uma gramtica livre de contexto G = (V , , P , S ), tal que L(G) = V (M );

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);


4 Linguagens Livres de Contexto 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

Para que se possa intuir o significado do mtodo apresentado, deve-se inicialmente


notar que os smbolos no-terminais [qi Zqk ] criados na construo de G tm por obje-
tivo representar o conjunto das sentenas que so aceitas entre as duas configuraes
sugeridas pelo nome atribudo ao no-terminal:

(qi , , Z0 ) (qk , , )

Assim, qi e Z devem ser interpretados como uma determinada configurao do


autmato, e qk o estado que ele atinge aps a realizao de uma srie de movimentos, ao
trmino dos quais o smbolo Z removido da pilha. O conjunto das cadeias que per-
mitem ao autmato transitar de uma para outra configurao constitui uma linguagem,
podendo ser representada como:

L([qi Zqk ]) = { | [qi Zqk ] }

Conseqentemente, como a linguagem aceita pelo autmato formada pelo conjunto


das cadeias que o levam desde a configurao inicial nica at uma configurao final,
no necessariamente nica, tem-se que esta linguagem pode ser formalizada, do ponto de
vista gramatical, como: [
L(G) = L([q0 Z0 qi ])
qi Q

Observe-se que derivaes mais esquerda em G simulam os movimentos de M


ao longo de suas diversas configuraes. Para justificar a necessidade de incorporao
da informao de estado definio dos no-terminais de G, considere-se inicialmente
N = , ou seja, suponha-se que os no-terminais de G correspondem aos elementos do
alfabeto de pilha de M e, alm disso, que as produes de G sejam definidas de maneira
simplificada, com base exclusivamente no alfabeto de pilha e nas diversas substituies
possveis para elementos no topo da pilha, dispensando-se a informao dos estados em
sua definio.
Essa simplificao possibilitaria a aplicao incondicional de produes do tipo A
em qualquer forma sentencial, obtida a partir de G, em que A estivesse presente.
Claramente, no essa a informao que o autmato traz, uma vez que a substi-
tuio de A por possvel apenas em algumas situaes ou estados: aqueles para os
quais {(r , )} (q, , A). Dessa forma, a caracterizao de um no-terminal deveria
necessariamente levar em conta a informao do estado (ou grupo de estados) no qual a
substituio em questo pode ser feita. Caso contrrio, corre-se o risco de alterar a lin-
guagem definida pela gramtica, tornando-a diferente da linguagem aceita pelo autmato
em questo.
Em outras palavras, note-se que a presena de um no-terminal A em uma forma
sentencial gerada a partir de derivaes mais esquerda em G:

S A, com , V
242 Linguagens Formais - Teoria, Modelagem e Implementao

deveria corresponder, em M , ao caso em que A o smbolo presente no topo da pilha e ,



o primeiro smbolo terminal derivvel a partir de A, ou seja, A . A substituio
de A por nessa forma sentencial, para uma produo A da gramtica, deve ser
admitida como alternativa de substituio vlida se e apenas se a transio:
{(qj , )} (qi , , A)
constituir alternativa de movimentao a partir da configurao (qi , , A):
(q0 , , Z0 ) (qi , , A) (qj , , )
Caso a informao de estado no esteja incorporada definio dos no-terminais
de G, conforme discutido, corre-se o risco de admitir a aplicao das produes de G em
formas sentenciais sem qualquer correspondncia com as configuraes de M . Justamente
para evitar essa situao, e visando estabelecer a plena equivalncia entre as formas
sentenciais de G e as configuraes de M , que a informao de estado deve ser agregada
a cada smbolo A N , conforme originalmente proposto.
Assim, definem-se os smbolos no-terminais de G como:
[qi Ar ], com qi , r Q , A
Supondo-se que {(r , )} (qi , , A), garante-se que a produo A seja
empregada apenas naquelas formas sentenciais geradas por G em que o no-terminal
[qi Ar ] estiver presente, no se manifestando nunca como alternativa de substituio para
os demais no-terminais [qk Ar ], k 6= i, caso {(r , )} no esteja contido em (qk , , A).
Tendo-se analisado o significado atribudo aos no-terminais definidos para G, a
interpretao dos critrios de construo do conjunto de produes torna-se mais fcil:
cada produo de G representa a evoluo do correspondente autmato ao longo de
uma srie de configuraes, srie esta que se inicia com o consumo de um smbolo da
cadeia de entrada (ou nenhum, se a transio for em vazio), e termina com a remoo de
todos os smbolos armazenados na pilha como conseqncia da aplicao dessa transio.
Dessa forma, as produes definidas para S representam todas as possveis seqncias
de movimentaes que levam M da configurao inicial at uma de suas vrias possveis
configuraes finais adotando-se o critrio de aceitao por esvaziamento da pilha. 
Como efeito colateral da aplicao do mtodo apresentado, freqente a obteno
de gramticas com elevada quantidade de smbolos no-terminais e produes inteis.
Apesar de a aplicao dos mtodos anteriormente estudados possibilitar a eliminao
sistemtica de tais elementos inteis, possvel limitar a sua proliferao desde o incio,
restringindo-se a aplicao do Algoritmo 4.13 apenas aos novos smbolos no-terminais
que surgem em cada passo.
Exemplo 4.37 Seja M = ({q0 , q1 }, {a, b}, {X , Z0 }, , q0 , Z0 , ), representado na Figura 4.17.
(a, Z0 )/XZ0 (b, X )/

(, X )/X
q0 q1
(, X )/XX

(a, X )/XX (b, Z0 )/

Figura 4.17: Autmato de pilha M do Exemplo 4.37


4 Linguagens Livres de Contexto 243

A obteno de G, tal que L(G) = V (M ), tem como ponto de partida as duas produes do
conjunto:

{S [q0 Z0 q0 ], (4.7)
S [q0 Z0 q1 ]} (4.8)

Considerando-se inicialmente (4.7), definem-se as produes de G que apresentam [q0 Z0 q0 ]


do lado esquerdo. Essas produes decorrem das transies de M que emergem do estado q0 com
o smbolo do alfabeto de pilha Z0 . Como h apenas uma transio que satisfaz a esse requisito,
(q0 , a, Z0 ) = (q0 , XZ0 )
obtm-se por conseguinte o conjunto de produes:

{[q0 Z0 q0 ] a[q0 Xq0 ][q0 Z0 q0 ], (4.9)


[q0 Z0 q0 ] a[q0 Xq1 ][q1 Z0 q0 ]} (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 no-
terminal dependeria, antes de mais nada, da existncia de uma transio que, no estado q1 , estivesse
associada ao smbolo Z0 , o que no verdade para o autmato considerado. Desse modo, descarta-
se a produo (4.10). Como conseqncia, tambm a produo (4.9) torna-se intil, pois no h
termo independente de [q0 Z0 q0 ] que possibilite a resoluo da equao representada pela produo.
Prosseguindo com a produo (4.8), considere-se o smbolo [q0 Z0 q1 ]. As produes a ele
associadas tambm derivam da transio que vincula o smbolo Z0 ao estado q0 :
(q0 , a, Z0 ) = (q0 , XZ0 )

{[q0 Z0 q1 ] a[q0 Xq0 ][q0 Z0 q1 ], (4.11)


[q0 Z0 q1 ] a[q0 Xq1 ][q1 Z0 q1 ]} (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 ] a[q0 Xq0 ][q0 Xq0 ], (4.13)


[q0 Xq0 ] a[q0 Xq1 ][q1 Xq0 ]} (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 ) e (q0 , , X ) = (q1 , X )

{[q0 Xq1 ] a[q0 Xq0 ][q0 Xq1 ], (4.15)


[q0 Xq1 ] a[q0 Xq1 ][q1 Xq1 ], (4.16)
[q0 Xq1 ] [q1 Xq1 ]} (4.17)
Observe-se que as duas primeiras produes so decorrncia da primeira transio, ao passo
que a terceira provm da segunda transio. Como [q0 Xq0 ] um smbolo intil, isso acarreta
244 Linguagens Formais - Teoria, Modelagem e Implementao

a inutilidade da produo (4.15). Continuando com a produo (4.12), define-se agora a nica
produo do smbolo [q1 Z0 q1 ], e que deriva da transio:
(q1 , b, Z0 ) = (q1 , )

[q1 Z0 q1 ] b (4.18)
Finalmente, para completar a definio dos smbolos no-terminais at aqui surgidos, resta
obter as produes de [q1 Xq1 ], utilizado nas produes (4.16) e (4.17). Note-se que estas decorrem,
respectivamente, das transies:
(q1 , b, X ) = (q1 , ) e (q1 , , X ) = (q1 , XX )

{[q1 Xq1 ] b, (4.19)


[q1 Xq1 ] [q1 Xq1 ][q1 Xq1 ]} (4.20)
Como resultado, obtm-se o seguinte conjunto de produes:

(4.8) {S [q0 Z0 q1 ],
(4.12) [q0 Z0 q1 ] a[q0 Xq1 ][q1 Z0 q1 ],
(4.16) [q0 Xq1 ] a[q0 Xq1 ][q1 Xq1 ],
(4.17) [q0 Xq1 ] [q1 Xq1 ],
(4.18) [q1 Z0 q1 ] b,
(4.19) [q1 Xq1 ] b,
(4.20) [q1 Xq1 ] [q1 Xq1 ][q1 Xq1 ]}
Renomeando-se os no-terminais, obtm-se:

(4.8) {S A,
(4.12) A aBC ,
(4.16) B aBD,
(4.17) B D,
(4.18) C b,
(4.19) D b,
(4.20) D DD}

ou seja, L(G) = V (M ) = {a i b j | i 1 e j > i}.


Apresenta-se agora uma particular seqncia de movimentos efetuada por M durante o reco-
nhecimento da sentena aabbbb:

(q0 , aabbbb, Z0 ) (q0 , abbbb, XZ0 ) (q0 , bbbb, XXZ0 ) (q1 , bbbb, XXZ0 ) (q1 , bbb, XZ0 )
(q1 , bbb, XXZ0 ) (q1 , bb, XZ0 ) (q1 , b, Z0 ) (q1 , , )

A correspondncia entre G e M pode ser ilustrada atravs da anlise da seqncia de derivaes


mais esquerda obtida para esta mesma cadeia aabbbb, e de sua comparao com a seqncia de
movimentos efetuados pelo autmato conforme apresentado acima:

S [q0 Z0 q1 ] a[q0 Xq1 ][q1 Z0 q1 ] aa[q0 Xq1 ][q1 Xq1 ][q1 Z0 q1 ]


aa[q1 Xq1 ][q1 Xq1 ][q1 Z0 q1 ] aab[q1 Xq1 ][q1 Z0 q1 ]
aab[q1 Xq1 ][q1 Xq1 ][q1 Z0 q1 ]
aabb[q1 Xq1 ][q1 Z0 q1 ]
aabbb[q1 Z0 q1 ]
aabbbb
4 Linguagens Livres de Contexto 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 conside-
rada. Note-se, portanto, que G simula, atravs de uma seqncia de derivaes mais esquerda,
a seqncia de movimentos que conduz M de sua configurao inicial at uma configurao final.
Retornando questo da caracterizao dos no-terminais em G, conforme mencionado an-
teriormente, a incorporao dos estados na definio dos mesmos necessria para evitar a gerao
de formas sentenciais invlidas, sendo, portanto, indispensvel para garantir a equivalncia entre a
linguagem aceita e a linguagem gerada.
Este ponto pode ser melhor visualizado neste exemplo da seguinte forma: considere-se G em
que N = e P obtido simplesmente analisando-se todas as possveis substituies de smbolos
no topo da pilha e a eventual presena de elementos de na fita de entrada, sem levar em conta a
existncia dos estados.
Assim, obtm-se o conjunto de produes seguinte:

{S Z0 ,
Z0 aXX , (de (q0 , a, Z0 ) = (q0 , XZ0 ))
X aXX , (de (q0 , a, X ) = (q0 , XX ))
X X, (de (q0 , , X ) = (q1 , X ))
X b, (de (q1 , b, X ) = (q1 , ))
X XX , (de (q1, , X ) = (q1 , XX ))
Z0 b} (de (q1 , b, Z0 ) = (q1 , ))

fcil notar, neste caso, que L(G) L(G ). Considere-se, a ttulo de exemplo, a cadeia b.
Evidentemente, b 6 L(G), mas no entanto, em G , tem-se:
S Z0 b
A razo disso acontecer que a produo Z0 b convertida para uma transio de M
apenas no estado q1 . Ao ignorar a informao de estado na caracterizao dos no-terminais de

G , a substituio torna-se possvel independentemente do estado. Neste exemplo, a derivao
Z0 b corresponderia aplicao de uma transio originalmente inexistente no estado q0 . Deixa,
portanto, de haver correspondncia entre as configuraes do reconhecedor e as formas sentenciais
da gramtica, quando a informao de estado descartada na caracterizao de seus smbolos no-
terminais. 2

4.9 Relao entre Linguagens Livres de Contexto e


Linguagens Regulares
As linguagens regulares constituem um subconjunto prprio das linguagens livres de
contexto. De fato, possvel demonstrar que toda linguagem regular tambm uma lin-
guagem livre de contexto e, por outro lado, que existem linguagens livres de contexto que
no so regulares. Esses resultados sero demonstrados, respectivamente, nos Teoremas
4.15 e 4.16 a seguir.
Teorema 4.15 (Regulares livres de contexto) Toda linguagem regular tambm
uma linguagem livre de contexto.

Justificativa Considere-se L uma linguagem regular qualquer. Ento, por definio,


existe uma gramtica linear direita G que define L. As regras de G possuem todas,
sem exceo, apenas um smbolo no-terminal do lado esquerdo e uma cadeia qualquer
pertencente a ( {})(N {}) do lado direito. Como as gramticas livres de contexto
tambm exigem um nico smbolo no-terminal no lado esquerdo das regras, e, alm
disso, ( {})(N {}) V NV , isso implica que toda gramtica linear direita
tambm uma gramtica livre de contexto. Logo, toda linguagem regular tambm uma
linguagem livre de contexto. 
246 Linguagens Formais - Teoria, Modelagem e Implementao

Teorema 4.16 (Regulares 6= livres de contexto) Existem linguagens livres de con-


texto que no so regulares.

Justificativa Considere-se, por exemplo, a linguagem L = {0i 10i | i 1}. Conforme


demonstrado no Exemplo 3.48, L no regular, uma vez que no satisfaz ao Pumping
Lemma das linguagens regulares. No entanto, a gramtica G = ({S , 0, 1}, {0, 1}, {S
0S 0, S 010}, S ) gera exatamente L. Logo, L livre de contexto, porm no regular.
De maneira semelhante, pode-se demonstrar a existncia de inmeras outras linguagens
com essa mesma caracterstica. 
Conforme definido na Seo 4.1, uma linguagem dita estritamente livre de contexto
se ela for livre de contexto, porm no-regular. A caracterstica desse tipo de linguagens
que elas so geradas apenas por gramticas que possuam pelo menos um smbolo no-
terminal que seja auto-recursivo central e essencial. Assim, possvel gerar, nas formas
sentenciais geradas pela gramtica, subcadeias da forma:

Y Y , com , +

as quais so responsveis pelo balanceamento dos termos e nas sentenas da lingua-


gem.
De fato, gramticas lineares direita no permitem a definio de smbolos no-
terminais com essa propriedade. Ao contrrio, gramticas lineares direita geram apenas
formas sentenciais da seguinte forma:

Y Y , com +

em que, obviamente, no h balanceamento de termos nem, portanto, aninhamentos


sintticos. A existncia de termos balanceados (ou aninhados) , por isso, o fator que
diferencia uma linguagem estritamente livre de contexto de uma linguagem regular.

4.10 Linguagens que no so Livres de Contexto


Como se sabe, as linguagens regulares podem ser definidas atravs de expresses regula-
res, gramticas regulares ou autmatos finitos. Por outro lado, a existncia de linguagens
no-regulares foi provada atravs do uso do Pumping Lemma das linguagens regulares.
De maneira anloga, para provar que uma linguagem livre de contexto, sufi-
ciente apresentar uma gramtica livre de contexto que gere esta linguagem, ou ainda
um autmato de pilha que a reconhea. A existncia de linguagens que no so livres
de contexto pode ser demonstrada com o auxlio do Pumping Lemma das linguagens
livres de contexto, apresentado a seguir.
A importncia de um Pumping Lemma para as linguagens livres de contexto no
se limita posssibilidade de demonstrar a existncia de linguagens que no sejam livres
de contexto, e, portanto, de sugerir a existncia de outras classes de linguagens. Ele
usado tambm na demonstrao de algumas propriedades importantes das linguagens
livres de contexto.
Teorema 4.17 (Pumping Lemma para linguagens livres de contexto) Seja L
uma linguagem livre de contexto, com 6 L. Ento, existe uma constante inteira n,
dependente apenas de L, que satisfaz s seguintes condies: (i) L, | | n, =
uvwxy; ; (ii) |vwx | n; (iii) |vx | 1; (iv) i 0, uv i wx i y L.
4 Linguagens Livres de Contexto 247

Justificativa Se L livre de contexto e no contm a cadeia vazia, ento L = L(G), sendo


G = (V , , P , S ), G uma gramtica livre de contexto na Forma Normal de Chomsky.
Portanto, qualquer rvore de derivao que represente uma sentena de L nessa gramtica
ser uma rvore binria.
Por outro lado, rvores binrias de altura i geram sentenas de comprimento m-
ximo 2i1 . A Figura 4.18 ilustra essa relao para os casos i=1, 2 e 3, e facilita a
generalizao da mesma:

Figura 4.18: Comprimento mximo de um caminho em uma


rvore binria

Atravs desta figura, fcil perceber que rvores de altura 1 geram sentenas de
comprimento 1 (portanto 20 ), rvores de altura 2 geram sentenas de comprimento 2
( 21 ) e rvores de altura 3 geram sentenas de comprimento 3 ou 4 ( 22 ). No caso
geral, rvores com altura i geram sentenas de comprimento menor ou igual a 2i1 .
Como conseqncia desse resultado, possvel inferir que, se uma sentena tem
comprimento mnimo 2i , ento a rvore de derivao correspondente possuir altura
mnima i + 1.
Considere-se k = |N |, onde N o conjunto dos smbolos no-terminais de G,
estando esta expressa na Forma Normal de Chomsky, e faa-se n = 2k .
Se L e | | n, isto , se | | 2k , ento, face ao resultado anterior, certo que a
altura mnima da rvore de derivao correspondente sentena ser k + 1. Suponha-
se que o valor desta altura seja p (portanto, p k + 1) e considere-se um caminho
w qualquer na rvore que possua comprimento p (haver pelo menos um caminho que
satisfaa a essa condio).
Se o caminho selecionado possui comprimento p, ento este caminho formado de
q smbolos, q k + 2. Desses q smbolos, apenas um ser terminal (o ltimo smbolo do
caminho, aquele que folha da rvore) e os demais sero necessariamente no-terminais.
Ignorando o smbolo terminal e concentrando a ateno nos q 1 no-terminais,
seus antecessores, se q k + 2, ento existem r smbolos no-terminais neste caminho,
e r = q 1, ou seja, r k + 1.
Considerem-se agora apenas os primeiros k + 1 smbolos no-terminais consecutivos
que antecedem imediatamente a folha da rvore, ignorando os r (k + 1) smbolos
no-terminais situados no incio do caminho selecionado. O caminho escolhido w pode,
portanto, ser considerado como:

w = , N , | | = r (k + 1), N + , || = k + 1,

A Figura 4.19 ilustra esta interpretao do caminho w :


248 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 4.19: Ocorrncia mltipla do smbolo no-terminal X no


caminho w

Se contm exatamente k + 1 smbolos no-terminais e a gramtica contm apenas


k smbolos no-terminais distintos, certo que pelo menos um smbolo no-terminal de
G aparece mais de uma vez em . Se chamarmos a este smbolo X , as seguintes conside-
raes podero ser feitas acerca das posies em que os smbolos X podem aparecer na
rvore de derivao:

1. Para o primeiro X (aquele que est na posio mais alta da rvore, prxima da
raiz):

Ele pode ser o primeiro smbolo da cadeia (portanto, estar na altura k +1);

Ele pode ser o penltimo smbolo da cadeia (portanto, estar na altura 2),
uma vez que o segundo X comparece por ltimo nesta mesma cadeia;

Ele pode assumir qualquer posio entre essas duas.

2. Para o segundo X (aquele que est na posio mais baixa da rvore, prxima da
folha):

Ele pode ser o segundo smbolo da cadeia (portanto, estar na altura k ),


uma vez que o primeiro X comparece antes nesta mesma cadeia;

Ele pode ser o ltimo smbolo da cadeia (portanto, na altura 1);

Ele pode assumir qualquer posio entre essas duas.

Assim, pode-se concluir:

1. Para o primeiro X : se X 1 , 1 , ento 2 |1 | 2k ;

2. Para o segundo X : se X 2 , 2 , ento 1 |2 | 2k 1 .


4 Linguagens Livres de Contexto 249

A situao da rvore de derivao da sentena pode ser representada como mostra


a Figura 4.20 (S representa a raiz de G, e pode, eventualmente, coincidir com o primeiro
smbolo da cadeia ):

Figura 4.20: rvore de derivao da cadeia = uvwxy

A inspeo desta rvore nos permite chegar s seguintes concluses:

A sentena pode ser considerada como sendo composta por cinco partes, =
uvwxy;

Como w = 2 , ento 1 |w | 2k 1 ;

Como vwx = 2 , ento 2 |vwx | 2k ;

Como 1 |w | e 2 |vwx |, ento |vx | 1.

Alm disso, as regras de G permitem a derivao das seguintes formas sentenciais:

S uXy

X vXx

X w

A inspeo dessas formas sentenciais, assim como a anlise da rvore mostrada na


Figura 4.20, permite concluir que existem outras possibilidades de derivaes (ou seja,
de construo da rvore) de sentenas em G, as quais produzem sentenas diversas da
original , e que, por construo, devem necessariamente pertencer linguagem L.
Por exemplo, possvel imaginar que, em vez de aplicar regras que fazem o primeiro
X derivar vXx , possvel aplicar, a esta ocorrncia de X , as regras aplicadas ao segundo
X , e dessa maneira gerar a sentena uwy no lugar da sentena uvwxy. Da mesma forma,
seria possvel repetir a derivao aplicada ao primeiro X no lugar da derivao feita para
o segundo X , e com isso gerar a sentena uvvwxxy. Generalizando, todas as sentenas
uv i wx i y, com i 0, podem ser derivadas em G, e, portanto, pertencem necessariamente
a L(G). A Figura 4.21 mostra, graficamente, a aplicao desta idia:
250 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 4.21: rvores de derivao para as cadeias uvwxy, uwy


e uvvwxxy

Em termos gramaticais, como S uXy, X vXx e X w , ou seja, S


uvwxy, ento, necessariamente:

S uXy uwy

S uXy uvvwxxy

S uXy uvvvwxxxy

...

S uXy uv i wx i y, i 0

Considerado de maneira informal, este Pumping Lemma para linguagens livres de
contexto pode ser interpretado da seguinte maneira:

Sentenas que apresentem um certo comprimento mnimo geram rvores de deri-


vao com uma certa altura mnima;

Como a quantidade de smbolos no-terminais da gramtica limitada, neces-


sariamente dever haver repetio de smbolos em algum caminho da rvore de
derivao correspondente;

Tal repetio permite a gerao de uma quantidade infinita de outras sentenas


estruturalmente similares, que devem necessariamente pertencer linguagem.

O smbolo no-terminal X , na demonstrao acima, possibilita derivaes do tipo


X vXx e corresponde ao smbolo que denominamos previamente de auto-recursivo
central essencial. A existncia de pelo menos um smbolo desse tipo na gramtica garante
a possibilidade de se gerar uma quantidade infinita de outras sentenas que tambm
pertenam mesma linguagem.
Se v ou x forem vazios, a linguagem ser regular (note-se que o Pumping Lemma
para linguagens regulares Teorema 3.15 um caso particular do Pumping Lemma
para linguagens livres de contexto). Se v e x forem simultaneamente diferentes da cadeia
vazia, ento a linguagem livre de contexto e no-regular, e os termos v e x ocorrero
sempre de forma balanceada nas sentenas da linguagem.
Como no caso do Pumping Lemma para linguagens regulares, que estabelece uma
propriedade inerente a toda e qualquer linguagem regular, o Pumping Lemma para
4 Linguagens Livres de Contexto 251

linguagens livres de contexto estabelece uma propriedade inerente a toda e qualquer


linguagem livre de contexto. De maneira anloga quele caso, uma de suas principais
aplicaes na demonstrao da existncia de linguagens que no so livres de contexto,
conforme mostraro os exemplos a seguir.
Observe-se que o teorema garante a existncia da constante n, mas a plicao do
mesmo no exige que seja determinado o seu valor, como mostram os exemplos seguintes.
Exemplo 4.38 A linguagem L1 = {a k b k c k | k 1} no livre de contexto. Suponha-se, por
hiptese, que L1 seja livre de contexto. De acordo com o Teorema 4.17 (Pumping Lemma para
linguagens livres de contexto), existe uma constante inteira n tal que, qualquer que seja a sentena
L1 , | | n, ento = uvwxy, |vwx | n, |vx | 1 e uv i wx i y L1 .
Seja = a n b n c n . Como |a n b n c n | = 3 n, ento est satisfeita a condio | | n.
Portanto, = uvwxy. Nesta situao, a subcadeia vwx pode assumir um dos seguintes formatos
(lembrar que |vwx | n):

1. vwx contm apenas smbolos a (pelo menos um); portanto, vx tambm contm apenas
smbolos a (pelo menos um);

2. vwx contm apenas smbolos b (pelo menos um); portanto, vx tambm contm apenas
smbolos b (pelo menos um);

3. vwx contm apenas smbolos c (pelo menos um); portanto, vx tambm contm apenas
smbolos c (pelo menos um);

4. vwx contm smbolos a (pelo menos um) seguidos de smbolos b (pelo menos um);
portanto, vx contm pelo menos um smbolo a ou b, porm nenhum smbolo c;
5. vwx contm smbolos b (pelo menos um) seguidos de smbolos c (pelo menos um);
portanto, vx contm pelo menos um smbolo b ou c, porm nenhum smbolo a.

impossvel que a subcadeia vwx contenha simultaneamente smbolos a, b e c, uma vez


que, para isso acontecer, seria necessrio que o comprimento de vwx fosse no mnimo n + 2, o que
contraria o Pumping Lemma.
Passando-se anlise de cada uma dessas possibilidades, considerando o formato assumido
pela sentena uwy, isto , pela sentena uvwxy aps a remoo das subcadeias v e x , o que
previsto pelo Lemma quando estabelece que todas as sentenas uv i wx i y devem pertencer a L1
(neste caso, faz-se i = 0). Lembrar que |vx | 1:

1. uwy conter n smbolos b, n smbolos c e uma quantidade de smbolos a menor que


n; logo, uwy no pertence a L1 ;

2. uwy conter n smbolos a, n smbolos c e uma quantidade de smbolos b menor que


n; logo, uwy no pertence a L1 ;

3. uwy conter n smbolos a, n smbolos b e uma quantidade de smbolos c menor que


n; logo, uwy no pertence a L1 ;
4. uwy conter n smbolos c, e quantidades de smbolos a e de smbolos b respectivamente
menores que n; logo, uwy no pertence a L1 ;

5. uwy conter n smbolos a, e quantidades de smbolos b e de smbolos c respectivamente


menores que n; logo, uwy no pertence a L1 .

Portanto, a sentena a n b n c n contradiz a hiptese inicial, provando que a linguagem L1 no


livre de contexto. Cumpre observar que, no Exemplo 3.50 da Seo 3.8 (Pumping Lemma para
as Linguagens Regulares), esta mesma linguagem foi demonstrada como sendo no-regular. 2

Exemplo 4.39 A linguagem L2 = {wcw | w {a, b}+ } no livre de contexto. Esta linguagem sin-
tetiza uma caracterstica bastante comum nas linguagens de programao mais usuais: a necessidade
252 Linguagens Formais - Teoria, Modelagem e Implementao

de se usarem identificadores idnticos em partes diferentes de um mesmo programa, por exemplo,


na declarao de uma varivel e na ocasio de sua utilizao posterior.
Suponha-se, por hiptese, que L2 seja livre de contexto. De acordo com o Pumping Lemma
para linguagens livres de contexto, existe uma constante inteira n tal que, qualquer que seja a
sentena L2 , | | n, ento = uvwxy, |vwx | n, |vx | 1 e uv i wx i y L2 .
Considere-se, por exemplo, a sentena = a n b n ca n b n . Como | | = 4 n + 1 n, ento
est satisfeita a condio do Pumping Lemma para a escolha da sentena . Portanto, = uvwxy
e a subcadeia vwx pode assumir um dos seguintes formatos:

1. vwx contm apenas smbolos a (pelo menos um);

2. vwx contm apenas smbolos b (pelo menos um);

3. vwx contm smbolos a (pelo menos um) seguidos de smbolos b (pelo menos um);

4. vwx se inicia com smbolos b (zero ou mais) e termina com o smbolo c;

5. vwx se inicia com o smbolo c e termina com smbolos a (zero ou mais);

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. Ao extrair smbolos a da subcadeia w que antecede o smbolo c, esta resulta diferente


da subcadeia w posterior ao mesmo c; o mesmo acontece se forem extrados smbolos a
da subcadeia posterior ao smbolo c; logo, uwy no pertence a L2 ;

2. Semelhante ao caso anterior;


3. Modifica, exclusivamente, a subcadeia anterior ao smbolo c ou a subcadeia posterior ao
smbolo c; logo, uwy no pertence a L2 ;

4. Como |vx | 1, vx contm pelo menos um smbolo b ou um smbolo c, que, se removidos


da sentena , provocam a gerao de uma sentena que no pertence a L2 (seja porque as
cadeias w tornam-se diferentes, seja porque o smbolo c que as separa desaparece);

5. Semelhante ao caso anterior;

6. Como |vx | 1, vx contm pelo menos um smbolo b (da primeira subcadeia w ) ou um


smbolo c ou, ainda, um smbolo a (da segunda subcadeia w ); qualquer que seja o caso,
a cadeia resultante uwy no pertence a L2 (seja porque as cadeias w tornam-se diferentes,
seja porque o smbolo c que as separa desaparece).

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
4 Linguagens Livres de Contexto 253

4.11 Linguagens Livres de Contexto Determinsticas


Diferentemente da classe das linguagens regulares, que podem ser reconhecidas indistinta-
mente por autmatos finitos, determinsticos ou no-determinsticos, somente autmatos
de pilha no-determinsticos so capazes de reconhecer as linguagens livres de contexto,
no caso geral.
Esta concluso, que pode ser provada demonstrando-se a existncia de linguagens
livres de contexto no-reconhecveis por autmatos de pilha determinsticos, quaisquer
que sejam eles, possui uma importante conseqncia prtica, uma vez que os autmatos
de pilha no-determinsticos so por natureza pouco eficientes, e por isso constituem
modelos de implementao pouco atraentes em diversas situaes, entre as quais, na
importante rea de construo de compiladores.
Exemplo 4.41 A linguagem L1 = {ww R | w {a, b} } no-determinstica, ou seja, reconhecida
apenas por autmatos de pilha no-determinsticos. Um exemplo de tal autmato, com critrio de
aceitao baseado em pilha vazia, apresentado na Figura 4.22.
(a, Z0 )/A, (b, Z0 )/B , (a, A)/AA

(, Z0 )/, (, A)/A, (, B )/B


q0 q1

(a, B )/AB , (b, A)/BA, (b, B )/BB (a, A)/, (b, B )/

Figura 4.22: Autmato de pilha para a linguagem {ww R |


w {a, b} }

So exemplos de cadeias aceitas por este autmato aa e abba, como se pode verificar nos
reconhecimentos abaixo:

(q0 , aa, Z0 ) (q0 , a, A) (q1 , a, A) (q1 , , )

(q0 , abba, Z0 ) (q0 , bba, A) (q0 , ba, BA) (q1 , ba, BA) (q1 , a, A) (q1 , , )

Como fcil observar, a caracterstica no-determinstica do autmato fundamental para que


ele possa determinar o ponto exato da cadeia de entrada em que termina a subcadeia w e se inicia a
subcadeia w R : apenas uma movimentao em vazio no ponto central da cadeia ser capaz de fazer
com que o autmato atinja uma configrao final. Tal caracterstica necessria, uma vez que o
autmato, por conta de suas prprias limitaes, no tem condies de determinar diretamente o
ponto exato em que se inicia a cadeia w R . 2

Assim, apesar do elevado interesse prtico exibido pelas linguagens livres de con-
texto, decorrente da relativa facilidade com que elas podem ser representadas e ma-
nipuladas, a dificuldade acima mencionada levou os pesquisadores a um estudo mais
aprofundado dessa classe de linguagens, visando fornecer aos projetistas e implementa-
dores de linguagens artificiais subsdios que permitissem o aproveitamento prtico das
caractersticas dessa classe de linguagens, sem no entanto sacrificar o desempenho dos
respectivos reconhecedores pela presena de eventuais no-determinismos.
Como conseqncia, foi identificada e caracterizada a classe das linguagens livres
de contexto determinsticas, que se provou ser subconjunto prprio das linguagens
livres de contexto genricas. Por definio, linguagens livres de contexto determins-
ticas so aquelas que podem ser reconhecidas por autmatos de pilha determinsticos.
254 Linguagens Formais - Teoria, Modelagem e Implementao

Em outras palavras, uma linguagem livre de contexto dita determinstica se for poss-
vel demonstrar a existncia de pelo menos um autmato de pilha determinstico que a
reconhea.
A linguagem para a qual se pode provar a inexistncia de quaisquer autmatos de
pilha determinsticos que a reconheam, e, simultaneamente, a existncia de pelo menos
um autmato de pilha no-determinstico que a reconhea, denominada linguagem
livre de contexto no-determinstica, e o conjunto de tais linguagens constitui uma
classe importante das linguagens livres de contexto gerais.
A classe das linguagens livres de contexto determinsticas, tambm conhecida como
LR(k ), apresenta um elevado interesse prtico, uma vez que propicia a obteno de im-
plementaes eficientes para todas as linguagens livres de contexto determinsticas. Por
outro lado, a restrio que as caracteriza felizmente no cria limitaes srias ao poder de
representao de tal classe de linguagens, quando comparado ao das linguagens do tipo
2 genricas, e como conseqncia as linguagens LR(k ) constituem uma classe de lingua-
gens ainda muito aderente s necessidades prticas de representao sinttica formal das
linguagens de programao usuais, sendo por esse motivo largamente utilizadas na rea
de processamento de linguagens artificiais, em especial das linguagens de programao.
Por sua vez, tambm como parte da classe das linguagens LR(k ), possvel identi-
ficar uma nova classe de linguagens, constituda na forma de um subconjunto prprio, e
que tambm apresenta elevado interesse prtico: trata-se das linguagens LL(k ), e a sua
caracterizao decorre da possibilidade de obteno de modelos de implementao ainda
mais eficientes do que os obtidos para as linguagens LR(k ). No entanto, a sua abrangn-
cia significativamente menor do que a das linguagens LR(k ), e por esse motivo o seu
interesse prtico no to grande como o das primeiras, sendo no entanto bastante til
no caso de linguagens livres de contexto determinsticas com menor grau de sofisticao
sinttica.
A seguir sero apresentadas as definies de gramticas e de linguagens LL(k ) e
LR(k ). Para maiores detalhes, exemplos, propriedades, algoritmos de verificao gra-
matical e tcnicas de construo de reconhecedores para essas classes de linguagens,
recomenda-se a leitura de [48] ou [49].
Suponha-se que G = (V , , P , S ) seja uma gramtica livre de contexto. Ento:

Diz-se que G uma gramtica LL(k ) se for possvel analisar deterministicamente


as cadeias de L(G) da seguinte forma: quaisquer que sejam a cadeia de entrada
w L(G) e a forma sentencial X , obtida por meio da aplicao exclusiva de
derivaes mais esquerda, e tal que S X , com , X N e V ,
se a escolha da produo X puder ser feita de forma unvoca, inspecionando-
se no mximo os k primeiros smbolos de , onde X , .
A aplicao da produo escolhida faz com que X e, eventualmente,
w .

Diz-se que G uma gramtica LR(k ) se for possvel analisar deterministicamente


as cadeias de L(G) da seguinte forma: quaisquer que sejam a cadeia de entrada
w L(G) e a forma sentencial , obtida por meio da aplicao exclusiva de re-
dues3 mais esquerda, e tal que w , com , V e , ,
se a escolha da produo X puder ser feita de forma unvoca, inspecionando-
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.
4 Linguagens Livres de Contexto 255

se no mximo os k primeiros smbolos de . A aplicao da produo escolhida


faz com que X e, eventualmente, X S .

Diz-se que uma linguagem LL(k ) se ela for gerada por uma gramtica LL(k ). Por
outro lado, de acordo com a definio, toda gramtica LL(k ) , naturalmente, tambm
uma gramtica LL(k + 1), LL(k + 2) etc. Logo, toda linguagem LL(k ) tambm uma
linguagem LL(k + 1), LL(k + 2) etc. Na prtica, no entanto, costuma-se atribuir a uma
linguagem o menor valor de k entre todas as gramticas que a geram. Consideraes
anlogas se aplicam ao caso das gramticas e das linguagens LR(k ).
Do ponto de vista da hierarquia de incluso prpria das linguagens formais, a classe
das linguagens LR(k ) e a classe das linguagens LL(k ) situam-se entre a classe das lingua-
gens regulares e a classe das linguagens livres de contexto genricas, conforme ilustrado
na Figura 4.23:

Figura 4.23: As subclasses LL(k ) e LR(k )

A demonstrao da equivalncia entre a classe das linguagens livres de contexto que


podem ser reconhecidas deterministicamente e a classe das linguagens LR(k ) pode ser
encontrada em [47]. A demonstrao da existncia de um algoritmo para determinar se
uma dada gramtica LR(k ) para um certo valor de k tambm pode ser encontrada em
[47].
Exemplo 4.42 A linguagem L2 = {a n b n c | n 0} LL(1), porm no regular. A no-regularidade
pode ser demonstrada facilmente pela aplicao do Pumping Lemma para as linguagens regulares.
A gramtica livre de contexto G2 abaixo gera esta linguagem:

G2 = (V , , P , S )
V = {S , X , a, b, c}
= {a, b, c}
P = {S Xc, X aXb | }
Quaisquer que sejam a forma sentencial e a cadeia de entrada consideradas, o seguinte critrio
permite determinar univocamente a produo a ser aplicada:
Se a forma sentencial corrente for S :

Se o terminal corrente for a, escolhe-se a produo S Xc;

Se o terminal corrente for b, h um erro na cadeia de entrada;


Se o terminal corrente for c, escolhe-se a produo S Xc;
256 Linguagens Formais - Teoria, Modelagem e Implementao

Se a forma sentencial corrente for Xc:

Se o terminal corrente for a, escolhe-se a produo X aXb;

Se o terminal corrente for b, h um erro na cadeia de entrada;


Se o terminal corrente for c, escolhe-se a produo X ;

Se a forma sentencial corrente for a i Xb i c, i 1:

Se o terminal corrente for a, escolhe-se a produo X aXb;


Se o terminal corrente for b, escolhe-se a produo X ;

Se o terminal corrente for c, h um erro na cadeia de entrada.

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 Cadeia de entrada Produo utilizada


S [a]abbc S Xc
Xc [a]abbc X aXb
aXbc [a]abbc -
aXbc a[a]bbc X aXb
aaXbbc a[a]bbc -
aaXbbc aa[b]bc X
aabbc aa[b]bc -
aabbc aab[b]c -
aabbc aabb[c] -
aabbc aabbc -

Tabela 4.1: Seqncia de derivaes mais esquerda re-


alizada por um reconhecedor LL(1) na anlise da cadeia
aabbc

Forma sentencial Cadeia de entrada Produo utilizada


S [c] S Xc
Xc [c] X
c [c] -
c c -

Tabela 4.2: Seqncia de derivaes mais esquerda re-


alizada 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:
4 Linguagens Livres de Contexto 257

G3 = (V , , P , S )
V = {S , E , O, x , y, e, o}
= {x , y, e, o}
P = {S Ee | Oo, E xOy | , O xEy}

Justifica-se que a linguagem no LL(k ) porque, para n genrico, no h um valor de k que


seja suficiente para garantir a escolha da produo correta a ser aplicada na gramtica, qualquer que
seja ela. Fixe-se um valor arbitrrio para k , ou seja, k = . Basta escolher uma cadeia de entrada
em que 2n para que no se possa determinar univocamente a produo a ser aplicada. Em
outras palavras, qualquer que seja o valor de k selecionado, sempre haver uma cadeia pertencente
linguagem tal que a quantidade de smbolos x maior ou igual a k , inviabilizando o reconhecimento
da mesma como sendo pertencente ao conjunto {x 2n y 2n e} ou ao conjunto {x 2n+1 y 2n+1 o}.
Quaisquer que sejam a forma sentencial e a cadeia de entrada consideradas, o seguinte critrio
permite determinar univocamente a produo a ser aplicada:

Se a forma sentencial corrente for x 2n y 2n e, n 0 ou x 2n+1 y 2n+1 o, n 0:

Se o terminal corrente for y, escolhe-se a produo E ;

Se o terminal corrente for e, escolhe-se a produo E ;

Se o terminal corrente for o, h um erro na cadeia de entrada;

Se a forma sentencial corrente for x 2n Ey 2n e, n 0 ou x 2n+1 Ey 2n+1 o, n 0:

Escolhe-se a produo O xEy;

Se a forma sentencial corrente for x 2n Oy 2n o, n 0 ou x 2n+1 Oy 2n+1 e, n 0:

Escolhe-se a produo E xOy;

Se a forma sentencial corrente for Ee:

Escolhe-se a produo S Ee;

Se a forma sentencial corrente for Oo:

Escolhe-se a produo S Oo.

Logo, G3 LR(1), ou seja, LR(k ) para k = 1, pois, dada uma forma sentencial, basta
inspecionar apenas um smbolo da cadeia de entrada para determinar univocamente a regra a ser
aplicada. Conseqentemente, L(G3 ) tambm LR(1).
As Tabelas 4.3 e 4.3 ilustram as seqncias de redues mais esquerda que refletem a
operao de um reconhecedor LR(1) na aceitao das cadeias xxyye e xxxyyyo, respectivamente.
Os delimitadores [ e ] indicam o smbolo corrente da cadeia de entrada.
258 Linguagens Formais - Teoria, Modelagem e Implementao

Forma sentencial Cadeia de entrada Produo utilizada


xxyye [x ]xyye -
xxyye x [x ]yye -
xxyye xx [y]ye E
xxEyye xx [y]ye O xEy
xOye xxy[y]e E xOy
Ee xxyy[e] S Ee
S xxyye -

Tabela 4.3: Seqncia de redues mais esquerda re-


alizada por um reconhecedor LR(1) na anlise da cadeia
xxyye

Forma sentencial Cadeia de entrada Produo utilizada


xxxyyyo [x ]xxyyyo -
xxxyyyo x [x ]xyyyo -
xxxyyyo xx [x ]yyyo -
xxxyyyo xxx [y]yyo E
xxxEyyyo xxx [y]yyo O xEy
xxOyyo xxxy[y]yo E xOy
xEyo xxxyy[y]o O xEy
Oo xxxyyy[o] S Oo
S xxxyyyo -

Tabela 4.4: Seqncia de redues mais esquerda re-


alizada por um reconhecedor LR(1) na anlise da cadeia
xxxyyyo
2

Os Algoritmos de reconhecimento LL(k ) e LR(k ) apresentados nos Exemplos 4.42


e 4.43 foram elaborados com base em tcnicas cuja apresentao e discusso fogem ao
escopo deste texto. O assunto, no entanto, exaustivamente estudado na literatura sobre
compiladores e processadores de linguagens. Para mais detalhes, recomenda-se a leitura
de [28], [49], [48], [24], [26], [27] ou [29].
Gramticas e linguagens livres de contexto so extensivamente empregadas na de-
finio e na implementao de linguagens artificiais, em particular das de programao.
Aninhamentos, ou construes sintticas que se repetem integralmente como partes de si
prprias, so muito comuns em linguagens de programao convencionais, manifestando-
se geralmente na especificao do fluxo de controle (comandos e blocos aninhados), das
abstraes (procedimentos e funes aninhadas), das expresses (atravs do uso de pa-
rnteses aninhados) etc. Tal caracterstica torna o uso das linguagens (e das gramticas)
livres de contexto determinsticas muito atraente, uma vez que elas permitem a obteno
de representaes formais e de modelos de implementao que incorporam diretamente,
e a um custo relativamente baixo, a especificao e a anlise de construes sintticas
aninhadas.
Por esse motivo, as linguagens e as gramticas livres de contexto determinsticas,
sejam elas LR(k ) ou LL(k ), costumam ser empregadas na formalizao sinttica da ma-
ioria das linguagens de programao convencionais. Como conseqncia, os compiladores
4 Linguagens Livres de Contexto 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 com-
piladores das respectivas linguagens, e a eles so agregados os demais mdulos de anlise
e de gerao de cdigo, para completar as funes do compilador.

4.12 Linguagens Livres de Contexto No-Ambguas


O estudo sistemtico das gramticas e das linguagens livres de contexto, realizado nas
dcadas de 1960 e 1970, teve como principal finalidade a obteno de reconhecedores
eficientes para classes de linguagens suficientemente abrangentes, de forma a permitir a
sua aplicao prtica na construo de compiladores para linguagens de programao de
alto nvel comerciais.
Entre os principais resultados obtidos naquela poca, encontra-se uma classificao
hierrquica das gramticas livres de contexto, criada a partir de especializaes do modelo
geral de gramtica livre de contexto apresentado na Seo 4.1. Tais especializaes,
apresentadas e discutidas em [49] e [25], definem, entre outras, as classes das gramticas
LL(k ) e das gramticas LR(k ), discutidas na Seo 4.11, e tambm a importante classe
das gramticas no-ambguas, conforme ilustrado na Figura 4.24.

Figura 4.24: Hierarquia das gramticas livres de contexto

Conforme mencionado na Seo 4.11, a classe das gramticas LR(k ) corresponde


exatamente classe das linguagens determinsticas. Por outro lado, conforme definido na
Seo 4.1, a classe das gramticas livres de contexto gerais, sobre as quais no se aplica
qualquer restrio adicional, corresponde classe das linguagens livres de contexto gerais.
A Figura 4.25 ilustra tais relaes.
260 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 4.25: Correspondncia entre classes de gramticas e clas-


ses 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 ga-
rantir 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 sub-
classe 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 gra-
mtica 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 gra-


mtica livre de contexto LR(k ) tambm uma gramtica livre de contexto no-
ambgua, o que implica que a classe das linguagens livres de contexto determins-
ticas 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 no-
determinstica, e a sua existncia demonstra que a relao de incluso entre a classe
das linguagens determinsticas e a classe das linguagens no-ambguas prpria.

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 no-
ambguas est includa na classe das linguagens livres de contexto gerais.
4 Linguagens Livres de Contexto 261

5. As linguagens inerentemente ambguas, de acordo com a definio apresentada na


Seo 4.4, so aquelas para as quais inexistem gramticas livres de contexto no-
ambguas que as definam. Tais linguagens so definidas exclusivamente atravs
de gramticas livres de contexto ambguas. Portanto, existem linguagens livres
de contexto gerais que no podem ser consideradas no-ambguas, e a relao de
incluso entre essas duas classes de linguagens tambm prpria. Um exemplo
a linguagem inerentemente ambgua {a n b n c m d m | n 1, m 1} {a n b m c m d n |
n 1, m 1}, do Exemplo 4.15.

Logo, natural concluir que a resposta para a pergunta anterior : Sim, e ela
corresponde classe das linguagens livres de contexto no inerentemente ambguas ou,
simplesmente, no-ambguas.
Em outras palavras, a classe das linguagens livres de contexto no-ambguas
est includa propriamente na classe das linguagens livres de contexto gerais, e a classe
das linguagens livres de contexto que no so no-ambguas corresponde classe das
linguagens livres de contexto que so inerentemente ambguas. A Figura 4.26 ilustra
essas relaes.

Figura 4.26: A classe das linguagens livres de contexto no-


ambguas

Tal resultado permite chegar s seguintes concluses adicionais:

Toda linguagem livre de contexto determinstica tambm no-ambgua, ou seja,


se existe um autmato de pilha determinstico que reconhece uma linguagem,
ento existe tambm uma gramtica livre de contexto no-ambgua que a gera.
De forma equivalente, pode-se tambm dizer que toda gramtica LR(k ) tambm
no-ambgua.

Nem toda linguagem livre de contexto no-ambgua determinstica. Em outras


palavras, existem linguagens livres de contexto que podem ser geradas por gra-
mticas no-ambguas, mas que podem ser reconhecidas apenas atravs de aut-
matos de pilha no-determinsticos. De outra forma, pode-se tambm afirmar
que certas linguagens livres de contexto podem apenas ser geradas por gramticas
no-ambguas que no so LR(k ).
262 Linguagens Formais - Teoria, Modelagem e Implementao

Toda linguagem inerentemente ambgua tambm no-determinstica. Isso sig-


nifica que a inexistncia de uma gramtica no-ambgua que gera determinada
linguagem implica a inexistncia de um autmato de pilha determinstico que re-
conhea 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.

Figura 4.27: Relao entre as diversas subclasses das linguagens


livres de contexto

A existncia de um subconjunto das linguagens livres de contexto que seja simulta-


neamente no-ambguo e determinstico, e que ainda assim seja suficientemente abran-
gente para representar uma vasta gama de linguagens de programao de alto nvel
comerciais, um dos resultados mais marcantes da teoria das linguagens livres de con-
texto. Ele serviu de base para a rpida consolidao e avano tecnolgico verificados,
nas dcadas de 1960 e 1970, nas reas de especificao de linguagens de programao e
de construo de seus processadores (compiladores e interpretadores).

4.13 Propriedades de Fechamento


As linguagens livres de contexto so fechadas em relao s operaes de unio, concate-
nao e fecho de Kleene. Elas no so fechadas em relao s operaes de complemento
e interseco. Os teoremas seguintes apresentam as respectivas demonstraes.
Teorema 4.18 (Fecho na unio) As linguagens livres de contexto so fechadas em re-
lao operao de unio.

Justificativa Sejam L1 e L2 duas linguagens livres de contexto quaisquer. Ento, L1 =


L1 (G1 ) e L2 = L2 (G2 ), G1 e G2 sendo duas gramticas livres de contexto: G1 =
(V1 , 1 , P1 , S1 ) e G2 = (V2 , 2 , P2 , S2 ). Admita-se que N1 N2 = . Se isso no
for verdade, os smbolos no-terminais podem ser facilmente renomeados, sem prejuzo
para as linguagens que estiverem sendo definidas.
4 Linguagens Livres de Contexto 263

A linguagem L3 = L1 L2 gerada pela gramtica G3 , ou seja, L3 = L3 (G3 ), com


G3 = (V3 , 3 , P3 , S3 ), onde:

V3 = V1 V2 {S3 }

3 = 1 2

P3 = P1 P2 {S3 S1 , S3 S2 }

Como, por hiptese e por construo, as regras contidas em P3 atendem, todas, s


condies necessrias para uma gramtica ser classificada como livre de contexto, segue
que G3 livre de contexto e, conseqentemente, L3 uma linguagem livre de contexto.

Teorema 4.19 (Fecho na concatenao) As linguagens livres de contexto so fecha-


das em relao operao de concatenao.

Justificativa Sejam L1 e L2 duas linguagens livres de contexto quaisquer. Ento, L1 =


L1 (G1 ) e L2 = L2 (G2 ), G1 e G2 sendo duas gramticas livres de contexto: G1 =
(V1 , 1 , P1 , S1 ) e G2 = (V2 , 2 , P2 , S2 ). Admita-se que N1 N2 = . Se isso no
for verdade, os smbolos no-terminais podem ser facilmente renomeados, sem prejuzo
para as linguagens que estiverem sendo definidas.
A linguagem L3 = L1 L2 gerada pela gramtica G3 , ou seja, L3 = L3 (G3 ), com
G3 = (V3 , 3 , P3 , S3 ), onde:

V3 = V1 V2 {S3 }

3 = 1 2

P3 = P1 P2 {S3 S1 S2 }

Como, por hiptese e por construo, as regras contidas em P3 atendem, todas, s


condies necessrias para uma gramtica ser classificada como livre de contexto, segue
que G3 livre de contexto e, conseqentemente, L3 uma linguagem livre de contexto.

Teorema 4.20 (Fecho no fecho) As linguagens livres de contexto so fechadas em re-


lao operao de fecho de Kleene.

Justificativa Seja L1 uma linguagem livre de contexto qualquer. Ento, L1 = L1 (G1 ), G1


sendo uma gramtica livre de contexto: G1 = (V1 , 1 , P1 , S1 ).
A linguagem L2 = L1 gerada pela gramtica G2 , ou seja, L2 = L2 (G2 ), com
G2 = (V2 , 2 , P2 , S2 ), onde:

V2 = V1 {S2 }

2 = 1

P2 = P1 {S2 S1 S2 , S2 }

Como, por hiptese e por construo, as regras contidas em P2 atendem, todas, s


condies necessrias para uma gramtica ser classificada como livre de contexto, segue
que G2 livre de contexto e, conseqentemente, L2 uma linguagem livre de contexto.
264 Linguagens Formais - Teoria, Modelagem e Implementao

Teorema 4.21 (Fecho na interseco) As linguagens livres de contexto no so fe-


chadas em relao operao de interseco.

Justificativa suficiente, para provar este teorema, que existem pelo menos duas lin-
guagens livres de contexto cuja interseco gera uma linguagem que no seja livre de
contexto.
Considerem-se as linguagens L1 = {a m b m c n | m 1, n 1} e L2 = {a n b m c m |
m 1, n 1}. fcil demonstrar que essas linguagens so geradas, respectivamente,
pelas gramticas livres de contexto G1 e G2 :

G1 = ({a, b, c, S , X , Y }, {a, b, c},


{S XY , X aXb, X ab, Y cY , Y c}, S )
G2 = ({a, b, c, S , X , Y }, {a, b, c},
{S XY , X aX , X a, Y bYc, Y bc}, S )

Por outro lado, a linguagem L3 = L1 L2 = {a m b m c m | m 1} uma linguagem


que no livre de contexto, conforme ilustrado na aplicao do Pumping Lemma para
linguagens livres de contexto (ver Exemplo 4.38). 
No obstante este resultado, possvel demonstrar que a interseco de uma lin-
guagem livre de contexto com uma linguagem regular gera sempre uma linguagem livre
de contexto.
Teorema 4.22 (Interseco com linguagem regular) Sejam L1 e L2 , respectiva-
mente, uma linguagem regular e uma linguagem livre de contexto. Ento, L1 L2 uma
linguagem livre de contexto.

Justificativa Sejam M1 um autmato finito determinstico e M2 um autmato de pi-


lha que reconhecem, respectivamente, as linguagens L1 e L2 . A linguagem L3 = L1 L2
reconhecida pelo autmato de pilha M3 construdo conforme o Algoritmo 4.14.

Algoritmo 4.14 (Interseco com linguagem regular) Obteno de um autmato


de pilha que reconhece a linguagem correspondente interseco de uma linguagem livre
de contexto com uma linguagem regular.

Entradas:

um autmato finito determinstico M1 = (Q1 , , 1 , q01 , F1 );

um autmato de pilha M2 = (Q2 , , , 2 , q02 , Z0 , F2 );

Sada: um autmato de pilha M3 = (Q3 , , , 3 , q03 , Z0 , F3 ), com critrio de acei-


tao de pilha vazia, tal que V (M3 ) = L(M1 ) L(M2 );

Mtodo:

1. Q3 = Q1 Q2 ;

2. q03 = (q01 , q02 );


4 Linguagens Livres de Contexto 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 analisa-
das pelos autmatos, que ((q01 , q02 ), w , Z0 ) ((qr , qs ), , ), (qr , qs ) F3 , se e somente
se (q01 , w ) (qs , ), qs F1 e (q02 , w , Z0 ) (qr , , ), qr F2 .
Em outras palavras, M3 aceita w se e apenas se M1 e M2 tambm aceitam w . Se
M1 e/ou M2 rejeitam w , ento M3 tambm rejeita w . Logo, L3 corresponde interseco
das linguagens L1 e L2 , e a existncia de M3 prova que L3 uma linguagem livre de
contexto.
Este teorema mostra como construir um autmato de pilha M3 que simula, de
maneira simultnea, as configuraes que podem ser assumidas por um outro autmato
de pilha M2 e um autmato finito determinstico M1 no reconhecimento de uma mesma
cadeia de entrada.
Assim, os estados de M3 correspondem ao produto cartesiano Q1 Q2 . Se M3 se
encontrar no estado (qi , qm ), isso significa que, naquela situao, M1 encontrar-se- no
estado qi e M2 no estado qm , se estivessem operando separadamente no reconhecimento
da mesma cadeia de entrada.
Se a entrada for aceita simultaneamente no estado qi de M1 e no estado qm de
M2 , ento uma nova transio acrescentada em M3 com o smbolo partindo do estado
(qi , qm ) e com destino no estado (1 (qi ), 2 (qm )).
Transies sem consumo de smbolo na cadeia de entrada de M2 da forma
2 (qi , , X ) = {(qj , )} podem ser simuladas sem dificuldade em M3 , bastando para
isso preservar o estado corrente de M1 em M3 , uma vez que M1 , por definio, deter-
minstico, isento de transies em vazio.
Pelo fato de M1 ser um autmato finito, que no necessita de pilha para operar, esta
manipulada por M3 de forma a reproduzir a manipulao executada de forma isolada
por M2 .
A cadeia de entrada ser aceita se M3 atingir um estado final (composto por estados
finais de M1 e de M2 ) com a cadeia de entrada esgotada e com a pilha vazia. Nesta
configurao ocorre a aceitao simultnea da cadeia de entrada por M1 e M2 . 

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 Linguagens Formais - Teoria, Modelagem e Implementao

q11 a
b

q01
a

q12 b

Figura 4.28: Autmato finito que reconhece L1 = (ab |


ba )

(a, A)/AA (b, A)/

(b, A)/
(, Z0 )/Z0 q21 q22

(a, Z0 )/AZ0 (b, Z0 )/

q02

(b, B )/BB (a, B )/

(a, B )/
(, Z0 )/Z0 q23 q24

(b, Z0 )/BZ0 (a, Z0 )/

Figura 4.29: Autmato de pilha que reconhece L2 =


(a n b n+1 | b n a n+1 )

A linguagem L3 = L1 L2 reconhecida pelo autmato de pilha M3 , construdo conforme o


Algoritmo 4.14, utilizado na demonstrao do Teorema 4.22:

Q3 = {(q01 , q02 ), (q01 , q21 ), (q01 , q22 ), (q01 , q23 ), (q01 , q24 ),
(q11 , q02 ), (q11 , q21 ), (q11 , q22 ), (q11 , q23 ), (q11 , q24 ),
(q12 , q02 ), (q12 , q21 ), (q12 , q22 ), (q12 , q23 ), (q12 , q24 )}
F3 = {(q11 , q22 ), (q11 , q24 ), (q12 , q22 ), (q12 , q24 )}
3 = {((q01 , q02 ), , Z0 ) ((q01 , q21 ), Z0 ),
((q01 , q02 ), , Z0 ) ((q01 , q23 ), Z0 ),
((q01 , q21 ), a, Z0 ) ((q12 , q21 ), AZ0 ),
((q01 , q21 ), a, A) ((q12 , q21 ), AA),
((q01 , q21 ), b, A) ((q11 , q22 ), ),
((q01 , q22 ), b, Z0 ) ((q11 , q22 ), ),
4 Linguagens Livres de Contexto 267

((q01 , q22 ), b, A) ((q11 , q22 ), ),


((q01 , q23 ), a, B ) ((q12 , q24 ), ),
((q01 , q23 ), b, Z0 ) ((q11 , q23 ), BZ0 ),
((q01 , q23 ), b, B ) ((q11 , q23 ), BB ),
((q01 , q24 ), a, Z0 ) ((q12 , q24 ), ),
((q01 , q24 ), a, B ) ((q12 , q24 ), ),
((q11 , q02 ), , Z0 ) ((q11 , q21 ), Z0 ),
((q11 , q02 ), , Z0 ) ((q11 , q23 ), Z0 ),
((q11 , q21 ), a, Z0 ) ((q11 , q21 ), AZ0 ),
((q11 , q21 ), a, A) ((q11 , q21 ), AA),
((q11 , q23 ), a, B ) ((q11 , q24 ), ),
((q11 , q24 ), a, B ) ((q11 , q24 ), ),
((q11 , q24 ), a, Z0 ) ((q11 , q24 ), ),
((q12 , q02 ), , Z0 ) ((q12 , q21 ), Z0 ),
((q12 , q02 ), , Z0 ) ((q12 , q23 ), Z0 ),
((q12 , q21 ), b, A) ((q12 , q22 ), ),
((q12 , q22 ), b, Z0 ) ((q12 , q22 ), ),
((q12 , q22 ), b, A) ((q12 , q22 ), ),
((q12 , q23 ), b, Z0 ) ((q12 , q24 ), BZ0 ),
((q12 , q23 ), b, B ) ((q12 , q24 ), BB )}
O autmato resultante M3 , excludos os estados inteis e inacessveis, e com os demais estados
renomeados, representado na Figura 4.30. Note-se que a linguagem resultante, alm de livre de
contexto, tambm regular. Por essa razo, o autmato de pilha resultante foi convertido para um
autmato finito equivalente.

b a a
q1 q2 q3

q0

b b
q4 q5 q6
a

Figura 4.30: Autmato finito que reconhece a interseco


de L1 com L2

A linguagem reconhecida por M3 (abb | baa), portanto livre de contexto, regular e finita.
Observe-se e compare-se o reconhecimento destas duas sentenas em M1 , M2 e M3 . Note-se que a
configurao final assumida por M3 compreende as configuraes finais assumidas por M1 e por M2
para uma mesma cadeia de entrada.
M1 :

(q01 , abb) (q12 , bb) (q12 , b) (q12 , )

(q01 , baa) (q11 , aa) (q11 , a) (q11 , )

M2 :

(q02 , abb, Z0 ) (q21 , abb, Z0 ) (q21 , bb, AZ0 ) (q22 , b, Z0 ) (q22 , , )


268 Linguagens Formais - Teoria, Modelagem e Implementao

(q02 , baa, Z0 ) (q23 , baa, Z0 ) (q23 , aa, BZ0 ) (q24 , a, Z0 ) (q24 , , )

M3 :

((q01 , q02 ), abb, Z0 ) ((q01 , q21 ), abb, Z0 ) ((q12 , q21 ), bb, AZ0 )
((q12 , q22 ), b, Z0 ) ((q12 , q22 ), , )

((q01 , q02 ), baa, Z0 ) ((q01 , q23 ), baa, Z0 ) ((q11 , q23 ), aa, BZ0 )
((q11 , q24 ), a, Z0 ) ((q11 , q24 ), , )
2

Teorema 4.23 (Fecho na complementao) As linguagens livres de contexto no


so fechadas em relao operao de complementao.

Justificativa Dadas duas linguagens L1 e L2 quaisquer, sabido (Lei de De Morgan,


ver Teorema 1.1) que:
L1 L2 = L1 L2
Nesta igualdade esto envolvidas apenas as operaes de interseco, unio e com-
plementao. Sabe-se, conforme demonstrao anterior (Teorema 4.18), que as lingua-
gens 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. 

4.14 Questes Decidveis e No-Decidveis


Assim como acontece com a classe das linguagens regulares, existem diversas questes
acerca das linguagens livres de contexto que podem sempre ser decididas, quaisquer que
sejam as linguagens envolvidas. Por outro lado, certas questes que so decidveis para a
classe das linguagens regulares no podem ser decididas no caso geral, quando transpostas
para a classe das linguagens livres de contexto (por exemplo, a questo L = decidvel
no caso das linguagens regulares, porm no decidvel no caso das linguagens livres de
contexto).
Teorema 4.24 (A cadeia pertence?) Sejam L uma linguagem livre de contexto sobre
e uma cadeia pertencente a . Ento, a questo L? decidvel.

Justificativa Conforme o Algoritmo 4.15.


Algoritmo 4.15 (A cadeia pertence?) Determinao da pertinncia da cadeia w
linguagem livre de contexto L .

Entrada: uma cadeia w e uma linguagem livre de contexto L ;

Sada: SIM, se w ; NO, caso contrrio;

Mtodo:

1. Obter uma gramtica livre de contexto G tal que L = L(G);


4 Linguagens Livres de Contexto 269

2. Se w = , ento:

a) Determinar, conforme o Algoritmo 4.3 (eliminao de produes em


vazio em gramticas livres de contexto), se S (a raiz de G) pertence
ao conjunto E ; em caso afirmativo, a resposta SIM; caso contrrio,
a resposta NO;

3. Se w 6= , ento:

a) Obter G na Forma Normal de Greibach (ver Algoritmo 4.8 na Seo


4.6), tal que L(G ) = L(G) {};

b) Considerar n = |w |;

c) Considerar m como o maior nmero de produes definido para um


no-terminal, entre todos os no-terminais de G ;

d) Obter todas as seqncias de derivaes mais esquerda que geram


formas sentenciais cujo prefixo seja uma cadeia de terminais de com-
primento mximo n (existem no mximo m n seqncias distintas);

e) Verificar se alguma dessas seqncias de derivao corresponde gera-


o da cadeia w ; em caso afirmativo, a resposta SIM; caso contrrio,
a resposta NO.

Exemplo 4.45 Considere-se a gramtica abaixo, j apresentada na Forma Normal de Greibach:

G = ({S , B , C , a, b, c}, {a, b, c}, P , S )


P = {S aBC | bBC ,
B bB | b,
C c}

Considere-se a cadeia abbc L(G). Ento, n = 4 e m = 2 (pois existem duas produes para
S , duas para B e apenas uma para C ) e, conforme o Algoritmo 4.15, existem no mximo 24 = 16
seqncias distintas de derivaes mais esquerda que geram como prefixo uma cadeia de terminais
de comprimento mximo 4, no havendo necessidade de se inspecionar outras seqncias. A Tabela
4.5 relaciona todas as oito seqncias que geram cadeias de terminais de comprimento mximo 4.
270 Linguagens Formais - Teoria, Modelagem e Implementao

Seqncia V V V V
1 S aBC abBC abbBC abbbBC
2 abbbC
3 abbC abbc
4 abC abc
5 bBC bbBC bbbBC bbbbBC
6 bbbbC
7 bbbC bbbc
8 bbC bbc

Tabela 4.5: Derivaes mais esquerda que geram prefixos


de comprimento mximo 4

Como se pode verificar, a seqncia de derivaes 3 produz a cadeia abbc. Por outro lado, a
cadeia bcbc, tambm de comprimento 4, no pertence linguagem, uma vez que nenhuma das oito
seqncias da Tabela 4.5 gera o prefixo bcbc e, portanto, nenhuma seqncia de derivaes capaz
de gerar a cadeia bcbc. 2

O tempo de execuo do Algoritmo 4.15 proporcional a m n , onde n o compri-


mento 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 desempe-
nho. 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. En-
to, 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).
4 Linguagens Livres de Contexto 271

Uma maneira alternativa de se verificar se L = consiste em obter uma gramtica


G = (V , , P , S ), sem smbolos inteis, que gere L. Se S V , ento L no-vazia. Caso
contrrio, L vazia. 

Teorema 4.26 (A linguagem infinita?) Seja L uma linguagem livre de contexto.


Ento, a questo L infinita? decidvel.

Justificativa L infinita se e somente se contiver pelo menos uma sentena de compri-


mento maior ou igual a n e menor que 2n, onde n a constante definida pelo Pumping
Lemma para linguagens livres de contexto. Tal fato pode ser verificado por demonstra-
o semelhante que foi feita no Teorema 3.24 (determina se uma linguagem regular
finita ou infinita).
Uma outra maneira de se determinar se L infinita consiste em obter uma gramtica
sem smbolos inteis que gere L, e depois verificar se existem no-terminais X auto-
recursivos na mesma (X X , + ). Caso exista pelo menos um no-terminal
auto-recursivo (no necessariamente central), ento L infinita. Caso contrrio, L
finita. 
Teorema 4.27 (A linguagem finita?) Seja L uma linguagem livre de contexto. En-
to, a questo L finita? decidvel.

Justificativa Decorre diretamente do resultado dos teoremas anteriores: se L no infi-


nita (Teorema 4.26), ento L finita. Se L = (Teorema 4.25), ento L finita e vazia,
caso contrrio finita e no-vazia. 
As seguintes questes acerca das linguagens e das gramticas livres de contexto
(respectivamente L, G, G1 e G2 quaisquer) no so decidveis e no sero demonstradas
neste livro.

G ambgua?

L inerentemente ambgua?

L(G) regular?

L(G) = ?

L(G1 ) = L(G2 )?

L(G1 ) L(G2 )?

L(G1 ) L(G2 ) = ?

L(G1 ) L(G2 ) livre de contexto?

L(G1 ) livre de contexto?

Naturalmente, por se tratar de questes no-decidveis, demonstra-se a inexistncia


de quaisquer algoritmos que solucionem essas questes no caso geral. Tais demonstraes
podem ser encontradas em [46].
5 Linguagens Sensveis ao Contexto
Linguagens sensveis ao contexto so aquelas cujas sentenas exibem caractersticas de
dependncia ou vinculao entre trechos distintos das mesmas. Ou seja, determina-
das partes de uma sentena s sero consideradas vlidas se ocorrerem simultaneamente
a trechos relacionados, presentes em outras regies da mesma sentena. Da a origem do
nome sensibilidade ao contexto.
Deve-se, no entanto, entender corretamente o significado do termo sensibilidade ao
contexto, tambm conhecido como dependncia de contexto, pois no qualquer tipo
de vinculao que caracteriza esta propriedade das linguagens.
Em particular, no se est interessado em quaisquer das dependncias que possam
ser representadas por gramticas livres de contexto, tais como seqncias simples de
smbolos ou mesmo o balanceamento de smbolos, tpico das linguagens livres de contexto.
Exemplo 5.1 Seja a linguagem das sentenas que representam expresses aritmticas com at quatro
operaes sobre o alfabeto {a, b}, gerada pela gramtica:

E E + E
| E E
|E E
| E / E
| (E )
| a
| b

Um exemplo de sentena pertencente a esta linguagem a (b + (a/b) a). claro que,


neste caso, possvel verificar algumas dependncias de contexto, no sentido literal da palavra. Por
exemplo, as ocorrncias dos parnteses. No seria possvel fechar o segundo parnteses se o primeiro
no tivesse sido aberto. Outro exemplo que, de cada lado do smbolo de diviso, deve existir uma
letra a ou b, representando cada um dos operandos desta operao. 2

Tais tipos de dependncia de contexto podem ser facilmente representados por


gramticas livres de contexto e, por isso, no sero considerados como tal neste estudo.
Aqui, por outro lado, o interesse maior em outros tipos de dependncias con-
textuais, que no possam ser representadas atravs das gramticas livres de contexto.
Tais dependncias caracterizam linguagens mais complexas que as linguagens livres de
contexto, e constituem o objeto deste captulo.
preciso, portanto, analisar esse tipo de dependncias, referidas nesta introduo.
Um bom exemplo para o seu entendimento so as dependncias de contexto que so
encontradas nas linguagens de programao de alto nvel mais comuns.
Tais linguagens costumam oferecer declaraes diversas, como, por exemplo, de-
claraes de tipos, de constantes, de variveis, de procedimentos, de funes etc. Tais
declaraes cumprem o propsito duplo de acrescentar novos nomes ao espao de nomes
criado pelo programador, e de associar-lhes atributos (por exemplo, no caso das variveis,
seus tipos; no caso das funes, a quantidade e o tipo de seus parmetros, bem como o
tipo do valor retornado).
274 Linguagens Formais - Teoria, Modelagem e Implementao

Uma vez declarados, os novos nomes podem ser empregados no corpo do programa.
Normalmente, tais linguagens exigem que apenas nomes declarados possam ser referen-
ciados em comandos e expresses; alm disso, que a utilizao dos mesmos seja feita de
forma coerente com os atributos que lhes foram associados.
o caso, por exemplo, de se utilizar, no lado esquerdo de um comando de atri-
buio, apenas variveis declaradas e visveis no local da referncia. o caso, tambm,
de se utilizar, na expresso do lado direito de um comando de atribuio, apenas os
nomes e literais cujos atributos sejam compatveis com as operaes que estejam sendo
empregadas.
Dessa forma, a correo sinttica de uma sentena, no caso um programa escrito
em uma linguagem de alto nvel, s se completa se as condies anteriores forem verifica-
das. Est criada, portanto, uma dependncia de contexto entre os atributos dos nomes
constantes nas respectivas declaraes e a forma como os mesmos so manipulados ao
longo do programa.
Exemplo 5.2 Considere-se, por exemplo, o seguinte trecho de programa escrito na linguagem C:
void main () { int x; scanf (%d,&x); printf (%d,x);}
Existe uma clara vinculao entre a declarao da varivel x e a referncia mesma nos
comandos de leitura e impresso. Se ela no tivesse sido declarada, ou se os seus atributos no fossem
compatveis com a maneira como ela utilizada nesses comandos, no seria possvel considerar tal
sentena como vlida do ponto de vista sinttico. 2

Dependncias de contexto so, portanto, uma caracterstica fundamental das lin-


guagens 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 inte-
resses 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.

5.1 Gramticas Sensveis ao Contexto


Cabe, neste ponto, justificar a incapacidade das gramticas livres de contexto para re-
presentar linguagens sensveis ao contexto. Rigorosamente, o Pumping Lemma para
linguagens livres de contexto, apresentado no Captulo 4 (Teorema 4.17), cumpre o papel
de demonstrar a existncia de linguagens que no sejam livres de contexto, ou seja, de
linguagens que no podem ser representadas atravs de gramticas livres de contexto.
Uma anlise um pouco mais detalhada da natureza das gramticas livres de contexto re-
vela a origem das suas limitaes e serve como elemento motivador para a conceituao
de uma nova classe de gramticas a das gramticas sensveis ao contexto.
Ao restringir o lado esquerdo das regras gramaticais a um nico smbolo no-
terminal, as gramticas livres de contexto estabelecem que todas as derivaes sejam
feitas considerando-se apenas o no-terminal selecionado para a substituio, no im-
portando os smbolos (terminais e no-terminais) que o rodeiam esquerda e direita
ou seja, o seu contexto. Da a origem do termo livre de contexto, pois a estrutura
sinttica dos trechos j desenvolvidos da cadeia nunca levada em considerao quando
da substituio de um no-terminal pelo lado direito da regra escolhida.
Isso torna impossvel representar casos como o da declarao de variveis, uma vez
que a substituio dos smbolos no-terminais que representam, por exemplo, a declarao
de varivel e o comando de atribuio no podem ser vinculados durante o processo de
derivao da cadeia, para evitar, por exemplo, a gerao de sentenas que contenham
referncias a nomes invlidos ou de tipos incompatveis com a operao aplicada.
5 Linguagens Sensveis ao Contexto 275

Para superar tal limitao, empregam-se as gramticas sensveis ao contexto. For-


malmente, uma gramtica sensvel ao contexto G = (V , , P , S ) aquela cujas
regras do conjunto P obedecem ao formato , onde:

V NV

| | ||
Gramticas sensveis ao contexto eliminam a restrio de que o lado esquerdo das
regras seja formado por um nico smbolo, e de que este seja um smbolo no-terminal.
Tais gramticas admitem qualquer quantidade de smbolos do lado esquerdo, sejam eles
terminais ou no-terminais. Exigem, apenas, que do lado esquerdo exista pelo menos um
smbolo no-terminal e, tambm, que o lado direito possua uma quantidade de smbolos
no inferior quela encontrada no lado esquerdo da mesma regra.
Define-se inicialmente linguagem sensvel ao contexto como sendo aquela que
possa ser definida atravs de uma gramtica sensvel ao contexto. Conforme convencio-
nado na Seo 2.6, essa definio estendida para qualquer linguagem L que contenha a
cadeia vazia, desde que L {} possa ser gerada por uma gramtica sensvel ao contexto.
Define-se linguagem estritamente sensvel ao contexto como sendo uma lin-
guagem sensvel ao contexto mas no livre de contexto.
Exemplo 5.3 Seja a gramtica G1 = ({a, b, c, S , B , C }, {a, b, c}, P , S ), com

P = {S aSBC ,
S aBC ,
CB BC ,
aB ab,
bB bb,
bC bc,
cC cc}
Todas as regras desta gramtica satisfazem condio de possuir pelo menos um no-terminal
do lado esquerdo e uma seqncia arbitrria de smbolos do lado direito, porm de comprimento
nunca inferior ao comprimento verificado no lado esquerdo da mesma regra.
Algumas derivaes possveis so:

S aBC abC abc;

S aSBC aaBCBC aaBBCC aabBCC aabbCC aabbcC aabbcc;

S aSBC aaSBCBC aaaBCBCBC aaaBBCCBC aaaBBCBCC


aaaBBBCCC aaabBBCCC aaabbBCCC aaabbbCCC aaabbbcCC
aaabbbccC aaabbbccc.
fcil demonstrar que L(G1 ) = {a n b n c n | n 1}. tambm possvel demonstrar, pela
aplicao do Pumping Lemma para linguagens livres de contexto, que L(G1 ) no uma linguagem
livre de contexto (Exemplo 4.38). Logo, no existe qualquer gramtica livre de contexto que seja
capaz de gerar L(G1 ), e portanto L uma linguagem estritamente sensvel ao contexto.
Uma rpida anlise das produes de G1 possibilita a compreenso da lgica que existe em
sua concepo: as duas regras iniciais geram formas sentenciais nas quais uma certa quantidade de
smbolos a seguida por pares BC , de tal forma que as quantidades de a, B e C sejam
idnticas como em aaaBCBCBC . A regra CB BC permite que os B s e os C s sejam
agrupados gerando, neste exemplo, aaaBBBCCC . As demais regras efetuam as substituies
dos no-terminais pelos terminais correspondentes, com o cuidado de evitar que tais substituies
possam ser utilizadas para gerar sentenas distintas das que esto relacionadas acima. 2
276 Linguagens Formais - Teoria, Modelagem e Implementao

As gramticas sensveis ao contexto so ditas monotnicas, pois o comprimento


das formas sentenciais obtidas durante o processo de derivao de uma sentena nunca
sofre reduo. Esta caracterstica ser explorada na Seo 5.5, para fins de associao
desta classe de linguagens com o seu respectivo modelo de reconhecimento mais simples.
Exemplo 5.4 Considere-se a gramtica G2 = ({a, b, c, S , A, B , C }, {a, b, c}, P , S ), com

P = {S ABC ,
S ABCS ,
AB BA,
AC CA,
BA AB ,
BC CB ,
CA AC ,
CB BC ,
A a,
B b,
C c}
Analise-se agora a derivao de algumas sentenas:

S ABC aBC abC abc;

S ABC ACB CAB CBA cBA cbA cba;


S ABCS ABCABC BACABC BACBAC BACBCA bACBCA
baCBCA bacBCA bacbCA bacbcA bacbca.

As duas regras iniciais inserem quantidades idnticas de smbolos A, B e C na forma sentencial.


As regras seguintes so utilizadas para embaralhar esses smbolos de maneira arbitrria. As trs
ltimas substituem cada smbolo no-terminal pelo respectivo smbolo terminal.
A linguagem gerada por G2 consiste em todas as sentenas sobre {a, b, c} com comprimento
mnimo 3 , de tal forma que as quantidades desses smbolos sejam sempre idnticas. Formalmente:

L(G2 ) = {w | as quantidades de a, b e c em w so idnticas, e | 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

Gramticas deste tipo geram linguagens denominadas sensveis ao contexto, ou


simplesmente do tipo 1. A inspeo rigorosa dos formatos admitidos para as produes
das gramticas do tipo 1 no permite a caracterizao imediata de toda e qualquer
gramtica (e conseqentemente das correspondentes linguagens) do tipo 2 como sendo
tambm do tipo 1. Isso decorre do fato de que as gramticas do tipo 2 admitem a cadeia
vazia como alternativa de substituio para o lado esquerdo de qualquer produo, o
que no permitido em gramticas do tipo 1 em funo da restrio || | |.
Rigorosamente, uma linguagem dita sensvel ao contexto se e somente se:

6 L e L = L(G), onde G uma gramtica sensvel ao contexto, ou

L e L {} pode ser gerada por uma gramtica sensvel ao contexto.

Neste ltimo caso, aceita-se que a regra S seja includa na gramtica, porm
desde que S (a raiz da gramtica) no comparea do lado direito de nenhuma outra
regra. Dessa forma evita-se a gerao de formas sentenciais que possam sofrer contrao
5 Linguagens Sensveis ao Contexto 277

durante o processo de derivao. A nica possibilidade de isso ocorrer corresponde


derivao inicial, quando o smbolo a ser substitudo a prpria raiz da gramtica.
Cumpre, neste ponto, estabelecer uma importante relao entre linguagens livres
de contexto e linguagens sensveis ao contexto. Suponha-se, inicialmente, que L = L(G),
onde G uma gramtica livre de contexto, e, adicionalmente, que 6 L. fcil perceber,
neste caso, que G satisfaz a todas as especificaes de uma gramtica sensvel ao contexto,
pois no haver nenhuma regra com direita. Logo, L(G) ser tambm uma linguagem
sensvel ao contexto. Ou seja: linguagens livres de contexto que no contm a cadeia
vazia so tambm linguagens sensveis ao contexto.
Caso L(G), e G seja uma gramtica livre de contexto, ser necessrio aplicar
transformaes em G obtendo-se G , de modo que:

S seja a nica regra vazia em G ;

S no comparea no lado direito de nenhuma outra regra de G ;

L(G) = L(G ).

Como foi demonstrado no Teorema 4.7, tal transformao sempre possvel. Toda e
qualquer gramtica livre de contexto pode ser transformada, sem prejuzo da linguagem
que estiver sendo definida, em uma outra gramtica em que a cadeia vazia comparece
apenas na produo S , sendo S a raiz da gramtica. Alm disso, S garantidamente
no figura no lado direito de nenhuma outra produo. Isso significa que o nico efeito
prtico da presena de produes do tipo A , A N , em gramticas livres de con-
texto quaisquer, na eventual incorporao da cadeia vazia como sentena na linguagem
definida.
Portanto, com exceo da produo S , as gramticas do tipo 2 podem ser
sempre convertidas para um formato que as torne um caso particular das gramticas
do tipo 1. Em outras palavras, tem-se que qualquer gramtica do tipo 2, desde que
devidamente convertida para esse formato padronizado, e a menos da produo S ,
torna-se tambm uma gramtica do tipo 1.
Assim, fato que G , exceto pela regra vazia, uma gramtica sensvel ao contexto
e, conseqentemente, L(G ) {} uma linguagem sensvel ao contexto. Logo, L(G) =
L(G ) , de acordo com a definio, uma linguagem sensvel ao contexto.
Como conseqncia, pode-se concluir que toda linguagem livre de contexto tam-
bm uma linguagem sensvel ao contexto. Fica claro, tambm, que as linguagens livres
de contexto constituem um subconjunto prprio das linguagens sensveis ao contexto.
Para finalizar, algumas observaes de ordem prtica. muito comum, quando
se especificam linguagens de programao, fazer uso de gramticas livres de contexto.
Tal artifcio mascara, no entanto, a existncia das dependncias de contexto, as quais
acabam sendo excludas da formalizao gramatical. Esta estratgia possui pelo menos
uma importante razo de ser e uma importante conseqncia:

A razo de ser consiste no fato de que formalismos distintos, adequados para a re-
presentao de linguagens sensveis ao contexto (como, por exemplo, as gramticas
sensveis ao contexto), so relativamente complexos e difceis de serem trabalhados
quando se trata de especificar as dependncias de contexto tpicas das linguagens
de programao. Opta-se, assim, por uma questo de praticidade, pelo uso de
formalismos mais simples, em particular os livres de contexto.
278 Linguagens Formais - Teoria, Modelagem e Implementao

A conseqncia dessa prtica que a linguagem resultante ser um superconjunto


da linguagem pretendida. Alm das sentenas que observam estritamente as re-
gras de dependncias de contexto da linguagem, outras cadeias, indesejadas, que
no observam tais dependncias, acabam sendo incorporadas linguagem definida.
E disso resulta a necessidade de se acrescentarem filtros para elimin-las da lin-
guagem, preservando-se apenas as cadeias efetivamente aderentes especificao
original.

Trata-se, portanto, de uma estratgia originada a partir de uma necessidade de


simplificar a soluo do problema, mas que resulta, em momento posterior, na necessidade
de incorporao de filtros que descartem as cadeias invlidas.
Exemplo 5.5 Considere-se a gramtica definida pelo conjunto de produes a seguir, representativa
de uma linguagem de programao que possibilita declaraes de variveis seguidas de comandos de
atribuio e expresses.

{Programa Declaracoes Comandos,


Declaracoes Declaracoes Declaracao
| ,
Declaracao %Identificador ,
Comandos Comandos Comando
| ,
Comando #Identificador = Expressao,
Expressao Expressao + Expressao
| Expressao Expressao
| Identificador ,
Identificador a
| b
| c}
Um exemplo de sentena pertencente a esta linguagem :

%a
%b
#a = a + b
#b = b b
Tal sentena pode ser entendida como um programa contendo a declarao de duas variveis
(a e b, nas duas linhas iniciais) e o uso de ambas em dois comandos de atribuio (nas duas
linhas finais).
A nica dependncia de contexto exibida por essa linguagem que os nicos identificadores
que podem ser usados nos comandos (aps o smbolo #) so aqueles que tenham sido declarados
anteriormente (aps o smbolo %).
Perceba-se, no entanto, que tal regra no est incorporada na gramtica apresentada uma
gramtica livre de contexto , mas bastante simples e fcil de ser interpretada.
Tal facilidade de representao, entretanto, onerada pela possibilidade de derivao de sen-
tenas como, por exemplo:

%a
%c
#a = a + b
#b = b b
que viola a dependncia de contexto que vincula referncias s variveis com as respectivas declara-
es (a varivel b referenciada indevidamente, uma vez que sua declarao foi substituda pela
declarao da varivel c). Da a necessidade de se adicionar um filtro para excluir tais sentenas
do conjunto gerado pela gramtica apresentada. 2
5 Linguagens Sensveis ao Contexto 279

5.2 Gramticas com Derivaes Controladas


Este item novo no texto.
Se, por um lado, as gramticas livres de contexto no possuem poder suficiente para
representar linguagens mais complexas, como o caso das linguagens sensveis ao contexto
(conforme demonstrado na seo 4.10), por outro curioso perceber como o uso de alguns
mecanismos simples de extenso as tornam capazes de lidar supreendentemente bem com
essa complexidade, superando as limitaes que lhe so intrnsecas.
Tais mecanismos, genericamente denominados controladores de derivaes, so
extenses gramaticais que restringem ou controlam , de alguma forma, a escolha
das regras de produo possveis de serem aplicadas s formas sentenciais geradas por
uma gramtica subjacente.
Em gramticas convencionais, de qualquer tipo, a escolha da regra de produo a
ser aplicada em uma forma sentencial qualquer resultado, nica e exclusivamente, da
identificao, em , de alguma subcadeia que coincida com o lado esquerdo de alguma
regra p P (seo 2.3). Eventualmente esse critrio resulta num conjunto de regras que
satisfazem tal condio, dentre as quais a escolha de uma determinada regra livre e
vlida, podendo o seu uso conduzir, ou no, gerao de alguma sentena.
Gramticas com derivaes controladas vo alm dessa exigncia bsica, res-
tringindo, de forma complementar e atravs de mecanismos diversos, o conjunto das
regras que normalmente seriam aplicveis a cada forma sentencial durante a gerao de
uma sentena. Como resultado consegue-se gerenciar melhor o uso das regras de produ-
o, e assim estender o poder de representao lingstica da gramtica subjacente.
Os formalismos estudados a seguir possuem gramticas livres de contexto como
dispositivo subjacente. Nos exemplos apresentados, eles so empregados para representar
linguagens estritamente sensveis ao contexto. No obstante, dispositivos gramaticais
subjacentes dos tipos 3, 2, 1 ou 0 podem ser usados livremente com qualquer um deles.
A demonstrao da equipotncia entre os formalismos a seguir apresentados, e destes
com as gramticas do tipo 0 (irrestritas), pode ser encontrada em [37], [38] ou [41]. Essa
condio, no entanto, s alcanada quando eles so estendidos por um mecanismo de
derivao complementar, denominado verificao de aparncia, que no ser discutido
aqui e cuja definio pode ser encontrada nessas mesmas referncias.
A seguir so apresentados os principais formalismos gramaticais que fazem uso de
mecanismos controladores de derivaes:

Gramticas controladas por linguagens regulares;

Gramticas matriciais;

Gramticas programadas;

Gramticas periodicamente variantes no tempo.

A diversidade de dispositivos gramaticais com tais caractersticas grande, como


pode ser verificado em [39], que apresenta 25 deles. Em [37], [38] e [41] so encontrados
bons textos sobre gramticas com derivaes controladas, assim como uma vasta gama
de resultados tericos acerca das classes de linguagens por elas geradas. Os exemplos
mostrados a seguir foram inspirados e/ou adaptados de exemplos extrados dessas refe-
rncias. Com o objetivo de facilitar a comparao entre os formalismos, especialmente
no que se refere ao modelo de funcionamento dos mesmos, cada um deles exemplifi-
280 Linguagens Formais - Teoria, Modelagem e Implementao

cado com as correspondentes gramticas para as mesmas duas linguagens estritamente


sensveis ao contexto:

{a n b n c n | n 1}

{ww | w {a, b}+ }

A notao apresentada a seguir difere da utilizada na literatura referenciada, e foi


elaborada com o objetivo de (i) padronizar, tanto quanto possvel, a representao alg-
brica dos formalismos considerados; (ii) evidenciar a gramtica subjacente tradicional,
presente em cada formalismo (nos casos apresentados, gramticas livres de contexto) e
(ii) permitir a anlise comparativa dos mecanismos de extenso que caracterizam cada
formalismo.

Gramticas controladas por linguagens regulares


So aquelas em que uma gramtica subjacente G = (V , , P , S ) complementada por
uma expresso regular R definida sobre o seu conjunto de produes P . Uma seqncia
de derivaes considerada vlida se e apenas se a seqncia das regras utilizadas nesse
processo corresponder a algum elemento de R. A noo de uso de uma linguagem de
controle foi apresentada pela primeira vez em [42]. Uma gramtica livre de contexto
controlada por linguagem regular G definida formalmente como:

G = (G , R)
G = (V , , P , S ) uma gramtica livre de contexto
P = {p1 , p2 , ..., pn }
R = uma expresso regular sobre P
L(G) = {w |
(S pi1 w1 pi2 ... pik wk = w ) e
(pi1 , pi2 , ..., pik R)}

Exemplo 5.6
G1 = (G1 , R)
G1 = ({S , B , C , a, b, c}, {a, b, c}, {p1 , p2 , p3 , p4 , p5 }, S )
(p1 ) S BC
(p2 ) B aBb
(p3 ) B ab
(p4 ) C cC
(p5 ) C c
R = p1 (p2 p4 ) (p3 p5 )
L(G1 ) = {a n b n c n | n 1}
Considere-se a cadeia p1 p2 p4 p2 p4 p3 p5 R. A aplicao do correspondente conjunto de
produes gera a sentena aaabbbccc, conforme mostra a seqncia de derivaes:

S p1 BC p2 aBbC p4 aBbcC p2
aaBbbcC p4 aaBbbccC p3 aaabbbccC p4 aaabbbccc
2
5 Linguagens Sensveis ao Contexto 281

Exemplo 5.7

G2 = (G2 , R)
G2 = ({S , A, B , a, b}, {a, b}, {p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 })
(p1 ) S AB
(p2 ) A aA
(p3 ) B aB
(p4 ) A bA
(p5 ) B bB
(p6 ) Aa
(p7 ) B a
(p8 ) Ab
(p9 ) B b
R = p1 (p2 p3 | p4 p5 ) (p6 p7 | p8 p9 )
L(G2 ) = {ww | w {a, b}+ }
Considere-se a cadeia p1 p2 p3 p4 p5 p8 p9 R. A aplicao do correspondente conjunto de
produes gera a sentena abbabb, conforme mostra a seqncia de derivaes:

S p1 AB p2 aAB p3 aAaB p4
abAaB p5 abAabB p8 abbabB p9 abbabb
2

Gramticas matriciais
Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estru-
tura matricial M , na qual esto distribudas as regras de produo de P . Uma seqncia
de derivaes considerada vlida se e apenas se as regras forem sempre aplicadas em
grupos, cada grupo sendo formado por todas as regras de uma mesma linha, da primeira
ltima coluna, nessa seqncia. Gramticas matriciais foram inicialmente divulgadas
em [43]. Uma gramtica livre de contexto matricial G definida formalmente como:

G = (G , M )
G = (V , , P , S ) uma gramtica livre de contexto
M = {m1 , m2 , ..., mn }
mi = (pi1 , ..., pik ) | k 1, pij P , i1 ij ik
L(G) = {w |
(S = w0 mi1 w1 mi2 w2 mi3 ... miq1 wq1 miq wq = w ), com
(mi1 , mi2 , mi3 , ..., miq1 , miq M ) e
(wj mi wj +1 : wj pi1 wj1 pi2 wj2 pi3 ... pik wjk = wj +1 )}

Exemplo 5.8

G3 = (G3 , M })
G3 = ({S , A, B , C , a, b, c}, {a, b, c}, P , S )
P = {S abc, S aAbBcC , A aA, B bB , C cC , A a, B b, C c}
282 Linguagens Formais - Teoria, Modelagem e Implementao

M = {m1 , m2 , m3 , m4 }
m1 = (S abc)
m2 = (S aAbBcC )
m3 = (A aA, B bB , C cC )
m4 = (A a, B b, C c)
L(G3 ) = {a n b n c n | n 1}
Considere-se a seqncia m2 m3 m4 . A aplicao do correspondente conjunto de produes gera
a sentena aaabbbccc, conforme mostra a seqncia de derivaes:

S m2 aAbBcC m3 aaAbbBccC m4 aaabbbccc


As derivaes parciais, implcitas na seqncia acima, so:

S m2 aAbBcC : S aAbBcC
aAbBcC m3 aaAbbBccC : aAbBcC aaAbBcC aaAbbBcC aaAbbBccC
aaAbbBccC m4 aaabbbccc : aaAbbBccC aaabbBccC aaabbbccC aaabbbccc
2

Exemplo 5.9

G4 = (G4 , M })
G4 = ({S , A, B , a, b}, {a, b}, P , S )
P = {S AB , A aA, B aB , A bA, B bB , A a, B a, A b, B b}
M = {m1 , m2 , m3 , m4 , m5 })
m1 = (S AB )
m2 = (A aA, B aB )
m3 = (A bA, B bB )
m4 = (A a, B a)
m5 = (A b, B b)
L(G4 ) = {ww | w {a, b}+ }
Considere-se a seqncia m1 m2 m3 m5 . A aplicao do correspondente conjunto de produes
gera a sentena aaabbbccc, conforme mostra a seqncia de derivaes:

S m1 AB m2 aAaB m3 abAabB m5 abbabb


As derivaes parciais, implcitas na seqncia acima, so:

S m1 AB : S AB
AB m2 aAaB : AB aAB aAaB
aAaB m3 abAabB : aAaB abAaB abAabB
abAabB m5 abbabb : abAabB abbabB abbabb
2

Gramticas programadas
Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estru-
tura T , na qual cada regra p P associada a um conjunto, eventualmente vazio, de
regras de P . Uma seqncia de derivaes considerada vlida se e apenas se, para cada
regra p aplicada, a regra seguinte, a ser usada na prxima derivao, for sempre obtida no
conjunto de regras associadas a p. Gramticas programadas foram originalmente repor-
5 Linguagens Sensveis ao Contexto 283

tadas em [44]. Uma gramtica livre de contexto programada G definida formalmente


como:

G = (G , T )
G = (V , , P , S ) uma gramtica livre de contexto
T = {t1 , t2 , ..., tn }
ti = (pi , si ) | 1 i n, pi P , si 2T
L(G) = {w |
(S pi1 w1 pi2 ... piq w ) e
(pij +1 sij , j 1)}

Exemplo 5.10

G5 = (G5 , T })
G5 = ({S , A, B , C , a, b, c}, {a, b, c}, P , S )
P = {S AB , A aA, A bA, B aB , B bB , A a, A b, B a, B b}
T = {t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 }
t1 = (S abc, {})
t2 = (S aAbBcC , {t3 , t6 })
t3 = (A aA, {t4 })
t4 = (B bB , {t5 })
t5 = (B cC , {t3 , t6 })
t6 = (A a, {t7 })
t7 = (B b, {t8 })
t8 = (C c, {})
L(G5 ) = {a n b n c n | n 1}
A derivao abaixo tal que pij +1 sij , j 1:

S p2 aAbBcC p3 aaAbBcC p4 aaAbbBcC p5


aaAbbBccC p6 aaabbBccC p7 aaabbbccC p8 aaabbbccc
De fato, t3 s2 , t4 s3 , t5 s4 , t6 s5 , t7 s6 e t8 s7 . 2

Exemplo 5.11

G6 = (G6 , T })
G6 = ({S , A, B , a, b}, {a, b}, P , S )
P = {S AB , A aA, A bA, B aB , B bB , A a, A b, B a, B b}
T = {t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 }
t1 = (S AB , {t2 , t3 , t6 , t7 })
t2 = (A aA, {t4 })
t3 = (A bA, {t5 })
t4 = (B aB , {t2 , t3 , t6 , t7 })
t5 = (B bB , {t2 , t3 , t6 , t7 })
t6 = (A a, {t8 })
t7 = (A b, {t9 })
284 Linguagens Formais - Teoria, Modelagem e Implementao

t8 = (B a, {})
t9 = (B b, {})
L(G6 ) = {ww | w {a, b}+ }
A derivao abaixo tal que pij +1 sij , j 1:

S p1 AB p2 aAB p4 aAaB p3
abAaB p5 abAabB p7 abbabB p9 abbabb
De fato, t2 s1 , t4 s2 , t3 s4 , t5 s3 , t7 s5 e t9 s7 . 2

Gramticas periodicamente variantes no tempo


Correspondem a gramticas G = (V , , P , S ) que so complementadas por uma estru-
tura U , composta por subconjuntos Pi P , 1 i k . Ao se associar cada passo de
derivao a um nmero inteiro, iniciando em 1, a estrutura U determina quais regras de
produo podem ser usadas em tal etapa de derivao. A periodicidade da variao no
tempo definida pelo valor de k , de tal forma que no passo de derivao i so conside-
radas apenas as regras de produo pertencentes ao subconjunto P(i mod k ) . Gramticas
variantes no tempo foram propostas pela primeira vez em [45]. Uma gramtica livre de
contexto periodicamente variante no tempo G definida formalmente como:

G = (G , U )
G = (V , , P , S ) uma gramtica livre de contexto
U = {P1 , P2 , ..., Pk }, k 1, Pi P , 1 i k
L(G) = {w |
(S pi1 w1 pi2 ... piq w ) e
(pij P(j mod k ) , 1 j q)}

Exemplo 5.12

G7 = (G7 , U )
G7 = ({S , A, B , C , X , a, b, c}, {a, b, c}, P , S )
P = {S ABC , C cC , C c,
A aA, A a, X b,
B bB , B X }
U = {P1 , P2 , P3 }
P1 = {S ABC , C cC , C c}
P2 = {A aA, A a, X b}
P3 = {B bB , B X }
L(G7 ) = {a n b n c n | n 1}
A derivao abaixo tal que pij P(j mod 3) :

S ABC aABC aAbBC


aAbBcC aabBcC aaabXcC aabXcc aabbcc
De fato, as regras de produo aplicadas nessa seqncia de derivaes pertencem, respecti-
vamente, aos conjuntos P1 , P2 , P3 , P1 , P2 , P3 , P1 e P2 . 2
5 Linguagens Sensveis ao Contexto 285

Exemplo 5.13

G8 = (G8 , U )
G8 = ({S , X1 , X2 , Y1 , Y2 , a, b}, {a, b}, P , S )
P = {S X1 Y1 , X1 X1 , Y2 Y2 ,
X1 aX1 , X1 bX2 , X1 , X2 aX1 , X2 bX2 , X2 ,
Y1 aY1 , Y1 bY2 , Y1 , Y2 aY1 , Y2 bY2 , Y2 ,
X2 X2 , Y1 Y1 }
U = {P1 , P2 , P3 , P4 }
P1 = {S X1 Y1 , X1 X1 , Y2 Y2 }
P2 = {X1 aX1 , X1 bX2 , X1 , X2 aX1 , X2 bX2 , X2 }
P3 = {Y1 aY1 , Y1 bY2 , Y1 , Y2 aY1 , Y2 bY2 , Y2 }
P4 = {X2 X2 , Y1 Y1 }
L(G8 ) = {ww | w {a, b}+ }
A derivao abaixo tal que pij P(j mod 4) :

S X1 Y1 aX1 Y1 aX1 aY1 aX1 aY1 aX1 aY1


abX2 aY1 abX2 abY2 abX2 abY2 abX2 abY2 abbX2 abY2
abbX2 abbY2 abbX2 abbY2 abbX2 abbY2 abbabbY2 abbabb
De fato, as regras de produo aplicadas nessa seqncia de derivaes pertencem, respecti-
vamente, aos conjuntos P1 , P2 , P3 , P4 , P1 , P2 , P3 , P4 , P1 , P2 , P3 , P4 , P1 , P2 e P3 . 2

O interesse e a pesquisa sobre gramticas com mecanismos controladores de deri-


vaes 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.

5.3 Formas Normais para Gramticas Sensveis ao Contexto


A representao formal das dependncias de contexto de uma linguagem pode ser efe-
tuada apenas, conforme discutido, por intermdio das gramticas do tipo 1 ou, natural-
mente, atravs das de tipo 0.
conveniente, no entanto, considerar uma importante forma normal para a re-
presentao de gramticas do tipo 1. Nesta forma, as regras so todas reescritas em
conformidade com o seguinte padro:

com A N , V + e , V .
Demonstra-se a seguir (Teorema 5.1) que toda e qualquer gramtica do tipo 1 pode
ser convertida para uma nova gramtica em que todas as produes obedecem ao formato
286 Linguagens Formais - Teoria, Modelagem e Implementao

acima apresentado, exceto, naturalmente, a produo S , caso a cadeia vazia faa


parte da linguagem.
Isso feito, pode-se reinterpretar as produes como especificaes de substituies
para um determinado no-terminal A por , apenas quando A estiver cercado das cadeias
e , ou seja, quando A estiver no contexto de e .
Portanto, diz-se que a substituio de A por depende da ocorrncia de um
contexto esquerdo e de um contexto direito para o no-terminal A, fato este que
motiva o emprego do termo alternativo dependente de contexto para designar as
gramticas do tipo 1.
Deve-se, por outro lado, perceber que uma condio deste tipo nunca ocorre com
as gramticas do tipo 2, nas quais qualquer substituio de um smbolo no-terminal
ocorre sempre de forma independente do contexto em que tal no-terminal encontrado,
motivando dessa maneira o emprego do nome livre de contexto para designar tais
gramticas.
Teorema 5.1 (Forma normal para gramticas sensveis ao contexo) Se L uma
linguagem sensvel ao contexto, ento L = L(G), sendo G uma gramtica em que todas
as regras so do tipo uAv uwv , w ( N )+ , u, v ( N ) , A N .

Justificativa Conforme o Algoritmo 5.1.


Algoritmo 5.1 (Forma normal para gramticas sensveis ao contexo) Obteno
de forma normal para gramticas sensveis ao contexto, em que as regras possuem todas
o formato uAv uwv .

Entrada: uma gramtica que representa uma linguagem sensvel ao contexto L;

Sada: uma gramtica sensvel ao contexto G, tal que todas as suas regras satisfa-
zem ao padro uAv uwv , w ( N )+ , u, v ( N ) , A N e, alm disso,
L = L(G);

Mtodo:
Considerem-se as regras de G numeradas de 1 a p. Cada regra tem o formato
geral:
Xi1 Xi2 Xi3 ...Xim Yi1 Yi2 Yi3 ...Yin
onde 1 i p o ndice da regra considerada e Xij , Yik ( N ). Como se
trata de uma linguagem sensvel ao contexto, L gerada por uma gramtica com
regras monotnicas, ou seja, aquelas em que o comprimento do lado direito das
regras nunca menor do que o comprimento do respectivo lado esquerdo. No caso
acima, n m.

1. O primeiro passo da transformao envolve a substituio de todos os sm-


bolos terminais ak da gramtica por novos smbolos no-terminais Ak cor-
respondentes, acrescentando-se gramtica a regra Ak ak para cada
terminal assim substitudo. Naturalmente, esse procedimento no invalida
as consideraes do pargrafo anterior.

2. A seguir, substitui-se cada uma das regras da gramtica original por um


conjunto equivalente de regras, tambm monotnicas, porm com a restrio
5 Linguagens Sensveis ao Contexto 287

de que o lado direito de cada nova regra possua comprimento mximo 2.


Assim,
Para i variando de 1 at p:

a) Considere-se a regra i no formato:


Xi1 Xi2 Xi3 ...Xim Yi1 Yi2 Yi3 ...Yin

b) Prossiga-se com a regra i caso (m 3) ou (m = 2 e n 3); caso


contrrio, desvie-se para o incio do lao;

c) Crie-se um conjunto de n 1 smbolos no-terminais denotados por


Zi1 at Zi(n1) ;

d) Substitua-se a regra original pelo seguinte conjunto de regras:

Xi1 Xi2 Yi1 Zi1


Zi1 Xi3 Yi2 Zi2

Zi(m2) Xim Yi(m1) Zi(m1)
Zi(m1) Yim Zim
Zim Yi(m+1) Zi(m+1)
Zi(m+1) Yi(m+2) Zi(m+2)

Zi(n2) Yi(n1) Zi(n1)
Zi(n1) Yin

Ao trmino desta etapa, todas as regras da gramtica seguiro um dos


seguintes formatos:

(i) PQ RS

(ii) P R+

com P , Q N e R, S ( N ).
Note-se que o lado esquerdo dessas regras contm apenas smbolos no-
terminais. As regras do tipo (ii) j estaro no formato uAv uwv (basta
considerar u, v = ), e portanto no h mais nada a fazer com elas. As
regras do tipo (i), no entanto, ainda precisam ser convertidas para o formato
desejado.
Considerem-se agora as regras numeradas de 1 a q. Considerem-se, dentre
estas, as regras que obedecem ao formato (i) citado acima:
Pj 1 Qj 2 Rj 1 Sj 2
288 Linguagens Formais - Teoria, Modelagem e Implementao

onde 1 j q o ndice da regra considerada, Pj 1 , Qj 2 N , Rj 1 , Sj 2


( N ). Pode-se aplicar a seguinte transformao de modo a substituir
a regra original por um conjunto de regras equivalentes que obedecem ao
formato uAv uwv :

3. Para j variando de 1 at q:

a) Considere-se a regra j ;

b) Prossiga-se com a regra j caso ela esteja no formato Pj 1 Qj 2 Rj 1 Sj 2 ;


caso contrrio, retorne-se ao incio do lao;

c) Crie-se um novo smbolo no-terminal, Wj ;

d) Substitua-se a regra original pelo seguinte conjunto de regras:

Pj 1 Qj 2 Pj 1 Wj
Pj 1 Wj R j 1 Wj
R j 1 Wj R j 1 Sj 2

Demonstra-se que a gramtica resultante pela aplicao do Algoritmo 5.1 gera a


mesma linguagem L e todas as suas regras obedecem ao formato uAv uwv . 

Exemplo 5.14
A gramtica abaixo representa a linguagem {a n b n c n | n 1}.

S abc (5.1)
S aSQ (5.2)
bQc bbcc (5.3)
cQ Qc (5.4)

1. Primeiro passo: substituio dos smbolos terminais. O seguinte novo conjunto de regras
obtido:

S ABC (5.5)
A a (5.6)
B b (5.7)
C c (5.8)
S ASQ (5.9)
BQC BBCC (5.10)
CQ QC (5.11)

2. Segundo passo: Todas essas regras satisfazem ao critrio de seleo, exceto a Regra (5.10).
Procede-se, ento, sua manipulao.
5 Linguagens Sensveis ao Contexto 289

Regra (5.10): criam-se os novos smbolos no-terminais Z61 , Z62 e Z63 , substituindo
a regra original pelo conjunto de regras:

BQ BZ61 (5.12)
Z61 C BZ62 (5.13)
Z62 CZ63 (5.14)
Z63 C (5.15)
(5.16)

Chega-se, portanto, seguinte gramtica modificada:

S ABC (5.17)
A a (5.18)
B b (5.19)
C c (5.20)
S ASQ (5.21)
BQ BZ61 (5.22)
Z61 C BZ62 (5.23)
Z62 CZ63 (5.24)
Z63 C (5.25)
CQ QC (5.26)

3. Terceiro passo: Com exceo das Regras (5.23) e (5.26), todas as demais satisfazem ao
critrio de seleo.

Regra (5.23): Z61 C BZ62 substituda por:

Z61 C Z61 W7 (5.27)


Z61 W7 BW7 (5.28)
BW7 BZ62 (5.29)

Regra (5.26): CQ QC substituda por:

CQ CW10 (5.30)
CW10 QW10 (5.31)
QW10 QC (5.32)

A verso final da gramtica desejada torna-se:

S ABC (5.33)
A a (5.34)
B b (5.35)
C c (5.36)
S ASQ (5.37)
BQ BZ61 (5.38)
Z61 C Z61 W7 (5.39)
290 Linguagens Formais - Teoria, Modelagem e Implementao

Z61 W7 BW7 (5.40)


BW7 BZ62 (5.41)
Z62 CZ63 (5.42)
Z63 C (5.43)
CQ CW10 (5.44)
CW10 QW10 (5.45)
QW10 QC (5.46)
2

Uma outra importante forma normal para as gramticas sensveis ao contexto


a Forma Normal de Kuroda. Apesar de no evidenciar diretamente os contextos em
que so feitas as substituies, como no caso da forma normal anterior, ela utilizada
em certas demonstraes tericas. Formalmente, diz-se que uma gramtica sensvel ao
contexto encontra-se na Forma Normal de Kuroda se todas as suas produes
estiverem em conformidade com alguma das seguintes condies:

N e ;

N e N;

N e NN ;

NN e NN ;

O Teorema 5.2 estabelece a possibilidade de obteno da Forma Normal de Kuroda


para gramticas sensveis ao contexto. Naturalmente, ela se aplica apenas a linguagens
sensveis ao contexto que no contenham a cadeia vazia.
Teorema 5.2 (Forma Normal de Kuroda) Obteno de uma gramtica na Forma
Normal de Kuroda equivalente a uma gramtica sensvel ao contexto G qualquer, desde
que 6 L(G).

Justificativa Pode ser encontrada em [55]. 

5.4 Mquinas de Turing com Fita Limitada


As Mquinas de Turing com fita limitada tambm conhecidas como Autmatos com
Limitao Linear (da fita de trabalho), ou como Linear Bounded Automata, em ingls
recebem esta denominao alternativa pelo fato de ser possvel demonstrar (ver [46])
que linguagens sensveis ao contexto podem ser reconhecidas por autmatos do tipo
Mquina de Turing em que o tamanho da fita de trabalho uma funo linear do tamanho
da cadeia a ser analisada. Se o comprimento da cadeia de entrada for n, existe algum k
inteiro, maior ou igual a 1, tal que com uma fita de trabalho limitada a um mximo de
k n posies, incluindo a cadeia de entrada, seja possvel efetuar a sua anlise.
Mais do que isso, pode-se demonstrar (tambm em [46]) que, com apenas n +
2 posies na fita de trabalho, tambm possvel obter os mesmos resultados que se
teria com uma fita limitada proporcionalmente ao tamanho da cadeia de entrada. As n
posies intermedirias da fita sendo utilizadas para armazenar a cadeia de entrada e as
duas adicionais referindo-se aos delimitadores da referida cadeia, um mais esquerda e
outro mais direita da mesma.
5 Linguagens Sensveis ao Contexto 291

Uma Mquina de Turing com fita limitada um dispositivo no-determinstico


de reconhecimento de cadeias que possui algumas importantes extenses em relao aos
autmatos finitos ou aos autmatos de pilha. As mais importantes so:

1. A fita de trabalho possui comprimento igual ao comprimento da cadeia de en-


trada, acrescido de dois (uma posio para indicar o incio da cadeia e outra para
indicar seu trmino; tais indicaes so feitas atravs de smbolos especiais, no
pertencentes ao alfabeto de entrada);

2. O cursor de acesso aos smbolos da fita de trabalho pode se deslocar, sob o comando
do controle finito, tanto para a direita quanto para a esquerda;

3. Atravs do cursor de acesso pode-se no apenas ler os smbolos contidos na posio


corrente da fita de trabalho, como tambm gravar novos smbolos em substituio
ao smbolos existentes.

Note-se que, diferentemente do que acontece nas mquinas estudadas anteriormente,


a fita contendo a cadeia a ser analisada uma fita de trabalho, e no simplesmente de
entrada, j que ela pode sofrer alteraes durante a operao da Mquina de Turing.
Formalmente, uma Mquina de Turing com fita limitada M definida como:

M = (Q , , , , q0 , <, >, F )

onde:

Q o conjunto finito de estados;

o alfabeto de entrada, composto por um conjunto finito de smbolos;

o conjunto, tambm finito, de smbolos que podem ser lidos e/ou gravados na
fita de trabalho. ;

a funo parcial de transio, compreendendo os seguintes mapeamentos:

Q 2Q{E ,D}

Q {<} 2Q{<}{D}

Q {>} 2Q{>}{E }

q0 o estado inicial, q0 Q ;

<, >6 so smbolos respectivamente situados imediatamente esquerda e ime-


diatamente direita da cadeia de entrada na configurao inicial;

F Q o conjunto de estados finais.

Deve-se, inicialmente, perceber a caracterizao de dois alfabetos distintos neste


formalismo. representa o conjunto dos smbolos que compem as cadeias de entrada.
A linguagem de entrada deve ser, naturalmente, um subconjunto de . Por outro
lado, representa o conjunto dos smbolos que podem ser lidos e/ou gravados na fita
292 Linguagens Formais - Teoria, Modelagem e Implementao

de trabalho. Este conjunto incorpora, pela sua prpria definio, o conjunto , alm de
outros smbolos que sero utilizados durante a operao do dispositivo.
O conjunto Q e o estado q0 representam, respectivamente, assim como no caso
dos autmatos finitos e de pilha, o conjunto de estados que formam o controle finito do
dispositivo e o estado inicial nico que utilizado para caracterizar a configurao
inicial do mesmo. F representa um subconjunto de Q e contm os chamados estados
finais, que so utilizados para caracterizar as configuraes finais em um dispositivo
deste tipo.
Os smbolos < e > so empregados como delimitadores da cadeia a ser anali-
sada na fita de trabalho. Eles no pertencem ao alfabeto , indicando com isso que no
podem ser utilizados na composio das cadeias de entrada nem ser gravados na fita de
trabalho em sobreposio a outros smbolos (exceto em sobreposio a si prprios).
A inspeo da funo de transio revela que os smbolos especiais < e > s podem
ser gravados na prpria posio original em que se encontravam no incio da operao da
mquina. A funo , da maneira como formulada, impede ainda que outro smbolo
seja gravado em qualquer uma dessas duas posies. Ela especifica, ainda, um nico
sentido de movimentao do cursor em cada caso: esquerda para > e direita para <.
A representao da funo de transio indica, a partir do estado corrente e do
smbolo correntemente selecionado na fita de trabalho, o novo estado corrente, o novo
smbolo que dever substituir o correntemente selecionado e o sentido em que o cursor
de acesso dever se deslocar: para a esquerda (E) ou para a direita (D).
Considere-se a transio (qi , m ) = {(qj , n , E )}. As seguintes aes so tomadas,
nesta seqncia, aps a seleo dessa transio:

O estado corrente qi substitudo pelo novo estado qj ;

O smbolo correntemente apontado pelo cursor de acesso, m , substitudo, na


fita de trabalho, pelo novo smbolo n ;

O cursor de acesso deslocado de uma posio para a esquerda (E).

Como regra adicional, deve-se registrar que as Mquinas de Turing com fita limitada
no permitem movimentos do cursor de acesso esquerda da posio preenchida com
<, nem direita da posio preenchida com >. Sua movimentao fica, portanto,
confinada ao trecho da fita de trabalho situado entre os delimitadores < e >, o que
justifica o uso do termo fita limitada para caracterizar esse tipo de dispositivo.
A definio da funo remete ainda para o no-determinismo inerente a esse tipo
de dispositivo. Dada uma mesma combinao de estado corrente e de smbolo na fita de
trabalho, possvel especificar mltiplas transies envolvendo o prximo estado, o novo
smbolo a ser gravado na fita e o sentido de movimentao do cursor de acesso aps a
gravao.
Apesar de ser possvel se considerar a definio de Mquinas de Turing com fita
limitada determinsticas, a questo de uma eventual equivalncia entre as Mquinas de
Turing com fita limitada no-determinsticas e uma correspondente verso determinstica
um problema em aberto, de soluo ainda desconhecida ([58]). Vale lembrar que este
resultado foi provado verdadeiro para o caso dos autmatos finitos e falso para o caso
dos autmatos de pilha.
A configurao de uma Mquina de Turing com fita limitada denotada atravs
da tripla (, qk , ), em que qk o estado corrente, {<} a poro da cadeia de
entrada que se encontra esquerda do cursor de acesso e {>} a poro da cadeia
5 Linguagens Sensveis ao Contexto 293

de entrada que se encontra direita do cursor de acesso, incluindo a posio por ele
correntemente selecionada. Note-se que < e > podem ocorrer, cada um, no mximo
uma vez em , e sempre nos respectivos extremos.
A configurao inicial (<, q0 , >), onde q0 o estado inicial e a cadeia
de entrada a ser analisada. O cursor de acesso refere-se, portanto, ao smbolo inicial (mais
esquerda) da cadeia . A poro da representao (, qk , ) corresponde, neste caso,
apenas ao smbolo <, pois no existe fita esquerda deste delimitador. A configurao
final definida como (, qf , ), com qf F , {<} e {>}.
As transies contidas na funo especificam possibilidades de movimentao, que
conduzem o dispositivo de cada possvel configurao para a correspondente configurao
seguinte. Diz-se que o dispositivo pra quando a funo no estiver definida para o
par (estado, smbolo de entrada) corrente.
A linguagem aceita por uma Mquina de Turing com fita limitada o conjunto
de todas as cadeias que so capazes de conduzir o dispositivo desde a sua configurao
inicial (nica para cada cadeia de entrada) at uma configurao final qualquer, sem
possibilidade de movimentao adicional. Formalmente:

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 autma-
tos 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 esgo-
tada 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 )}
F = {q2 }
294 Linguagens Formais - Teoria, Modelagem e Implementao

q2

> /(>, D ) > /(>, D )

b/(b, D )
q0 q1

a/(a, D ) b/(b, D )

Figura 5.1: Mquina de Turing com fita limitada que aceita


ab

Exemplo de cadeia reconhecida: aabbb


(<, q0 , aabbb >) (< a, q0 , abbb >) (< aa, q0 , bbb >) (< aab, q1 , bb >) (<
aabb, q1 , b >) (< aabbb, q1 , >) (< aabb, q2 , b >)
Como no h movimentao possvel a partir da configurao (< aabb, q2 , b >), que final,
a mquina pra e a cadeia aabbb aceita.

Exemplo de cadeia rejeitada: aaba


(<, q0 , aaba >) (< a, q0 , aba >) (< aa, q0 , ba >) (< aab, q1 , a >)
Como no h movimentao possvel a partir da configurao (< aab, q1 , a >), que no
final, a mquina pra e a cadeia aaba rejeitada.

A Mquina de Turing com fita limitada do Exemplo 5.15 comporta-se como um autmato finito:
o cursor de acesso move-se em apenas um sentido (exceto quando o smbolo > encontrado na fita
de trabalho) e no h gravao de smbolos na fita, apenas leitura (na verdade, cada smbolo lido
substitudo por ele mesmo). Este exemplo sugere que as Mquinas de Turing com fita limitada possam
ser usadas em substituio aos autmatos finitos, ainda que com um custo maior de processamento
(o custo de gravao de um smbolo na fita).
fcil, tambm, perceber como as Mquinas de Turing com fita limitada podem ser empre-
gadas em mecanismos de transduo, maneira dos transdutores finitos estudados anteriormente.
Se, neste exemplo, as transies:

(q0 , a) (q0 , a, D)
(q0 , b) (q1 , b, D)
(q1 , b) (q1 , b, D)
forem, respectivamente, substitudas por:

(q0 , a) (q0 , b, D)
(q0 , b) (q1 , a, D)
(q1 , b) (q1 , a, D)
ento o autmato resultante mapear elementos do conjunto a b em elementos do conjunto b a ,
em que os smbolos a das cadeias do primeiro conjunto so substitudos por smbolos b nas
cadeias do segundo conjunto e vice-versa. 2

Exemplo 5.16 A Mquina de Turing com fita limitada M = (Q, , , , q0 , <, >, F ) da Figura 5.2
aceita a linguagem {a n b n | n 1}.

Q = {q0 , q1 , q2 , q3 , q4 , q5 }
= {a, b}
5 Linguagens Sensveis ao Contexto 295

= {a, b, X , Y }
= {(q0 , a) (q1 , X , D), (q0 , b) (q5 , b, D), (q0 , Y ) (q3 , Y , D),
(q1 , a) (q1 , a, D), (q1 , Y ) (q1 , Y , D), (q1 , b) (q2 , Y , E ),
(q1 , >) (q5 , >, E ), (q2 , X ) (q0 , X , D), (q2 , Y ) (q2 , Y , E ),
(q2 , a) (q2 , a, E ), (q3 , Y ) (q3 , Y , D), (q3 , b) (q5 , b, D),
(q3 , >) (q4 , >, E )}
F = {q4 }

Y /(Y , D )

> /(>, E )
q3 q4

b/(b, D )

Y /(Y , D ) q5

> /(>, E )
a/(a, D ) a/(a, E )
b/(b, D )

a/(X , D ) b/(Y , E )
q0 q1 q2 Y /(Y , E )
Y /(Y , D )

X /(X , D )

Figura 5.2: Mquina de Turing com fita limitada que aceita


{a n b n | n 1}

Seu funcionamento intuitivo e reflete a aplicao do seguinte algoritmo:


1. O smbolo a sob o cursor substitudo pelo smbolo X . O cursor deslocado de uma
posio, para a direita.
2. O cursor continua se deslocando para a direta at encontrar um smbolo b ou o smbolo
>.

3. Se encontrar >, a cadeia rejeitada, pois existem mais smbolos a do que b. Se


encontrar b, este ser substitudo por Y e o cursor ser deslocado para a esquerda at
encontrar o X mais direita. Neste momento, o cursor deslocado de uma posio para
a direita e reinicia-se todo o processo no passo (1).

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 Linguagens Formais - Teoria, Modelagem e Implementao

A cadeia aabb aceita:


(<, q0 , aabb >) (< X , q1 , abb >) (< Xa, q1 , bb >) (< X , q2 , aYb >) (<
, q2 , XaYb >) (< X , q0 , aYb >) (< XX , q1 , Yb >) (< XXY , q1 , b >) (<
XX , q2 , YY >) (< X , q2 , XYY >) (< XX , q0 , YY >) (< XXY , q3 , Y >)
(< XXYY , q3 , >) (< XXY , q4 , Y >)

A cadeia aab rejeitada:


(<, q0 , aab >) (< X , q1 , ab >) (< Xa, q1 , b >) (< X , q2 , aY >) (<, q2 , XaY >)
(< X , q0 , aY >) (< XX , q1 , Y >) (< XXY , q1 , >) (< XX , q5 , Y >)

A cadeia abb rejeitada:


(<, q0 , abb >) (< X , q1 , bb >) (<, q2 , XYb >) (< X , q0 , Yb >) (< XY , q3 , b >)
(< XYb, q5 , >)

Neste exemplo, a Mquina de Turing com fita limitada est sendo utilizada para reconhecer
uma linguagem livre de contexto, e tal fato sugere que esse tipo de dispositivo possa ser empregado
tambm no reconhecimento desta categoria de linguagens, em substituio aos autmatos de pilha.
Alm de necessitar da movimentao do cursor em ambos os sentidos, neste exemplo a subs-
tituio (gravao) de um smbolo do alfabeto de entrada por smbolos que no fazem parte deste
alfabeto (no caso, a por X e b por Y ) essencial para o seu correto funcionamento. 2

Exemplo 5.17 A Mquina de Turing com fita limitada da Figura 5.3 reconhece a linguagem {wcw |
w {a, b} } sobre o alfabeto {a, b, c}:

X /(X , D )

> /(>, E )
q7 q8

c/(c, D )

a/(X , D )
a/(a, D ) X /(X , D ) X /(X , E )

a/(X , D ) c/(c, D ) a/(X , E ) c/(c, E )


q0 q1 q2 q3 q4

b/(b, D ) a/(a, E ), b/(b, E )


a/(a, D ) X /(X , D )

b/(X , D ) b/(X , E )
c/(c, D )
q5 q6

b/(b, D )

Figura 5.3: Mquina de Turing com fita limitada que aceita


{wcw | w {a, b} }

Este exemplo ilustra o reconhecimento de uma linguagem tipicamente sensvel ao contexto,


pois a subcadeia w deve ser a mesma em ambos os lados do smbolo c. Tal caracterstica remete
relao entre a declarao e o uso de nomes, encontrada na maioria das linguagens de programao
algortmicas tradicionais um nome s pode ser usado se a sua declarao for visvel no local do
uso.
5 Linguagens Sensveis ao Contexto 297

Exemplo de cadeia reconhecida: abbcabb

(<, q0 , abbcabb >) (< X , q1 , bbcabb >) (< Xb, q1 , bcabb >)
(< Xbb, q1 , cabb >) (< Xbbc, q2 , abb >) (< Xbb, q3 , cXbb >)
(< Xb, q4 , bcXbb >) (< X , q4 , bbcXbb >) (<, q4 , XbbcXbb >)
(< X , q0 , bbcXbb >) (< XX , q5 , bcXbb >) (< XXb, q5 , cXbb >)
(< XXbc, q6 , Xbb >) (< XXbcX , q6 , bb >) (< XXbc, q3 , XXb >)
(< XXb, q3 , cXXb >) (< XX , q4 , bcXXb >) (< X , q4 , XbcXXb >)
(< XX , q0 , bcXXb >) (< XXX , q5 , cXXb >) (< XXXc, q6 , XXb >)
(< XXXcX , q6 , Xb >) (< XXXcXX , q6 , b >) (< XXXcX , q3 , XX >)
(< XXXc, q3 , XXX >) (< XXX , q3 , cXXX >) (< XX , q4 , XcXXX >)
(< XXX , q0 , cXXX >) (< XXXc, q7 , XXX >) (< XXXcX , q7 , XX >)
(< XXXcXX , q7 , X >) (< XXXcXXX , q7 , >) (< XXXcXX , q8 , X >)

Pode-se demonstrar, atravs do Pumping Lemma para linguagens livres de contexto, que
a linguagem deste exemplo no livre de contexto (a demonstrao semelhante do Exemplo
4.39). Tal resultado sugere, como ser mostrado mais adiante, que as Mquinas de Turing com fita
limitada so dispositivos capazes de reconhecer uma classe de linguagens mais ampla do que as livres
de contexto, reconhecidas pelos autmatos de pilha trata-se, no caso, da classe das linguagens
sensveis ao contexto, caracterizadas neste captulo (ver Teorema 5.3). 2

5.5 Equivalncia entre Gramticas Sensveis ao Contexto e


Mquinas de Turing com Fita Limitada
Linguagens sensveis ao contexto podem ser formalizadas atravs de gramticas sensveis
ao contexto. As Mquinas de Turing com fita limitada, por outro lado, correspondem
aos dispositivos de reconhecimento associados s linguagens sensveis ao contexto. As
gramticas sensveis ao contexto e as Mquinas de Turing com fita limitada representam
exatamente a mesma classe de linguagens as linguagens sensveis ao contexto. Esta
equivalncia, que foi inicialmente estabelecida por Kuroda em [65], poder ser melhor
percebida atravs dos algoritmos descritos a seguir.

Teorema 5.3 (Mquina de Turing gramtica) Seja L = L(M ), M uma M-


quina de Turing com fita limitada. Ento L {} = L(G), com G sendo uma gramtica
sensvel ao contexto.

Justificativa A idia geral desta demonstrao consiste na obteno de uma gram-


tica sensvel ao contexto que reproduz, na derivao de suas sentenas, os movimentos
de uma Mquina de Turing com fita limitada que reconhece a mesma linguagem. Se a
cadeia de entrada conduz o autmato a uma configurao final, sendo portanto aceita,
esta mesma cadeia gerada pela gramtica. Cadeias rejeitadas pelo autmato no so
geradas pela gramtica.
O algoritmo descrito a seguir especifica os passos a serem seguidos na transformao
sistemtica de uma Mquina de Turing com fita limitada M = (Q , , , , <, >, F ) em
uma gramtica sensvel ao contexto G = (V , , P , S ).
Como se trata de um procedimento cannico, freqente que seja gerada uma
grande quantidade de smbolos no-terminais e de regras, vrios dos quais eventualmente
repetidos, mesmo que a Mquina de Turing com fita limitada correspondente possua
298 Linguagens Formais - Teoria, Modelagem e Implementao

poucos estados e poucas entradas. O procedimento descrito abaixo, no entanto, pode ser
facilmente automatizado atravs de programas de computador.
Inicialmente so gerados os smbolos no-terminais de G. Estes smbolos possuem
o formato geral [, ], com , e {<, }{, q, q}{>, }, com e q Q .
A primeira dessas duas componentes [, ...] representa um certo smbolo ter-
minal da cadeia de entrada. A segunda componente [..., ] representa parte da
configurao assumida pela Mquina de Turing com fita limitada no reconhecimento da
referida cadeia de entrada.
Os conjuntos P e S de G so inicialmente definidos como:

I. P =

II. P = P {S [i , < q0 i ]A, S [i , < q0 i >], i }


N = {S , A}
N = N {[i , < q0 i ], i }
N = N {[i , < q0 i >], i }

III. P = P {A [i , i ]A, A [i , i >], i }


N = N {[i , i ], i }
N = N {[i , i >], i }

Eles permitem gerar formas sentenciais do tipo:

A) [i , < q0 i >], ou

B) [i , < q0 i ][j , j ][k , k ]...[u , u >]

formadas exclusivamente por smbolos no-terminais de G.


A primeira forma sentencial refere-se ao caso de cadeias de entrada cujo compri-
mento igual a 1, ao passo que a segunda se refere a casos em que a cadeia de entrada
possui comprimento maior do que 1.
Considere-se o segundo caso. Apenas para efeito didtico, pode-se construir duas
novas cadeias a partir desta forma sentencial. Tomando-se apenas o primeiro elemento
de cada smbolo no-terminal, obtm-se a cadeia:

[i , ...][j , ...][k , ...]...[u , ...] ou, simplesmente, i j k ...u

e tomando-se apenas o segundo elemento de cada smbolo no-terminal:

[..., < q0 i ][..., j ][..., k ]...[..., u >] ou, simplesmente, < q0 i j k ...u >

fcil perceber que a primeira cadeia (i j k ...u ) corresponde cadeia de entrada


que submetida ao reconhecedor e que ser objeto de uma tentativa de sntese atravs
da gramtica que se pretende construir.
A segunda cadeia (< q0 i j k ...u >) corresponde configurao inicial da M-
quina de Turing limitada, ou seja, quela em que o estado inicial q0 e o cursor de acesso
encontra-se posicionado sobre o smbolo i , portanto com toda a cadeia de entrada
sua direita e apenas o smbolo < sua esquerda. Conforme a notao previamente
apresentada, a configurao inicial da mquina ser:

(<, q0 , i j k ...u >)


5 Linguagens Sensveis ao Contexto 299

Dessa maneira, as formas sentenciais dos tipos A e B correspondem s duas confi-


guraes 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 re-
conhecedor 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 correspon-
dente em G.
Genericamente, as regras de M enquadram-se em quatro casos (conforme a definio
da funo de transio ):

Caso i: (qi , <) = (qj , <, D )

Caso ii: (qi , >) = (qj , >, E )

Caso iii: (qi , m ) = (qj , n , D )

Caso iv: (qi , m ) = (qj , n , E )

Suponha-se, a ttulo de exemplo, que a cadeia de entrada de uma Mquina de


Turing com fita limitada qualquer seja abca. A sua configurao inicial , portanto,
(<, q0 , abca >). Nos termos da forma sentencial gerada pelas regras iniciais de G, ela
ser composta pelos seguintes smbolos no-terminais (quatro no total):

[a, < q0 a][b, b][c, c][a, a >]

Suponha-se que a regra (q0 , a) = (q1 , d , D ) (caso iii) seja aplicada em M . Neste
caso, G deve permitir a derivao:

[a, < q0 a][b, b][c, c][a, a >] [a, < d ][b, q1 b][c, c][a, a >]

Note-se que o movimento de M reproduzido como uma nova forma sentencial em


G, de modo que, atravs da posio de qi presente em apenas um smbolo no-
terminal de cada vez em cada forma sentencial distinta , determina-se a posio do
cursor de acesso sobre a fita de trabalho.
A indicao de estado qi migra, assim, de um smbolo no-terminal para o seguinte
(aquele que est sua direita), ou, ainda, para o anterior (aquele que est sua esquerda),
caso a cabea de acesso se desloque para a esquerda.
Caso M aplique uma regra que desloque o cursor de acesso para a esquerda, a nova
configurao tambm representada como uma nova derivao em G. Por exemplo,
suponha-se agora que a regra (q1 , b) = (q2 , e, E ) (caso iv) seja aplicada na configurao
anterior. Ento, do ponto de vista de G, a seguinte nova forma sentencial deveria ser
gerada:
[a, < d ][b, q1 b][c, c][a, a >] [a, < q2 d ][b, e][c, c][a, a >]
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 Linguagens Formais - Teoria, Modelagem e Implementao

Esta ltima forma sentencial mostra que M pode, eventualmente, deslocar o cursor
de acesso para a esquerda, at fazer com que o smbolo corrente seja <. Em situaes
como esta, o nico movimento permitido para a direita, sem modificao do smbolo
lido (conforme a definio da funo de transio). Supondo que (q3 , <) = (q4 , <, D )
na verdade, a nica transio possvel de ser aplicada neste ponto , caracteriza-se
o caso (i), e a nova forma sentencial obtida :

[a, q3 < d ][b, e][c, c][a, a >] [a, < q4 d ][b, e][c, c][a, a >]

O conjunto de regras de G que so capazes de promover tais derivaes , natu-


ralmente, obtido a partir da especificao da funo . Deve-se, portanto, considerar os
casos individuais. A partir de cada um deles, novas produes so formuladas e, a partir
destas, novos smbolos no-teminais so acrescentados gramtica. Observe-se que nos
casos (iii) e (iv) as transies so feitas com smbolos do alfabeto , ou seja, m , n .

Caso i: (qi , <) = (qj , <, D )


A cadeia de entrada pode ser unitria (IV) ou no (V):

IV. P = P {[m , qi < m >] [m , < qj m >], m }


N = N {[m , qi < m >], m }
N = N {[m , < qj m >], m }

V. P = P {[m , qi < m ] [m , < qj m ], m }


N = N {[m , qi < m ], m }
N = N {[m , < qj m ], m }

Caso ii: (qi , >) = (qj , >, E )


A cadeia de entrada pode ser unitria (VI) ou no (VII):

VI. P = P {[m , < n qi >] [m , < qj n >], m , n }


N = N {[m , < n qi >], m , n }
N = N {[m , < qj n >], m , n }

VII. P = P {[m , n qi >] [m , qj n >], m , n }


N = N {[m , n qi >], m , n }
N = N {[m , qj n >], m , n }

Caso iii: (qi , m ) = (qj , n , D )


O smbolo corrente (m ) pode:

ser o primeiro da cadeia de entrada:

cadeia unitria: VIII;

cadeia de comprimento 2: IX;

cadeia de comprimento maior que 2: X;


5 Linguagens Sensveis ao Contexto 301

ser o ltimo da cadeia de entrada:

cadeia unitria: coincide com VIII;

cadeia no-unitria: IX;

ser o penltimo da cadeia de entrada:

cadeia de comprimento 2: coincide com IX;

cadeia de comprimento maior que 2: XII;

estar em qualquer posio diferente destas:

XIII;

VIII. P = P {[p , < qi m >] [p , < n qj >], p }


N = N {[p , < qi m >], p }
N = N {[p , < n qj >], p }

IX. P = P {[p , < qi m ][q , r >] [p , < n ][q , qj r >], p , q , r }


N = N {[p , < qi m ], p }
N = N {[q , r >], q , r }
N = N {[p , < n ], p }
N = N {[q , qj r >], q , r }

X. P = P {[p , < qi m ][q , r ] [p , < n ][q , qj r ], p , q , r }


N = N {[p , < qi m ], p }
N = N {[q , r ], q , r }
N = N {[p , < n ], p }
N = N {[q , qj r ], q , r }

XI. P = P {[p , qi m >] [p , n qj >], p }


N = N {[p , qi m >], p }
N = N {[p , n qj >], p }

XII. P = P {[p , qi m ][q , r >] [p , n ][q , qj r >], p , q , r }


N = N {[p , qi m ], p }
N = N {[q , r >], q , r }
N = N {[p , n ], p }
N = N {[q , qj r >], q , r }

XIII. P = P {[p , qi m ][q , r ] [p , n ][q , qj r ], p , q , r }


N = N {[p , qi m ], p }
N = N {[q , r ], q , r }
N = N {[p , n ], p }
N = N {[q , qj r ], q , r }

Caso iv: (qi , m ) = (qj , n , E )


302 Linguagens Formais - Teoria, Modelagem e Implementao

O smbolo corrente (m ) pode:

ser o primeiro da cadeia de entrada:

cadeia unitria: XIV;

cadeia no-unitria: XV;

ser o ltimo da cadeia de entrada:

cadeia unitria: coincide com XIV;

cadeia de comprimento 2: XVI;

cadeia de comprimento maior que 2: XVII;

ser o segundo da cadeia de entrada:

cadeia de comprimento 2: coincide com XVI;

cadeia de comprimento maior que 2: XVIII;

estar em qualquer posio diferente destas:

XIX;

XIV. P = P {[p , < qi m >] [p , qj < n >], p }


N = N {[p , < qi m >], p }
N = N {[p , qj < n >], p }

XV. P = P {[p , < qi m ] [p , qj < n ], p }


N = N {[p , < qi m ], p }
N = N {[p , qj < n ], p }

XVI. P = P {[p , < q ][r , qi m >] [p , < qj q ][r , n >], p , q , r }


N = N {[p , < q ], p , q }
N = N {[r , qi m >], r }
N = N {[p , < qj q ], p , q }
N = N {[r , n >], r }

XVII. P = P {[p , q ][r , qi m >] [p , qj q ][r , n >], p , q , r }


N = N {[p , q ], p , q }
N = N {[r , qi m >], r }
N = N {[p , qj q ], p , q }
N = N {[r , n >], r }

XVIII. P = P {[p , < q ][r , qi m ] [p , < qj q ][r , n ], p , q , r }


N = N {[p , < q ], p , q }
5 Linguagens Sensveis ao Contexto 303

N = N {[r , qi m ], r }
N = N {[p , < qj q ], p , q }
N = N {[r , n ], r }

XIX. P = P {[p , q ][r , qi m ] [p , qj q ][r , n ], p , q , r }


N = N {[p , q ], p , q }
N = N {[r , qi m ], r }
N = N {[p , qj q ], p , q }
N = N {[r , n ], r }

A operao do autmato cessa quando ele atinge uma configurao para a qual no
exista movimentao possvel, ou seja, quando (qi , m ) = . Nesta situao, se qi F ,
diz-se que o autmato aceita a cadeia de entrada. Caso contrrio, diz-se que ele a rejeita.
Condio semelhante precisa ser alcanada atravs de G. Suponha-se que, quando
o autmato pra de se movimentar, a configurao seja (, qi m ). A forma sentencial
equivalente em G ser [...][...]...[n , qi m ][...].
Se, nesta situao, qi F e (qi , m ) = , ento as seguintes regras devem ser
adicionadas gramtica G:

Caso v: qi F e (qi , <) =

XX. P = P {[p , qi < q ] p , p , q }


N = N {[p , qi < q ], p , q }

XXI. P = P {[p , qi < q >] p , p , q }


N = N {[p , qi < q >], p , q }

Caso vi: qi F e (qi , >) =

XXII. P = P {[p , q qi >] p , p , q }


N = N {[p , q qi >], p , q }

XXIII. P = P {[p , < q qi >] p , p , q }


N = N {[p , < q qi >], p , q }

Caso vii: qi F e (qi , m ) =

XXIV. P = P {[p , < qi m ] p , p }


N = N {[p , < qi m ], p }

XXV. P = P {[p , qi m ] p , p }
N = N {[p , qi m ], p }

XXVI. P = P {[p , qi m >] p , p }


N = N {[p , qi m >], p }

XXVII. P = P {[p , < qi m >] p , p }


N = N {[p , < qi m >], p }
304 Linguagens Formais - Teoria, Modelagem e Implementao

Essas regras do incio ao processo de converso da cadeia armazenada no lado


esquerdo dos no-terminais e at ento inalterada em uma sentena a ser efe-
tivamente gerada por G. A forma sentencial inicial ser obtida atravs da derivao
[...][...]...[n , qi m ][...] [...][...]...n [...], se qi F e (qi , m ) = .
Finalmente, devem ser acrescentadas mais algumas produes em P, as quais per-
mitam que os no-terminais remanescentes na forma sentencial sejam todos substitudos
por smbolos terminais, conforme o valor armazenado no lado esquerdo, no interior do
mesmo:

Caso viii: Substituio de smbolos no-terminais por smbolos terminais.

XXVIII. P = P {[m , ]n m n , n , [m , ] V }

XXIX. P = P {n [m , ] n m , n , [m , ] V }

A simples inspeo do formato das regras geradas nos itens I a XXIX permite
concluir que toda e qualquer gramtica gerada por esse mtodo uma gramtica sensvel
ao contexto. Ser omitida a demonstrao formal da equivalncia das Mquinas de
Turing com fita limitada com as gramticas sensveis ao contexto, que no entanto pode
ser encontrada em [52]. 
Exemplo 5.18 Considere-se uma Mquina de Turing com fita limitada M = (Q, , , , q0 , <, >, F ),
conforme apresentado a seguir, e a cadeia de entrada ab.

Q = {q0 , q1 }
= {a, b}
= {a, b}
= {(q0 , a) (q0 , a, D), (q0 , b) (q1 , b, E )}
F = {q1 }
A Figura 5.4 ilustra os movimentos que levam o reconhecedor desde a sua configurao inicial
at uma configurao final. direita, as respectivas formas sentenciais, que so geradas pela
aplicao dos casos enumerados anteriormente. Note-se que, por uma questo de economia de
espao, esto mostradas aqui apenas as regras e os smbolos no-terminais relevantes para a gerao
desta cadeia. Uma gerao exaustiva de todos os smbolos e de todas as regras da gramtica G
equivalente a M tornaria o exemplo exageradamente extenso, e por isso deixada como exerccio
para o leitor.

Figura 5.4: Gramtica sensvel ao contexto simulando M-


quina de Turing com fita limitada para o Exemplo 5.18
5 Linguagens Sensveis ao Contexto 305

Para dar seqncia ao assunto, necessrio demonstrar que as Mquinas de Turing


com fita limitada, cujas fitas sejam compostas por uma nica trilha (o que corresponde
ao caso visto at o momento), so equivalentes, quanto ao seu poder de reconhecimento,
s Mquinas de Turing com mltiplas trilhas na fita de trabalho. Esse caso est ilustrado
na Figura 5.5, em que a fita de trabalho compreende trs trilhas distintas:

Figura 5.5: Mquina de Turing com mltiplas trilhas na fita de


trabalho, situao inicial

Neste modelo, qualquer que seja a quantidade de trilhas na fita de trabalho, os


cursores de acesso so sempre deslocados conjuntamente e esto, portanto, sempre na
mesma posio da fita, porm cada qual apontando para a clula correspondente. As
transies so efetuadas considerando-se o estado corrente e o conjunto dos smbolos
referenciados simultaneamente na fita de trabalho.
Na Figura 5.5, tal conjunto corresponde tripla (1 , 2 , 3 ), em que 1 est gravado
na primeira posio da trilha 1, 2 na primeira posio da trilha 2 e 3 na primeira posio
da trilha 3. Como resultado da aplicao de uma transio, o autmato muda de estado,
a tripla (1 , 2 , 3 ) substituda por (1 , 2 , 3 ) e os trs cursores de acesso deslocam-se
simultaneamente de uma posio, por exemplo, direita (todos juntos). A nova situao
pode ser visualizada na Figura 5.6.
306 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 5.6: Mquina de Turing com mltiplas trilhas na fita de


trabalho, situao final

Seja 1 o alfabeto usado na trilha 1, 2 o alfabeto da trilha 2 e 3 o alfabeto da


trilha 3. fcil perceber que a funo de transio de um autmato assim caracterizado
pode ser expressa na forma:
: Q (1 2 3 ) 2Q(1 2 3 ){E ,D}
ou, generalizando para n trilhas:
: Q (1 2 ... n ) 2Q(1 2 ...n ){E ,D}
Convencionando-se que cada elemento do conjunto 1 2 ... n seja repre-
sentado por um novo e nico smbolo, pertencente a um novo alfabeto , ento a funo
torna-se:
: Q 2Q{E ,D}
idntica, portanto, que foi definida originalmente para a Mquina de Turing com fita
limitada. Em outras palavras, a possibilidade de se convencionar que a fita de trabalho
seja repartida em diversas trilhas no confere maior poder de reconhecimento ao dis-
positivo. Por outro lado, permite que o mesmo seja considerado de um outro ponto de
vista, o que pode facilitar certas demonstraes, como, por exemplo, a do Teorema 5.4
apresentado a seguir.
Teorema 5.4 (Mquina de Turing gramtica) Seja L = (G), com G uma gra-
mtica 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 cor-
respondente Mquina de Turing com fita limitada. Trs propriedades das Mquinas de
Turing com fita limitada so fundamentais para a apresentao e o entendimento do
algoritmo:

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);
5 Linguagens Sensveis ao Contexto 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.

Entrada: uma gramtica sensvel ao contexto G;

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 exa-


minar para determinar se ela pertence ou no a L;

- Na segunda trilha est inicialmente gravado, na primeira posio, o smbolo


no-terminal S , a raiz da gramtica G. A cadeia gravada na segunda trilha
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;

2. Para cada par (i, ) obtido no passo (1), criar um novo thread para M ,
e deslocar o respectivo cursor de acesso simultaneamente sobre as duas
trilhas, at a posio i da fita de trabalho; encerrar o thread original na
configurao de rejeio;

3. Para cada thread criado no passo (2):

a) Criar n novos threads para M , sendo que cada thread j , 1 j


n, deve substituir, na cadeia z , a partir da posio i, a subcadeia
pela subcadeia j ; encerrar o thread original na configurao de
rejeio;

b) Para cada thread criado no passo (3.a):

i. Se |z | > |w |, encerrar o thread na configurao de rejeio;

ii. Se |z | < |w |, desviar para o passo (1);

iii. Se |z | = |w | e z 6= w , desviar para o passo (1);


308 Linguagens Formais - Teoria, Modelagem e Implementao

iv. Se |z | = |w | e z = w , encerrar o thread na configurao de


aceitao.


O Algoritmo 5.2 faz com que M reproduza, na segunda trilha, as formas sentenciais
de G na sntese da cadeia fornecida (caso esta seja uma sentena de L). Cada uma das
diferentes seqncias de derivao possveis de serem obtidas em G so simuladas por
um thread distinto de M , que opera de forma no-determinstica.
Dessa forma, a cadeia de entrada ser aceita se e apenas se existir pelo menos um
thread que simule a seqncia de derivaes que gera w em G e, portanto, que con-
duza M desde a sua configurao inicial at uma configurao de aceitao. Se todas as
seqncias possveis tiverem sido consideradas (atravs do no-determinismo) e ainda as-
sim nenhuma delas tiver conduzido M a uma configurao de aceitao, ento certamente
a cadeia de entrada no pertence a L. Do ponto de vista gramatical, isso corresponde ao
fato de no existir derivao possvel para a referida cadeia em G. Logo, M capaz de
aceitar apenas e to somente as sentenas que so geradas por G.
possvel provar, em funo do carter monotnico das derivaes obtidas atravs
das gramticas sensveis ao contexto, que todos os threads criados pelo Algoritmo 5.2 se
encerram aps um tempo finito de execuo, correspondente ao tempo necessrio para a
gerao de uma forma sentencial de comprimento mnimo igual ao da cadeia de entrada.
Assim, garante-se a existncia de uma Mquina de Turing com fita limitada que sempre
pra, qualquer que seja a cadeia de entrada que lhe seja submetida. Portanto, L(G)
uma linguagem recursiva.
O Algoritmo 5.2 presume que leitor saiba como realizar as seguintes operaes
fundamentais em uma Mquina de Turing com fita limitada que, por serem extensas,
embora no necessariamente complexas, sero deixadas apenas como exerccio:

Deslocar o cursor de acesso at uma posio arbitrria da fita de trabalho;

Reconhecer um padro (cadeia) na fita de trabalho, a partir da posio corrente


do cursor de acesso;

Deslocar parte da cadeia de entrada para a direita, com a finalidade de abrir espao
para a insero dos smbolos indicados pela produo que estiver sendo aplicada;

Substituir uma subcadeia localizada em uma das trilhas por uma subcadeia cor-
respondente, conforme indicado em alguma das produes da gramtica;

Determinar se a cadeia a ser reescrita na segunda trilha eventualmente necessita


de mais posies livres do que a fita de trabalho dispe;

Comparar as cadeias contidas nas duas trilhas da fita de trabalho para determinar
se so ou no idnticas.

Exemplo 5.19 Seja G = ({a, b, c, Q, S }, {a, b, c}, {S abc | aSQ, bQc bbcc, cQ Qc}, S ),
L(G) = {a n b n c n , n 1}. A Figura 5.7 reproduz uma seqncia de movimentos de M que conduz
aceitao da cadeia aabbcc. So mostrados os contedos das duas trilhas da fita de trabalho.
5 Linguagens Sensveis ao Contexto 309

Figura 5.7: Mquina de Turing com fita limitada simulando


gramtica sensvel ao contexto

Assim como foi feito no Exemplo 5.18, por uma questo de economia de espao, so mostrados
aqui apenas os movimentos realizados por M que permitem o reconhecimento da cadeia de entrada,
omitindo-se as mltiplas tentativas de reconhecimento atravs do no-determinismo inerente ao
dispositivo. Trata-se, portanto, de uma situao de melhor caso, deixando-se para o leitor, como
exerccio, a investigao dos demais caminhos que no levam ao reconhecimento da sentena.
Suponha-se, no entanto, que no passo 4 a regra escolhida tivesse sido S abc (no lugar
de S aSQ). Neste caso, a forma sentencial resultante seria abc, portanto diferente da cadeia
aabbcc gravada na primeira trilha, e no passo seguinte no seria possvel identificar o lado esquerdo
de nenhuma regra em abc, disso resultando a parada de M em uma configurao no-final.
Suponha-se, por outro lado, que no passo 5 a posio 2 tivesse sido selecionada (e no a
posio 3). Neste caso, M no seria capaz de reconhecer o lado esquerdo de nenhuma regra a
310 Linguagens Formais - Teoria, Modelagem e Implementao

partir da referida posio 2, pois no existem regras que possuam o lado esquerdo comeando com
o smbolo a, e portanto M pararia em uma configurao no-final.
Essas duas possibilidades, no entanto, no indicam que a cadeia de entrada possa ser arbitra-
riamente aceita ou rejeitada. preciso lembrar que se trata de um dispositivo no-determinstico,
no qual todas as alternativas de movimentao devem ser consideradas, at que pelo menos uma
resulte em aceitao (como o caso mostrado na Figura 5.7 do Exemplo 5.19), ou ento que todas
tenham resultado em parada em configurao no-final, caso em que a cadeia de entrada rejeitada.
A rejeio, no entanto, no aconteceria no Exemplo 5.19, mesmo que as hipteses consideradas
nos pargrafos anteriores tivessem de fato acontecido durante a operao de M , pois a Figura 5.7
comprova que existe pelo menos uma seqncia de movimentos que conduz M de sua configurao
inicial at uma configurao final. 2

5.6 Relao entre Linguagens Sensveis ao Contexto e


Linguagens Livres de Contexto
Nesta seo ser investigada a relao existente entre as linguagens livres de contexto,
estudadas no Captulo 4, e as linguagens sensveis ao contexto, apresentadas no presente
captulo.
Teorema 5.5 (Livres de contexto sensveis ao contexto) Toda linguagem livre
de contexto L tambm uma linguagem sensvel ao contexto.

Justificativa Se L livre de contexto, ento existe pelo menos uma gramtica livre
de contexto G que gera L. Conforme demonstrado no Captulo 4, toda gramtica livre
de contexto pode ser colocada na Forma Normal de Chomsky, com as regras no formato
A BC ou A a, com A, B , C N , a . Se L, ento S admitida como
nica regra vazia em G.
Se L, ento L {} pode ser gerada por uma gramtica livre de contexto
que, alm de estar na Forma Normal de Chomsky, claramente uma gramtica sensvel
ao contexto tambm. Se 6 L, idem. Logo, L tambm uma linguagem sensvel ao
contexto. 

Exemplo 5.20 Sejam G1 = ({a, b, S }, {S }, {S aSb | }, S ) e L(G1 ) = {a n b n , n 0}. G1


uma gramtica livre de contexto e, portanto, L(G1 ) uma linguagem livre de contexto. Seja agora
G2 = ({a, b, S , X }, {S , X }, P2 , S ), com P2 :

{S
A a
B b
S AX
X SB }

fcil notar que L(G2 ) = L(G1 ), sendo que G2 est na Forma Normal de Chomsky. Como se
pode observar, L{} gerada por G3 = ({a, b, S , X }, {S , X }, P3 , S ), em que P3 = P2 {S }.
Portanto, G3 uma gramtica sensvel ao contexto. Logo, L tambm uma linguagem sensvel ao
contexto. 2

Teorema 5.6 (Livres de contexto 6= sensveis ao contexto) A classe das lingua-


gens livres de contexto constitui subconjunto prprio da classe das linguagens sensveis
ao contexto.

Justificativa Atravs da aplicao do Pumping Lemma para linguagens livres de con-


texto possvel provar que diversas linguagens no so livres de contexto. Entre estas,
5 Linguagens Sensveis ao Contexto 311

pode-se citar a linguagem {a n b n c n | n 1} (ver Exemplo 4.38), a qual, no entanto,


pode ser representada atravs de uma gramtica sensvel ao contexto (ver Exemplo 5.3).
Logo, trata-se de uma linguagem sensvel ao contexto, no-livre de contexto, e sua simples
existncia demonstra o teorema. 

5.7 Linguagens que no so Sensveis ao Contexto


possvel demonstrar que existem linguagens que no pertencem classe das lingua-
gens sensveis ao contexto (Teorema 5.8). Tal demonstrao, no entanto, depende da
demonstrao prvia de que o conjunto das gramticas sensveis ao contexto enume-
rvel (Teorema 5.7). O Captulo 6 discutir uma importante classe de linguagens que
inclui as linguagens sensveis ao contexto como subconjunto prprio.
Teorema 5.7 (Gramticas sensveis ao contexto enumervel) O conjunto das
gramticas sensveis ao contexto sobre um certo alfabeto enumervel.

Justificativa Considere-se um alfabeto qualquer e todas as gramticas sensveis ao


contexto que podem ser criadas a partir do mesmo. Seja G = {G1 , G2 , G3 , ...Gn , ...} o
conjunto infinito que rene todas essas gramticas.
Sem perda de generalidade, pode-se considerar que os smbolos no-terminais de
cada uma dessas gramticas pertencem ao conjunto infinito A = {A1 , A2 , A3 , ...An , ...}
e, alm disso, que a raiz de cada uma delas A1 . Ou seja, todas elas tm a mesma raiz
e compartilham o mesmo conjunto de smbolos no-terminais.
Os elementos de G podem ser listados em uma ordem G1 , G2 , G3 , ... (ou seja, enu-
merados) de acordo com o mtodo descrito no Algoritmo 5.3.
Algoritmo 5.3 (Gramticas sensveis ao contexto enumervel) Enumerao
de todas as gramticas sensveis ao contexto.

Entrada: um alfabeto ;

Sada: uma enumerao de todas as gramticas sensveis ao contexto sobre ;

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.

Todas as gramticas pertencentes a G sero inevitavelmente listadas (enumeradas)


por este mtodo, que gera uma seqncia infinita de conjuntos finitos, seqncia esta que
312 Linguagens Formais - Teoria, Modelagem e Implementao

pode ser ordenada na mesma seqncia dos nmeros naturais (1, 2, 3...). O conjunto das
gramticas sensveis ao contexto , portanto, um conjunto enumervel. 

Exemplo 5.21 Considere-se = {a, b} e, inicialmente, apenas as regras em que , || =


1, | | = 1 e tais que A1 seja o nico no-terminal empregado. Ento, N1 = {A1 }, V1 = N1 =
{A1 , a, b}. Tem-se, portanto, m = |V1 | = 3 regras distintas nesta categoria:

1. A1 A1

2. A1 a

3. A1 b

Desta forma, as diversas gramticas que podem ser criadas a partir das regras acima contero,
respectivamente, apenas uma, apenas duas ou apenas trs regras distintas.
Gramticas com exatamente uma regra:

G1 , com a regra (1)

G2 , com a regra (2)

G3 , com a regra (3)

Gramticas com exatamente duas regras:

G4 , com as regras (1) e (2)

G5 , com as regras (2) e (3)

G6 , com as regras (1) e (3)


Gramticas com exatamente trs regras:

G7 , com as regras (1), (2) e (3)

Portanto, so sete as gramticas sensveis ao contexto distintas que podem ser criadas sobre
o vocabulrio {A1 , a, b}.
Para relacionar as regras em que , || 2, | | 2, e tais que A1 , A2 sejam empregados,
deve-se considerar os seguintes casos:

a) || = | | = 1
b) || = 1, | | = 2
c) || = | | = 2
Sejam, portanto, N2 = {A1 , A2 } e V2 = {A1 , A2 , a, b}. Ento, as seguintes regras podem ser
geradas em cada caso:

a) , || = 1, | | = 1

A1 A1 , A1 A2 , A1 a, A1 b,
A2 A1 , A2 A2 , A2 a, A2 b

Tem-se, portanto, m = |N2 | | V2 | = 2 4 = 8 produes distintas nesta categoria.

b) , || = 1, | | = 2
5 Linguagens Sensveis ao Contexto 313

A1 A1 A1 , A1 A1 A2 , A1 A1 a, A1 A1 b,
A1 A2 A1 , A1 A2 A2 , A1 A2 a, A1 A2 b,
A1 aA1 , A1 aA2 , A1 aa, A1 ab,
A1 bA1 , A1 bA2 , A1 ba, A1 bb,
A2 A1 A1 , A2 A1 A2 , A2 A1 a, A2 A1 b,
A2 A2 A1 , A2 A2 A2 , A2 A2 a, A2 A2 b,
A2 aA1 , A2 aA2 , A2 aa, A2 ab,
A2 bA1 , A2 bA2 , A2 ba, A2 bb

ou seja:

m = |N2 | = 2 possibilidades distintas para cadeia , e

| |
n = |V2 | = 24 = 16 possibilidades distintas para a cadeia .

Portanto, existem m n = 32 produes distintas nesta categoria.

c) , || = 2, | | = 2

2 2
m = |V2 | | | = 42 22 = 12

| |
n = |V2 | = 42 = 16

Conseqentemente, existem m n = 12 16 = 192 produes distintas nesta categoria.

Consideradas como um todo, so 8 + 32 + 192 = 232 produes distintas que satisfazem


condio , || 2, | | 2. Com essas produes, possvel criar 2232 1 gramticas
distintas.
Cumpre notar que o clculo de m feito considerando-se o total de cadeias de comprimento 2
2
possveis de serem construdas sobre V |V2 | , descontando-se, destas, aquelas que sejam formadas
2
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 2::2
1::3 2::3 3::3
... ... ...
1::n-1 2::n-1 3::n-1 ... n-1::n-1
1::n 2::n 3::n ... n-1::n n::n

Tabela 5.1: Clculo do nmero de gramticas sensveis ao


contexto

Nesta tabela, i :: j denota o conjunto das regras , || = i, | | = j . A unio de todos


esses conjuntos resulta no conjunto de regras , || n, | | n, || | |. Como cada um
dos conjuntos considerados finito, o conjunto resultante tambm ser finito.
314 Linguagens Formais - Teoria, Modelagem e Implementao

A ttulo de ilustrao, fcil deduzir que a quantidade total de elementos contidos no conjunto
i :: j pode ser obtida pelo produto m n, onde:
i i
m = |Vn | | |
(quantidade de cadeias distintas com comprimento i)
j
n = |Vn |
(quantidade de cadeias distintas com comprimento j )

Para se determinar a quantidade total de regras na tabela, basta calcular a funo regras(n)
abaixo (Vn o conjunto dos smbolos no-terminais e o conjunto dos smbolos terminais):
regras(n) :

1. regras 0;

2. para i 1 at n

para j i at n

i i j
faa regras regras+(|Vn | | | ) |Vn |

Como = {a, b}, ento || = 2 e |Vn | = n + 2. Logo:

regras(n) :

1. 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. Considere-
se n = 2, , || 2, | | 2:

regras = 0
i = 1, j = 1 regras = regras + ((2 + 2)1 21 ) (2 + 2)1 = regras + 8
i = 1, j = 2 regras = regras + ((2 + 2)1 21 ) (2 + 2)2 = regras + 32
i = 2, j = 2 regras = regras + ((2 + 2)2 22 ) (2 + 2)2 = regras + 192
Portanto, obtm-se 8+32+192=232 regras distintas.
A quantidade total de gramticas que podem ser criadas a partir de k regras distintas dada
pela funo gramaticas(k ) abaixo:

gramaticas(k ) = 2k 1

No presente exemplo, tem-se que , || 2, | | 2 produz 2232 1 gramticas distintas,


exatamente o mesmo resultado obtido anteriormente.
O processo todo pode, portanto, ser resumido nos seguintes passos:

1. n 1;
5 Linguagens Sensveis ao Contexto 315

2. k regras(n);

3. calcula gramaticas(k );

4. n n + 1;

5. Desviar para (1).

Naturalmente, esses passos servem apenas como ilustrao da forma como se podem enumerar
todas as gramticas possveis sobre {a, b}. A sua transcrio para a forma de um algoritmo s faz
sentido caso se estabelea um limite superior para n, caso contrrio eles no se encerrariam nunca.
Cumpre notar que o mtodo descrito gera toda e qualquer gramtica sensvel ao contexto sobre
{a, b}, incluindo aquelas que geram linguagens vazias, contm smbolos inteis ou so equivalentes
a outras gramticas geradas anteriormente. Como exemplo destes casos, pode-se considerar as
gramticas:

G1 = ({A1 , a, b}, {a, b}, {A1 A1 }, A1 )

G2 = ({A1 , A2 , a, b}, {a, b}, {A1 A2 , A3 A3 , A2 a}, A1 )

G3 = ({A1 , A2 , a, b}, {a, b}, {A1 A2 , A2 A2 , A2 a}, A1 )

L(G1 ) = , A3 intil em G2 e L(G3 ) = L(G1 ). Tal aspecto no invalida, no entanto, o


prosseguimento da demonstrao. 2

Teorema 5.8 (Linguagens no-sensveis ao contexto) Existem linguagens que no


so sensveis ao contexto.

Justificativa feita provando-se que existe pelo menos uma linguagem tal que no existe
gramtica sensvel ao contexto que a gere.
Considere-se inicialmente o resultado do Teorema 5.7 (as gramticas sensveis ao
contexto so enumerveis) e um alfabeto qualquer. Em seguida, pode-se considerar
uma enumerao, em ordem lexicogrfica crescente, das cadeias de + . Considere-se, em
particular, = {a, b}. Tal enumerao correspondente seqncia:

a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, ...

Tendo enumerado os elementos de G = {G1 , G2 , ..., Gn , ...} e de + = {1 , 2 , ...,


n , ...}, passa-se agora a estabelecer uma funo bijetora entre os dois conjuntos, de tal
forma que os pares (Gi , i ), i 1 sejam elementos dessa funo (Tabela 5.2):

G1 G2 G3 ... Gn ...
l l l l
1 2 3 ... n ...

Tabela 5.2: Funo bijetora entre gramticas e cadeias sobre


{a, b}

Defina-se agora a linguagem LR = {i | i 6 L(Gi ), i 1}. Em outras palavras,


pertencem a LR as cadeias i que no pertenam a L(Gi ). Tal verificao pode sempre
ser feita para gramticas sensveis ao contexto, conforme demonstrado em teorema ante-
rior sobre a equivalncia deste tipo de gramticas com as Mquinas de Turing com fita
limitada (Teorema 5.4).
S existem duas hipteses acerca de LR : ou trata-se de uma linguagem que sensvel
ao contexto, ou ento trata-se de uma linguagem que no sensvel ao contexto.
316 Linguagens Formais - Teoria, Modelagem e Implementao

Considere-se que LR seja uma linguagem sensvel ao contexto. Se essa hiptese for
verdadeira, dever existir pelo menos uma gramtica sensvel ao contexto que a gere.
Naturalmente, tal gramtica dever pertencer ao conjunto G. Seja Gi esta gramtica.
Se LR = L(Gi ), ento s existem duas possibilidades: i pertence ou no pertence a LR .

Primeira possibilidade: se i 6 L(Gi ), ento i LR , por hiptese, o que uma


contradio.

Segunda possibilidade: se i L(Gi ), ento i 6 LR , por construo, o que


tambm uma contradio.

Logo, LR no pode ser uma linguagem sensvel ao contexto, e isso completa a


demonstrao. 

5.8 Propriedades de Fechamento


A classe das linguagens sensveis ao contexto fechada em relao s operaes de:

Unio

Concatenao

Interseco

Complementao

porm no fechada em relao operao de:

Fecho de Kleene

Os trs primeiros resultados sero apresentados nos teoremas seguintes. Todos


os resultados, exceto o que trata da complementao, esto demonstrados em [46]. A
questo do fechamento das linguagens sensveis ao contexto em relao operao de
complementao permaneceu sem resposta durante vrios anos, at que apenas em 1988
esse resultado foi provado como sendo verdadeiro (ver [64]).
Teorema 5.9 (Fecho na unio) A classe das linguagens sensveis ao contexto fe-
chada em relao operao de unio.

Justificativa Sejam L1 e L2 duas linguagens sensveis ao contexto quaisquer. Ento,


L1 = L(G1 ) e L2 = L(G2 ), com G1 e G2 sendo duas gramticas sensveis ao contexto. O
Algoritmo 5.4 possibilita a obteno de G3 = (V3 , 3 , P3 , S3 ), tal que L(G3 ) = L1 L2 .
Algoritmo 5.4 (Fecho na unio) Obteno de uma gramtica sensvel ao contexto que
descreve a unio de duas linguagens definidas por gramticas sensveis ao contexto.

Entrada: G1 = (V1 , 1 , P1 , S1 ) e G2 = (V2 , 2 , P2 , S2 ), duas gramticas sensveis


ao contexto;

Sada: uma gramtica sensvel ao contexto G3 , tal que L(G3 ) = L(G1 ) L(G2 );

Mtodo:
5 Linguagens Sensveis ao Contexto 317

1. Renomear adequadamente os smbolos no-terminais de G1 e G2 , de tal


modo que N1 N2 = ;

2. V3 = V1 V2 ;

3. 3 = 1 2 ;

4. P3 = P1 P2 {S3 S2 , S3 S1 )}.

A gramtica G3 obtida pela aplicao do Algoritmo 5.4 sensvel ao contexto, logo


L1 L2 uma linguagem sensvel ao contexto. 

Teorema 5.10 (Fecho na concatenao) As linguagens sensveis ao contexto so fe-


chadas em relao operao de concatenao.

Justificativa Sejam L1 e L2 duas linguagens sensveis ao contexto quaisquer. Ento,


L1 e L2 so reconhecidas, respectivamente, por Mquinas de Turing com fita limitada
M1 e M2 . A linguagem L3 = L1 L2 aceita por M3 , uma Mquina de Turing com fita
limitada, construda conforme o Algoritmo 5.5.

Algoritmo 5.5 (Fecho na concatenao) Obteno de uma Mquina de Turing com


fita limitada que reconhece a concatenao de duas linguagens sensveis ao contexto de-
finidas por Mquinas de Turing com fita limitada.

Entrada: M1 e M2 , duas Mquinas de Turing com fita limitada;

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 .

No Algoritmo 5.5, M3 aceita w se e somente se L1 e L2 . Caso contrrio,


M3 rejeita w . Logo, L3 uma linguagem sensvel ao contexto. 

Teorema 5.11 (Fecho na interseco) As linguagens sensveis ao contexto so fecha-


das em relao operao de interseco.

Justificativa Sejam L1 e L2 duas linguagens sensveis ao contexto quaisquer. Ento,


L1 e L2 so reconhecidas, respectivamente, por Mquinas de Turing com fita limitada
M1 e M2 . A linguagem L3 = L1 L2 aceita por M3 , uma Mquina de Turing com fita
limitada, construda conforme o Algoritmo 5.6.
318 Linguagens Formais - Teoria, Modelagem e Implementao

Algoritmo 5.6 (Fecho na interseco) Obteno de uma Mquina de Turing com fita
limitada que reconhece a interseco de duas linguagens sensveis ao contexto definidas
por Mquinas de Turing com fita limitada.

Entrada: M1 e M2 , duas Mquinas de Turing com fita limitada;

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 .

De acordo com o Algoritmo 5.6, M3 aceita w se e somente se w L1 L2 . Caso


contrrio, M3 rejeita w . Logo, L3 uma linguagem sensvel ao contexto. 

5.9 Questes Decidveis e No-Decidveis


Diversos problemas de deciso costumam ser considerados neste tipo de estudo. Em
particular, dadas cadeias arbitrrias e linguagens sensveis ao contexto quaisquer, os
problemas mais comumente considerados so:

w L?

L=?

L = ?

L1 = L2 ?

L1 L2 ?

L1 L2 = ?

De todos estes, apenas o primeiro um problema que pode ser decidido no caso geral,
quaisquer que sejam w e L. Os demais constituem problemas para os quais pode no haver
soluo geral. Isso significa que determinadas combinaes de dados de entrada podem
nunca gerar uma resposta, no importa se afirmativa ou negativa. Ser apresentado aqui
apenas o primeiro desses resultados, sendo que a demonstrao de todos eles pode ser
encontrada em [46].
5 Linguagens Sensveis ao Contexto 319

Teorema 5.12 (A cadeia pertence?) Dadas uma cadeia w e uma linguagem


sensvel ao contexto L, L , sempre possvel determinar se w L.

Justificativa Se L uma linguagem sensvel ao contexto, ento L = L(G), sendo G uma


gramtica sensvel ao contexto. Constri-se uma Mquina de Turing com fita limitada
M , composta por trs trilhas:

Na primeira trilha gravada a cadeia de entrada w ;

Na segunda trilha gravada uma representao de G;

Na terceira trilha, gravado inicialmente o smbolo inicial de G (a raiz S ).

M opera de maneira muito semelhante ao modelo discutido na demonstrao do


Teorema 5.4. A diferena que, naquele caso, a especificao da gramtica G estava
gravada na prpria definio da Mquina de Turing com fita limitada. Agora, G est
gravada em uma trilha adicional, reservada para essa finalidade.
Assim, M procura, de maneira no-determinstica, gerar a cadeia w usando as
regras de G gravadas na segunda trilha e construindo formas sentenciais intermedirias
na terceira trilha. Atravs da comparao dos contedos da primeira e da terceira trilhas,
conforme o mtodo descrito no Teorema 5.4, possvel demonstrar que w L(M ) se e
somente se S w . 
6 Linguagens Recursivas
Linguagens recursivas so aquelas que so aceitas por um tipo muito geral de reconhece-
dor: 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 caracte-
rizao conhecida para as linguagens recursivas em termos gramaticais. Ou seja, no
possvel caracterizar essa classe de linguagens a partir da formulao de restries ao for-
mato 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 recur-
sivas porm no so sensveis ao contexto so denominadas linguagens estritamente
recursivas.

6.1 Mquinas de Turing


Mquinas de Turing (com fita ilimitada ou infinita) so dispositivos de reconhecimento
de cadeias que possuem as seguintes diferenas em relao s Mquinas de Turing com
fita limitada, discutidas no Captulo 5:
322 Linguagens Formais - Teoria, Modelagem e Implementao

1. A fita de trabalho possui comprimento infinito, sendo limitada esquerda e sem


limitao direita.1

2. A cadeia de entrada delimitada apenas esquerda, por meio de um smbolo espe-


cial, representado por <, que no faz parte do alfabeto de entrada. Juntamente
com esse smbolo, a cadeia a ser processada posicionada de forma tal que fique
ajustada esquerda sobre a fita. O cursor de acesso inicialmente aponta o smbolo
mais esquerda da cadeia de entrada, ou seja, o smbolo imediatamente direita
do marcador <.2

3. As posies da fita direita do ltimo smbolo da cadeia de entrada so inicial-


mente preenchidas com um smbolo especial representado por B , que indica
que aquelas posies esto vagas. O smbolo B tambm no faz parte do alfabeto
de entrada.3

4. O cursor de acesso pode se deslocar livremente sobre a fita de trabalho, exceto para
a esquerda da primeira posio da fita. Caso isso ocorra, a computao encerra-se
anormalmente.

Figura 6.1: Mquina de Turing

A Figura 6.1 ilustra a configurao inicial de uma Mquina de Turing com cadeia
de entrada igual a 1 2 3 ...n . Formalmente, uma Mquina de Turing definida como:

M = (Q , , , , q0 , <, B , F )

onde:

Q o conjunto finito no-vazio de estados;

o alfabeto de entrada, formado por um conjunto finito no-vazio de smbolos;

um conjunto, tambm finito e no-vazio, de smbolos que podem ser lidos e/ou
escritos na fita de trabalho. ;

a funo parcial de transio, : Q 2Q{E ,D} ;

q0 o estado inicial, q0 Q ;

1 Dependendo do autor, no h limitao tampouco esquerda.


2 Alguns autores desconsideram o uso do marcador < e supem que a primeira posio da fita de trabalho
seja ocupada pelo primeiro smbolo da cadeia a ser analisada.
3 Dependendo do autor, outros smbolos so usados para representar posies vagas da fita de trabalho.
6 Linguagens Recursivas 323

< , < 6 , o smbolo que indica a primeira posio da fita de trabalho.


Durante toda a operao da mquina, o smbolo < no pode ser gravado em
nenhuma outra posio da fita;

B , B 6 , o smbolo utilizado para preencher inicialmente todas as posies


direta da cadeia de entrada na fita. Durante a operao da mquina, o smbolo
B pode ser gravado em qualquer posio da fita;

F Q o conjunto de estados finais.

A configurao de uma Mquina de Turing indicada por uma tripla (, qk , ),


onde qk o estado corrente, a poro do contedo da fita de trabalho que se
encontra esquerda do cursor de acesso, e a poro do contedo da fita de
trabalho que se encontra direita do cursor de acesso, incluindo a posio correntemente
apontada por ele.
A configurao inicial (<, q0 , ), onde q0 o estado inicial e a cadeia
de entrada a ser analisada. O cursor de acesso aponta, portanto, exatamente o primeiro
smbolo da cadeia de entrada . A poro da representao (, qk , ) corresponde,
neste caso, cadeia unitria <. Uma configurao final definida como (, qf , ), com
qf F e , .
As transies contidas na funo especificam possibilidades no-determinsticas
de movimentao, que conduzem o dispositivo de uma configurao para a configurao
seguinte. Diz-se que o dispositivo pra quando a funo no for definida para o par
(estado, smbolo de entrada) corrente.
Em caso de tentativa de deslocamento do cursor de acesso para a esquerda da
primeira posio da fita, a computao encerra-se anormalmente. Neste caso, a cadeia
de entrada rejeitada, no importando se o estado em que a mquina se encontra final
ou no.
A rigor, o emprego do smbolo < para sinalizar o incio da fita de trabalho
desnecessrio. Diversos textos consideram que a primeira posio da fita seja ocupada
pelo primeiro smbolo da cadeia de entrada, sem perda de generalidade. A incorporao
do mesmo ao modelo, no entanto, contribui para a construo de mquinas mais simples,
na medida em que o controle dos deslocamentos do cursor de acesso, a fim de evitar o
trmino anormal da computao, tambm pode ser simplificado.
A linguagem aceita por uma Mquina de Turing com fita infinita o conjunto das
cadeias que so capazes de conduzir o dispositivo desde a sua configurao inicial (nica
para uma determinada cadeia de entrada) at uma configurao final qualquer na qual
ele esteja parado sem possibilidade de movimentao. Formalmente,
L(M ) = { | (<, q0 , ) (, qf , ), qf F , , }
admitindo-se, como condio de parada, que = , , e no seja definida
para (qf , ).
Seja L a linguagem aceita por uma Mquina de Turing M . Se w1 L, ento M pra
e aceita w1 . Considere-se, porm, a cadeia w2 L. Neste caso, M pode tanto parar,
rejeitando a entrada, quanto entrar em loop infinito, sem nunca atingir uma condio de
parada.
Uma linguagem L dita recursiva se existir pelo menos uma Mquina de Turing
M tal que:

1. Para toda cadeia w L, M pra e aceita w ;


324 Linguagens Formais - Teoria, Modelagem e Implementao

2. Para toda cadeia z L, M pra e rejeita z .

Ou seja, M atinge a condio de parada para toda e qualquer cadeia que lhe submetida,
no importando se esta pertence ou no a L.
Uma linguagem recursiva tambm dita linguagem decidvel. Este termo denota
o fato de que, para essa classe de linguagens, sempre existe pelo menos uma Mquina de
Turing que aceita a referida linguagem, qualquer que seja a cadeia usada como entrada
(no importa se ela pertence ou no linguagem), e que sempre pra. A parada pode
ocorrer com aceitao ou rejeio da cadeia.
Conforme ser discutido no Captulo 7, as linguagens recursivas no so a nica
classe de linguagens aceitas pelas Mquinas de Turing. Na verdade, o relaxamento da
condio de parada para cadeias no pertencentes linguagem faz com que o modelo
possa ser usado para definir uma classe mais ampla de linguagens, denominadas lingua-
gens recursivamente enumerveis.
Exemplo 6.1 A mquina M apresentada na Figura 6.2 tal que L(M ) = abc(a | b | c) .

a/(a, D ), b/(b, D ), c/(c, D )

a/(a, D ) b/(b, D ) c/(c, D ) B /(B , D )


q0 q1 q2 q3 q4

Figura 6.2: Mquina de Turing que aceita abc(a | b | c)


para o Exemplo 6.1

Os movimentos que M executa na aceitao de algumas sentenas pertencentes a L, desde a


configurao inicial at a configurao final, so mostrados a seguir:

(<, q0 , abcB ) (< a, q1 , bcB ) (< ab, q2 , cB ) (< abc, q3 , B ) (< abcB , q4 , )

(<, q0 , abcaB ) (< a, q1 , bcaB ) (< ab, q2 , caB ) (< abc, q3 , aB )


(< abca, q3 , B ) (< abcaB , 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 )

(<, q0 , abb) (< a, q1 , bb) (< ab, q2 , b)

Note-se que, nos casos acima, M pra sempre em configuraes no-finais, uma vez que,
respectivamente, q0 , q1 e q2 so estados no-finais.
L uma linguagem recursiva, uma vez que M sempre pra, qualquer que seja a cadeia de
entrada w que lhe seja apresentada. 2

Exemplo 6.2 A Mquina de Turing M ilustrada na Figura 6.3 aceita a linguagem L = {ww R | w
{a, b} }.
6 Linguagens Recursivas 325

a/(a, D ), b/(b, D )
a/(a, E ), b/(b, E )
X /(X , E )

B /(B , E ) a/(X , E )
q1 q2 q3
a/(X , D )
Y /(Y , E )

X /(X , D )
q0
Y /(Y , D )

X /(X , E )
b/(Y , D )
B /(B , E ) b/(Y , E )
q4 q5 q6

Y /(Y , E )
a/(a, D ), b/(b, D ) a/(a, E ), b/(b, E )

Figura 6.3: Mquina de Turing que aceita {ww R | w


{a, b} } para o Exemplo 6.2

So exemplos de cadeias aceitas por M :

(<, q0 , aaB ) (< X , q1 , aB ) (< Xa, q1 , B ) (< X , q2 , aB )


(<, q3 , XXB ) (< X , q0 , XB )

(<, q0 , baabB ) (< Y , q4 , aabB ) (< Ya, q4 , abB ) (< Yaa, q4 , bB )


(< Yaab, q4 , B ) (< Yaa, q5 , bB ) (< Ya, q6 , aYB ) (< Y , q6 , aaYB )
(<, q6 , YaaYB ) (< Y , q0 , aaYB ) (< YX , q1 , aYB ) (< YXa, q1 , YB )
(< YX , q2 , aYB ) (< Y , q3 , XXYB ) (< YX , q0 , XYB )

(<, q0 , bbbbbbB ) (< Y , q4 , bbbbbB ) (< Yb, q4 , bbbbB )


(< Ybb, q4 , bbbB ) (< Ybbb, q4 , bbB ) (< Ybbbb, q4 , bB )
(< Ybbbbb, q4 , B ) (< Ybbbb, q5 , bB ) (< Ybbb, q6 , bYB )
(< Ybb, q6 , bbYB ) (< Yb, q6 , bbbYB ) (< Y , q6 , bbbbYB )
(<, q6 , YbbbbYB ) (< Y , q0 , bbbbYB ) (< YY , q4 , bbbYB )
(< YYb, q4 , bbYB ) (< YYbb, q4 , bYB ) (< YYbbb, q4 , YB )
(< YYbb, q5 , bYB ) (< YYb, q6 , bYYB ) (< YY , q6 , bbYYB )
(< Y , q6 , YbbYYB ) (< YY , q0 , bbYYB ) (< YYY , q4 , bYYB )
(< YYYb, q4 , YYB ) (< YYY , q5 , bYYB ) (< YY , q6 , YYYYB )
(< YYY , q0 , YYYB )

So exemplos de cadeias rejeitadas por M :

(<, q0 , bB ) (< Y , q4 , B ) (<, q5 , YB )

(<, q0 , abB ) (< X , q1 , bB ) (< Xb, q1 , B ) (< X , q2 , bB )

(<, q0 , bbaaaaB ) (< Y , q4 , baaaaB ) (< Yb, q4 , aaaaB ) (< Yba, q4 , aaaB )
(< Ybaa, q4 , aaB ) (< Ybaaa, q4 , aB ) (< Ybaaaa, q4 , B ) (< Ybaaa, q5 , aB )
2

Seja L uma linguagem e M uma Mquina de Turing. Diz-se que M aceita L


se M capaz de atingir uma configurao final para todas as cadeias que pertencem a
L, no importando o que acontece quando uma cadeia pertencente a L submetida
a M . Por outro lado, diz-se que M decide L se, para qualquer cadeia pertencente a
326 Linguagens Formais - Teoria, Modelagem e Implementao

, M sempre pra, aceitando as sentenas de L e rejeitando as demais. Finalmente, M


reconhece L se M gera sadas distintas indicando, para cada cadeia pertencente a ,
se a mesma pertence ou no a L. Naturalmente, se M reconhece L, ento M decide L.
Se M decide L, normalmente simples fazer M reconhecer L. Finalmente, se M decide
ou reconhece L, claro que M aceita L. A mera aceitao, por outro lado, no implica
que seja possvel decidir ou reconhecer uma linguagem.
Finalmente, cumpre observar que, assim como ocorre no caso dos autmatos finitos
e das linguagens regulares, possvel demonstrar que toda e qualquer linguagem aceita
por uma Mquina de Turing no-determinstica aceita tambm por pelo menos uma
Mquina de Turing determinstica. Tal caracterstica difere, por outro lado, daquela
exibida pelos autmatos de pilha, que, em sua verso no-determinstica, so capazes de
reconhecer uma classe mais ampla de linguagens do que as verses determinsticas.

6.2 Critrios de Aceitao


O critrio de aceitao por estado final, utilizado nos Exemplos 6.1 e 6.2, pode ser
substitudo, sem prejuzo da linguagem definida por uma particular Mquina de Turing,
pelo critrio da parada, conforme explicado a seguir.
Seja L uma linguagem aceita por uma Mquina de Turing M1 pelo critrio de
aceitao baseado em estado final. Ento, se w L, M1 inevitavelmente pra em algum
estado final e aceita w . Se w 6 L, M1 pra em um estado no-final e rejeita w , ou ento
entra em uma seqncia infinita de movimentaes sem que haja qualquer evoluo.
Segundo o critrio da parada, se L aceita por uma mquina M2 , ento M2 sim-
plesmente pra, qualquer que seja a cadeia pertencente a L que lhe for submetida. Caso
lhe seja submetida uma cadeia no pertencente a L, ento M2 inicia uma seqncia de
movimentaes que no termina. Mquinas de Turing com critrio de aceitao definido
segundo este princpio no apresentam estados finais.
Teorema 6.1 (Estado final parada) Os critrios de aceitao baseados em estado
final e parada, para Mquinas de Turing, so equivalentes.

Justificativa Conforme os Algoritmos 6.1 e 6.2 apresentados a seguir.


Algoritmo 6.1 (Estado final parada) Converso de Mquina de Turing com acei-
tao por critrio de estado final em Mquina de Turing com aceitao por critrio de
parada.

Entrada: M = (Q , , , , q0 , <, B , F ) uma Mquina de Turing com critrio de


aceitao baseado em estado final;

Sada: uma Mquina de Turing M com critrio de aceitao baseado em parada,


tal que L(M ) = L(M );

Mtodo:
M = (Q , , , , q0 , <, B , F ), onde:

1. Q = Q {qloop }

2. F =
6 Linguagens Recursivas 327

3. = e, alm disso:

q Q F , x , se (q, x ) no definido, ento


= {((q, x ), {(qloop , x , D )})}

x , = {((qloop , x ), {(qloop , x , D )})}

De acordo com o Algoritmo 6.1, M possui os mesmos estados de M , acrescido de


um novo estado denominado qloop . Os estados de M so todos no-finais. As transies
de M so as mesmas de M , acrescidas das novas transies que tm o objetivo de fazer
M entrar em uma seqncia infinita de movimentaes ao processar cadeias que so
rejeitadas por M atravs da parada em um estado no-final qualquer. Cadeias que so
aceitas por M provocam simplesmente a parada de M .
Algoritmo 6.2 (Estado final parada) Converso de Mquina de Turing com acei-
tao por critrio de parada em Mquina de Turing com aceitao por critrio de estado
final.

Entrada: M = (Q , , , , q0 , <, B , ) uma Mquina de Turing com critrio de


aceitao baseado em parada;

Sada: uma Mquina de Turing M com critrio de aceitao baseado em estado


final, tal que L(M ) = L(M );

Mtodo:
M = (Q , , , , q0 , <, B , F ), onde:

1. F = Q

De acordo com o Algoritmo 6.2, os estados de M so os mesmos de M , porm todos


convertidos em estados finais. Dessa forma, toda e qualquer cadeia capaz de conduzir
M a uma condio de parada necessariamente provocar a parada de M em um estado
final. 

Exemplo 6.3 Seja a mquina M do Exemplo 6.1, cujo critrio de aceitao baseado em estado
final. A mquina M , equivalente a M , porm baseada em critrio de parada, apresentada na
Figura 6.4.
328 Linguagens Formais - Teoria, Modelagem e Implementao

q1 a/(a, D ), b/(b, D ), c/(c, D )


a/(a, D ) b/(b, D )

c/(c, D ) B /(B , D )
q2 q3 q4
q0 a/(a, D ), c/(c, D ), B /(B , D )

a/(a, D ), b/(b, D ), B /(B , D )


b/(b, D ), c/(c, D ), B /(B , D )
qloop

a/(a, D ), b/(b, D ), c/(c, D ), B /(B , D )

Figura 6.4: Mquina de Turing com critrio de aceitao


baseado em parada para o Exemplo 6.3

fcil notar, neste exemplo, que as cadeias a, b e abb, rejeitadas aps parada em M , conduzem
M a uma seqncia interminvel de movimentos. Seno, vejamos:

(<, q0 , abbBB ...)


(< a, q1 , bbBB ...)
(< ab, q2 , bBB ...)
(< abb, qloop , BB ...)
(< abbB , qloop , B ...)
(< abbBB , qloop , ...) ...

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.3 Extenses Mais Comuns das Mquinas de Turing


O poder computacional das Mquinas de Turing j foi questionado diversas vezes, sendo
que, em muitas delas, foram feitas propostas de extenses que seriam supostamente
capazes de aumentar o seu poder ou, traduzindo em termos de linguagens, de expandir
a classe de linguagens que elas so capazes de reconhecer.
Provas formais, no entanto, demonstram que o dispositivo bsico da Mquina de
Turing com fita infinita, formulado na Seo 6.1, e complementado na Seo 6.2, possui
6 Linguagens Recursivas 329

exatamente o mesmo poder computacional de qualquer outra verso estendida. Entre


as extenses mais populares, citamos as seguintes (nenhuma equivalncia com o modelo
bsico ser demonstrada neste texto):

Mltiplas trilhas:
Trata-se do caso discutido no texto da Seo 5.5, que precede o Teorema 5.4
(equivalncia das gramticas sensveis ao contexto com as Mquinas de Turing
com fita limitada). Tal extenso considera que a fita de trabalho seja substituda
por uma coleo finita de fitas, as quais so acessadas por uma quantidade idntica
de cursores de acesso, cada qual dedicado fita correspondente. Os cursores de
acesso deslocam-se todos juntos e sempre no mesmo sentido (para a esquerda ou
para a direita), sob o comando do controle finito. Os smbolos gravados em cada
fita, no entanto, podem ser distintos. Exemplo: em um dispositivo com duas fitas,
os dois cursores de acesso devem se movimentar simultaneamente para a esquerda
ou para a direita, ainda que cada fita receba a gravao de smbolos de alfabetos
distintos.
Funo de transio correspondente (para n trilhas, cada qual com o seu prprio
alfabeto i ):

: Q (1 2 ... n ) Q (1 2 ... n ) {E , D }

Mltiplas fitas:
Esta extenso assemelha-se que foi discutida para o caso de mltiplas trilhas,
com a diferena de que os cursores de acesso podem ser movimentados de forma
independente uns dos outros. Assim, o controle finito pode especificar, na movi-
mentao de uma configurao para a configurao seguinte, o comportamento de
cada cursor de acesso em sua respectiva fita de trabalho: sentido do deslocamento
e smbolo a ser gravado na respectiva fita. Por exemplo: em um dispositivo com
duas fitas, uma transio pode especificar que o cursor da primeira fita se desloque
para a esquerda, ao mesmo tempo que o cursor da segunda fita se desloque para
a direita.
Funo de transio correspondente (para n fitas, cada qual com seu prprio alfa-
beto i ):

: Q (1 2 ... n ) Q (1 {E , D }) (2 {E , D })... (n {E , D })

Mltiplos cursores:
Neste caso, uma nica fita de trabalho equipada com dois ou mais cursores de
acesso. O controle finito, por sua vez, especifica o sentido de movimentao de cada
cursor e o smbolo a ser gravado na posio da fita correntemente referenciada por
intermdio de cada cursor. Cuidado especial deve ser tomado com a possibilidade
de dois ou mais cursores referenciarem uma mesma posio da fita de trabalho,
para que sejam evitados conflitos devidos ordem em que forem gravados ou lidos
os smbolos pelos respectivos cursores de acesso.
Funo de transio correspondente (para n cursores):

: Q ( ... ) Q ( {E , D }) ( {E , D })... ( {E , D })
330 Linguagens Formais - Teoria, Modelagem e Implementao

Fita ilimitada em ambos os sentidos:


Originalmente concebida de forma limitada esquerda e ilimitada direita, esta
extenso contempla que a fita de trabalho tenha um comprimento ilimitado em
ambos os sentidos. No h marcao de incio de cadeia (smbolo <) e o cursor
pode se deslocar livremente tanto para a esquerda quanto para a direita, sem risco
de encerrar a operao anormalmente, por tentativa de acesso a posies esquerda
do incio da fita. A cadeia de entrada gravada, neste caso, em qualquer posio
da fita de trabalho, e o restante da mesma preenchido com brancos (smbolo B ).
Convenciona-se, tambm, a posio do cursor de acesso no incio da operao do
dispositivo (por exemplo, apontando para o smbolo mais esquerda da cadeia de
entrada).
A funo de transio correspondente permanece inalterada em relao definio
original:
: Q Q {E , D }

Transies que deslocam o cursor um nmero varivel de posies:


Corresponde ao caso em que o cursor de acesso, aps a execuo de uma transio,
instrudo para se deslocar um nmero arbitrrio de posies sobre a fita de
trabalho, para a direita ou para a esquerda. Este nmero pode inclusive ser zero,
caso em que o cursor permanece na posio em que se encontrava antes da aplicao
da transio, sem se deslocar para esquerda nem para a direita.
Funo de transio correspondente:

: Q Q ({E } {D } )

Transies sem leitura ou gravao de smbolos:


Corresponde ao caso em que o smbolo apontado pelo cursor de acesso irrelevante
para a escolha da movimentao a ser efetuada pelo dispositivo (transio sem
leitura), ou, ainda, ao caso em que, aps a execuo da movimentao, o contedo
da posio apontada pelo cursor no modificado (transio sem gravao).
Funo de transio correspondente:

: Q ( {}) Q ( {}) {E , D }

As demonstraes para os quatro casos iniciais podem ser encontradas em [46]. To-
das essas extenses podem, eventualmente, ser combinadas umas com as outras, gerando
diferentes verses da Mquina de Turing bsica. Se, por um lado, elas nada conseguem
acrescentar ao poder da Mquina de Turing original, elas podem, por outro lado, facili-
tar significativamente o projeto, a implementao e a anlise de algoritmos representados
atravs de Mquinas de Turing, assim como a demonstrao de teoremas acerca desse
tipo de dispositivos ou das linguagens por eles aceitas.
Trata-se, portanto, de uma convenincia que deve ser levada em conta e que pode
ser usada sem qualquer perigo de introduzir distores no modelo original que possam
eventualmente descaracterizar as suas propriedades fundamentais ou mesmo inviabilizar
a sua realizao prtica.
6 Linguagens Recursivas 331

6.4 Relao entre Linguagens Recursivas e Linguagens


Sensveis ao Contexto
A seguir, apresentam-se dois importantes resultados referentes relao entre as lingua-
gens recursivas e as linguagens sensveis ao contexto. Inicialmente, demonstrado que
toda linguagem sensvel ao contexto tambm uma linguagem recursiva. Em seguida,
mostra-se que a classe das linguagens sensveis ao contexto constitui um subconjunto
prprio da classe das linguagens recursivas.
Teorema 6.2 (Sensveis ao contexto recursivas) Toda linguagem sensvel ao con-
texto tambm recursiva.

Justificativa Seja L uma linguagem sensvel ao contexto. Ento, existe uma Mquina de
Turing com fita limitada M1 que aceita L:

L = L(M1 ), M1 = (Q1 , , 1 , 1 , <, >, q0 , F1 )

Constri-se ento uma Mquina de Turing M2 , sem limitao de tamanho para a


fita de entrada, que simula M1 :

M2 = (Q2 , , 2 , 2 , <, B , q0 , F2 )

onde:

Q2 = Q1

2 = 1

F2 = F1

2 = 1 , exceto pelo fato de que toda e qualquer transio de M1 da forma


1 (qi , >) = (qj , >, E ) deve ser substituda por uma transio da forma 2 (qi , B ) =
(qj , B , E ).

A configurao inicial de M2 ser (<, q0 , ) quando a configurao inicial de M1 for


(<, q0 , >). Como a funo de transio idntica em ambas as mquinas, exceto
pelas transies da forma:
(qi , >) = (qj , >, E ),
que sero simuladas por transies da forma:

(qi , B ) = (qj , B , E ),

se (<, q0 , >) (1 , qf , 1 ), qf F , em M1 , ento (<, q0 , ) (2 , qf , 2 ), qf F , em


M2 . O smbolo B imediatamente direita do ltimo smbolo de em M2 simula assim
o smbolo de fim de cadeia > em M1 .
Logo, M1 e M2 aceitam a mesma linguagem e portanto L, alm de ser uma linguagem
sensvel ao contexto, tambm uma linguagem recursiva. 
Teorema 6.3 (Sensveis ao contexto 6= recursivas) A classe das linguagens sens-
veis ao contexto constitui subconjunto prprio da classe das linguagens recursivas.
332 Linguagens Formais - Teoria, Modelagem e Implementao

Justificativa Basta demonstrar que existe pelo menos uma linguagem recursiva que no
sensvel ao contexto. Como instncia desse fato, podem-se citar todas as linguagens
que incluem a cadeia vazia, uma vez que, conforme foi discutido anteriormente na Seo
5.1, as linguagens sensveis ao contexto no incluem tais cadeias.
Um exemplo no-trivial, desta vez sem recorrer cadeia vazia, a linguagem LR ,
apresentada no final da Seo 5.7, quando foi empregada para demonstrar a existncia
de linguagens que no so sensveis ao contexto (Teorema 5.8).
Partindo-se (Teorema 5.7) de uma enumerao de todas as gramticas sensveis ao
contexto (G1 , G2 , ...), e tambm de uma enumerao de todas as cadeias possveis de
serem geradas sobre o alfabeto {a, b} (1 , 2 , ...), o Teorema 5.8 mostra que a linguagem

LR = {i | i 6 L(Gi ), i 1}

no pode ser sensvel ao contexto.


Por outro lado, qualquer que seja a cadeia , ser sempre possvel determinar
mecanicamente se pertence ou no a LR , o que pode ser feito conforme o mtodo
descrito no Algoritmo 6.3.
Algoritmo 6.3 ( LR ?) Determinao da pertinncia de a LR , definida no
Teorema 5.8.

Entrada: uma cadeia ;

Sada: SIM, se LR ; NO, se 6 LR ;

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 es-


tabelecida 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 res-


posta NO. Caso o resultado seja que i 6 L(Gi ), ento, por construo,
i LR e a resposta SIM.

Logo, conforme o Algoritmo 6.3, sempre possvel determinar se uma cadeia


qualquer pertence a LR . Em outras palavras, LR uma linguagem decidvel e, portanto,
recursiva, sem ser sensvel ao contexto. 

6.5 Linguagens que no so Recursivas


A classe das linguagens recursivas no a mais abrangente que se conhece. Ao contrrio,
possvel demonstrar que existe pelo menos uma linguagem no-recursiva.
6 Linguagens Recursivas 333

Teorema 6.4 (Linguagens no-recursivas) Existem linguagens que no so recursi-


vas.

Justificativa suficiente provar que existe pelo menos uma linguagem no-recursiva.
Essa demonstrao consiste na definio da linguagem LU , conforme abaixo, e na prova,
por contradio, de que a mesma no pode pertencer classe das linguagens recursivas.
Em outras palavras, que esta linguagem no decidvel.

LU = {C (M )w | w L(M )}

onde:

C (M ) a codificao de uma Mquina de Turing com fita limitada, cujo alfabeto


de entrada , como cadeia sobre o prprio alfabeto ;

w uma cadeia de entrada qualquer para M .

A linguagem LU tambm conhecida como Linguagem Universal, uma vez que


o problema de se determinar se uma certa cadeia w L(M ), para uma certa Mquina de
Turing M , pode ser reduzido ao problema de se determinar se C (M )w LU . Conforme
ser discutido no Captulo 7, possvel provar que LU , apesar de no ser recursiva, uma
linguagem recursivamente enumervel. Logo, existe uma Mquina de Turing que aceita
LU . Tal mquina, denotada MU , denominada Mquina de Turing Universal. Em
outras palavras, LU = L(MU ).
LU presume uma certa forma de codificao das Mquinas de Turing com fita
limitada, codificao esta que, em princpio, pode ser feita sobre o mesmo alfabeto de
entrada de M . Em outras palavras: se M uma Mquina de Turing sobre um alfabeto
, codifica-se M denotada C (M ) como uma cadeia sobre o prprio alfabeto .
Essa codificao pode ser feita de vrias maneiras. A forma escolhida irrelevante,
uma vez que os resultados obtidos dela independem.
LU deve ser entendida, portanto, como a linguagem formada pelo conjunto das
cadeias C (M )w , sendo M uma Mquina de Turing com fita limitada qualquer, com alfa-
beto de entrada , e w uma cadeia qualquer sobre , desde que w pertena linguagem
definida por M . Esta linguagem, adiante demonstrada como sendo no-recursiva, serve
como base para a apresentao de um problema fundamental da computao, conhecido
como Problema da Parada da Mquina de Turing.
A forma de codificao C (M ) de uma mquina M , como foi antecipado, irrele-
vante. apenas necessrio estabelecer uma conveno que permita a correspondncia
unvoca entre cada mquina distinta e a cadeia correspondente que a representa, e tam-
bm garantir que C (M ) e w sejam cadeias construdas sobre um mesmo alfabeto. Sero
consideradas duas possibilidades de codificao:

1. Codificar a mquina M como uma cadeia sobre o prprio alfabeto de entrada de


M , deixando a cadeia de entrada w inalterada, resultando na cadeia combinada
C (M )w ;

2. Codificar no apenas M , mas tambm a prpria cadeia de entrada w , como cadeias


sobre um segundo alfabeto fixo , resultando em cadeias do tipo C (M )C (w ).
334 Linguagens Formais - Teoria, Modelagem e Implementao

Para efeito prtico de demonstrao de uma forma de codificao que possa ser
aplicada a qualquer Mquina de Turing, com qualquer alfabeto de entrada, ser adotada
a segunda alternativa.
Apresenta-se a seguir, portanto, um esquema genrico de codificao de mquinas
e cadeias de entrada quaisquer sobre o alfabeto = {a, b, c}, escolhido arbitrariamente.
Note-se, na codificao proposta, que, apesar de o alfabeto possuir apenas trs sm-
bolos, ela permite a representao de Mquinas de Turing com qualquer quantidade
de smbolos em seu alfabeto de entrada , e tambm da prpria cadeia w a ser
processada por M .

Cada estado no-final do conjunto de estados Q = {q0 , q1 , q2 ...qn } ser represen-


tado, respectivamente, pela cadeia aa, aaaa, aaaaaa...a 2(n+1) (ou seja, uma quan-
tidade par de smbolos a);
C (qi ) = a 2(i+1) , para qi Q QF ;

Cada estado final do conjunto de estados Q = {q0 , q1 , q2 ...qn } ser representado,


respectivamente, pela cadeia a, aaa, aaaaa...a 2n+1 (ou seja, uma quantidade mpar
de smbolos a);
C (qi ) = a 2i+1 , para qi QF ;

O smbolo especial < ser representado pela cadeia ba;


C (B ) = ba;

O smbolo especial B ser representado pela cadeia bba;


C (B ) = bba;

Cada elemento n do alfabeto = {0 , 1 , 2 ...n } ser representado, respectiva-


mente, pela cadeia bbba, bbbba, bbbbba...b n+3 a;
C (i ) = b i+3 a, i ;

O sentido de movimentao do cursor de acesso ser representado como c (es-


querda) ou cc (direita).
C (E ) = c;
C (D ) = cc;

Assim, cada uma das transies (qi , m ) = (qj , n , E ) de M poder ser represen-
tada como:

Se qi 6 F , qj 6 F , ento a 2(i+1) b m+3 aa 2(j +1) b n+3 ac

Se qi F , qj 6 F , ento a 2i+1 b m+3 aa 2(j +1) b n+3 ac

Se qi 6 F , qj F , ento a 2(i+1) b m+3 aa 2j +1 b n+3 ac

Se qi F , qj F , ento a 2i+1 b m+3 aa 2j +1 b n+3 ac


6 Linguagens Recursivas 335

De maneira anloga, caso o sentido de movimentao do cursor de acesso seja D e


no E , basta substituir a subcadeia c por cc nas formas gerais acima. Por exemplo:
(qi , m ) = (qj , n , D ) e a 2(i+1) b m+3 aa 2(j +1) b n+3 acc, com qi 6 F , qj 6 F
A representao de M = (Q , , , , q0 , <, B , F ) ser efetivada da seguinte forma:

Q e podem ser inferidos a partir de ;

Se 6= , ento codifica-se ;

A funo de transio ser codificada como uma seqncia de cadeias concate-


nadas conforme a conveno apresentada individualmente para a codificao de
cada transio (acima);

q0 ser convencionado como sendo o primeiro estado a ser referenciado na definio


de ;

< e B possuem codificaes fixas sobre {a, b, c};

F poder ser inferido a partir dos estados presentes na definio da funo de


transio que estejam codificados com uma quantidade mpar de smbolos a.

Codificaes como essa so teis para a demonstrao deste e de diversos outros


teoremas, uma vez que permitem que Mquinas de Turing sejam representadas como
cadeias de entrada (ou parte de cadeias de entrada) para outras Mquinas de Turing.
Exemplo 6.4 Seja a mquina M definida na Figura 6.5:
y/(y, D )

x /(x , D ) B /(B , E )
q0 q1 q2

Figura 6.5: Mquina de Turing M que aceita xy

A codificao de seus componentes, de acordo com as convenes anteriormente apresentadas,


ocorre conforme a Figura 6.6.

Figura 6.6: Codificao dos elementos de M sobre {a, b, c}


336 Linguagens Formais - Teoria, Modelagem e Implementao

A representao completa desta mquina obtida concatenando-se as cadeias que representam


as suas transies, conforme mostrado na Figura 6.7:

Figura 6.7: C (M ) : M como uma cadeia sobre {a, b, c}


2

A Figura 6.8 ilustra a codificao C (w ) para a cadeia de entrada w = xyyB .

Figura 6.8: C (w ) : w como uma cadeia sobre {a, b, c}

A cadeia da Figura 6.9 representa a codificao de M seguida da codificao de


uma cadeia w , ambas construdas sobre o mesmo alfabeto de codificao = {a, b, c},
ou seja, C (M ) C (w ). O smbolo especial usado para separar a codificao da
mquina da codificao da cadeia:

Figura 6.9: C (M ) C (w ) : M e w como cadeias sobre {a, b, c}

Retorna-se agora ao Problema da Parada e demonstrao de que LU no recur-


siva. Para isso, ser adotada a primeira forma de codificao sugerida, ou seja, aquela
em que o alfabeto de codificao empregado o prprio alfabeto de entrada da mquina
M considerada. A segunda forma, exemplificada acima, tambm pode ser usada, sem
que isso implique qualquer alterao nos resultados obtidos.
Suponha-se, portanto, que LU seja uma linguagem recursiva, e portanto decidvel.
Isso acarreta a existncia de uma Mquina de Turing com fita limitada M que decide LU .
Seja C (N )w a cadeia formada pela concatenao da codificao da mquina N (sobre o
alfabeto ) com a cadeia de entrada w . A anlise de C (N )w por M ilustrada na
Figura 6.10.
6 Linguagens Recursivas 337

Figura 6.10: Problema da Parada: passo 1

Em seguida, constri-se M2 a partir de M1 , de modo que, para toda cadeia capaz


de fazer M1 parar, aceitando a entrada, M2 dever passar a executar uma seqncia
infinita de movimentaes. Caso M1 pare, rejeitando a entrada, M2 dever tambm
parar, rejeitando a entrada (figura 6.11).

Figura 6.11: Problema da Parada: passo 2

Tal modificao de fcil realizao: basta fazer com que M1 , ao atingir uma
configurao de aceitao, transite para um novo estado, criado especialmente para essa
finalidade, em M2 , e l permanea indefinidamente lendo smbolos na fita de entrada e
deslocando o cursor de acesso para a direita.
Seja M3 uma Mquina de Turing com fita limitada que duplica a cadeia fornecida
como entrada. Se a cadeia sobre a fita de entrada , ao trmino do processamento a
fita de trabalho conter , conforme a Figura 6.12:

Figura 6.12: Problema da Parada: passo 3

Considere-se agora a mquina M4 , obtida pela combinao das mquinas M3 e M2 ,


de tal forma que a sada de M3 seja usada como entrada para M2 (Figuras 6.13 e 6.14).
338 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 6.13: Problema da Parada: passo 4

ou ainda:

Figura 6.14: Problema da Parada: passo 5

Faa-se N = M4 , ou seja, submeta-se a M4 uma codificao da prpria mquina


M4 . Isso possvel, uma vez que M4 aceita cadeias sobre um certo alfabeto , e C (M4 )
ser codificada tambm como uma cadeia sobre este mesmo . No caso considerado,
= {a, b, c}, porm qualquer outro alfabeto produziria os mesmos resultados (ver Figura
6.15).

Figura 6.15: Problema da Parada: passo 6

A Figura 6.15 remete a uma contradio: por um lado, temos a informao de que,
ao analisar a cadeia C (M4 ), se a mquina M4 parar, ento M4 executa uma seqncia
infinita de movimentaes. Por outro, que ao analisar a cadeia C (M4 ), se M4 no parar,
ento M4 pra. Tem-se, portanto, uma contradio. Logo, a nossa hiptese inicial no
vlida, ou seja, LU no pode ser uma linguagem recursiva.
6 Linguagens Recursivas 339

O Problema da Parada, alm de demonstrar que a linguagem LU no recursiva,


remete a uma outra concluso importante: no existe soluo para se determinar se uma
certa mquina (ou programa) pra ao processar uma dada entrada. Naturalmente, este
resultado vlido apenas para o caso de mquinas e entradas arbitrrias, no conhecidas
a priori. Eventualmente, este problema pode ser resolvido para combinaes de mquinas
e/ou entradas pr-determinadas. 
A linguagem LK a seguir apresentada tambm um exemplo clssico de linguagem
no-recursiva:
LK = {wi | wi L(Mi )}
Esta linguagem pressupe uma certa ordenao (por exemplo, lexicogrfica) das
cadeias wi sobre um certo alfabeto , e tambm do conjunto das Mquinas de Turing
sobre o mesmo alfabeto. Ela compreende as cadeias wi que so aceitas pelas Mquinas
de Turing Mi correspondentes, e pressupe uma bijeo entre o conjunto das mquinas
Mi e o conjunto das cadeias wi , i 0, conforme a Tabela 6.1.

w0 w1 w2 ... wn ...
l l l l
M0 M1 M2 ... Mn ...

Tabela 6.1: Bijeo entre cadeias e Mquinas de Turing

Teorema 6.5 (LK no-recursiva) A linguagem LK no recursiva.

Justificativa Conforme o Teorema 7.19 (apresentado mais adiante), uma linguagem L


recursiva se e somente L e seu complemento forem recursivamente enumerveis. O
Teorema 7.13 (tambm apresentado mais adiante), por sua vez, prova que a linguagem
LD = LK (o complemento de LK ) no recursivamente enumervel. Logo, LK no
recursiva. 

6.6 Propriedades de Fechamento


A seguir sero demonstradas algumas das propriedades de fechamento mais importantes
das linguagens recursivas. Esta classe de linguagens fechada em relao s operaes
de:

Unio

Concatenao

Complementao

Interseco

As respectivas demonstraes sero apresentadas na seqncia. As linguagens re-


cursivas, no entanto, no so fechadas em relao operao de:

Fechamento reflexivo e transitivo (Fecho de Kleene)

resultado este que no ser demonstrado neste texto, podendo ser encontrado em [46].
340 Linguagens Formais - Teoria, Modelagem e Implementao

Teorema 6.6 (Fecho na unio) A classe das linguagens recursivas fechada em rela-
o operao de unio.

Justificativa Sejam L1 e L2 duas linguagens recursivas quaisquer. Ento, L1 deci-


dida por uma Mquina de Turing M1 e L2 decidida por uma Mquina de Turing M2 .
A linguagem L3 = L1 L2 decidida por M3 , construda de acordo com o Algoritmo 6.4.
Algoritmo 6.4 (Fecho na unio) Obteno de uma Mquina de Turing que decide a
unio de duas linguagens, a partir das Mquinas de Turing que decidem cada uma das
linguagens.

Entrada: M1 e M2 , duas Mquinas de Turing que decidem, respectivamente, as


linguagens L1 e L2 ;

Sada: uma Mquina de Turing M3 que decide a linguagem L1 L2 ;

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 ;

Conforme o Algoritmo 6.4, M3 aceita w se e somente se w L1 ou w L2 . Caso


contrrio, M3 rejeita w . Logo, L3 uma linguagem recursiva. 

Teorema 6.7 (Fecho na concatenao) A classe das linguagens recursivas fechada


em relao operao de concatenao.

Justificativa Sejam L1 e L2 duas linguagens recursivas quaisquer. Ento, L1 deci-


dida por uma Mquina de Turing M1 e L2 decidida por uma Mquina de Turing M2 .
A linguagem L3 = L1 L2 decidida por M3 , construda de acordo com o Algoritmo 6.5.
Algoritmo 6.5 (Fecho na concatenao) Obteno de uma Mquina de Turing que
decide a concatenao de duas linguagens, a partir das Mquinas de Turing que decidem
cada uma das linguagens.

Entrada: M1 e M2 , duas Mquinas de Turing que decidem, respectivamente, as


linguagens L1 e L2 ;

Sada: uma Mquina de Turing M3 que decide a linguagem L1 L2 ;

Mtodo:

1. M3 inicialmente simula M1 com uma cadeia de entrada w , w = ;


6 Linguagens Recursivas 341

2. Se M1 aceita uma subcadeia de w , ento M3 simula M2 com a subcadeia


;

3. Se M2 rejeita , ento M3 pra e rejeita a cadeia w ;

4. Se M1 no aceita nenhuma subcadeia de w , ento M3 pra e rejeita w .

Conforme o Algoritmo 6.5, M3 aceita w se e somente se L1 e L2 . Caso


contrrio, M3 rejeita w . Logo, L3 uma linguagem recursiva. 

Teorema 6.8 (Fecho na complementao) A classe das linguagens recursivas fe-


chada em relao operao de complementao.

Justificativa Seja L1 uma linguagem recursiva qualquer definida sobre um alfabeto .


Ento, L1 aceita por uma Mquina de Turing M1 que sempre pra, qualquer que seja
a entrada. A linguagem L2 = L1 decidida por M2 construda de acordo com o
Algoritmo 6.6.
Algoritmo 6.6 (Fecho na complementao) Obteno de uma Mquina de Turing
que decide o complemento de uma linguagem, a partir da Mquina de Turing que decide
a linguagem.

Entrada: M1 , uma Mquina de Turing que decide a linguagem L1 ;

Sada: uma Mquina de Turing M2 que decide a linguagem L1 ;

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 .

Conforme o Algoritmo 6.6, M2 aceita w se e somente se w L1 . Caso contrrio,


ou seja, se w L1 , ento M2 rejeita w . Logo, L2 uma linguagem recursiva. 

Teorema 6.9 (Fecho na interseco) A classe das linguagens recursivas fechada


em relao operao de interseco.

Justificativa Conforme demonstrado no Teorema 3.18, o fechamento de uma classe de


linguagens em relao operao de interseco pode ser verificado a partir do fecha-
mento em relao s operaes de unio e complementao. Como essas propriedades
j foram demonstradas nos Teoremas 6.6 e 6.8, fica demonstrado o fechamento da classe
das linguagens recursivas em relao operao de interseco. 
342 Linguagens Formais - Teoria, Modelagem e Implementao

6.7 Questes Decidveis e No-Decidveis


A classe das linguagens recursivas no oferece, infelizmente, resposta para a maioria das
questes mais comuns que se costuma formular a seu respeito. Tais questes encontram-
se relacionadas abaixo.
Sejam L1 e L2 duas linguagens recursivas quaisquer. Ento:

L1 = ?

L1 = ?

L1 = L2 ?

L1 L2 ?

L1 L2 = ?

possvel demonstrar que as linguagens formadas por essas questes no so recur-


sivas. Logo, nem sempre ser possvel determinar uma resposta, qualquer que seja ela,
para questes dessa natureza envolvendo as prprias linguagens recursivas. As demons-
traes 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 caracteriza-
das 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 desen-
volvimento 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 respos-
tas possveis: SIM ou NO. Exemplo: dadas duas linguagens regulares L1 e L2 quaisquer,
sempre possvel determinar se L1 = L2 ? Para cada par de linguagens considerado, este
problema admite apenas uma resposta entre duas possveis.
Uma instncia de um problema um caso particular de um problema geral,
com seus argumentos completamente definidos. Exemplo: dadas a linguagem regular L1
(segue a especificao de L1 ) e a linguagem regular L2 (segue a especificao de L2 ), ser
que L1 = L2 ?
344 Linguagens Formais - Teoria, Modelagem e Implementao

Se todas as instncias de um certo problema, para as quais as respostas forem afir-


mativas (SIM), forem codificadas sobre um alfabeto qualquer, tal conjunto de cadeias
forma uma linguagem L sobre . Note-se que as instncias de problemas cuja resposta
negativa no pertencem a L.
Se a linguagem assim constituda for recursiva, sabido que existe pelo menos uma
Mquina de Turing que decide L. Ou seja, dada uma instncia qualquer do problema, cuja
resposta seja desconhecida, ser sempre possvel determinar se a resposta afirmativa ou
negativa, bastando para isso verificar se a referida Mquina de Turing aceita ou rejeita
a cadeia que representa a instncia.
A importncia deste resultado est no fato de que linguagens que representam pro-
blemas gerais, uma vez identificadas como sendo recursivas, so tais que permitem a
determinao mecnica da soluo, qualquer que seja a instncia considerada. A meca-
nizao da soluo, no caso, implementada pela Mquina de Turing que aceita L.
As linguagens recursivamente enumerveis, por outro lado, no gozam dessa proprie-
dade. Conforme a sua definio, as cadeias no pertencentes linguagem podem tanto
ser rejeitadas aps uma parada como provocar a execuo de uma seqncia interminvel
de movimentaes na Mquina de Turing correspondente.
Este fenmeno, caracterstico e especfico das linguagens estritamente recursiva-
mente enumerveis, no ocorre com as outras classes de linguagens anteriormente consi-
deradas. De fato, possvel provar que, qualquer que seja a linguagem regular, livre de
contexto ou recursiva em questo, sempre possvel obter um autmato finito, um aut-
mato de pilha ou uma Mquina de Turing com fita limitada que sempre pra, qualquer
que seja a cadeia de entrada. Isso no significa, no entanto, que no existam reconhe-
cedores desses tipos que eventualmente executem seqncias infinitas de movimentaes
em resposta a alguma cadeia de entrada.
Considere-se agora um outro problema, cujas instncias de resposta afirmativa tam-
bm possam ser codificadas como cadeias sobre um certo alfabeto de entrada. Considere-
se ainda que a linguagem formada por essa coleo de cadeias seja do tipo recursivamente
enumervel. Isso acarreta a impossibilidade de se verificar, mecanicamente, se determi-
nada cadeia pertence ou no linguagem, pois cadeias no pertencentes linguagem
eventualmente podero provocar uma movimentao interminvel da Mquina de Turing
correspondente.
Logo, torna-se impossvel, no caso geral, determinar se um certo problema possui
soluo, qualquer que seja a instncia considerada. Se determinada instncia possui
resposta SIM (caso em que a cadeia que a representa pertence linguagem), fato que
a correspondente Mquina de Turing ir parar aps um tempo finito de processamento.
Se a resposta NO, sabe-se apenas que o processamento poder eventualmente parar,
rejeitando a entrada, ou ento iniciar uma seqncia infindvel de movimentaes.
Para um observador externo, no h nenhuma garantia, para qualquer que seja a
instncia que venha a ser eventualmente considerada, de que o processamento ir parar
em algum momento, produzindo algum resultado.
Devido a essa caracterstica, as linguagens recursivamente enumerveis so tambm
denominadas indecidveis. Problemas cujas representaes na forma de linguagens se-
jam recursivamente enumerveis so tambm chamados de problemas indecidveis.
De uma forma geral, os termos recursivo e recursivamente enumervel so em-
pregados quando se trata de linguagens genricas, e os termos decidvel (sinnimo de
recursiva) e indecidvel ou no-decidvel (sinnimos de recursivamente enumer-
vel), quando se trata de linguagens que representam problemas.
7 Linguagens Recursivamente Enumerveis 345

O termo decidibilidade refere-se ao estudo das linguagens formais, com vistas


determinao das classes a que estas pertencem.
Os termos solucionvel, no-solucionvel (ou insolvel) e parcialmente so-
lucionvel, tambm empregados quando se trata de problemas, significam, respectiva-
mente, que as correspondentes linguagens so: (i) recursivas, ou seja, podem sempre ser
decididas no caso geral; (ii) recursivamente enumerveis, ou seja, no podem ser deci-
didas no caso geral; e (iii) recursivamente enumerveis, enfatizando o fato de que pode
haver soluo para algumas instncias do problema (ainda que correndo o risco de se
esperar indefinidamente por uma resposta).
Aplicada ao estudo dos problemas de deciso, a decidibilidade indica se os mesmos
so solucionveis, no-solucionveis ou parcialmente solucionveis.
fcil, portanto, justificar o grande interesse prtico que existe por problemas para
os quais se possa provar que a linguagem de representao recursiva. Problemas cuja
linguagem de representao seja comprovadamente estritamente recursivamente enume-
rvel, por outro lado, servem sobretudo para demonstrar a inexistncia de procedimentos
mecnicos (algoritmos) que possam resolv-los no caso geral. E isso um resultado te-
rico excepcional, uma vez que evita o desperdcio de recursos na busca de solues gerais e
mostra que determinados problemas no possuem soluo, independentemente da tecno-
logia computacional atual ou futura que possa ser empregada na busca de pretensas
solues.
Note-se, finalmente, que o fato de um determinado problema poder ser resolvido no
caso geral no significa que os algoritmos de resoluo conhecidos sejam necessariamente
eficientes. Em muitas situaes, a busca de soluo para o caso geral, cuja existncia
conhecida atravs da teoria, pode ser inviabilizada na prtica, em virtude do imenso
custo associado sua realizao (custo esse refletido, usualmente, no volume de memria
necessrio ou no tempo de processamento requerido para se chegar s solues).
Por outro lado, a inexistncia de soluo para um problema no caso geral no
significa que ele no possa ser resolvido para instncias especficas ou pr-determinadas,
ou, ainda, para conjuntos de instncias pr-determinadas do problema original.

7.2 Mquinas de Turing como Enumeradoras de Linguagens


Originalmente, o termo recursivamente enumervel refere-se ao fato de as sentenas de
uma linguagem deste tipo poderem ser enumeradas (listadas ou contadas) atravs de um
procedimento mecanizado um algoritmo ou uma Mquina de Turing.
Diz-se que a Mquina de Turing M = (Q , , , , <, B , q0 , F ) enumera uma lin-
guagem, quando:

M possui pelo menos duas fitas de entrada;

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 .

O conjunto das cadeias gravadas por M na fita de sada denotado por E (M ), e


representa a linguagem enumerada por M . E (M ) pode ser finita ou infinita. Nesse
ltimo caso, o processamento de M no pra nunca e M est sempre gravando novas
cadeias na fita de sada, uma aps a outra.
346 Linguagens Formais - Teoria, Modelagem e Implementao

Os Teoremas 7.1 e 7.2, a seguir apresentados, mostram que uma linguagem L


recursivamente enumervel se e somente se ela puder ser enumerada por uma Mquina
de Turing M , ou seja, L = E (M ).
Teorema 7.1 (Enumeradas recursivamente enumerveis) Seja L = E (M ).
Ento L recursivamente enumervel.

Justificativa Para demonstrar que L recursivamente enumervel, suficiente demons-


trar que existe uma Mquina de Turing N que aceita L. O Algoritmo 7.1 a seguir mostra
como construir N a partir de M .
Algoritmo 7.1 (Enumeradas recursivamente enumerveis) Obteno de uma
Mquina de Turing que aceita a linguagem gerada por uma Mquina de Turing que a
enumera.

Entrada: uma Mquina de Turing M que enumera uma linguagem L;

Sada: uma Mquina de Turing N que aceita L;

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).

De acordo com o Algoritmo 7.1, claro que, se w L, ento w aceita por N ,


pois w ser inevitavelmente gerada e gravada por N na primeira fita, em um intervalo
de tempo finito.
Se, por outro lado, w 6 L, N pode tanto parar rejeitando w (no caso em que L for
finita), como entrar em um processamento interminvel, dentro do qual novas cadeias
so sucessivamente geradas e comparadas com w (no caso em que L infinita). L ,
portanto, uma linguagem recursivamente enumervel. 
Teorema 7.2 (Enumeradas recursivamente enumerveis) Seja L uma lingua-
gem recursivamente enumervel. Ento existe N , tal que L = E (N ).

Justificativa Se L recursivamente enumervel, ento L = L(M ) para alguma M-


quina de Turing M . Uma primeira tentativa de demonstrao consiste em construir uma
mquina N que simula M , conforme o Algoritmo 7.2.
Algoritmo 7.2 (Enumeradas recursivamente enumerveis, verso 1) Obten-
o de uma Mquina de Turing que enumera uma linguagem definida por outra Mquina
de Turing.
7 Linguagens Recursivamente Enumerveis 347

Entrada: uma Mquina de Turing M ;

Sada: uma Mquina de Turing N que enumera L(M );

Mtodo:

1. N gera uma nova cadeia w , onde o alfabeto de L (essas cadeias


devem ser geradas em uma certa ordem e sucessivamente. Por exemplo,
pode-se considerar a ordenao lexicogrfica das cadeias de L na seqncia
de comprimento crescente).

2. A cadeia gerada w escrita em uma fita auxiliar de N (fita 1).

3. A fita 2 de N contm uma codificao C (M ) da mquina M .

4. N simula M com a cadeia w gravada na fita 1.

5. Caso M aceite w , w # escrito na fita 3.

6. Desviar para (1).

O procedimento do Algoritmo 7.2 consiste em gerar, de forma sistemtica e exaus-


tiva, todas as cadeias de , testando cada uma delas em M para determinar se pertencem
ou no a L. Em caso afirmativo, elas so individualmente copiadas para a fita de sada
de N , que dessa forma enumera as cadeias de L, ou seja, L = E (N ).
Essa soluo funcionaria perfeitamente, exceto por um detalhe: se L for uma lingua-
gem estritamente recursivamente enumervel, isso significa que existe pelo menos uma
cadeia z L, de modo que M inicia uma seqncia infindvel de movimentaes em
sua operao. Logo, N inicia essa seqncia no passo (4) do procedimento, e as demais
cadeias de L no so geradas, nem testadas ou gravadas por N em sua fita de sada.
Se, no entanto, L for uma linguagem decidvel (recursiva), ento o procedimento
pode ser usado sem qualquer risco de induzir M , e conseqentemente N , a um processa-
mento que pare de gerar resultados.
No obstante, possvel adotar um procedimento ligeiramente modificado que per-
mita superar as limitaes do procedimento analisado, servindo, indistintamente, tanto
para linguagens recursivas quanto para linguagens recursivamente enumerveis.
Seja L uma linguagem recursivamente enumervel, L e w L. Ento, se
0 , 1 , 2 , 3 , ..., n , ... uma ordenao lexicogrfica, de comprimento crescente, das
cadeias de , fato que w = i , para algum valor de i, e apenas um.
Exemplo 7.1 Considere = {a, b}. A ordenao lexicogrfica de comprimento crescente das cadeias
de :
Comprimento 0:

Comprimento 1: a, b

Comprimento 2: aa, ab, ba, bb

Comprimento 3: aaa, aab, aba, abb, baa, aba, bba, bbb

...
348 Linguagens Formais - Teoria, Modelagem e Implementao

Comprimento n: a n , a n1 b, ..., b n1 a, b n
...
2
Alm disso, como w L, tambm fato que w aceita por uma Mquina de Turing
M aps um nmero limitado de movimentaes que levam M desde a sua configurao
inicial at uma configurao final qualquer. Supondo que M seja determinstica, e sendo
|w | = k , w aceita apenas na k -sima configurao assumida por M .
Defina-se a funo parcial : Z+ Z+ da seguinte forma: se i L, |i | = j
e i aceita por uma Mquina de Turing M determinstica (neste caso, aps j configu-
raes), ento associa o par (i, j ) com a cadeia i . A funo injetora e sobrejetora,
pois no existem dois pares que possam ser associados com a mesma sentena, e todas
as sentenas de L esto associadas com exatamente um par.
Considere-se um certo par (p, q) escolhido ao acaso. Se p L, certo que p
aceita por M aps um certo nmero de movimentaes. Se este nmero for q, a cadeia p
ser enumerada. Caso contrrio, ela ser descartada, at que o par correto seja sorteado
(note-se que para cada valor de p existe uma quantidade infinita de pares com este valor
no primeiro elemento da dupla: ...(p, q 2), (p, q 1), (p, q), (p, q + 1), (p, q + 2)... etc.).
O objetivo agora o de construir uma Mquina de Turing N que, partindo de uma
seqncia de todos os pares ordenados (i, j ), i 1, j 1, em que cada (i, j ) ocorre uma
nica vez, testar sistematicamente se a cadeia i aceita por M em j movimentos. Em
caso afirmativo, i ser enumerada. Em caso afirmativo ou negativo, um novo par
considerado e um novo teste efetuado.
Dessa forma, evita-se testar i em M de forma contnua, at que M pare (conforme
a proposta do Algoritmo 7.2), pois isso poderia causar problemas no caso de linguagens
estritamente recursivamente enumerveis. Nessa nova tcnica, o teste de cada i efe-
tuado apenas durante uma seqncia limitada de configuraes (porm suficiente para
a sua aceitao, caso a cadeia pertena linguagem), evitando-se dessa maneira a ocor-
rncia de eventuais seqncias interminveis de movimentaes. Assim, a sentena i
enumerada apenas quando o par (i, j ) correspondente tiver sido considerado.
A fim de garantir a enumerao sistemtica de todas as sentenas de L, necessrio
considerar a gerao e o teste sistemtico de todos os pares (i, j ), sem repetio, um de
cada vez. Conforme estudado no Captulo 1 (ver Exemplo 1.54), o conjunto desses pares
pode facilmente ser enumerado considerando-se a organizao em que os pares cuja soma
representa os mesmos valores so agrupados em ordem crescente do valor da soma e,
dentro de cada um desses grupos, na ordem descrescente do primeiro termo e crescente
do segundo:

Soma 2: (1, 1)

Soma 3: (2, 1), (1, 2)

Soma 4: (3, 1), (2, 2), (1, 3)

Soma 5: (4, 1), (3, 2), (2, 3), (1, 4)

Soma 6: (5, 1), (4, 2), (3, 3), (2, 4), (1, 5)

...

Soma n: (n 1, 1), (n 2, 2), (n 3, 3)...(3, n 3), (2, n 2), (1, n 1)


7 Linguagens Recursivamente Enumerveis 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 ade-
quada para linguagens estritamente recursivamente enumerveis.

Entrada: uma Mquina de Turing M ;

Sada: uma Mquina de Turing N que enumera L(M );

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. 

7.3 Gramticas Irrestritas


Uma gramtica G = (V , , P , S ) dita irrestrita se nenhuma restrio adicional for
aplicada s suas regras de produo, que devem seguir a forma geral ,
V NV , V . Observar que as gramticas regulares, as livres de contexto e as
sensveis ao contexto so casos particulares das gramticas irrestritas.
Note-se que, diferentemente do que ocorre com as gramticas sensveis ao contexto,
as gramticas irrestritas admitem que o lado direito das regras () possua um nmero de
350 Linguagens Formais - Teoria, Modelagem e Implementao

smbolos menor que o lado esquerdo correspondente (). Isso faz com que possa haver
reduo no tamanho das formas sentenciais durante o processo de derivao de sentenas.
Alguns autores consideram um formato ainda mais geral para as regras das gra-
mticas irrestritas: V + , V . Este formato permite que o lado esquerdo das
regras seja formado por qualquer combinao de smbolos terminais e no-terminais, in-
cluindo cadeias formadas exclusivamente por smbolos terminais, o que no permitido
no formato aqui adotado.
Na verdade, ambas as definies so equivalentes, podendo ser usadas indistinta-
mente. A converso de regras do formato mais geral ( V + , V ) para o formato
menos geral ( V NV , V ) pode ser feita aplicando-se a tcnica utilizada na
demonstrao do Teorema 5.1, em que novos smbolos no-terminais so criados e subs-
tituem todas as ocorrncias de smbolos terminais, e a gramtica acrescida de produes
unitrias que convertem cada um desses novos smbolos no-terminais nos smbolos ter-
minais correspondentes.
Exemplo 7.2 A gramtica G1 = ({S , A, B , C , a, b, c}, {a, b, c}, P1 , S ), com P1 :

{S aAbcC
bc B
ABC b}

pode ser facilmente convertida para G2 = ({S , A, B , C , X , Y , Z , a, b, c}, {a, b, c}, P2 , S ), com P2 :

{S XAYZC
YZ B
ABC Y
X a
Y b
Z c}
2

As convenes e a terminologia adotadas na apresentao e discusso dos demais


tipos de gramtica tambm so aplicveis ao caso das gramticas irrestritas. Derivaes,
formas sentenciais e a linguagem gerada pela gramtica so denotadas de forma idntica
queles casos.
Exemplo 7.3 A gramtica G = ({S , A, C , a, b, c}, {a, b, c}, P , S ), com P :

{S aAbc
A aAbC |
Cb bC
Cc cc}

gera a linguagem a i b i c i , i 1. Esta mesma linguagem foi anteriormente formulada no Captulo


5 atravs de uma gramtica sensvel ao contexto (ver Exemplo 5.14). No presente exemplo, ela
formalizada atravs de uma gramtica irrestrita (por causa da produo A , em que |A| > ||).
Exemplos de derivao:

S aAbc abc

S aAbc aaAbCbc aaaAbCbCbc aaabCbCbc aaabCbbCc aaabbCbCc


aaabbbCCc aaabbbCcc aaabbbccc
7 Linguagens Recursivamente Enumerveis 351

A aplicao da produo S aAbc, seguida de n aplicaes da produo A aAbC e,


finalmente, da aplicao da produo A , gera uma forma sentencial do tipo a n+1 (bC )n bc. A
transposio dos smbolos b para o lado esquerdo, junto aos smbolos a, feita com o auxlio
da produo Cb bC . Aps a aplicao dessa produo n + 1 vezes, chega-se forma sentencial
a n+1 b n+1 C n c. Finalmente, a aplicao da produo Cc cc por n vezes substitui os no-terminais
C pelos terminais c correspondentes, conduzindo gerao da sentena a n+1 b n+1 c n+1 . 2

Exemplo 7.4 A gramtica G = ({S , B , X , a, b}, {a, b}, P , S ), com P :

{S aBSa | aBXa
Ba aB
BX Xb
aX a}

gera a linguagem a i b i a i , i 1. A produo aX a caracteriza esta gramtica como sendo


irrestrita, uma vez que | aX |>| a |.
As duas produes iniciais geram formas sentenciais do tipo (aB )n Xa n . A partir desse ponto,
a aplicao repetida da produo Ba aB permite obter formas sentenciais do tipo a n B n Xa n .
Resta, portanto, substituir os smbolos no-terminais B por terminais b para gerar as sentenas
pretendidas, tarefa esta que cumprida pelas trs ltimas produes. O no-terminal X serve
como delimitador, separando as cadeias sua esquerda e sua direita. Ele usado, inicialmente,
como referncia para substituir os smbolos B por b e, finalmente, para se auto-remover da forma
sentencial, gerando a n b n a n . Exemplos de derivao:
S aBXa aXba aba

S aBSa aBaBSaa aBaBaBXaaa aaBBaBXaaa aaBaBBXaaa


aaaBBBXaaa aaaBBXbaaa aaaBXbbaaa aaaXbbbaaa aaabbbaaa
2

7.4 Forma Normal para Gramticas Irrestritas


Devido ao fato de as gramticas regulares, livres de contexto e sensveis ao contexto cons-
titurem casos particulares das gramticas irrestritas, a forma normal que ser apresen-
tada a seguir pode ser aplicada indistintamente em qualquer tipo de gramtica examinada
at o momento.
A demonstrao do teorema seguinte baseia-se na demonstrao de [55], que por
sua vez uma generalizao da forma conhecida como Forma Normal de Kuroda para
gramticas sensveis ao contexto (ver Seo 5.3).
Teorema 7.3 (Forma normal para gramticas irrestritas) Toda gramtica irres-
trita G1 = (V1 , , P1 , S ) define uma linguagem L que tambm pode ser gerada por uma
outra gramtica G2 = (V2 , , P2 , S ), equivalente, cujas produes so todas das seguin-
tes formas: (1) S ; (2) A ; (3) A B ; (4) A BC ; (5) AB AC ; (6)
AB CB ; (7) AB C , onde S , A, B , C N2 e .

Justificativa Conforme o Algoritmo 7.4, descrito a seguir, o qual incorpora as seguin-


tes etapas:

i. Eliminao das produes vazias;

ii. Incorporao da produo (1), caso a cadeia vazia faa parte da linguagem;

iii. Substituio dos smbolos terminais por novos smbolos no-terminais e incorpo-
rao de novas produes da forma (2), uma para cada smbolo terminal de G1 ;
352 Linguagens Formais - Teoria, Modelagem e Implementao

iv. Substituio das produes , em que || | |, por um novo conjunto de


produes das formas (3), (4), (5), (6) e (7);

v. Substituio das produes , em que || > | |, por um novo conjunto de


produes das formas (3), (4), (5), (6) e (7).

Algoritmo 7.4 (Forma normal para gramticas irrestritas) Obteno de uma gra-
mtica irrestrita na forma normal.

Entrada: uma gramtica irrestrita G1 = (V1 , , P1 , S );

Sada: uma gramtica irrestrita G2 = (V2 , , P2 , S ), na forma normal, e tal que


L(G2 ) = L(G1 );

Mtodo:

1. Incio:
Sendo N1 = V1 e N2 = V2 , faz-se:

N2 N1

P2

2. Etapa (i):
Eliminam-se as produes da forma A contidas em P1 :

P2 P2 {XA X , AX X , A , A | A P1 , X
N1 , }

3. Etapa (ii):
Incorporao da cadeia vazia, se for o caso:

P2 P2 {S , se L(G1 )}

4. Etapa (iii):
Eliminao dos terminais originais e sua substituio por no-terminais cor-
respondentes:

N2 N2 {X , }

P2 P2 {X , 1 X 2 | 1 2 P1 , , 1 , 2
V1 }

P2 P2 {X , 1 2 | 1 2 P1 , , 1 , 2
V1 }

5. Etapa (iv):
Eliminao das produes , || | |:
7 Linguagens Recursivamente Enumerveis 353

Para cada produo em P1 , com || | |, tem-se:


= A1 A2 ...Am
= B1 B2 ...Bn = B1 B2 ...Bm Bm+1 ...Bn , com Ai , Bj N1 , n m
1.

Fazer:
N2 N2 {Xi , 1 i n 1}
P2 P2

{A1 B1 X1
X1 A2 B2 X2
X2 A3 B3 X3
...
Xm2 Am1 Bm1 Xm1
Xm1 Am Bm Xm
Xm Bm+1 Xm+1
Xm+1 Bm+2 Xm+2
...
Xn2 Bn1 Xn1
Xn1 Bn }

6. Etapa (v): Eliminao das produes , || > | |:

Para cada produo , com || > | |, tem-se:


= A1 A2 ...An = A1 A2 ...Am Am+1 ...An
= B1 B2 ...Bm , com Ai , Bj N , n > m 1.

Fazer:
N2 N2 {Xi , 1 i n m 1} {Yj , 0 j n 2}
P2 P2
{An1 An X0 Y0 , X0 Y0 Y0 ,
An2 Y0 X1 Y1 , X1 Y1 Y1 ,
An3 Y1 X2 Y2 , X2 Y2 Y2 ,
...
Am Ynm2 Xnm1 Ynm1 , Xnm1 Ynm1 Ynm1 Bm ,
Am1 Ynm1 Ynm Bm1 ,
Am2 Ynm Ynm+1 Bm2 ,
...
A1 Yn2 Yn2 B1 , Yn2 B1 B1 }

7. Trmino:
As produes do tipo AB CD geradas nas etapas (iv ) e (v ) devem
ainda ser substitudas por um conjunto de produes equivalente, porm
em conformidade com as formas (3), (4), (5), (6) e (7):
354 Linguagens Formais - Teoria, Modelagem e Implementao

N2 N2 {X , Y }
P2 P2 {AB AY , AY XY , XY XD , XD CD }

Todas as produes de G2 esto em algum dos formatos permitidos na forma normal


desejada, completando a prova. 

Exemplo 7.5 De acordo com a etapa (iv ), a produo A1 A2 A3 B1 B2 B3 B4 B5 B6 B7 deve ser


substituda pelo conjunto de regras:

{A1 B1 X1 , (7.1)
X1 A2 B2 X2 , (7.2)
X2 A3 B3 X3 , (7.3)
X3 B4 X4 , (7.4)
X4 B5 X5 , (7.5)
X5 B6 X6 , (7.6)
X6 B7 } (7.7)

De fato, A1 A2 A3 + B1 B2 B3 B4 B5 B6 B7 , como se constata pela seguinte derivao:


A1 A2 A3 B1 X1 A2 A3 B1 B2 X2 A3 B1 B2 B3 X3
B1 B2 B3 B4 X4 B1 B2 B3 B4 B5 X5 B1 B2 B3 B4 B5 B6 X6 B1 B2 B3 B4 B5 B6 B7
Para completar, a produo (7.2) deve ainda ser substituda pelo conjunto:

{X1 A2 X1 N ,
X1 N MN ,
MN MX2 ,
MX2 B2 X2 }

Transformao semelhante deve ser aplicada na produo (7.3), pois as demais j se encontram
enquadradas nos formatos originalmente propostos. 2

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 , (7.8)
X0 Y0 Y0 , (7.9)
A5 Y0 X1 Y1 , (7.10)
X1 Y1 Y1 , (7.11)
A4 Y1 X2 Y2 , (7.12)
X2 Y2 Y2 , (7.13)
A3 Y2 X3 Y3 , (7.14)
X3 Y3 Y3 B3 , (7.15)
A2 Y3 X4 Y4 , (7.16)
X4 Y4 Y4 B2 , (7.17)
A1 Y4 Y5 B1 , (7.18)
Y5 B1 B1 } (7.19)

De fato, A1 A2 A3 A4 A5 A6 A7 + B1 B2 B3 , como se constata pela seguinte derivao:


A1 A2 A3 A4 A5 A6 A7 A1 A2 A3 A4 A5 X0 Y0 A1 A2 A3 A4 A5 Y0 A1 A2 A3 A4 X1 Y1
A1 A2 A3 A4 Y1 A1 A2 A3 X2 Y2 A1 A2 A3 Y2 A1 A2 X3 Y3 A1 A2 Y3 B3
7 Linguagens Recursivamente Enumerveis 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 ,
A6 N MN ,
MN MY0 ,
MY0 X0 Y0 }

Transformaes semelhantes devem ser aplicadas s produes (7.10), (7.12), (7.14), (7.15),
(7.16), (7.17) e (7.18). Assim, todas as produes resultantes se enquadram nas formas originalmente
propostas. 2

7.5 Equivalncia entre Gramticas Irrestritas e Linguagens


Recursivamente Enumerveis
As Mquinas de Turing com fita infinita definem a classe das linguagens recursivamente
enumerveis, que tambm podem ser geradas pelas gramticas irrestritas. Tal resultado
pode ser comprovado atravs dos dois teoremas seguintes, que demonstram a equivalncia
dos dois tipos de dispositivos, no que se refere classe de linguagens que eles so capazes
de representar. A demonstrao original devida a Chomsky em [62].
Teorema 7.4 (Irrestritas recursivamente enumerveis) Seja L = L(G), sendo
G uma gramtica irrestrita. Ento L uma linguagem recursivamente enumervel.

Justificativa A demonstrao feita a partir da construo de uma Mquina de Turing


M no-determinstica que aceita L. M construda de tal modo que seus movimentos
simulam as derivaes das sentenas geradas por G. A mquina M que reconhece L(G)
apresenta trs fitas de trabalho:

- Na primeira fita est inicialmente gravada a cadeia w que se deseja examinar para
determinar se ela pertence ou no a L;

- Na segunda fita fica gravada uma codificao C (G) da gramtica irrestrita G;

- Na terceira fita est inicialmente gravado, na primeira posio, o smbolo no-


terminal 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 Linguagens Formais - Teoria, Modelagem e Implementao

a) Criar n novos threads para M , sendo que cada thread j , 1 j n, deve


substituir, na cadeia z , a partir da posio i, a subcadeia pela subcadeia
j ; encerrar o thread original na configurao de rejeio;

b) Para cada thread criado no passo (3.a):

i. Se z 6= w , desviar para o passo (1);

ii. Se z = w , encerrar o thread na configurao de aceitao.



Note-se que a gerao de uma nova forma sentencial na fita nmero 3 pode provocar
a manuteno, a reduo ou o aumento de seu comprimento, em relao forma sentencial
imediatamente anterior. Dessa forma, M deve ser capaz de efetuar a contrao ou a
expanso da cadeia que representa cada forma sentencial, evitando sua fragmentao ou
perda de informao.
A mquina M assim construda simula, na fita nmero 3, as derivaes de G. A
escolha da produo a ser aplicada em cada momento, no entanto, no-determinstica.
Se w L, certo que existe pelo menos uma derivao que a gera. Logo, fato que
alguma instncia de M inevitavelmente reproduzir essa derivao, o que resultar na
aceitao de w . Se, por outro lado, w 6 L, isso significa que no existe derivao possvel
de w em G. Logo, nenhuma das instncias de M ser capaz de atingir uma configurao
final. A cadeia de entrada ser rejeitada, ou ento M iniciar uma seqncia intermin-
vel de movimentaes. Portanto, L(M ) = L(G), e L uma linguagem recursivamente
enumervel.
Cumpre notar a semelhana entre a tcnica descrita no Teorema 7.4 e o Algoritmo
5.2, que mostra como obter uma Mquina de Turing com fita limitada a partir de uma
gramtica sensvel ao contexto. A diferena que, naquele caso, as formas sentenciais ge-
radas possuem comprimento no-decrescente, e isso facilita a sua comparao sistemtica
com a cadeia de entrada. Alm disso, no existem garantias, como no caso do Algoritmo
5.2, de que todos os threads se encerram aps um tempo finito de execuo exceto,
naturalmente, para o thread que gera a seqncia de derivaes que resulta na cadeia
de entrada, caso essa seja uma sentena da linguagem gerada por G. Ao contrrio,
possvel que, para cadeias no pertencentes linguagem, existam threads de M exe-
cutando seqncias interminveis de movimentaes, sem que outros threads atinjam
uma configurao de aceitao. Por esse motivo, a tcnica descrita no Teorema 7.4 no
recebe a designao de algoritmo.
Teorema 7.5 (Irrestritas recursivamente enumerveis) Seja L = L(M ), sendo
M uma Mquina de Turing com fita infinita. Ento L = L(G), sendo G uma gramtica
irrestrita.

Justificativa Segue a mesma linha adotada na demonstrao do Teorema 5.3 e consiste


na obteno de uma gramtica irrestrita que reproduz, na derivao de suas sentenas,
os movimentos da Mquina de Turing M que aceita a mesma linguagem. Se a cadeia de
entrada aceita por M , ela tambm gerada pela gramtica. Cadeias no aceitas por
M no so geradas pela gramtica.
O Algoritmo 7.5 descrito a seguir especifica os passos que devem ser executados na
transformao sistemtica de uma Mquina de Turing M = (Q , , , , q0 , <, B , F ) em
uma gramtica irrestrita G = (V , , P , S ).
7 Linguagens Recursivamente Enumerveis 357

Algoritmo 7.5 (Irrestritas recursivamente enumerveis) Obteno de uma gra-


mtica irrestrita a partir de uma Mquina de Turing.

Entrada: uma Mquina de Turing M = (Q , , , , q0 , <, B , F ) com fita infinita;

Sada: uma gramtica irrestrita G = (V , , P , S ) tal que L(G) = L(M );

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 adicio-
nados 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 en-


trada que se pretende verificar em M ;
e
358 Linguagens Formais - Teoria, Modelagem e Implementao

[..., < q0 i ][..., j ][..., k ]...[..., u #] =< q0 i j k ...u #, correspondente


configurao inicial de M com a cadeia de entrada acima.

Um conjunto adicional de regras de P especificado, com a finalidade de garantir


que, qualquer que seja a movimentao efetuada por M , a partir de uma confi-
gurao qualquer, haja sempre uma possibilidade correspondente de derivao em
G.
As transies de M enquadram-se em trs casos:

Caso (i): (qi , <) = (qj , <, D )

Caso (ii): (qi , m ) = (qj , n , D )

Caso (iii): (qi , m ) = (qj , n , E )

O conjunto das produes de G que so capazes de promover tais derivaes ,


naturalmente, obtido a partir da especificao da funo . Deve-se, portanto,
considerar cada um dos trs casos indicados. A partir de cada um deles, novas
produes so formuladas e, a partir destas, novos smbolos no-teminais so acres-
centados gramtica. Observe-se que nos casos (ii) e (iii) as transies so feitas
com smbolos do alfabeto , ou seja, m , n , o que inclui no apenas os smbo-
los originalmente empregados na composio da cadeia de entrada, mas tambm
smbolos gravados por M na fita de trabalho durante o seu prprio processamento.

Caso (i): (qi , <) = (qj , <, D )

IV. P P {[m , qi < m ] [m , < qj m ], m }


N N {[m , qi < m ], m }
N N {[m , < qj m ], m }

Caso (ii): (qi , m ) = (qj , n , D )


O smbolo corrente (m ) pode ser:

o primeiro da cadeia de entrada:

cadeia unitria: VIII;

cadeia de comprimento dois: IX;

cadeia de comprimento maior que dois: X;

o ltimo da cadeia de entrada:

cadeia unitria: VIII;

cadeia no-unitria: XI;


7 Linguagens Recursivamente Enumerveis 359

o penltimo da cadeia de entrada:

cadeia de comprimento dois: IX;

cadeia de comprimento maior que dois: XII;

ou ainda estar em qualquer posio diferente destas:

XIII;

VIII. P P {[p , < qi m #] [p , < n ][B , qj B #], p }


N N {[p , < qi m #], p }
N N {[p , < n ], p }
N N {[B , qj B #]}

IX. P P {[p , < qi m ][q , r #] [p , < n ][q , qj r #],


p , q , r }
N N {[p , < qi m ], p }
N N {[q , r #], q , r }
N N {[p , < n ], p }
N N {[q , qj r #], q , r }

X. P P {[p , < qi m ][q , r ] [p , < n ][q , qj r ],


p , q , r }
N N {[p , < qi m ], p }
N N {[q , r ], q , r }
N N {[p , < n ], p }
N N {[q , qj r ], q , r }

XI. P P {[p , qi m #] [p , n ][B , qj B #], p }


N N {[p , qi m #], p }
N N {[p , n ], p }
N N {[B , qj B #]}

XII. P P {[p , qi m ][q , r #] [p , n ][q , qj r #],


p , q , r }
N N {[p , qi m ], p }
N N {[q , r #], q , r }
N N {[p , n ], p }
N N {[q , qj r #], q , r }

XIII. P P {[p , qi m ][q , r ] [p , n ][q , qj r ],


p , q , r }
N N {[p , qi m ], p }
N N {[q , r ], q , r }
N N {[p , n ], p }
N N {[q , qj r ], q , r }

Caso (iii): (qi , m ) = (qj , n , E )


360 Linguagens Formais - Teoria, Modelagem e Implementao

O smbolo corrente (m ) pode:

ser o primeiro da cadeia de entrada:

cadeia unitria: XIV;

cadeia no-unitria: XV;

ser o ltimo da cadeia de entrada:

cadeia unitria: XIV;

cadeia de comprimento dois: XVI;

cadeia de comprimento maior que dois: XVII;

ser o segundo da cadeia de entrada:

cadeia de comprimento dois: XVI;

cadeia de comprimento maior que dois: XVIII;

estar em qualquer posio diferente destas:

XIX;

XIV. P P {[p , < qi m #] [p , qj < n #], p }


N N {[p , < qi m #], p }
N N {[p , qj < n #], p }

XV. P P {[p , < qi m ] [p , qj < n ], p }


N N {[p , < qi m ], p }
N N {[p , qj < n ], p }

XVI. P P {[p , < q ][r , qi m #] [p , < qj q ][r , n #], p , q , r }


N N {[p , < q ], p , q }
N N {[r , qi m #], r }
N N {[p , < qj q ], p , q }
N N {[r , n #], r }

XVII. P P {[p , q ][r , qi m #] [p , qj q ][r , n #], p , q , r }


N N {[p , q ], p , q }
N N {[r , qi m #], r }
N N {[p , qj q ], p , q }
N N {[r , n #], r }

XVIII. P P {[p , < q ][r , qi m ] [p , < qj q ][r , n ], p , q , r }


N N {[p , < q ], p , q }
7 Linguagens Recursivamente Enumerveis 361

N N {[r , qi m ], r }
N N {[p , < qj q ], p , q }
N N {[r , n ], r }

XIX. P P {[p , q ][r , qi m ] [p , qj q ][r , n ], p , q , r }


N N {[p , q ], p , q }
N N {[r , qi m ], r }
N N {[p , qj q ], p , q }
N N {[r , n ], r }

A operao de M cessa ao ser atingida uma configurao para a qual no exista


movimentao possvel, ou seja, quando (qi , m ) = . Nesta situao, se qi F ,
diz-se que M aceita a cadeia de entrada.
Condio semelhante deve 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:

Caso (iv): qi F e (qi , <) =

XX. P P {[p , qi < q ] p , p ( {B }), q }


N N {[p , qi < q ], p ( {B }), q }

XXI. P P {[p , qi < q #] p #, p ( {B }), q }


N N {[p , qi < q #], p ( {B }), q }

Caso (v): qi F e (qi , m ) =

XXII. P P {[p , < qi m ] p , p ( {B })}


N N {[p , < qi m ], p ( {B })}

XXIII. P P {[p , < qi m #] p #, p ( {B })}


N N {[p , < qi m ], p ( {B })}

XXIV. P P {[p , qi m #] p #, p ( {B })}


N N {[p , qi m ], p ( {B })}

XXV. P P {[p , qi m ] p , p ( {B })}


N N {[p , qi m ], p ( {B })}

Essas produes do incio ao processo de converso da cadeia armazenada no


lado esquerdo dos no-terminais e at ento intocada em uma sentena a
ser efetivamente gerada por G. A forma sentencial inicial obtida atravs da
derivao [...] [...] ... [n , qi m ] [...] [...] [...] ... n [...], se qi F e (qi , m ) = .
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 Linguagens Formais - Teoria, Modelagem e Implementao

de gramtica (isto , delimitado pelos smbolos [ e ]), transposto para fora


do mesmo (sendo que, neste caso, os delimitadores [ e ], e conseqentemente o
prprio no-terminal, deixam de existir), passando a indicar o trmino da cadeia
de entrada.
A partir deste ponto, devem ser acrescentadas produes em P de tal modo que os
no-terminais remanescentes na forma sentencial gerada por G sejam todos subs-
titudos por smbolos terminais, conforme o valor armazenado no lado esquerdo,
no interior do mesmo ([, ...]):

XXVI. P P {[m , ]n m n , n ( {B }), [m , ] V }

XXVII. P P {n [m , w ] n m , n ( {B }), [m , w ] V , desde que


w no contenha o smbolo #}

XXVIII. P P {n [m , w ] n m #, n ( {B }), [m , w ] V , desde que


w contenha o smbolo #}

Nesta situao, a forma sentencial produzida por G da forma #, onde


cadeia de entrada originalmente submetida Mquina de Turing, e {B }
representa smbolos B que foram adicionados ao final da cadeia de entrada pelo
deslocamento para a direita do cursor de acesso fita de trabalho. A eliminao
da subcadeia # feita por intermdio das produes:

XXIX. P P {B # #}

XXX. P P {i # i , i }

A inspeo das produes geradas nos itens I a XXX (em particular nos itens XXIX
e XXX) permite concluir que toda e qualquer gramtica gerada por esse mtodo uma
gramtica irrestrita. Ser omitida a demonstrao formal da equivalncia das Mquinas
de Turing com as gramticas irrestritas assim construdas. Tal demonstrao pode, no
entanto, ser encontrada em [52]. 

Exemplo 7.7 Seja M tal que:

= {x , y, z }
= {x , y, z , X , Y , Z , B }
{(q0 , x ) (q1 , X , D), (q1 , y) (q2 , Y , D), (q2 , z ) (q3 , Z , D),
(q3 , B ) (q4 , x , D), (q4 , B ) (q5 , B , D), (q5 , B ) (q6 , y, D),
(q6 , B ) (q7 , B , D), (q7 , B ) (q8 , z , D), (q8 , B ) (q9 , B , E ),
(q9 , z ) (q10 , z , E )}
(q10 , B ) =
{q10 } F
A seqncia de movimentos abaixo ilustra a aceitao da cadeia xyz por M :
(<, q0 xyz ) (< X , q1 yz ) (< XY , q2 z ) (< XYZ , q3 B )
(< XYZx , q4 B ) (< XYZxB , q5 B ) (< XYZxBy, q6 B ) (< XYZxByB , q7 B )
(< XYZxByBz , q8 B ) (< XYZxByB , q9 zB ) (< XYZxBy, q10 BzB )
7 Linguagens Recursivamente Enumerveis 363

A seqncia de derivaes abaixo mostra as formas sentenciais geradas por uma gramtica
irrestrita G, correspondentes aos movimentos de M acima. As produes e os smbolos no-terminais
utilizados foram derivados diretamente da especificao de M , conforme o Algoritmo 7.5. Note-se
que S xyz , e portanto xyz L(G).

S
[x , < q0 x ]A
[x , < q0 x ][y, y]A
[x , < q0 x ][y, y][z , z #]
[x , < X ][y, q1y][z , z #]
[x , < X ][y, Y ][z , q2 z #]
[x , < X ][y, Y ][z , Z ][B , q3 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , q4 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , q5 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , q6 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , B ][B , q7 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , B ][B , z ][B , q8 B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , B ][B , q9 z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y][B , q10 B ][B , z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ][B , y]B [B , z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ]BB [B , z ][B , B #]
[x , < X ][y, Y ][z , Z ][B , x ][B , B ]BBB [B , B #]
[x , < X ][y, Y ][z , Z ][B , x ]BBBB [B , B #]
[x , < X ][y, Y ][z , Z ][B , x ]BBBBB #
[x , < X ][y, Y ][z , Z ]BBBBBB #
[x , < X ][y, Y ]zBBBBBB #
[x , < X ]yzBBBBBB #
xyzBBBBBB #
xyzBBBBB #
xyzBBBB #
xyzBBB #
xyzBB #
xyzB #
xyz #
xyz
2

7.6 Relao entre Linguagens Recursivamente Enumerveis


e Linguagens Recursivas
Os dois teoremas seguintes estabelecem a relao de incluso prpria que existe entre as
linguagens recursivas e as recursivamente enumerveis.
Teorema 7.6 (Recursivas recursivamente enumerveis) Toda linguagem recur-
siva tambm uma linguagem recursivamente enumervel.

Justificativa As classes de linguagens recursivas e recursivamente enumerveis foram


definidas como sendo aquelas cujas linguagens so aceitas por pelo menos uma Mquina
364 Linguagens Formais - Teoria, Modelagem e Implementao

de Turing. As linguagens recursivas, em particular, alm de serem aceitas, so tambm


decididas por pelo menos uma Mquina de Turing, o que no sempre verdade para as
linguagens estritamente recursivamente enumerveis.
Portanto, toda Mquina de Turing que decide uma linguagem tambm aceita a
mesma linguagem. No entanto, linguagens aceitas por uma Mquina de Turing podem
no ser decidveis por nenhuma Mquina de Turing. O critrio de deciso mais forte
do que o de aceitao. Logo, toda linguagem recursiva tambm recursivamente enume-
rvel. 
Teorema 7.7 (Recursivas 6= recursivamente enumerveis) A classe das lingua-
gens recursivas constitui subconjunto prprio da classe das linguagens recursivamente
enumerveis.

Justificativa A linguagem LU , conforme demonstrado anteriormente no Teorema 6.4,


uma linguagem no-recursiva. A demonstrao de que LU uma linguagem recursiva-
mente enumervel, feita a seguir, basta para provar que a classe das linguagens recursivas
constitui subconjunto prprio da classe das linguagens recursivamente enumerveis.

LU = {C (M )w | w L(M )}
onde

C (M ) a codificao de uma Mquina de Turing com fita limitada, cujo alfabeto


de entrada , como cadeia sobre o prprio alfabeto ;

w uma cadeia de entrada qualquer de M ;

Para provar que LU recursivamente enumervel, basta mostrar que LU aceita


por uma Mquina de Turing N , a qual pode ser obtida conforme o Algoritmo 7.6.
Algoritmo 7.6 (Mquina de Turing para LU ) Obteno de uma Mquina de Turing
que aceita a linguagem no-recursiva LU .

Entrada: a linguagem LU ;

Sada: uma Mquina de Turing N que aceita 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 :

M aceita w . Neste caso, N dever encerrar sua operao aceitando


C (M )w ;

M rejeita w . Neste caso, N dever encerrar sua operao rejeitando


C (M )w ;
7 Linguagens Recursivamente Enumerveis 365

M inicia uma seqncia infindvel de movimentaes com w . Neste


caso, N inevitavelmente tambm iniciar, correspondentemente, com
C (M )w , uma seqncia interminvel de movimentaes.

Assim, fcil perceber que todas as cadeias que representam pares (M , w ), em


que w L(M ), sero tambm aceitas por N . J as cadeias que representam pares
(M , w ), em que w 6 L(M ), faro com que N as rejeite ou inicie uma seqncia infinita
de movimentaes. Portanto, LU uma linguagem recursivamente enumervel.
Tambm a linguagem LK = {wi | wi L(Mi )}, definida e estudada no Teorema
6.5, constitui exemplo de linguagem recursivamente enumervel, porm no-recursiva.
Esta linguagem aceita pela Mquina de Turing M , construda de acordo com o
Algoritmo 7.7.
Algoritmo 7.7 (Mquina de Turing para LK ) Obteno de uma Mquina de Tu-
ring que aceita a linguagem no-recursiva LK .

Entrada: a linguagem LK ;

Sada: uma Mquina de Turing N que aceita 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 Linguagens Formais - Teoria, Modelagem e Implementao

7.7 Linguagens que no so Recursivamente Enumerveis


A classe das linguagens recursivamente enumerveis no corresponde, como se poderia
supor, ao conjunto mais abrangente de linguagens que pode ser construdo sobre um
alfabeto finito qualquer.
Conforme ser demonstrado a seguir, existem inmeras linguagens para as quais
no possvel definir Mquinas de Turing que as aceitem ou gramticas que as gerem.
O conjunto das linguagens recursivamente enumerveis , na verdade, um subconjunto
prprio e de cardinalidade inferior ao conjunto de todas as linguagens que podem ser
definidas sobre um alfabeto finito, qualquer que seja ele. Pelos mesmos motivos, verifica-
se que esta nova e mais abrangente classe de linguagens constituda por linguagens que
no possuem formalizao gramatical ([56]).
O conjunto das linguagens formadas sobre alfabetos e que no possuem gramticas
(e conseqentemente Mquinas Turing) correspondentes ser denominado de classe das
linguagens no-gramaticais ou no-recursivamente enumerveis. A Figura 7.1
ilustra essas relaes:

Figura 7.1: Linguagens gramaticais e no-gramaticais

Na seqncia demonstrada a existncia de linguagens no-gramaticais. Antes,


porm, necessrio demonstrar os Teoremas auxiliares 7.8, 7.9 e 7.10.
Teorema 7.8 (Mquinas de Turing so enumerveis) O conjunto C1 = {M | M
uma Mquina de Turing e L(M ) } enumervel. C1 corresponde ao conjunto de
todas as Mquinas de Turing definveis sobre um certo alfabeto .

Justificativa Uma Mquina de Turing representada atravs de uma cadeia de smbolos


de comprimento finito. O alfabeto utilizado pode ser amplo, como, por exemplo:

{a, b, c, ...z , 0, 1, 2...9, (, ), {, }, , ...}

utilizado na maioria das representaes algbricas construdas at o momento, ou, ainda,


um alfabeto restrito, como, por exemplo, o alfabeto:

{a, b, c}

empregado na demonstrao do Teorema 6.4.


7 Linguagens Recursivamente Enumerveis 367

Qualquer que seja o alfabeto finito utilizado, sabe-se que o conjunto enu-
mervel. Uma maneira fcil de perceber isso considerar a ordenao lexicogrfica das
cadeias geradas sobre , conforme foi feito na demonstrao do Teorema 7.2. Para gerar
tal ordenao, suficiente convencionar uma relao de ordem entre os elementos de .
O estabelecimento de uma bijeo entre o conjunto dos nmeros naturais N e o conjunto
imediato. Logo, enumervel.
Por outro lado, nem toda cadeia sobre representa uma Mquina de Turing vlida.
O conjunto que interessa a este estudo , portanto, um subconjunto de . Conforme o
Teorema 1.4, qualquer subconjunto de um conjunto enumervel tambm enumervel.
Logo, C1 um conjunto enumervel. 
Teorema 7.9 (Gramticas so enumerveis) O conjunto C2 = {G | G uma gra-
mtica e L(G) } enumervel. C2 corresponde ao conjunto de todas as gramticas
definveis sobre um certo alfabeto .

Justificativa A demonstrao feita de maneira anloga do Teorema 7.8 


Teorema 7.10 (O conjunto de todas as linguagens no enumervel) O con-

junto C3 = 2 no enumervel. C3 corresponde ao conjunto de todas as linguagens
definveis sobre um certo alfabeto .

Justificativa O Teorema 1.3 garante que, para qualquer conjunto A, finito ou infinito, a
cardinalidade de A sempre inferior cardinalidade de 2A . Logo, a cardinalidade de

menor do que a cardinalidade de 2 . 
A demonstrao da existncia de linguagens no-gramaticais, e portanto da relao
de incluso prpria da classe das linguagens recursivamente enumerveis com a classe
das linguagens formadas sobre alfabetos, feita a seguir.
Teorema 7.11 (Linguagens no-recursivamente enumerveis) Existem linguagens
que no so recursivamente enumerveis.

Justificativa Como a cardinalidade de C3 maior do que a cardinalidade de C1 e de


C2 , que por sua vez possuem a mesma cardinalidade, fcil perceber que no existe
relao um-para-um (funo bijetora) entre os elementos desses conjuntos (C1 C3 ou
C2 C3 ). Portanto, existem inmeras linguagens para as quais no h Mquina de
Turing nem gramtica irrestrita correspondente, e portanto o conjunto das linguagens
recursivamente enumerveis constitui subconjunto prprio do conjunto de todas as lin-
guagens que podem ser definidas sobre um dado alfabeto. A correspondncia entre as
gramticas irrestritas e as Mquinas de Turing foi estabelecida nos Teoremas 7.4 e 7.5.
Assim, o conjunto das linguagens no-gramaticais possui cardinalidade maior do
que a cardinalidade do conjunto das linguagens recursivamente enumerveis. Apesar de
ambos os conjuntos serem infinitos, isto indica a existncia de uma quantidade muito
maior (no-enumervel) de linguagens no-gramaticais do que de linguagens formaliz-
veis atravs de gramticas (enumervel), conforme pode ser inferido a partir do que foi
demonstrado no Teorema 1.7. 
O Teorema 7.10 estabelece a existncia de linguagens no-gramaticais. Um exem-
plo importante de linguagem que no recursivamente enumervel, e portanto no-
gramatical, a linguagem:

LN = LU = {C (M )w | w 6 L(M )}
368 Linguagens Formais - Teoria, Modelagem e Implementao

A linguagem LD compreende o conjunto das cadeias C (M )w tais que w representa


uma cadeia que no aceita pela Mquina de Turing M , e corresponde ao complemento
da linguagem LU introduzida no Teorema 6.4 e posteriormente discutida no Teorema
7.7. A demonstrao dessa afirmao feita no Teorema 7.12.
Teorema 7.12 (LN no-gramatical) A linguagem LN no-gramatical.

Justificativa Suponha-se que LN seja uma linguagem recursivamente enumervel. Ento,


deve necessariamente existir pelo menos uma Mquina de Turing MN que aceite LN .
Portanto, L(MN ) = LN .
Como certamente existe pelo menos uma Mquina de Turing que aceita pelo menos
uma cadeia, ento LN 6= e, conseqentemente, L(MN ) 6= . Logo, fato que existe
pelo menos uma cadeia wN 6 L(MN ).
Por outro lado, a cadeia C (MN )wN deve pertencer a LN , por definio desta ltima.
Deve-se, agora, considerar as seguintes duas nicas possibilidades para a cadeia
C (MN )wN , no que se refere a MN :

1. C (MN )wN L(MN ), ou

2. C (MN )wN 6 L(MN ).

Se a condio (1) for verdadeira, ento C (MN )wN 6 LN , ou seja, C (MN )wN 6
L(MN ), o que uma contradio com (1). Se, por outro lado, a condio (2) for ver-
dadeira, ento C (MN )wN LN , ou seja, C (MN )wN L(MN ), o que tambm uma
contradio com (2).
Logo, a hiptese original no vlida e, portanto, LN no pode ser recursivamente
enumervel. 
Outra linguagem clssica, que no recursivamente enumervel, a linguagem:

LD = LK = {wi | wi 6 Mi }

Assim como a linguagem LK discutida no Teorema 6.5, ela supe uma certa orde-
nao (por exemplo, lexicogrfica) das cadeias wi sobre um certo alfabeto , e tambm
do conjunto das Mquinas de Turing sobre o mesmo alfabeto. Diferentemente de LK , no
entanto, ela compreende as cadeias wi que no so aceitas pelas Mquinas de Turing Mi
correspondentes.
Teorema 7.13 (LD no-gramatical) A linguagem LD no-gramatical.

Justificativa Suponha-se que LD seja uma linguagem recursivamente enumervel. Ento,


deve existir necessariamente pelo menos uma Mquina de Turing MD que aceite LD , ou
seja, L(MD ) = LD .
Considere-se a cadeia wD correspondente. Uma das duas seguintes situaes deve
necessariamente ser verdadeira:

1. wD L(MD ), ou

2. wD 6 L(MD ).

Se a condio (1) for verdadeira, isso significa que wD 6 LD . Mas, como LD =


L(MD ), isso implica wD 6 L(MD ), uma contradio com (1). Se a condio (2) for
7 Linguagens Recursivamente Enumerveis 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. 

7.8 Propriedades de Fechamento


A seguir sero demonstradas algumas das propriedades de fechamento mais importantes
das linguagens recursivamente enumerveis. Esta classe de linguagens fechada em
relao s operaes de:

Unio

Concatenao

Fecho de Kleene

Interseco

As correspondentes demonstraes sero apresentadas a seguir. As linguagens re-


cursivamente enumerveis, no entanto, no so fechadas em relao operao de:

Complementao

resultado este que ser demonstrado na seqncia.


Teorema 7.14 (Fecho na unio) As linguagens recursivamente enumerveis so fe-
chadas em relao operao de unio.

Justificativa Sejam L1 e L2 duas linguagens recursivamente enumerveis quaisquer. En-


to, L1 aceita por uma Mquina de Turing M1 e L2 aceita por uma Mquina de
Turing M2 . A linguagem L3 = L1 L2 aceita por M3 , construda conforme o Algoritmo
7.8.
Algoritmo 7.8 (Fecho na unio) Construo de uma Mquina de Turing que aceita
a unio de duas linguagens recursivamente enumerveis a partir das Mquinas de Turing
que as aceitam.

Entrada: duas Mquinas de Turing M1 e M2 ;

Sada: uma Mquina de Turing M3 que aceita 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 e M2 simultaneamente, utilizando ambas as fitas de entrada


e executando, alternadamente, movimentos de M1 e de M2 ;
370 Linguagens Formais - Teoria, Modelagem e Implementao

5. Se M1 aceita w , ento M3 pra e aceita w ;

6. Se M2 aceita w , ento M3 pra e aceita w .

M3 aceita w se e somente se w L1 ou w L2 . Logo, L3 uma linguagem


recursivamente enumervel. 

Teorema 7.15 (Fecho na concatenao) As linguagens recursivamente enumerveis


so fechadas em relao operao de concatenao.

Justificativa Sejam L1 e L2 duas linguagens recursivamente enumerveis quaisquer. En-


to, L1 aceita por uma Mquina de Turing M1 e L2 aceita por uma Mquina de
Turing M2 . A linguagem L3 = L1 L2 aceita por M3 , construda conforme o Algoritmo
7.9.
Algoritmo 7.9 (Fecho na concatenao) Construo de uma Mquina de Turing que
aceita a concatenao de duas linguagens recursivamente enumerveis a partir das M-
quinas de Turing que as aceitam.

Entrada: duas Mquinas de Turing M1 e M2 ;

Sada: uma Mquina de Turing M3 que aceita 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 .

M3 aceita w se e somente se L1 e L2 . Logo, L3 uma linguagem recursi-


vamente enumervel. 

Teorema 7.16 (Fecho no fecho) As linguagens recursivamente enumerveis so fe-


chadas em relao operao de fecho de Kleene.

Justificativa Seja L1 uma linguagem recursivamente enumervel qualquer. Ento, L1 ge-


rada por uma gramtica irrestrita G1 = (V1 , , P1 , S1 ). A gramtica G2 = (V2 , , P2 , S2 ),
apresentada a seguir, e construda a partir de G1 conforme o Algoritmo 7.10, gera a lin-
guagem L1 .
Algoritmo 7.10 (Fecho no fecho) Construo de uma gramtica irrestrita que gera o
fecho de Kleene de uma linguagem definida atravs de uma gramtica irrestrita.

Entrada: uma gramtica irrestrita G1 ;

Sada: uma gramtica irrestrita G2 tal que L(G2 ) = L(G1 ) ;


7 Linguagens Recursivamente Enumerveis 371

Mtodo:

1. V2 V1 {S2 }

2. P2 P1 {S2 S1 S2 , S2 }

Como G2 tambm uma gramtica irrestrita, ento L(G2 ) = L1 recursivamente


enumervel. 

Teorema 7.17 (Fecho na interseco) As linguagens recursivamente enumerveis


so fechadas em relao operao de interseco.

Justificativa Sejam L1 e L2 duas linguagens recursivamente enumerveis quaisquer. En-


to, L1 aceita por uma Mquina de Turing M1 e L2 aceita por uma Mquina de
Turing M2 . A linguagem L3 = L1 L2 aceita por M3 , construda conforme o Algoritmo
7.11.
Algoritmo 7.11 (Fecho na interseco) Construo de uma Mquina de Turing que
aceita a interseco de duas linguagens recursivamente enumerveis a partir das Mqui-
nas de Turing que as aceitam.

Entrada: duas Mquinas de Turing M1 e M2 ;

Sada: uma Mquina de Turing M3 que aceita 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 .

M3 aceita w se e somente se w L1 L2 . Logo, L3 uma linguagem recursivamente


enumervel. 

Teorema 7.18 (Fecho na complementao) As linguagens recursivamente enume-


rveis no so fechadas em relao operao de complementao.

Justificativa suficiente mostrar que existe pelo menos uma linguagem recursivamente
enumervel cujo complemento no recursivamente enumervel.
A linguagem LU = {C (M )w | w L(M )}, conforme demonstrado nos Teore-
mas 6.4 e 7.7, um exemplo de linguagem recursivamente enumervel, no-recursiva. Seu
372 Linguagens Formais - Teoria, Modelagem e Implementao

complemento, no entanto (a linguagem LN = {C (M )w | w 6 L(M )}), conforme


demonstrado no Teorema 7.11, uma linguagem no-gramatical.
Logo, a classe das linguagens recursivamente enumerveis no fechada em relao
operao de complementao. 
Apesar de a classe das linguagens recursivamente enumerveis no ser fechada em
relao operao de complementao, um outro resultado interessante e bastante til
na demonstrao de certos teoremas, envolvendo tanto a classe das linguagens recursivas
quanto a prpria classe das linguagens recursivamente enumerveis, ser demonstrado a
seguir.
Teorema 7.19 (Recursivamente enumerveis e seu complemento) Se uma lin-
guagem e tambm seu complemento forem recursivamente enumerveis, ento ambas as
linguagens, alm de serem recursivamente enumerveis, so tambm recursivas.

Justificativa Sejam L1 e L2 = L1 duas linguagens recursivamente enumerveis


sobre o alfabeto . Ento, existem Mquinas de Turing M1 e M2 que aceitam, respec-
tivamente, L1 e L2 . Constri-se uma Mquina de Turing M3 que decide L1 , conforme o
Algoritmo 7.12.
Algoritmo 7.12 (Recursivamente enumerveis e seu complemento) Construo
de uma Mquina de Turing que decide L1 a partir das Mquinas de Turing que aceitam
L1 e seu complemento.

Entrada: duas Mquinas de Turing M1 e M2 , tais que L(M2 ) = L(M1 );

Sada: uma Mquina de Turing M3 que decide L(M1 );

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. 
7 Linguagens Recursivamente Enumerveis 373

7.9 Questes Decidveis e No-Decidveis


Nenhum dos principais problemas de deciso mais comuns decidvel para a classe das
linguagens recursivamente enumerveis:

w L?

L=?

L = ?

L1 = L2 ?

L1 L2 ?

L1 L2 = ?

A demonstrao feita provando-se que, em todos os casos, as linguagens que


representam os respectivos problemas no so recursivas. As demonstraes no sero
apresentadas neste texto, mas podem ser encontradas em [46].
8 Concluses
O estudo das classes de linguagens discutidas neste livro, apresentadas em ordem cres-
cente de complexidade, e configuradas como conjuntos sucessivamente mais abrangentes,
permite que se obtenha uma viso estruturada do assunto, com especial nfase nos as-
pectos 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.

8.1 Uma Hierarquia de Classes de Linguagens


Este texto apresentou os principais resultados da teoria de linguagens formais e autma-
tos, seguindo estritamente uma seqncia que se iniciou com a classe de linguagens mais
restrita conhecida (a das linguagens regulares), e se encerrou com a classe de linguagens
mais ampla conhecida (a das linguagens recursivamente enumerveis), passando grada-
tivamente de uma classe mais restrita para a mais geral seguinte, dentro de uma escala
de complexidade crescente, baseada na Hierarquia de Chomsky, e procurando sempre
ampliar o horizonte do leitor, sem antecipar modelos, conceitos ou teorias relativos s
classes de linguagens mais avanadas.
A Figura 8.1 resume alguns dos principais resultados colhidos ao longo deste estudo,1
para cada classe de linguagens considerada, e que sero brevemente revistos na seqncia.

1 N.A. indica No se aplica e ? indica que o resultado no conhecido at a presente data.


376 Linguagens Formais - Teoria, Modelagem e Implementao

Figura 8.1: Classes de linguagens e suas caractersticas princi-


pais

A partir da Hierarquia de Chomsky original (definida em [61] e [62]), foram iden-


tificadas, caracterizadas e situadas importantes classes adicionais de linguagens: a das
linguagens livres de contexto determinsticas, a das linguagens livres de contexto no-
ambguas, a das linguagens recursivas e a das linguagens no-gramaticais.
Excluindo, naturalmente, a classe das linguagens no-gramaticais, todas as demais
classes podem ser caracterizadas em termos gramaticais exceto a classe das linguagens
recursivas, cuja definio baseada unicamente no conceito de uma Mquina de Turing
que sempre pra, e no em gramticas.
Do ponto de vista do reconhecimento, trs modelos distintos, com seis variantes
importantes, foram apresentados: os autmatos finitos, os autmatos de pilha (nas ver-
ses determinstica e no-determinstica) e as Mquinas de Turing (nas verses com fita
limitada, sem limitao de fita e que sempre param, e sem limitao de fita, que podem
ou no parar). Cada um desses seis tipos de dispositivo est associado ao reconhecimento
de uma classe de linguagens prpria.
Quando a questo da equivalncia entre as verses determinstica e no-determinstica
de um mesmo modelo de reconhecedor considerada, sabe-se com certeza que apenas
os autmatos de pilha possuem verses que aceitam classes diferentes de linguagens.
Exceto a Mquina de Turing com fita limitada, para a qual ainda no se conseguiu
8 Concluses 377

demonstrar at hoje se existe ou no equivalncia entre as verses determinstica e no-


determinstica ([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 es-
pecificao. Dessa forma, pelo menos trs classes de linguagens podem ser facilmente
identificadas: a das linguagens regulares, a das linguagens livres de contexto determi-
nsticas 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 lingua-


gens, com exemplos

As Figuras 8.3 e 8.4 apresentam um resumo das principais propriedades de fecha-


mento 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 Linguagens Formais - Teoria, Modelagem e Implementao

terminada propriedade ou, ainda, que a questo no decidvel para aquela classe de
linguagens.

Figura 8.3: Resumo das principais propriedades de fechamento

Figura 8.4: Resumo das principais propriedades de deciso

8.2 Decidibilidade e Complexidade


O estudo das linguagens formais e autmatos fundamental para o entendimento e o
domnio de vrias outras reas da computao, mas duas se destacam perante as demais:

Construo de processadores para linguagens de programao;

Estudo da complexidade de algoritmos.

As linguagens livres de contexto so a base para a especificao de linguagens de


programao de alto nvel, e tambm para o projeto e a implementao de seus res-
pectivos analisadores sintticos. Estes, por sua vez, so a base para a estruturao de
compiladores e interpretadores para as inmeras linguagens usadas no dia-a-dia do pro-
fissional e do leigo em computao, que as empregam extensivamente, de forma direta
ou indireta, consciente ou inconsciente. Pode-se dizer, portanto, que essa rea constitui
uma importante aplicao prtica da teoria de linguagens formais e autmatos.
Por outro lado, no campo terico, provavelmente a maior aplicao da teoria de
linguagens e autmatos recai sobre o estudo da complexidade de algoritmos. Conforme
discutido nos Captulos 6 e 7, a constatao da decibilidade de linguagens confere a
certeza da existncia de algoritmos que possam ser usados para resolver a classe de
problemas representada por tais linguagens. A constatao da indecidibilidade de uma
linguagem, por sua vez, garante a inexistncia de uma soluo geral para o problema,
quando se consideram todas as suas possveis instncias.
8 Concluses 379

A questo, no entanto, no se resume mera existncia ou inexistncia de algoritmos


para se resolver determinados problemas.
Alm da decidibilidade (tambm referida como computabilidade), deseja-se es-
tabelecer os parmetros que indiquem o grau de dificuldade na busca de solues para
um certo problema. Assim, no basta um problema ser decidvel. importante tambm
que o mesmo possa ser solucionado (ou decidido) atravs de algoritmos que apresen-
tem parmetros considerados aceitveis de desempenho. Problemas decidveis, porm
cujas solues extrapolam os limites do que se considera aceitvel, definitivamente no
apresentam interesse prtico.
Assim, o estudo da complexidade de algoritmos se inicia onde o estudo da deci-
dibilidade de problemas se encerra. Uma vez analisada a decidibilidade de um certo
problema, h que se considerar os custos envolvidos na busca dessa soluo. Em funo
dessa anlise, possvel que se justifiquem os esforos de busca da mesma, ou, ento, o
seu abandono.
Os custos envolvidos no estudo da complexidade de algoritmos normalmente se
referem aos custos de execuo dos mesmos, na busca das solues pretendidas. Desses,
sobressaem-se dois parmetros objetivos, facilmente mensurveis e com relao direta
nas realizaes mecanizadas efetuadas atravs de dispositivos computacionais. Trata-se
do tempo total de execuo e do volume total de memria necessrios para se chegar
soluo do problema atravs da execuo do algoritmo em questo.
comum que se estabeleam limites mximos para esses parmetros, que, vincula-
dos ao tamanho do problema que se deseja resolver normalmente representado pelo
volume de dados a ser processado, ou, mais freqentemente, pelo tamanho da cadeia de
entrada a ser processada , configuram a fronteira daquilo que se entende como critrios
de aceitao de desempenho na execuo de algoritmos.
Dessa forma, considera-se o estudo da complexidade no tempo e o estudo da
complexidade no espao para, respectivamente, designar a forma como o tempo total
de execuo de um algoritmo e o volume total de memria exigido por esse algoritmo
variam conforme o tamanho da entrada.
Reunidos sob a designao conjunta e genrica de complexidade, esses estudos so
complementares e normalmente antecedem quaisquer decises referentes alocao de
recursos para solucionar problemas considerados inicialmente apenas como decidveis. O
estudo da complexidade , portanto, uma extenso natural do estudo da computabilidade.
Para o leitor interessado em aprofundar seus conhecimentos nessa rea, recomenda-se o
estudo de [46], [51] ou ainda [48].
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 Latino-
americana de Informtica, Quito Ecuador, Centro Latinoamericano de Estudios en Informtica,
Pontificia Universidad Catlica del Ecuador, tomo 1, 1998

[4] Solving complex problems efficiently with adaptative automata, J. J. Neto, CIAA 2000
Fifth International Conference on Implementation and Application of Automata, London, Ontario,
Canada, 2000

[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 aut-


matos 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, Infor-


mation Processing Letters, v.56, n.4, 1995

[11] Contribuio metodologia de construo de compiladores, J. J. Neto, Tese de livre-


docncia, 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 Linguagens Formais - Teoria, Modelagem e Implementao

[15] Um estudo do processo de inferncia de gramticas regulares e livres de contexto


baseado em modelos adaptativos, I. P. Matsuno, Dissertao de mestrado, Escola Politcnica
da USP, 2006

[16] Um formalismo adaptativo com mecanismos de sincronizao para aplicaes con-


correntes, J. M. N. Santos, Dissertao de mestrado, Escola Politcnica da USP, So Paulo,
1997

[17] Mapeamento de ambientes desconhecidos por robs mveis utilizando autmatos


adaptativos, M. A. A. Sousa, Dissertao de mestrado, Escola Politcnica da USP, So Paulo,
2006

[18] Um mtodo para a construo de analisadores morfolgicos, aplicado lngua portu-


guesa, baseado em autmatos adaptativos, C. E. Menezes, Dissertao de mestrado, Escola
Politcnica da USP, So Paulo, 2000

[19] Recursive adaptable grammar, J. N. Shutt, M. S. thesis, Computer Science Department,


Worcester Polytecnic Institute, Worcester, Massachusetts, 1993

Autmatos de pilha estruturados

[20] Design of a separable transition diagram compiler, M. E. Conway, Communications of the


ACM, 6, 7, 1963

[21] A programmers view of automata, B. H. Barnes, ACM Computing Surveys, 4, 2, 1972

[22] A formalization of transition diagram systems, D. B. Lomet, Journal of the ACM, 20, 2,
1973

[23] Reconhecedores sintticos uma alternativa didtica para uso em cursos de enge-
nharia, J. J. Neto e M. E. S. Magalhes, Anais do XIV CNPD, So Paulo, 1981

Compiladores

[24] Introduo compilao, J. J. Neto, Editora LTC, 1987

[25] Compiler construction: an advanced course, Editado por F. L. Bauer e J. Eickel, Springer-
Verlag, 1976 - Segunda edio

[26] The theory and practice of compiler writing, J. P. Tremblay and P. G. Sorenson, McGraw-
Hill, 1985

[27] Crafting a compiler, C. N. Fischer and R. J. LeBlanc, Jr., Benjamin/Cummings, 1988

[28] Compilers: Principles, techniques and tools, A. V. Aho, R. Sethi and J. D. Ullman,
Addison-Wesley, 1986; Segunda edio: A. V. Aho, M. S. Lam, R. Sethi and J. D. Ullman,
2007

[29] Programming language processors in Java: Compilers and interpreters, D. A. Watt and
D. F. Brown, Prentice-Hall, 2000

Formalizao de linguagens de programao

[30] Semantics of programming languages, C. A. Gunter, Massachusetts Institute of Technology,


1992
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 Informa-
tica, v.5, n.1-3, 1975

[35] What can we do about the unnecessary diversity of notation for syntactic definitions?,
N. Wirth, CACM, Vol. 20, issue 11, November 1977, pp. 822-823

[36] Extended BNF, International Standards Organization, ISO/IEC 14977, Primeira edio, 1996

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, Springer-
Verlag, Berlin, 2004

[39] Regulated rewriting in formal language theory, J. Dassow, Gh. Paun, Akademie-Verlag,
Berlin e Springer-Verlag, Berlin, 1989

[40] Grammars with controlled derivations, J. Dassow, Gh. Paun, A. Salomaa. Em Handbook
of formal languages I III, G. Rozenberg, A. Salomaa, Volume II, Chapter 3, Springer-Verlag,
1997

[41] Gramticas livres de contexto adaptativas com verificao de aparncia, C. A. B. Pa-


riente, 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 Linguagens Formais - Teoria, Modelagem e Implementao

[48] Languages and machines, T. A. Sudkamp, Addison Wesley, 1988; Terceira edio: 2006

[49] The theory of parsing, translation and compiling, volume 1, A. V. Aho and J. D. Ullman,
Prentice-Hall, 1972

[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. Grei-
bach, Journal of the ACM, 12:1

[64] Nondeterministic space is closed under complementation, N. Immerman, Journal of Com-


puting 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

Você também pode gostar