Você está na página 1de 172

Teoria da Computacao

Lus Monteiro
Departamento de Informatica
Universidade Nova de Lisboa
2829-516 Monte da Caparica, Portugal
lm@fct.unl.pt
Notas de curso
6 de Setembro de 2007
Captulo 1
Linguagens
Este captulo apresenta as primeiras denicoes em que assenta a teoria das
linguagens formais e automatos. Depois de introduzidas as nocoes funda-
mentais de alfabeto, palavra e linguagem, discute-se brevemente o problema
da caracterizacao nita de linguagens, que de uma forma ou de outra e o
tema central da teoria.
1.1 Palavras sobre um alfabeto
Denicao 1.1 [Alfabeto] Um alfabeto e um conjunto de elementos chamados
smbolos ou letras.
Os conjuntos A = a, b, . . . , z, D = 0, 1, . . . , 9 e E = A D
+, , , , (, ) sao exemplos de alfabetos, o primeiro constitudo pelas le-
tras latinas min usculas, o segundo pelos algarismos decimais, e o terceiro
pelos smbolos dos dois anteriores juntamente com operadores aritmeticos
e parenteses. Em muitos exemplos ao longo do texto e comodo considerar
alfabetos com apenas dois ou tres smbolos, como 0, 1 ou a, b, c.
Em geral, a natureza dos smbolos de um alfabeto e arbitraria, exigindo-
se apenas que possam ser considerados indivisveis no contexto em que estao
a ser utilizados. Em particular, os smbolos de um alfabeto nao devem poder
ser compostos a partir de outros smbolos do mesmo alfabeto. Por exemplo,
as palavras chave como begin, while e if sao smbolos na linguagem Pascal,
apesar de serem constitudas pelas letras b, e, g, etc.

E por essa razao, alias,
que as palavras chave sao normalmente escritas em tipo negro, visto que a,
b, . . ., z nao sao smbolos do Pascal, ao contrario das letras a, b, . . ., z.
Denicao 1.2 [Palavra] Uma palavra sobre um alfabeto T e uma sucessao
nita
a
1
a
2
a
3
a
n1
a
n
(n 0)
1
de smbolos a
1
, a
2
, a
3
, . . . , a
n1
, a
n
T, nao necessariamente distintos, que
geralmente se escrevem consecutivamente, sem elementos separadores.
Por exemplo, i1 e anos sao palavras sobre o alfabeto A, 1917 e 0000 sao
palavras sobre D, e )))0000 e j2 (1917 + anos) sao palavras sobre E. O
programa
program ola(output);
begin
writeln(ola)
end.
e uma palavra sobre o alfabeto do Pascal, ignorando os espacos e mudancas
de linha; os seus primeiros seis smbolos sao program, o, l, a, (, o.
Denicao 1.3 [Palavra vazia] A palavra vazia e a sucessao vazia de sm-
bolos. Representa-se por .
Note-se que nao e um smbolo do alfabeto T, e apenas uma notacao
para representar a palavra vazia sobre T. Por convencao, ao escrever uma
palavra x = a
1
a
2
a
n
assume-se que se n = 0 entao x = . Outras notacoes
correntes para a palavra vazia sao , , e ou 1.
Denicao 1.4 [Comprimento] O comprimento da palavra x = a
1
a
2
a
n
e
[x[ = n,
o n umero de (ocorrencias de) smbolos em x. Em particular, [[ = 0.
Denicao 1.5 [Igualdade] Sejam x = a
1
a
2
a
n
e y = b
1
b
2
b
k
. Poe-se
x = y n = k e a
1
= b
1
, a
2
= b
2
, . . . , a
n
= b
n
.
O conjunto de todas as palavras sobre um alfabeto T representa-se por
T

.

E ainda usual representar por T
+
= T

o conjunto de todas as
palavras nao vazias sobre T.
Propriedades 1.6 Se T e U forem alfabetos, tem-se as seguintes proprie-
dades:
i) T T

.
Visto que cada smbolo e uma palavra (de comprimento 1).
ii)

= .
Dado que a unica palavra possvel sobre o alfabeto vazio e a que nao
contem ocorrencias de smbolos.
2
iii) T U T

.
Resulta de que qualquer palavra constituda por smbolos de T e tambem
constituda por smbolos de U.
iv) T ,= T

e innito.
Se T ,= existe a T; entao as palavras a, aa, aaa, . . ., em n umero
innito, pertencem a T

.
Uma forma de visualizar o conjunto T

consiste em representa-lo sob


a forma de uma arvore. Por exemplo, suponhamos que T = a, b, c e consi-
deremos a seguinte arvore.

r
r
r
r
r
r
r
r
s
s s s
a b c

s s s
a b c
.
.
.
.
.
.
.
.
.

s s s
a b c
.
.
.
.
.
.
.
.
.

s s s
a b c
.
.
.
.
.
.
.
.
.

E uma arvore ternaria completa innita, em que o arco esquerdo que parte
de cada no esta rotulado com a, o arco central com b, e o direito com c.
As palavras de T

correspondem aos percursos nitos iniciados na raiz. A


palavra vazia corresponde ao percurso (vazio) que se inicia e termina na
raiz, e em geral uma palavra de comprimento n consiste em percorrer n
arcos consecutivos a partir da raiz. Em traco duplo encontra-se assinalado
o percurso da palavra ba. Se o alfabeto T tivesse n smbolos, teramos uma
arvore n-aria em vez de ternaria.
Denicao 1.7 [Concatenacao] O produto ou concatenacao de duas palavras
x = a
1
a
n
e y = b
1
b
k
e a palavra
x.y = a
1
a
n
b
1
b
k
.
Frequentemente omite-se o ponto e escreve-se xy em vez de x.y.
Na gura seguinte representa-se esquematicamente esta operacao.
x
y
xy
As seguintes propriedades sao de facil vericacao.
3
Propriedades 1.8 Sejam x, y, z T

.
i) x(yz) = (xy)z (associatividade).
Se x = a
1
a
n
, y = b
1
b
k
e z = c
1
c
m
, qualquer dos produtos
x(yz) e (xy)z e igual a a
1
a
n
b
1
b
k
c
1
c
m
.
ii) x = x = x (elemento neutro).
Quer x quer x acrescentam zero smbolos a x.
iii) xy ,= yx, em geral (nao comutatividade).
Por exemplo, se x = ab e y = ba vem xy = abba e yx = baab, donde
xy ,= yx se a ,= b, por denicao de igualdade.
iv) [xy[ = [x[ +[y[ (aditividade do comprimento).
Imediato.
v) Toda a palavra de T

se escreve de uma unica forma como concatenacao


de smbolos de T (decomposicao unica).
Por denicao de igualdade de palavras.
Um conjunto onde esteja denida uma operacao binaria associativa para
a qual existe elemento neutro chama-se um monoide, por conseguinte T

e
um monoide, em geral nao comutativo (T

so e comutativo se T tiver zero


ou um smbolos). Por vezes T

e designado de monoide livre gerado por T,


em virtude de satisfazer a propriedade de decomposicao unica.
Denicao 1.9 [Potenciacao] Dado x T

poe-se x
n
= xx x (n vezes),
com a convencao de que x
0
= . Mais formalmente, as potencias de uma
palavra x denem-se indutivamente por:
x
0
= ;
x
n+1
= x
n
x para todo o n 0.
Por exemplo, se a, b T entao a
2
= aa e (ab)
3
= ababab. Tem-se
n
=
para todo o n 0.
1.2 Relacoes de ordem entre palavras
Denicao 1.10 [Subpalavra] Uma palavra x e uma subpalavra de y, escre-
vendo-se x y, se existirem v e w tais que y = vxw.
v x w
y
4
Se v = entao y = xw e x e um factor esquerdo ou prexo de y, e poe-se
x
P
y. Se w = , y = vx e x e um factor direito ou suxo de y, o que se
representa por x
S
y. As relacoes ,
P
e
S
chamam-se respectivamente
ordem de inclusao, ordem prexa e ordem suxa.
Por exemplo, rei areia, rei
P
reino e rei
S
irei. As notacoes e
designacoes escolhidas para estas relacoes justicam-se por elas satisfazerem
as propriedades que caracterizam as ordens parciais.
Propriedades 1.11 Para todos os x, y, z T

, tem-se:
i) x x (reexividade).
Resulta de que x = x.
ii) x y z x z (transitividade).
Se y = vxw e z = v

yw

entao z = (v

v)x(ww

).
iii) x y x x = y (anti-simetria).
Se y = vxw e x = v

yw

entao x = (v

v)x(ww

); como [x[ = [v

[ +
[v[ + [x[ + [w[ + [w

[, tem de ser [v

[ = [v[ = [w[ = [w

[ = 0, isto e,
v

= v = w = w

= , por conseguinte x = y.
iv) As relacoes
P
e
S
satisfazem propriedades analogas.
Estas relacoes tem uma interpretacao simples em termos da representacao
de T

em arvore. Por exemplo, x


P
y signica que o percurso desde a
raiz que corresponde a x e uma parte inicial do percurso de y. Nenhuma
destas ordens e total, visto que, por exemplo, ab , ba e ba , ab. Se se
partir de um alfabeto em que os smbolos estao totalmente ordenados, de
uma maneira arbitraria mas xa, podem-se ordenar totalmente as palavras
usando a chamada ordem do dicionario ou ordem lexicograca.
Denicao 1.12 [Ordem lexicograca] Seja T = a
1
, a
2
, . . . , a
n
um alfabeto
ordenado por uma ordem total de precedencia tal que a
1
a
2
a
n
.
A ordem lexicograca <
L
em T

dene-se pondo x <


L
y se x <
P
y, ou se x =
vaw e y = vbz com a b. Diz-se nesse caso que x precede lexicogracamente
y.
Tambem esta ordenacao das palavras se pode interpretar com base na
arvore associada a T

. Assim, x <
L
y signica que ou x e uma parte inicial
do percurso de y, ou as palavras tem um percurso inicial comum e depois x
bifurca para a esquerda e y para a direita.
Como e habitual, escreve-se x
L
y quando x <
L
y ou x = y. Por
exemplo, rei <
L
reino <
L
repto porque rei <
P
reino e i p na ordem usual
das letras min usculas. As propriedades seguintes mostram que <
L
e de facto
uma ordem total.
5
Propriedades 1.13 Para todos os x, y, z T

:
i) Se x ,= y tem-se x <
L
y ou y <
L
x mas nao ambas (dicotomia).
Se uma palavra for um prexo proprio da outra, precede-a lexicogra-
camente. Se nao, ha um primeiro smbolo no qual elas diferem, e a
que contiver o smbolo que precede o da outra, precede-a lexicograca-
mente.
ii) x ,<
L
x (irreexividade).
Nenhuma palavra e um prexo proprio de si mesma, nem difere de si
nalgum smbolo.
iii) x <
L
y <
L
z x <
L
z (transitividade).
Se x for um prexo proprio de z entao x precede lexicogracamente
z. Se nao, ha um primeiro smbolo no qual x e z diferem, digamos
x = tau e z = tcw. Como x <
L
y, x e y nao podem diferir em nenhum
smbolo de t, de contrario o smbolo em questao em x precederia o
correspondente em y, e viria tambem z <
L
y, o que nao e possvel pela
primeira propriedade. Assim, y tem de ter a forma y = tbv, e a _ b _ c.
Como a ,= c tem-se a c, por conseguinte x precede lexicogracamente
z.
Para alguns efeitos, a ordem lexicograca e inconveniente, visto que entre
duas palavras distintas pode haver uma innidade de outras palavras. Por
exemplo, se a b, entre a e b ocorrem todas as palavras a
n
com n > 1, isto e,
a <
L
aa <
L
aaa <
L
<
L
b. A alternativa mais comum e usar uma ordem
mista, em que se ordenam primeiro as palavras pelo seu comprimento, e em
seguida lexicogracamente as que tem o mesmo comprimento.
Denicao 1.14 [Ordem mista] Seja T = a
1
, a
2
, . . . , a
n
um alfabeto orde-
nado com a
1
a
2
a
n
. A ordem mista <
M
em T

dene-se por
x <
M
y se [x[ < [y[, ou se [x[ = [y[ e x <
L
y.
Na arvore de T

, esta ordem corresponde a ordenar as palavras por nveis,


e dentro de cada nvel da esquerda para a direita.
Claro que se x <
P
y entao x <
M
y, visto que nesse caso [x[ < [y[. Por
exemplo, tem-se rei <
M
reino e reino <
M
repto, porque [reino[ = [repto[ e
reino <
L
repto. No entanto, reino <
M
reineta, apesar de reineta <
L
reino.
Verica-se facilmente que <
M
e uma ordem total.
Propriedades 1.15 Para todos os x, y, z T

:
i) Se x ,= y tem-se x <
M
y ou y <
M
x mas nao ambas (dicotomia).
Se as palavras tiverem o mesmo comprimento, a que preceder a outra
na ordem lexicograca precede-a na ordem mista. Se nao, a de menor
comprimento precede a outra.
6
ii) x ,<
M
x (irreexividade).
Nenhuma palavra tem comprimento diferente de si mesma, nem se pre-
cede lexicogracamente.
iii) x <
M
y <
M
z x <
M
z (transitividade).
Tem-se, evidentemente, [x[ [y[ [z[. Se os comprimentos forem
iguais, entao x <
L
y <
L
z, donde x <
L
z, por conseguinte x <
M
z.
Se os comprimentos nao forem todos iguais, uma das desigualdades
anteriores e estrita, donde [x[ < [z[, e uma vez mais x <
M
z.
iv) Cada palavra e precedida na ordem mista por apenas um n umero nito
de palavras.
Para cada k 0, o n umero de palavras de comprimento k e nito
e igual a n
k
. Como toda a palavra so pode ser precedida na ordem
mista por palavras de comprimento inferior ou igual, as palavras que
precedem uma palavra de comprimento k sao em n umero inferior a
n
0
+n
1
+ +n
k
.
A ordem mista permite enumerar exaustivamente as palavras de T

,
comecando pela palavra vazia, seguindo-se as palavras de comprimento 1
ordenadas lexicogracamente, depois as de comprimento 2, tambem ordena-
das lexicogracamente, e assim sucessivamente. Para o alfabeto a, b com
a b, por exemplo, a enumeracao e , a, b, aa, ab, ba, bb, aaa, . . .. Dada uma
tal enumeracao x
0
, x
1
, . . . , x
k
, . . ., pode-se denir uma funcao sucessor para
palavras sobre T pondo (x
i
) = x
i+1
para todo o i 0. O interesse desta
func ao e que ela pode tambem ser denida directamente, sem ter de se re-
correr `a ordem mista.
Denicao 1.16 [Sucessor] Seja T = a
1
, a
2
, . . . , a
n
um alfabeto ordenado
com a
1
a
2
a
n
. A funcao sucessor : T

e denida
recursivamente pelas igualdades:
() = a
1
;
(xa
i
) = xa
i+1
se i < n;
(xa
n
) = (x)a
1
.
Por exemplo, para o alfabeto a, b anterior, () = a, (a) = b, (b) =
(b) = ()a = aa, (aa) = ab, etc. Como se mostra a seguir, a enumeracao
das palavras de T

pela ordem mista pode ser obtida, tal como neste exemplo,
por aplicacao sucessiva de a partir de .
Propriedades 1.17 Seja x
0
, x
1
, . . . , x
k
, . . . a enumeracao de T

pela ordem
mista.
7
i) Para todo o x T

, x <
M
(x).
Se x for a palavra vazia, ou se tiver a forma wa
i
com i < n, e imediato,
visto que a
i
a
i+1
. Se x tiver a forma wa
n
, ha dois casos a considerar.
Se w tiver comprimento inferior a (w), tambem wa
n
tem comprimento
inferior a (w)a
1
, e portanto wa
n
<
M
(w)a
1
. Se tiverem o mesmo
comprimento, assumindo indutivamente que w <
M
(w) tem de ser
w <
L
(w), donde wa
n
<
L
(w)a
1
, e uma vez mais wa
n
<
M
(w)a
1
.
ii) Para todo o x T

, x = (v) para algum v T

.
Se x terminar num smbolo diferente de a
1
, digamos x = wa
i
com
i > 1, entao x = (wa
i1
). Se x = a
1
entao x = (). Se x = wa
1
com
w ,= , e assumindo indutivamente que w = (v) para algum v, vem
x = (va
n
).
iii) Para todo o i 0, (x
i
) = x
i+1
.
Dado i 0, ja sabemos pela propriedade anterior que existe j tal
que x
i+1
= (x
j
). Temos apenas de vericar que j = i. Como, pela
primeira propriedade, x
j
<
M
(x
j
), tem-se j < i + 1. Se i = 0 so pode
ser j = 0. Se i > 0, assumimos indutivamente o resultado valido para
todo o k < i, vindo (x
k
) = x
k+1
<
M
x
i+1
. Isto mostra que nao se
pode ter j < i, logo j = i.
Pondo
k
(x) = (( (x) )) para representar k aplicacoes consecu-
tivas de a x, com a convencao de que
0
(x) = x, e facil ver que x
k
=
k
()
para todo o k 0. Noutros termos, a k-esima palavra na enumeracao pela
ordem mista obtem-se aplicando k vezes a . Quando tivermos necessidade
de enumerar as palavras sobre um dado alfabeto, fa-lo-emos sempre usando
a ordem mista ou a funcao sucessor, supondo dada uma ordem total entre os
smbolos do alfabeto.
1.3 Linguagens
Denicao 1.18 [Linguagem] Uma linguagem L sobre um alfabeto T e um
conjunto de palavras sobre T, isto e, e um subconjunto de T

(L T

). Uma
linguagem diz-se nita se for um conjunto nito, de contrario, diz-se innita.
De acordo com esta denicao, uma linguagem de programacao e o con-
junto dos programas que podem ser escritos na linguagem. Tal denicao em
extensao talvez nao corresponda `a ideia intuitiva que temos de linguagem.
No entanto, tem a vantagem de caracterizar a nocao de linguagem de uma
forma simples, independentemente dos metodos que possam ser usados para
denir linguagens.
8
Note-se que e sao linguagens (distintas) sobre qualquer alfabeto,
e que a (com a T), T, T
+
e T

sao linguagens sobre T. Como outros


exemplos de linguagens, sobre o alfabeto a, b, temos:
L
1
= a
n
: n e par,
L
2
= x T

: [x[ 4,
L
3
= a
n
b
n
: n 0,
L
4
= a
n
b
m
: n 0, m 0.
As linguagens , , a, T e L
2
sao nitas, ao passo que T
+
e T

sao
innitas se T ,= , bem como L
1
, L
3
e L
4
.
Qualquer linguagem L sobre T pode ser representada por uma arvore.
Partindo da arvore de T

, classicam-se primeiramente os seus nos em prin-


cipais (representados por um crculo duplo) e secundarios, consoante as
palavras que terminam nesses nos pertencem ou nao `a linguagem L. Em se-
guida, os nos secundarios abaixo dos quais so existem nos secundarios podem
ser eliminados, porque as palavras que por eles passam nao pertencem a L.
Obtem-se assim a arvore de L.
Por exemplo, as arvores das linguagens L
1
, L
3
e L
4
sao as seguintes:
L
1
.
.
.
s
s
s
s
s
e
e
e
a
a
a
a
L
3
.
.
.
.
.
.

d
d
d
d
d
d
d
d
s
s
s
s
se
s
s
se
se
a
a
a
a
b
b
b
b
L
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d s
s
s
s
s
e
e
e
e
e
s
s
s
s
e
e
e
e
s
s
s
e
e
e
s
s
e
e
se
a
a
a
a
b
b
b
b
b
b
b
b
b
b
O problema central da teoria das linguagens formais e o da caracterizacao
nita de linguagens. A caracterizacao das linguagens nitas nao poe, em
princpio, problemas, visto que basta enumerar as palavras que as compoem.
O mesmo nao se pode dizer das linguagens innitas. Em certos casos sim-
ples, como nos exemplos acima, podem denir-se as linguagens por meio de
propriedades que as suas palavras, e so elas, satisfazem. Mas em geral isso
nao se pode fazer. Com efeito, pode mesmo mostrar-se que nem todas as
linguagens admitem uma caracterizacao nita. Mas o que quer isto dizer?
Ao pretender denir linguagens sobre um alfabeto T ,= , qualquer que
seja o metodo que venha a ser usado, ele pode sempre ser expresso numa
linguagem de denicao D sobre um alfabeto nito auxiliar A, possivelmente
contendo T (por exemplo, D pode ser uma linguagem de programacao; nos
9
captulos seguintes veremos varios exemplos de tais linguagens). Cada pa-
lavra d D permite denir uma linguagem L
d
sobre T, e o caracter nito
da denicao resulta de que d contem apenas um n umero nito de smbolos.
Esta intuicao leva-nos a fazer a seguinte denicao.
Denicao 1.19 [Caracterizacao nita] Seja T um alfabeto. Por caracte-
rizacao nita de linguagens sobre T entendemos uma linguagem de denicao
D sobre um alfabeto auxiliar nito A, e uma correspondencia d L
d
de
cada denicao d D `a linguagem denida L
d
T

.
Estamos agora em condicoes de vericar que toda a caracterizacao nita
e incompleta, no sentido em que se podem encontrar linguagens que nao sao
por ela denidas.
Proposicao 1.20 Seja D uma caracterizacao nita de linguagens sobre T.
Existe uma linguagem L sobre T tal que L ,= L
d
para todo o d D.
Dem. Supondo que os smbolos de A foram ordenados de certa forma
arbitraria mas xa, as palavras de D podem ser enumeradas pela ordem
mista:
d
0
d
1
d
2
d
k
.
Para tanto basta enumerar as palavras de A

e remover as que nao pertencem


a D. Mas entao e possvel enumerar as linguagens denidas por D:
L
d
0
L
d
1
L
d
2
L
d
k
.
Para ver que esta enumeracao nao esgota as linguagens em T(T

), raciocina-
mos do seguinte modo. Tal como zemos para D, as palavras de T

podem
ser enumeradas a partir de uma ordenacao dos smbolos de T. Suponhamos
que essa enumeracao e x
0
, x
1
, . . . , x
k
, . . ., e denamos a linguagem
L = x
k
T

: x
k
, L
d
k
.

E facil ver que L nao esta includa na lista acima. Com efeito, nao se pode
ter L = L
d
k
para nenhum k porque x
k
L se e so se x
k
, L
d
k
.
Fica assim justicada a armacao anterior sobre a impossibilidade de ca-
racterizar por meios nitos (que estamos aqui a identicar com caracterizar
por palavras de uma certa linguagem) todas as linguagens sobre um dado
alfabeto nao vazio. Ha resultados na Teoria da Computacao bem mais res-
tritivos e profundos do que aquele que acabamos de demonstrar, mas nao
cabem no ambito desta disciplina.
10
Nos captulos seguintes consideraremos fundamentalmente dois metodos
para caracterizar linguagens arbitrarias, os automatos e as gramaticas. No
proximo captulo comecaremos por estudar as chamadas linguagens regu-
lares, que tem uma caracterizacao muito simples em termos de certo tipo
de operacoes sobre linguagens, ditas regulares. A linguagem D de denicao
e nesse caso tambem muito simples, sendo constituda pelas chamadas ex-
pressoes regulares, como se vera.
11
Captulo 2
Linguagens regulares
Alem das operacoes de uniao, interseccao e complementacao, herdadas da te-
oria dos conjuntos, existem outras operacoes sobre linguagens que se prendem
directamente com a operacao de concatenacao de palavras. Estas operacoes
sao o produto de duas linguagens e o fecho de uma linguagem, que, jun-
tamente com a uniao, constituem as chamadas operacoes regulares. A im-
port ancia das operacoes regulares advem-lhes do facto de elas serem utili-
zadas na denicao das linguagens regulares, que serao introduzidas neste
captulo.
2.1 Operacoes regulares
Denicao 2.1 [Produto] O produto ou concatenacao de duas linguagens L
e M e a linguagem
L.M = xy : x L, y M
constituda por todas as palavras que se obtem concatenando uma palavra
de L e outra de M. Tambem se escreve LM em vez de L.M.
Vejamos alguns exemplos.
a, bccd, = acd, a, bccd, bc.
a
n
b
m
: n 0, m 0 = a
n
: n 0b
m
: m 0.
a
n
b
n
: n 0 ,= a
n
: n 0b
n
: n 0, visto que, por exemplo,
a
3
a
n
: n 0 e b
2
b
n
: n 0 mas a
3
b
2
, a
n
b
n
: n 0.
No ultimo exemplo, o facto de se usar a mesma letra n em a
n
: n 0 e
b
n
: n 0 nao tem qualquer signicado, visto que nao ha nenhuma relacao
entre as ocorrencias de n no primeiro e no segundo conjuntos. Assim, o
produto a
n
: n 0b
n
: n 0 tambem se pode escrever a
n
: n 0b
m
:
m 0, que e a linguagem usada no segundo exemplo.
12
Propriedades 2.2 Sejam L, M e N linguagens.
i) L = L = L (elemento neutro).
Porque L = xy : x , y L = y : y L = L.
ii) L(MN) = (LM)N (associatividade).
Tem-se L(MN) = xw : x L, w MN = xyz : x L, y M, z
N, e desenvolvendo (LM)N obtinha-se o mesmo conjunto. (Note-se
que se fez implicitamente uso da associatividade da concatenacao de
palavras.)
iii) L = L = (elemento absorvente).
Porque?
Observacao 2.3 Qualquer linguagem nita pode obter-se como uma uniao
de produtos das linguagens , e a com a T. Por exemplo, ab, =
ab .

E facil estender este raciocnio ao caso geral. 2
Podemos agora denir as potencias de L a partir do produto.
Denicao 2.4 [Potenciacao] As potencias de uma linguagem L denem-se
indutivamente por
L
0
= ;
L
n+1
= L
n
L para todo o n 0.
Cada palavra de L
n
e assim um produto de n palavras arbitrarias de L, nao
necessariamente iguais ou distintas, podendo-se escrever
L
n
= x
1
x
2
x
n
: x
1
, x
2
, . . . , x
n
L.
Convenciona-se que o produto de zero palavras e , porque L
0
= , e que
o produto de uma palavra x e x, porque L
1
= L
0
L = L.
Consideremos, por exemplo, o alfabeto T = a, b. Tem-se:
T
0
= ;
T
1
= T = a, b;
T
2
= TT = a, ba, b = a
2
, ab, ba, b
2
;
T
3
= T
2
T = a
3
, a
2
b, aba, ab
2
, ba
2
, bab, b
2
a, b
3
; etc.
Em geral, para qualquer alfabeto T, nao e difcil vericar que T
n
e o conjunto
de todas as palavras de comprimento n sobre T.
Denicao 2.5 [Fecho] O fecho de L e a linguagem
L

n0
L
n
e o fecho positivo e L
+
= LL

.
13
Cada palavra de L

e entao a concatenacao de zero ou mais palavras de


L, e cada palavra de L
+
e a concatenacao de uma ou mais palavras de L.
Por exemplo:
a
n
: n 0 =

n0
a
n
=

n0
a
n
= a

.
a
n
b
m
: n 0, m 0 = a
n
: n 0b
m
: m 0 = a

.
Como T
n
e o conjunto das palavras de comprimento n sobre T, o con-
junto de todas as palavras sobre T e

n0
T
n
. Assim, a notacao T

anteriormente introduzida corresponde de facto ao fecho de T, encarado


como linguagem.
As operacoes de uniao, produto e fecho sao chamadas operacoes regula-
res, e estao na base da denicao das linguagens regulares.
2.2 Linguagens e expressoes regulares
Denicao 2.6 [Linguagens regulares] Seja T um alfabeto. As linguagens
regulares sobre T sao o menor conjunto de linguagens sobre T tal que:
, e a, para a T, sao linguagens regulares.
Se L e M forem linguagens regulares entao L M, L.M e L

sao
linguagens regulares.
Observacao 2.7 Pela Observacao ??, toda a linguagem nita e regular.
Mas existem, evidentemente, linguagens regulares innitas, a mais simples
das quais e a

= , a, a
2
, . . .. 2
Para simplicar a escrita de linguagens regulares, utiliza-se um certo tipo
de expressoes ditas regulares.
Denicao 2.8 [Expressoes regulares] As expressoes regulares sobre um al-
fabeto T escrevem-se com os smbolos de T e com os smbolos , , +,
., , ( e ), e denem-se indutivamente do seguinte modo:
, e a, para todo o a T, sao expressoes regulares.
Se E e F forem expressoes regulares entao (E + F), (E.F) e E

sao
expressoes regulares, chamadas respectivamente a soma e o produto de
E e F, e o fecho de E.
Por exemplo, (((a.b)+c)

+(a+c)) e uma expressao regular, de acordo com


a denicao anterior. Na pratica, a escrita de expressoes regulares simplica-
se bastante omitindo o ponto . e alguns parenteses. Omitindo o ponto
e os parenteses exteriores, a expressao anterior ca ((ab) + c)

+ (a + c).
14
Convencionando que o produto tem prioridade superior `a soma, a expressao
simplica-se para (ab +c)

+(a+c). Finalmente, escrevemos (ab +c)

+a+c
admitindo que a soma (e o produto) sao associativos, o que vericaremos
adiante.
Denicao 2.9 [Linguagem representada] A linguagem representada por uma
expressao regular E denota-se L(E) e dene-se indutivamente como segue:
L() = .
L() = .
L(a) = a para todo o a T.
Para expressoes regulares E e F:
L(E +F) = L(E) L(F).
L(EF) = L(E)L(F).
L(E

) = L(E)

.
Por exemplo,
L((ab)

c) = L((ab)

)L(c)
= L(ab)

c
= (L(a)L(b))

c
= (ab)

c
= ab

c.
Ve-se que nao existe uma diferenca substancial entre a escrita de uma
linguagem regular e de uma expressao regular que a represente. Basicamente,
para obter a linguagem que uma expressao regular representa, inserem-se
chavetas e apropriadamente, e troca-se + por . Apesar disso,
como se vera, as expressoes regulares sao mais simples de manipular, o que
justica a sua introducao.
As seguintes propriedades sao imediatas.
Propriedades 2.10
i) Toda a expressao regular representa uma linguagem regular.
ii) Toda a linguagem regular e representada por alguma expressao regular.
Exemplo 2.11 Consideremos alguns exemplos de linguagens e expressoes
regulares.
1) Inteiros binarios sem sinal e sem zeros `a esquerda
15
Linguagem: 0, 1, 10, 11, 100, 101, 110, 111, 1000, . . .
= 0 1, 0, 1, 00, 01, 10, 11, 000, . . .
= 0 10, 1

,
Expressao: 0 + 1(0 + 1)

.
2) Execucoes da instrucao while B do S
Representemos pelo smbolo b a avaliacao da condicao Booleana B com
resultado true, por b a avaliacao de B com resultado false, e por s
a execucao de S. Uma execucao da instrucao while B do S da assim
origem a uma palavra sobre o alfabeto b, b, s. O conjunto de todas
as execucoes possveis dene uma linguagem sobre o mesmo alfabeto.
Linguagem: b, bsb, bsbsb, . . .
= , bs, (bs)
2
, . . .b
= bs

b,
Expressao: (bs)

b.
3) Execucoes da instrucao repeat S until B
Este caso e analogo ao anterior:
Linguagem: sb, sbsb, sbsbsb, . . .
= s, bs, (bs)
2
, . . .b
= sbs

b,
Expressao: s(bs)

b.
4) Identicadores
Um identicador formado apenas por letras e dgitos e iniciado por uma
letra e caracterizado pela expressao regular:
(a +b + )(a +b + + 0 + 1 + )

.
2.3 Diagramas sintacticos
As linguagens regulares podem tambem ser representadas por diagramas co-
nhecidos como diagramas sintacticos (ou diagramas de Wirth). A ttulo de
exemplo, consideremos a linguagem das execucoes de repeat S until B, que
16
como vimos pode ser representada pela expressao regulars(bs)

b. A mesma
linguagem pode ser caracterizada pelo diagrama seguinte, tomando todos os
percursos possveis da entrada ate `a sada e concatenando os smbolos que
forem sendo encontrados:
E E E
' ' '
'
&
$
%
s
s
b
b
Qualquer expressao regular pode ser representada por um tal diagrama.
Na gura seguinte indicam-se as regras para associar um diagrama sintactico
a toda a expressao regular.

E E

E

a
E
a
E
a
E +F
$%
&
'
E
E
E
F
%
$
'&E
L(E) L(F)
EF
E
E
E
F
E
L(E)L(F)
17
E
E
E
'
&'
$
% '
L(E)

Como exemplo, o diagrama


c
c
c
c
'
'
E
E
T
c
' $
& %
& $
' %
desliga
marca
fala
atende
atende
toca
18
que representa uma conversa telefonica, esta associado `a expressao regular
marca (atende toca)

(atende fala +) desliga,


2.4 Propriedades de expressoes regulares
Duas expressoes regulares consideram-se iguais se representarem a mesma
linguagem:
P = Q L(P) = L(Q).
Por essa razao, confunde-se `as vezes P com L(P). Por exemplo, escreve-se
x P ou P Q em vez de x L(P) ou L(P) L(Q).
Com base nesta nocao de igualdade, as expressoes regulares satisfazem
um certo n umero de propriedades, herdadas das correspondentes proprieda-
des das linguagens que representam. As propriedades serao agrupadas pelas
operacoes a que respeitam. O primeiro grupo de propriedades diz respeito
`a soma de expressoes regulares, que resultam directamente das propriedades
da uniao de conjuntos.
Propriedades 2.12 (Soma) Sejam P, Q e R expressoes regulares.
i) P + (Q+R) = (P +Q) +R (associatividade).
ii) P + = +P = P (existencia de elemento neutro).
iii) P +Q = Q+P (comutatividade).
iv) P +P = P (idempotencia).
Seguem-se as propriedades do produto e da iteracao.
Propriedades 2.13 (Produto) Sejam P, Q e R expressoes regulares.
i) P(QR) = (PQ)R (associatividade).
ii) P = P = P (existencia de elemento neutro).
iii) P = P = (existencia de elemento absorvente).
Propriedades 2.14 (Distributividade) Sejam P, Q e R expressoes regu-
lares.
i) P(Q+R) = PQ+PR (distributividade `a esquerda).
As palavras de P(Q + R) tem a forma xy, onde x P e y Q ou
y R, logo sao as palavras de PQ + PR. Assim, tem-se a igualdade
anterior. Para a igualdade seguinte raciocina-se de forma analoga.
ii) (Q+R)P = QP +RP (distributividade `a direita).
19
Propriedades 2.15 (Iteracao) Sejam P e Q expressoes regulares.
i) P

+ = P

(porque P

).
ii) P

+P = P

(porque P P

).
iii) (P +)

= P

.
Se num produto de n palavras de P +, k forem iguais a , tem-se um
produto de n k palavras de P, logo pertencente a P

. Assim, (P +
)

. Mas um produto de n palavras de P e tambem um produto


de n palavras de P + , logo (P + )

. Das duas desigualdades


deduz-se a igualdade pretendida.
iv) (P

= P

(porque?).
v) +PP

= P

(porque?).
vi) P(QP)

= (PQ)

P.
Uma palavra de P(QP)

tem a forma x
0
(y
1
x
1
)(y
2
x
2
) (y
n
x
n
) onde os
x
i
(0 i n) pertencem a P e os y
j
(1 j n) pertencem a Q.
Os parenteses foram colocados de modo a dar a perceber claramente
que se tem um produto de uma palavra de P por outra de (QP)

, a
qual e por sua vez um produto de n palavras de QP, sendo cada uma
destas o produto de uma palavra de Q por outra de P. Colocando os
parenteses de outra forma, (x
0
y
1
)(x
1
y
2
)(x
2
y
n
)x
n
, ve-se que a mesma
palavra pertence a (PQ)

P. Se tivessemos partido de uma palavra


de (PQ)

P, o mesmo raciocnio mostraria que a palavra pertenceria


tambem a P(QP)

. Conclui-se que as duas expressoes regulares sao


iguais.
2.5 Equacoes lineares direitas
Uma equacao linear direita sobre um alfabeto T tem a forma
X = AX +B,
onde X e a incognita e A e B sao expressoes regulares sobre T. A equacao
diz-se linear por analogia com a funcao numerica f(x) = ax + b, cuja
representacao graca e uma linha recta. Por vezes, sobretudo em exemplos,
trocamos os termos e escrevemos X = B+AX, o que nao importa visto que
AX +B = B +AX.
Como veremos, esta equacao tem sempre como solucao a expressao regular
X = A

B. Mesmo quando existem outras solucoes, esta e a solucao padrao.


Exemplo 2.16 Vejamos alguns exemplos.
20
i) Consideremos as execucoes da instrucao while B do S. Uma execucao
consiste na avaliacao da condicao booleana com valor falso, ou na
avaliacao da condicao com valor verdadeiro, seguido da execucao do
corpo da instrucao, seguido da repeticao da execucao da instrucao
while. Esta denicao recursiva de execucao traduz-se imediatamente
na equacao W = b + bsW, cuja solucao W = (bs)

b e a expressao
regular encontrada anteriormente.
ii) O caso da instrucao repeat S until B e semelhante, obtendo-se a
equacao R = sb + sbR e a solucao R = (sb)

sb. Pela ultima das


propriedades da iteracao apresentadas acima, esta expressao e igual a
s(bs)

b, que e a expressao obtida anteriormente para este caso.


iii) Agora consideremos a linguagem sobre o alfabeto a, b formada por
todas as palavras em que o a aparece aos pares, isto e, toda a ocorrencia
de ordem mpar de a na palavra e imediatamente seguida de outra
ocorrencia de a (esta de ordem par, pelo que nao obriga a uma nova
ocorrencia de a). Seja A essa linguagem. Uma palavra em A e ou a
palavra vazia (que satisfaz trivialmente a condicao dada), ou comeca
por a ou por b. Caso comece por a, como essa ocorrencia e de ordem
mpar (e a primeira), e seguida por outra ocorrencia de a e no resto da
palavra o a continua a aparecer aos pares, pelo que o resto da palavra
a seguir aos dois as iniciais e tambem uma palavra de A. Se o primeiro
smbolo da palavra for b, entao o resto da palavra tambem pertence
a A, por um raciocnio analogo ao do caso anterior. Tem-se assim a
equacao A = +aaA +bA, ou seja A = + (aa +b)A, cuja solucao e
A = (aa +b)

= (aa +b)

.
O seguinte resultado estuda as solucoes da equacao X = AX +B.
Proposicao 2.17 Seja T um alfabeto nao vazio e X = AX+B uma equacao
linear direita com A e B expressoes regulares sobre T.
i) A

B e solucao da equacao.
ii) Se A, a equacao tem innitas solucoes.
iii) A

B e a menor solucao com respeito `a inclusao, isto e, esta contida


em qualquer outra solucao.
iv) Se , A, a solucao e unica.
Dem. i) Substituindo na equacao X por A

B vem AX+B = A(A

B)+B =
AA

B +B = (AA

+)B = A

B = X, pela quinta propriedade da iteracao.


ii) Para provar que a equacao tem innitas solucoes basta vericar que
X = A

B+A

L e solucao para todo o L T

(visto que T

e innito por T
21
ser n ao vazio, logo tem innitos subconjuntos). Tem-se AX +B = A(A

B+
A

L)+B = AA

B+AA

L+B = (AA

+)B+AA

L = A

B+A

L = X. Na
pen ultima igualdade usou-se uma vez mais a quinta propriedade da iteracao
bem como o facto que AA

= A

. Com efeito, dado que A, tem-se


AA

, por conseguinte AA

= AA

+ = A

.
iii) Temos de vericar que qualquer outra solucao L contem A

B. Mais
precisamente, se L = AL + B, entao A

B L. Ora se x A

B, entao x
e o produto de uma palavra de A

por uma palavra de B. Uma palavra de


A

e um produto de um certo n umero n 0 de palavras de A, pelo que x


e o produto de n 0 palavras de A e uma palavra de B. Em particular,
x A
n
B. Sendo L solucao, pode-se escrever L = AL+B = A(AL+B)+B =
A
2
L+AB+B = = A
n+1
L+A
n
B+ +AB+B. Isto mostra que A
n
B L,
donde x L. Assim, todo o elemento x de A

B tambem pertence a L, logo


A

B L.
iv) Neste caso e preciso vericar que qualquer outra solucao L e igual a
A

B, isto e, se L = AL + B, entao L = A

B. Viu-se no caso anterior que


A

B L. Falta ver que L A

B. Seja x L e [x[ = n o seu comprimento.


Vimos que L = A
n+1
L +A
n
B + +AB +B. Dado que x L, x pertence
a um dos conjuntos da direita. Como , A, as palavras de A
n+1
L tem
comprimento n + 1 > [x[. Assim, x , A
n+1
L, logo x A
k
B para algum
k n. Como A
k
B A

B, tem-se x A

B. Assim, de x L conclui-se
x A

B, o que mostra que L A

B.
2.6 Sistemas de equacoes lineares direitas
Um sistema de equacoes lineares direitas sobre um alfabeto T tem a forma

X
1
= A
11
X
1
+ +A
1n
X
n
+B
1
.
.
.
X
n
= A
n1
X
1
+ +A
nn
X
n
+B
n
onde os X
i
sao incognitas, e os A
ij
e B
j
sao expressoes regulares sobre T
(1 i, j n).
Exemplo 2.18
1) N umeros inteiros sem sinal e sem zeros `a esquerda na base 2:

N = 0 + 1B
B = + (0 + 1)B.
Um tal n umero e o 0 ou comeca por 1 e e seguido por uma sequencia
arbitraria de 0s e 1s, a que corresponde a incognita B.
22
Note-se que o sistema nao esta exactamente no formato indicado na
denicao, visto que cada incognita deveria aparecer no membro direito
de cada equacao com um coeciente apropriado. Neste caso, basta
adicionar o termo N a ambas as equacoes. Como o termo e vazio,
nada se altera nas equacoes, excepto a forma, que passa a estar de
acordo com a denicao.
2) Palavras com um n umero par de ocorrencias de a:

P = bP +aI +
I = aP +bI.
(Formalmente, a ultima equacao devia escrever-se I = aP + bI + .)
Esta linguagem, P, dene-se com recurso `a linguagem I de todas as
palavras com um n umero mpar de ocorrencias de a. O que a primeira
equacao indica e que uma palavra com um n umero par de ocorrencias
de a pode estar em tres casos: ou comeca por b e a seguir vem uma
palavra com um n umero par de as, ou comeca por a e a seguir tera de
vir um n umero mpar de as, ou e a palavra vazia (que tem zero as,
um n umero par). A equacao para I tem uma leitura identica.
Denicao 2.19 [Resolucao de um sistema linear direito] Um sistema linear
direito resolve-se por eliminacao e substituicao de incognitas, nos seguintes
passos:
1) Elimina-se uma incognita numa (no membro direito de uma) equacao.
A eliminacao e feita usando a solucao de uma equacao linear direita,
tratando as outras incognitas como constantes.
2) Substitui-se a incognita pela expressao obtida nas restantes equa coes
do sistema.
3) Procede-se de igual modo para as restantes incognitas do sistema, uma
a uma, por uma ordem arbitraria.
Note-se a semelhanca deste metodo com o usado em sistemas de equacoes
numericas.
Exemplo 2.20
23
Sistema dado

P = aI +bP +
I = aP +bI
Eliminar I


I = b

aP
Substituir na equacao de P

P = a(b

aP) +bP +
= (ab

a +b)P +

Eliminar P

P = (ab

a +b)


Substituir na equacao de I

P = (ab

a +b)

I = b

a(ab

a +b)

Formalmente, uma solucao de um sistema e um tuplo (S


1
, . . . , S
n
) de
expressoes regulares tal que a substituicao de cada incognita pela sua solucao
transforma as equacoes em igualdades entre expressoes regulares. Havendo
mais do que uma solucao, elas podem-se ordenar dizendo que (S
1
, . . . , S
n
)
(S

1
, . . . , S

n
) se S
i
S

i
para todo o i, 1 i n. Tal como no caso de uma so
equacao, qualquer sistema tem uma solucao mnima, que pode ser calculada
pelo metodo de eliminacao e substituicao.
Proposicao 2.21 A resolucao de um sistema de equacoes linear direito por
eliminacao e substituicao calcula a solucao mnima do sistema.
Dem. A resolucao consiste em ir sucessivamente transformando o sistema
inicial mediante a aplicacao de duas operacoes: eliminacao de uma incognita
e sua substituicao nas outras equacoes. Cada uma destas operacoes pro-
duz um sistema cujas solucoes sao tambem solucoes do sistema antes de a
operacao ter sido aplicada, como e facil ver. Assim, o sistema nal, que ja
nao tem incognitas no membro direito de nenhuma equacao, caracteriza uma
solucao que e tambem solucao do sistema inicial. Que a solucao obtida e
mnima resulta de que em cada eliminacao se utiliza a solucao mnima para
a incognita eliminada. A vericacao detalhada desta ultima observacao e
omitida.
Observacao 2.22 A ordem pela qual se eliminam as incognitas tem im-
plicacoes na simplicidade das solucoes que se obtem. No exemplo anterior
optou-se por eliminar I em primeiro lugar porque a equacao de I nao tinha
termo constante e por isso foi possvel ter uma solucao para I com um unico
24
termo, o que acabou por simplicar tambem a solucao de P. Se se tivesse
comecado por eliminar P na equacao P = aI +bP + obtinha-se a solucao
P = b

(aI +) = b

aI +b

, que tem dois termos e torna a solucao nal me-


nos simples. Eis a resolucao do sistema com a elimincao de P em primeiro
lugar:

P = aI +bP +
I = aP +bI

P = b

(aI +)
= b

aI +b


I = a(b

aI +b

) +bI
= ab

aI +ab

+bI
= (ab

a +b)I +ab


I = (ab

a +b)

ab

P = b

a(ab

a +b)

ab

+b

I = (ab

a +b)

ab

A solucao de I e de complexidade comparavel `a do caso anterior mas a de


P e mais complexa e tambem menos intuitiva. Note-se que estamos aqui a
falar da complexidade da escrita das expressoes regulares, ja que em ambas
as resolucoes elas denotam as mesmas linguagens e portanto, por denicao,
sao iguais. 2
2.7 Outros tipos de equacoes
Equacao linear esquerda
Em vez da equacao linear direita X = AX + B podamos ter estudado
a equacao linear esquerda X = XA + B. A solucao padrao neste caso e
X = BA

. Sabendo isto, os sistemas de equacoes resolviam-se como no caso


anterior.
Como veremos, este tipo de equacao surgira mais tarde a proposito da
eliminacao da recursividade `a esquerda em gramaticas LL(1).
Equacoes lineares, nem direitas nem esquerdas
A equacao X = aXb + e linear (tem no maximo uma ocorrencia de X
em cada termo), sem ser direita nem esquerda. A solucao desta equacao e
a linguagem a
n
b
n
: n 0, que como veremos no proximo captulo nao e
regular.
25
Sistemas com equacoes lineares direitas e esquerdas
O sistema

X = aY +
Y = Xb
tem uma equacao linear direita e outra linear esquerda. Substituindo Y por
Xb na primeira equacao obtem-se a equacao para X apresentada no paragrafo
anterior. Reconhece-se entao que a solucao dos sistem e

X = a
n
b
n
: n 0,
Y = a
n
b
n+1
: n 0.
Tambem neste caso nao se obtem como solucoes linguagens regulares: e
preciso que todas as equacoes sejam do mesmo tipo lineares direitas ou
lineares esquerdas para se poder garantir que as solucoes sao regulares.
Que dizer entao das equacoes nao lineares?
Equacoes nao lineares
A equacao X = XX +aXb + e nao linear porque um dos termos tem duas
ocorrencias de X. A solucao encarando o smbolo a como o parentesis
a abrir ( e o smbolo b como o parentesis a fechar ) e a chamada
linguagem das expressoes de parenteses bem formadas. As expressoes de
prenteses bem formadas sao as que se obtem por exemplo a partir das ex-
pressoes aritmeticas apagando todos os smbolos excepto os parenteses. Um
exemplo e (()())(). Esta linguagem tambem nao e regular.
Consideremos no entanto o sistema

I = SN (Inteiros com ou sem sinal)


S = ++ (Sinal ou sua ausencia)
N = A +AN (Inteiros sem sinal)
A = 0 + + 9 (Algarismos)
em que a primeira e a terceira equacoes nao sao lineares. A solucao para I e
a linguagem dos n umeros inteiros sem sinal, onde se representaram os sinais
por e para nao criar confusoes com a soma de expressoes regulares.
Entre as incognitas existe uma dependencia que se traduz no seguinte
26
diagrama (nao se considera a auto-dependencia de N):
I
S
??

N
__c
c
c
c
c
c
c
c
A
OO
Resolvendo o sistema seguindo a ordem das dependencias, chega-se `a
solucao:

A = 0 + + 9
S = ++
N = (0 + + 9) + (0 + + 9)N = (0 + + 9)

(0 + + 9)
I = (++)(0 + + 9)

(0 + + 9).
A conclusao que se tira deste exemplo e que ha sistemas nao lineares
que tem solucoes regulares.

E facil ver porque. Quando se vai resolver uma
equacao de uma incognita, ja se resolveram as equacoes de todas as incognitas
de que ela depende (com a excepcao da propria). Tambem ja se substituram
essas incognitas pelas suas solucoes. Assim, a equacao em questao cou linear
`a direita e pode ser resolvida pelo metodo habitual.
Como se caracterizam tais sistemas? Vamos chamar-lhes quase lineares
direitos porque e possvel transforma-los em sistemas lineares direitos que
tem a mesma solucao para a incognita principal (a da primeira equacao do
sistema).
2.8 Sistemas quase lineares direitos
No sistema

I = SN
S = ++
N = A +AN
A = 0 + + 9
as n ao linearidades estao concentradas nos termos SN e AN. Para eliminar
estas nao linearidades vamos substitu-las por novas incognitas, que terao
elas proprias de ser denidas por meio de equacoes. Para melhor se compre-
ender o processo, em vez de escolher letras como X e Y para representar as
novas incognitas vamos escolher representacoes mais sugestivas, como SN)
27
e AN). Vamos mesmo, por uma questao de melhor legibilidade, represen-
tar estas incognitas aqui por SN e AN . Noutros exemplos adoptaremos o
mesmo procedimento.
Como se caracteriza a equacao que dene SN ? A resposta e simples:
toma-se a equacao de S, multiplicam-se ambos os membros por N `a direita
e substitui-se SN por SN . Obtem-se a equacao
SN = (++)N.
Em geral e preciso eliminar ainda as nao linearidades que se introduzem no
membro direito, o que neste caso nao acontece. Procedia-se de forma analoga
para AN e chegava-se ao sistema linear direito

I = SN
SN = (++)N
N = A + AN
A = 0 + 1 + 2
AN = (0 + 1 + 2)N
Havendo uma incognita principal, como e I neste caso, podem omitir-se as
equacoes que deixam de ser necessarias, como acontece com a equacao de S.
Denicao 2.23 [Sistemas quase lineares direitos] Seja dado um alfabeto T
e um sistema de equacoes da forma
X = +A
0
X
1
A
1
. . . X
n
A
n
+ ,
cujo membro direito e uma soma de termos como o que esta representado,
em que cada A
j
e uma expressao regular sobre T e cada X
i
uma incognita.
Sejam X e Y incognitas distintas do sistema.
X depende de Y se Y ocorrer no membro direito da equacao para X.
X domina Y se X depender de Y e se nao existir uma cadeia de de-
pendencias de Y ate X.
O sistema diz-se quase linear direito se para toda a incognita X, tra-
tando as incognitas por ela dominadas como constantes, a equacao para
X e linear direita.
Na denicao de sistema quase linear direito, a razao pela qual e possvel
tratar as incognitas dominadas como constantes e que se Y for dominada
28
por X, pode-se resolver a equacao de Y independentemente de X e depois
substituir Y pela sua solucao (a tal constante) na equacao de X.
Vejamos o exemplo apresentado anteriormente. Como A e dominada por
N, encarando-a como constante na equacao N = A + AN, esta ca linear
direita. O mesmo se diz da equacao I = SN, que alias ca com o membro
direito constante. As duas restantes equacoes nao tem termos nao lineares e
por isso nao levantam problemas.
Denicao 2.24 [Linearizacao]

E dado um sistema de equacoes quase li-
near direito. A linearizacao do sistema consiste na realizacao das seguintes
operacoes:
1. Escolhe-se uma incognita X cuja equacao
X = +A
0
X
1
A
1
. . . X
n
A
n
+
nao seja linear direita.
2. Substitui-se a equacao de X pelas seguintes equacoes:
(a) A equacao
X = +A
0
X
1
A
1
. . . X
n
A
n
) +
onde X
1
A
1
. . . X
n
A
n
) e uma nova incognita criada para cada
termo nao linear na equacao de X.
(b) Uma equacao para cada nova incognita X
1
A
1
. . . X
n
A
n
), que se
obtem multiplicando ambos os membros da equacao de X
1
`a di-
reita por A
1
. . . X
n
A
n
e substituindo-se todas as ocorrencias de
X
1
A
1
. . . X
n
A
n
por X
1
A
1
. . . X
n
A
n
).
3. Repetem-se os passos anteriores enquanto existirem termos nao lineares
direitos.
Nos exemplos, X
1
A
1
. . . X
n
A
n
) escreve-se X
1
A
1
. . . X
n
A
n
, para maior
legibilidade.
Observacao 2.25 Na deni cao de linearizacao nao se estipula nenhuma
ordem para a escolha da equacao a linearizar em cada passo. Por uma
questao de metodo, nos exemplos sera sempre seleccionada uma equacao cuja
incognita so seja dominada por incognitas que tem equacoes lineares direitas
(ou j a linearizadas). 2
29
Exemplo 2.26 O seguinte sistema de equacoes dene n umeros reais sem
sinal:

R = N +NP (Reais sem sinal)


N = I +I.I (N umeros sem parte expoente)
I = d +dI (Inteiros sem sinal)
P = eE (Parte expoente)
E = (+)I (Expoente)
Por simplicidade usou-se apenas a letra d em vez da expressao 0+1+ +9
para representar os dgitos e omitiu-se o sinal + do expoente. A base da
exponenciacao esta representada por e. Por exemplo, a palavra d.dde 2
representa o n umero d, dd 10
2
.
A ordem de dependencias entre as incognitas esta indicada no diagrama
seguinte:
R
N
>>
~
~
~
~
~
~
~
P
__d
d
d
d
d
d
d
E
OO
I
WWH
H
H
H
H
H
H
H
H
H
H
H
H
H
H
??
~
~
~
~
~
~
~
~
Tratando N e P como constantes na primeira equacao e I como constante
na segunda, ve-se que o sistema e quase linear direito.
Para linearizar o sistema observamos que R e N sao as incognitas com
equacoes nao lineares. Como R nao e dominado por N, a sua equacao e a
primeira a ser linearizada, sendo substituda pelas equacoes

R = N + NP
NP = IP +I.IP
No novo sistema, as incognitas com equacoes nao lineares sao N e NP . Como
nenhuma delas e dominada pela outra, qualquer uma pode ser seleccionada.
Escolhendo N, a sua equacao e substituda por

N = I + I.I
I.I = d.I +d I.I
Ambas as equacoes sao lineares direitas, pelo que nos resta linearizar a
30
equacao de NP . Obtem-se

NP = IP + I.IP
IP = dP +d IP
I.IP = d. IP +d I.IP
Todas as equacoes sao lineares direitas, pelo que o processo de linearizacao
para aqui. Reunindo todas as equacoes, o sistema linearizado e o seguinte:

R = N + NP
N = I + I.I
I.I = d.I +d I.I
NP = IP + I.IP
IP = dP +d IP
I.IP = d. IP +d I.IP
I = d +dI
P = eE
E = (+)I
Bem entendido, uma vez terminado oprocesso poderiam renomear-se `a
vontade as incognitas. Por exemplo, fazendo as renomeacoes indicadas na
tabela abaixo,
NP I.I IP I.IP
W X Y Z
31
o sistema caria

R = N +W
N = I +X
X = d.I +dX
W = Y +Z
Y = dP +dY
Z = d.Y +dZ
I = d +dI
P = eE
E = (+)I
Ha duas questoes que o processo de linearizacao levanta. A primeira, e
a de saber se as incognitas de um sistema conservam as mesmas solucoes
quando se lineariza uma equacao nao linear. A segunda, e a de saber se o
processo tem m. Ambas as questoes tem resposta armativa.
Proposicao 2.27 O processo de linearizacao de um sistema quase linear
direito termina e o sistema nal preserva as solucoes do sistema original.
Dem. Comecemos por supor que o processo termina. Para concluir que o
sistema nal preserva as solucoes do sistema original, basta vericar que isso
se passa na passagem de cada sistema ao proximo. Essa passagem consiste
em trocar uma equacao
X = +A
0
X
1
A
1
. . . X
n
A
n
+
pelas equacoes

X = +A
0
X
1
A
1
. . . X
n
A
n
) +
X
1
A
1
. . . X
n
A
n
) =
.
.
.
Por construcao, a equacao de X
1
A
1
. . . X
n
A
n
) parte da multiplicacao `a di-
reita de ambos os membros da equacao de X
1
por A
1
. . . X
n
A
n
. Isto permite
concluir que o valor que se calcula substituindo as solucoes de X
1
, . . . , X
n
no anterior sistema em X
1
A
1
. . . X
n
A
n
e uma solucao de X
1
A
1
. . . X
n
A
n
) no
32
novo sistema. Por conseguinte, a solucao de X no anterior sistema e tambem
solucao no novo sistema.
Vejamos agora a questao da terminacao. Suponhamos que o sistema tem
k inc ognitas Z
1
, . . . , Z
k
, ordenadas de forma a que nenhuma incognita domine
outra incognita que tenha sido listada antes dela. (No exemplo anterior dos
n umeros reais, duas ordenacoes possveis sao R, N, P, E, I e R, P, E, N, I.)
Vamos associar a cada sistema obtido durante o processo de linearizacao
um k-tuplo de n umeros naturais, denido do seguinte modo. Chamemos
equacao de base X `a equacao de X e `a equacao de qualquer incognita
X ) em que X ocorra `a cabeca. Dado um sistema intermedio do processo
de linearizacao, associamos-lhe o k-tuplo de n umeros naturais cujo j-esimo
elemento (1 j k) e o n umero de equacoes nao lineares de base Z
j
. A
observacao crucial e que quando se lineariza uma equacao de base Z
j
, esta
passa a ser linear, logo o j-esimo elemento do tuplo associado ao sistema
diminui de uma unidade. Por outro lado, a introducao de equacoes para as
novas incognitas so pode aumentar elementos do tuplo de posicao superior
a j, visto que Z
j
domina as incognitas distintas de si propria que occorrem
na parte direita da sua equacao. Assim, se ordenarmos os tuplos pela ordem
lexicograca, o tuplo do novo sistema e estritamente inferior ao tuplo do
sistema de partida. O ponto seguinte do raciocnio e reconhecer que nao pode
existir uma sequencia innita t
1
, t
2
, t
3
, . . . de k-tuplos de n umeros naturais
em que cada tuplo a seguir ao primeiro e estritamente inferior ao anterior.
Com efeito, se tal sequencia innita existisse, na passagem de um tuplo para
o seguinte uma das posicoes diminuiria em pelo menos uma unidade. Em
innitas passagens, pelo menos uma posicao diminuiria um n umero innito
de vezes. Mas isso e impossvel (porque?). Conclui-se que nao pode haver
uma sequencia innita de sistemas, logo o processo de linearizacao termina.
33
Captulo 3
Automatos nitos
Os automatos nitos sao o primeiro modelo computacional de denicao de
linguagens que iremos encontrar (e tambem o mais simples, como seria de
esperar). As linguagens sao denidas pelo chamado mecanismo de reco-
nhecimento, que pode ser encarado como um teste aplicado a cada palavra
individualmente. A linguagem reconhecida pelo automato nito e constituda
por todas as palavras que passem o teste. O teste e aplicado de forma incre-
mental, percorrendo os smbolos da palavra um a um a partir do seu incio, e
a decisao nal so surge apos o percurso completo da palavra.

E este caracter
incremental do teste que confere aos automatos nitos a sua qualidade com-
putacional. Neste captulo apresentamos os resultados mais basicos sobre
automatos nitos, incluindo o de que as linguagens por eles reconhecidas sao
precisamente as linguagens regulares.
3.1 Linguagens racionais e automatos nitos
Uma das formas possveis de introduzir os automatos nitos e atraves das
chamadas linguagens racionais, topico que sera aqui apresentado de maneira
algo informal.
Recordemos a denicao de arvore de uma linguagem L sobre um alfa-
beto T, apresentada no primeiro captulo:
Partimos da arvore de T

, que e uma arvore em que cada no tem um


lho para cada smbolo de T, sendo o arco que liga o no ao seu lho
etiquetado pelo smbolo em questao.
Na arvore de T

distinguem-se dois tipos de no: os nos principais,


representados gracamente por e que sao os nos onde terminam pala-
vras da linguagem L; e os nos secundarios, representados por , onde
34
terminam palavras que nao pertencem a L.
Eliminam-se as sub-arvores que contem apenas nos secundarios. A
arvore resultante e a arvore de L.
Denicao 3.1 (Linguagem racional) Uma linguagem diz-se racional se
a sua arvore contiver um n umero nito de sub-arvores distintas.
Exemplo 3.2 Consideremos o alfabeto T = {a, b} e a linguagem represen-
tada pela expressao regular a

. A arvore de T

com a indicacao dos nos


principais e secundarios com respeito a a

e a seguinte:
.

a
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
b

.
.
.
.

.
.
.

.
.
.
.

.
.
.

.
.
.

.
.
.

.
.
.
.

.
.
.
Eliminando as sub-arvores que so tem nos secundarios, obtem-se a arvore
.

1

..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

. .
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
(Todos os nos desta arvore sao principais, mas nao e forcoso que assim seja,
como os exemplos seguintes mostram.) Esta arvore tem apenas duas sub-
arvores distintas. Os nos sobre o caminho descendente `a esquerda dao origem
`a mesma sub-arvore (designada na gura por sub-arvore 1) e o mesmo sucede
com os restantes nos (sub-arvore 2).
Este facto permite obter uma representacao compacta e nita da arvore
da linguagem. Temos apenas dois nos, 1 e 2, que representam as duas sub-
arvores distintas. A partir da gura anterior ve-se que se vai sempre da
35
sub-arvore 1 para si propria por um arco etiquetado por a, de 1 para 2 por
um arco etiquetado por b, e de 2 para 2 por um arco etiquetado por b. Esta
informacao esta includa na gura seguinte, onde se adicionou uma seta do
exterior para o no 1 para indicar que ele corresponde `a raiz da arvore.
\
1
a

b
\
2
b

Este diagrama corresponde a um automato nito, como se vera (a sua de-


nicao formal sera apresentada na seccao seguinte). Note-se que conhecendo
o diagrama se pode reconstituir a arvore da linguagem duplicando sucessiva-
mente nos para eliminar ciclos e m ultiplos arcos incidentes num mesmo no.
Deste modo se conclui que as arvores racionais e os automatos nitos caracte-
rizam a mesma classe de linguagens, a que chamamos racionais. Mostraremos
adiante que elas sao precisamente as linguagens regulares.
No automato nito anterior, duplicando uma vez o no 1 para eliminar
uma passagem pelo ciclo a, duplicando uma vez o no 2 para cada instancia
ter um so arco b incidente alem do ciclo b, e repetindo estas operacoes um
n umero innito de vezes, obtinha-se sucessivamente:
\
1
a

\
1
a

b
\
2
b
.
\
1
a

\
1
a

\
2
b
.
\
2
b
.
\
1
a

\
1
a

\
2
b
.
\
1
.
.
.
b

\
2
b
.
\
2
b
.
Duplicando os nos 2 ate eliminar completamente os ciclos b chegava-se `a
arvore da linguagem a

de que se partiu. 2
Exemplo 3.3 Consideremos agora a linguagem de repeat S until B. Com
as convencoes que temos vindo a utilizar, ela pode ser descrita pela expressao
36
regular s(bs)

b. Eis a arvore desta linguagem:

s
1

s
.

.
.
.
.

Como se ve, esta arvore tem apenas tres sub-arvores distintas. O automato
nito associado e:
\
1
s

\
2
b

b
\
3
2
Exemplo 3.4 Vejamos agora um exemplo de uma linguagem nao racional.
37
A arvore da linguagem {a
n
b
n
| n 0} e:
.

a
.

.
.

.
.
.
b

4
.
_
_

.
.
.
.

5
.
_
_
_

.
.
.
.
.
.

As sub-arvores (cujas razes estao assinaladas com ) 1, 2, 3, 4, 5, . . . sao cla-


ramente distintas entre si, diferindo no comprimento do caminho mais longo
que tem (isto e, na sua altura). Como estas arvores sao em n umero in-
nito, esta provado que a arvore da linguagem nao tem um n umero nito de
sub-arvores distintas. Logo a linguagem nao e racional. 2
Podemos agora ser um pouco mais precisos sobre a forma como um
automato nito reconhece uma palavra percorrendo-a smbolo a smbolo.

E util pensar num automato como um dispositivo da forma


Entrada
x T

Controlo
Sada
S/N
que le `a entrada uma palavra x smbolo a smbolo, processa cada smbolo
lido na sua unidade de controlo e emite `a sada a resposta S(im) ou N(ao).
Se a resposta for S apos a leitura do ultimo smbolo, entao a palavra e re-
conhecida (ou aceite, como tambem se diz). Caso contrario a palavra nao
e reconhecida, tambem se dizendo que e rejeitada. A linguagem reconhe-
cida pelo automato e o conjunto de todas as palavras que sao reconhecidas.
38
O funcionamento da unidade de controlo e especicado pelo diagrama
do automato. Passamos a designar os nos como estados e os arcos como
transicoes. Os estados com um crculo duplo chamam-se de aceitacao.
Antes de ler qualquer smbolo, o automato esta posicionado no seu estado
inicial (aquele que tem uma seta incidente do exterior). Quando le um
smbolo, efectua a transicao (isto e, percorre o arco) correspondente e passa
ao estado seguinte. Em cada estado e emitido S se o estado for de aceitacao
e N caso contrario.
Outra maneira de ver o funcionamento do automato e como um percurso
no seu grafo de estados e transicoes. Por exemplo, no automato da linguagem
das execucoes de repeat S until B, a palavra sbsbsb origina o seguinte
percurso:
\
1
s
\
2
b
\
1
s
\
2
b
\
1
s
\
2
b
\
3
Em todos os estados e emitido N `a sada excepto no ultimo, em que e emitido
S. A palavra e aceite.

E facil ver que os percursos na arvore da linguagem que terminam no


que chamamos um no principal correspondem precisamente aos precursos
no correspondente automato nito que terminam num estado de aceitacao.
Tem-se assim de forma natural o seguinte resultado:
Proposicao 3.5 As linguagens reconhecidas pelos automatos nitos sao pre-
cisamente as linguagens racionais.
Quando uma palavra nao e aceite, dois casos podem acontecer. O pri-
meiro caso e ilustrado pela plavra sbs. Tem-se um percurso que termina num
estado que nao e de aceitacao. O outro caso e o da palavra ssb, cujo percurso
nao se chega a concluir por nao haver nenhuma transicao para o segundo s.
O criterio de nao aceitacao de uma palavra pode ser uniformizado se
garantirmos que todo o smbolo lido gera uma transicao. Para tal procede-se
do seguinte modo:
Acrescenta-se um novo estado ao automato, que nao e de aceitacao.
Se um estado nao tiver uma transicao com um certo smbolo de entrada,
acrescenta-se uma transicao para o novo estado com esse smbolo.
Para cada smbolo de entrada, acrescenta-se uma transicao do novo
estado para si proprio.
39
No caso do automato que temos vindo a considerar, o automato comple-
tado ca:
\
1
b,b

\
2
b

s
.

.
.
b

\
4
s,b,b

\
3
s,b,b

O novo estado e o 4, e representamos a traco interrompido as novas transicoes.


Adoptamos a convencao usual de representar varias transicoes entre um
mesmo par de estados pelo mesmo arco mas com as varias etiquetas das
transicoes em questao.
No automato completado, nenhuma palavra da origem a um percurso
incompleto. A palavra ssb vista anteriormente tem o percurso Se uma palavra
conduz ao novo estado, nao e possvel tornar a sair dele, pelo que a palavra
nao e aceite. Tecnicamente, um tal estado, de onde nao se pode tornar a
sair, chama-se em teoria dos grafos um poco. Por vezes chamamos-lhe um
estado de erro, visto que em linguagens de programacao, quando se entra
num estado semelhante, isso corresponde a um erro sintactico no programa
(palavra) que se esta a tentar reconhecer. Mas note-se que nao ha nada de
preciso nesta terminologia.
Nesta forma completa, as transicoes do automato podem ser represen-
tadas por uma tabela. Para o exemplo anterior, a tabela e a seguinte:
Alfabeto T
Estados Q
s b b
1 2 4 4
2 4 3 1
3 4 4 4
4 4 4 4
A tabela e a representacao de uma funcao
: QT Q,
dita de transicao de estado, em que Q e o conjunto dos estados e T e o
alfabeto de entrada. Dados q Q e a T, tem-se
(q, a) Q.
40
O estado (q, a) e aquele para o qual se transita a partir do estado q quando
se le o smbolo de entrada a. Por exemplo,
(1, s) = 2,
(2, b) = 1,
(4, b) = 4.
Uma coisa em que nao pode deixar de se reparar e que no automato
completado a maior parte das transicoes sao para o estado de erro. Na
tabela da funcao de transicao destacamos as tres transicoes, num total de
doze, que nao conduzem ao estado de erro, as quais mal se deixam perceber
no conjunto das outras transicoes. Por uma questao de clareza, nos exemplos
omitiremos quase sempre este(s) estado(s) de erro. Imaginamos que ele esta
la, mas nao o representamos porque isso iria dicultar a nossa compreensao do
funcionamento do automato. Mas de um ponto de vista teorico e muito mais
comodo admitir que todos os estados tem transicoes para todos os smbolos
do alfabeto de entrada, isto e, que (q, a) esta sempre denido, e portanto
isso aparece reectido na denicao de automato nito.
3.2 Automato nito
Denicao 3.6 (Automato nito) Um automato nito (AF) e um quntuplo
A = (T, Q, q
I
, , F)
constitudo pelos seguintes elementos:
um alfabeto de entrada T;
um conjunto nito Q de estados;
um estado inicial q
I
;
uma funcao : QT Q de transicao de estado;
um conjunto F Q de estados de aceitacao.
Observacao 3.7 Pode denir-se uma funcao de sada : Q {S, N} por
(q) =

S se q F,
N se q F,
que aplica cada estado em N se o estado nao for de aceitacao e em S se o es-
tado for de aceitacao. Na pratica nao teremos necessidade de usar esta funcao
porque lidaremos directamente com o conjunto F dos estados de aceitacao.
2
41
A funcao fornece o estado seguinte, conhecido o estado corrente e o
smbolo de entrada lido. Se forem lidos varios smbolos de entrada em
sequencia, a funcao permite calcular os sucessivos estado por que passa
o automato. Por exemplo, consideremos o automato visto anteriormente,
cuja tabela que dene a funcao de transicao de estado se repete aqui:
s b b
1 2 4 4
2 4 3 1
3 4 4 4
4 4 4 4
Partindo do estado 1 e lendo a palavra sbsb (smbolo a smbolo) o automato
passa pela sequencia de estados
1,
2 = (1, s),
1 = (2, b)
2 = (1, s),
3 = (2, b).
Para maior facilidade de expressao, e util dispor de uma funcao

que indique
qual o estado nal a que se chega depois de ter lido todos os smbolos de uma
palavra. Por exemplo,

(1, sbsb) = 3.

E claro que, depois de efectuada a primeira transicao de 1 para 2, lendo o


resto da palavra a partir do estado 2 tambem se atinge o estado 3, pelo que
se tem

(2, bsb) = 3.
Pode-se escrever

(1, sbsb) =

((1, s), bsb).


Em geral, nao e difcil convencermo-nos que

(q, ax) =

((q, a), x)
para todo o estado q, smbolo a e palavra x. Esta igualdade corresponde `a
ideia intuitiva de que o estado a que se chega com ax pode ser determinado
calculando o estado para que se transita com a e vendo a partir desse estado
qual o estado que se atinge com x.
42
Por outro lado, se por exemplo no estado 3 nao for lido nenhum smbolo,
o automato permanecera no estado 3, isto e,

(3, ) = 3. Em geral,

(q, ) = q.
Estas consideracoes permitem dar uma denicao mais precisa da funcao

.
Denicao 3.8 (Extensao de ) A funcao

: Q T

Q dene-se do
seguinte modo, para todo o q Q, a T e x T

(q, ) = q;

(q, ax) =

((q, a), x).


Observacao 3.9 Quando a palavra x se reduz a um simples smbolo a do
alfabeto de entrada, tem-se

(q, a) =

(q, a) =

((q, a), ) = (q, a).

E por esta razao que se diz que

e uma extensao de : para os valores em


que esta denida,

coincide com ela. 2


Podemos agora calcular mais formalmente

(1, sbsb):

(1, sbsb) =

((1, s), bsb) =

(2, bsb)
=

((2, b), sb) =

(1, sb)
=

((1, s), b) =

(2, b)
= (2, b) = 3,
onde se usou o facto estabelecido na observacao anterior de que

(q, a) =
(q, a) quando a T.
Podemos agora caracterizar a linguagem reconhecida por um automato
nito.
Denicao 3.10 (Linguagem reconhecida por um AF) A Linguagem re-
conhecida ou aceite por um automato nito A e
L(A) = {x T

(q
I
, x) F}.
Em termos do grafo do automato, L(A) e o conjunto das plavras de
entrada cujo percurso a partir do estado inicial termina num estado de
aceitacao. No automato que tem vindo a ser apresentado em exemplo, a pa-
lavra sbsb pertence `a linguagem por ele reconhecida, por conduzir do estado
inicial 1 ao estado de aceitacao 3. Mas ja a palavra ssb nao e reconhecida,
visto que termina no estado 4, que nao e de aceitacao.
43
3.3 Nao-determinismo
De acordo com a denicao de automato nito, ele e um sistema determinista,
no sentido em que o estado seguinte ca completamente determinado pelo
estado corrente e pelo smbolo de entrada lido. Por vezes e util afrouxar
este requisito e permitir que a proxima transicao nao que completamente
determinada, podendo ser uma de entre um conjunto de varias transicoes
possveis. Cada transicao efectiva resulta de uma escolha aleatoria de entre
as v arias possibilidades, pelo que cada comportamento e apenas um entre os
que se obteriam fazendo todas as escolhas possveis em cada passo.
Precisemos agora em que e que consiste o nao-determinismo nos automatos
nitos. As duas fontes de nao-determinismo que iremos considerar estao ilus-
tradas na gura seguinte:


a


No primeiro caso ha duas ou mais transicoes a partir do mesmo estado para
o mesmo smbolo de entrada, o que signica que nao ha um unico estado
seguinte mas um conjunto de estados seguintes possveis. No segundo caso
ha uma transicao etiquetada pela palavra vazia . Na presenca de um certo
smbolo de entrada, o automato tem a opcao entre ler o smbolo e seguir a
correspondente transicao, ou entao efectuar primeiro a transicao com e ler
depois o smbolo de entrada. Transicoes etiquetadas com sao por vezes cha-
madas internas por nao dependerem de smbolos de entrada provenientes
do exterior.
Exemplo 3.11 Antes de denir automato nito nao-determinista, vejamos
um exemplo. O diagrama
\
1
d
\
2
.

\
3
d
\
4
E

\
5
+,

\
6
d
\
7

_
representa um automato nito nao-determinista sobre o alfabeto {d, ., E, +, },
onde por simplicidade se representaram os dgitos de 0 a 9 uniformemente por
d. Por analogia com os automatos deterministas, as palavras reconhecidas
por automatos nao-deterministas sao as que etiquetam os caminhos que levam
44
do estado inicial a um estado de aceitacao (os s ao longo do caminho sao,
bem entendido, omitidos por representarem a palavra vazia). Neste exemplo
a linguagem reconhecida e a dos n umeros sem sinal. Faz pois sentido dar
signicado a estes diagramas independentemente de qualquer interpretacao
computacional. Computacionalmente podemos imaginar que quando ha mais
de uma transicao possvel, e seleccionada uma arbitrariamente. 2
Denicao 3.12 (Automato nito nao-determinista) Um automato -
nito nao-determinista (AFND) e um quntuplo
A = (T, Q, q
I
, , F)
em que T, Q, q
I
, F tem o mesmo signicado que para automatos deterministas
e e uma funcao
: Q(T {}) P(Q).
Recorde-se que P(Q) e o conjunto de todos os subconjuntos de Q. Para
q Q e a T {}, tem-se (q, a) P(Q), isto e, (q, a) Q. Assim, ao
estipular que (q, a) e um conjunto de estados, esta-se a captar a ideia de
que podem existir varios estados (possivelmente nenhum) acessveis a partir
de q por uma transicao etiquetada por a.
Para seguir os percursos no automato determinados pela leitura de uma
palavra smbolo a smbolo, podamos denir uma extensao

de como se
fez para o caso determinista, mas e mais comodo neste caso adoptar uma
solucao diferente.
Denicao 3.13 (Transicao) Dados q, q

Q e a T {}, uma transicao


e um triplo (q, a, q

), que geralmente se escreve


q
a
q

,
em que q

(q, a).
Se tivermos duas transicoes consecutivas, q
a
q

b
q

, e se nao houver
necessidade de conhecer o estado intermedio q

, podemos escrever apenas


q
a

b
q

omitindo o q

. Esta convencao aplica-se a um n umero qualquer


de transicoes.
Denicao 3.14 (Transicao repetida) Dados estados q, q

Q e uma pa-
lavra x T

, a relacao
q
x
= q

signica que existe um percurso de q para q

etiquetado por x:
q
x=a
1
a
2
an

a
1

a
2

an
q

.
45
Exemplo 3.15 Para o exemplo anterior tem-se:
1
d
= 2 porque 1
d
2,
1
d
= 6 porque 1
d
2

4

7

6,
2
d
= 4 porque 2

1
d
2

4
ou 2

4

3
d
4,
1
dd
= 4 porque 1
d
2
d
4.
2
Observacao 3.16 Na denicao anterior, o caso n = 0 corresponde ao per-
curso vazio de q para q, o qual se convenciona que esta etiquetado por .
Assim, tem-se q

= q para todo o q Q. Tambem e facil ver que q
a
q

implica q
a
= q

(caso n = 1) e que se q
x
= q

e q

= q

entao q
xx

= q

.
Alias, a relacao = podia ter sido denida a partir de por inducao no
comprimento de x: (i) q

= q para todo o q; (ii) se q
a
q

e q

x
= q

,
entao q
ax
= q

. 2
Estamos em condicoes de caracterizar a linguagem reconhecida por um
AFND.
Denicao 3.17 (Linguagem reconhecida por um AFND) A linguagem
reconhecida ou aceite por um automato nito nao-determinista A e
L(A) = {x T

: (q F) q
I
x
= q}.
Informalmente, L(A) e o conjunto de todas as palavras que levam do es-
tado inicial a um estado de aceitacao.

E importante notar que podem existir
varios percursos associados `a palavra x alguns deles talvez incompletos,
por nao ser possvel concluir a leitura da palavra mas basta que um so
termine num estado de aceitacao para que a palavra seja reconhecida.
3.4 Relacoes entre AF e AFND
Como se comparam os AFND com os AF (deterministas)?

E facil ver que
os AFND sao uma generalizacao dos AF, no sentido em que todo o AF
pode ser visto como um AFND. Noutros termos, o determinismo e um caso
particular do nao-determinismo em que o conjunto de possibilidades se reduz
a uma so. Mais precisamente, quando num AF se tem (q, a) = q

, podemos
encarar a situacao como se de um AFND se tratasse em que (q, a) = {q

} e
46
(q, ) = . Como num AF ha um unico percurso associado a cada palavra
x, o mesmo sucede quando ele e visto como um AFND, o que signica que

(q, x) = q

sse q
x
= q

. Por denicao de linguagem reconhecida em AF e em


AFND, conclui-se que L(A) = L(A

). Estas consideracoes estao sintetizadas


na seguinte proposicao:
Proposicao 3.18 Seja A = (T, Q, q
I
, , F) um AF. Seja A

o AFND com
todos os elementos iguais a A, excepto que : QT Q e substituda por

: Q (T {}) P(Q), denida por

(q, a) = {(q, q)} para a T e

(q, ) = . Entao:

(q, x) = q

em A sse q
x
= q

em A

.
L(A) = L(A

).
Evidentemente, nem todo o AFND pode ser visto como um AF, mas como
veremos, todo o AFND e equivalente a um AF, de acordo com a seguinte
nocao de equivalencia.
Denicao 3.19 (Equivalencia) Dois AFND dizem-se equivalentes se re-
conhecerem a mesma linguagem.
A Proposicao ?? mostra que todo o AF e (equivalente a) um AFND. Se
provarmos o resultado inverso, entao as classes de AF e AFND reconhecem
exactamente as mesmas linguagens. Porque precisamos entao de AFND?
A resposta e que quando queremos denir um AF e frequentemente mais
simples comecar por denir um AFND e depois construir a partir dele o AF
equivalente.
A construcao de um AF equivalente a um AFND dado nao e tao directa
como na situacao inversa descrita na Proposicao ??. A ideia-chave e que para
os automatos nitos o nao-determinismo pode ser simulado deterministica-
mente. Para ver como isso e possvel, consideremos o seguinte AFND muito
simples.
\
1
a,b

\
2
b

Quando e submetida ao automato a palavra bb, ha uma primeira transicao


do estado 1 para os estado 2, mas a seguir podem ocorrer duas transicoes,
uma para o estado 1 e outra para o estado 2. Os dois percursos resultantes,
47
1
b
2
b
1 e 1
b
2
b
2, podem ser representados numa arvore:
\
1
b

\
2
b
.

\
1
\
2
Para a palavra abaab obtinha-se a arvore abaixo, onde por simplicidade se
indicaram ao lado os smbolos que zeram transitar de um nvel para o se-
guinte:

\
1
a

\
1
b

\
2
b

\
2
\
1
a

\
2

\
1
a

\
2

\
1
b

\
2
b

\
2
\
1
\
2
Como se pode observar, ha tres percursos incompletos (a palavra nao foi toda
lida) e outros tres completos. Destes, dois terminam em estados de aceitacao,
logo a palavra e aceite.
A construcao desta arvore pode ser encarada como uma simulacao de to-
dos os comportamentos possveis do AFND ao ler a palavra abaab. Mas, para
decidir se a palavra e reconhecida ou nao, a simulacao e excessivamente por-
menorizada. Tudo quanto precisamos de saber e qual e o conjunto de estados
existentes em cada nvel. Por exemplo, o facto de no ultimo nvel existirem
os estados 1 e 2 permite-nos conlcuir que a palavra e aceite, porque o estado
2 e de aceitacao.

E totalmente irrelevante que o estado 2 apareca repetido.
Representando apenas os estados presentes em cada nvel, as transicoes entre
48
nveis e a seguinte:
\
1
a

` _ ` _
1, 2
b

` _ ` _
1, 2
a

` _ ` _
1, 2
a

` _ ` _
1, 2
b

` _ ` _
1, 2
Isto assemelha-se a um percurso de um automato determinista cujos estados
fossem conjuntos de estados do automato nao-determinista dado. De facto,
o simulador que vamos construir limita-se a manter a informacao sobre os
estados existentes em cada nvel da arvore de comportamentos e de calcular
as transicoes entre os nveis. No exemplo em discussao ha quatro conjun-
tos de estados susceptveis de serem encontrados em nveis de arvores de
comportamentos. Sao eles:
{1} corresponde `a raiz da arvore.
{2} nvel que se atinge com a palavra b.
{1, 2} idem, com a palavra a.
idem, com a palavra ba.
Qualquer outra palavra produz no m um destes nveis, visto que ja aqui
estao todos os subconjuntos do conjunto de estados {1, 2}. Estes sao entao
os estados do simulador. O estado inicial e {1} e os estados de aceitacao
sao {2} e {1, 2}, visto que correspondem a nveis da arvore onde terminam
percursos do AFND que terminam em estados de aceitacao. As transicoes
de um conjunto calculam-se a partir das transicoes individuais dos estados
do AFND contidos no conjunto. Neste exemplo obtinha-se o AF:
49

`
_ {1}
a

`
_
\
{1, 2} a, b

`
_
\
{2}
b

`
_ { } a, b

Apresentamos em seguida a denicao do simulador determinista.


Denicao 3.20 Seja A = (T, Q, q
I
, , F) um AFND. Dene-se o AF

A = (T,

Q, q
I
,

,

F)
do seguinte modo:
O alfabeto de entrada e o mesmo.
Cada estado de

Q e um subconjunto de Q. O conjunto

Q dene-se
indutivamente pelas duas clausulas seguintes, que tambem denem q
I
e

:
q
I
= {q Q : q
I

= q}

Q.
Para P

Q e a T,

(P, a) = {q

Q : (q P) q
a
= q

}

Q.
O conjunto dos estados de aceitacao e dado por:

F = {P

Q : P F = }.
A proxima propriedade e a justicacao de que

A simula A.
Proposicao 3.21 Para todo o x T

( q
I
, x) = {q Q : q
I
x
= q}.
Demonstrac ao A demonstracao e por inducao no comprimento de x.
i) Caso x = :

( q
I
, ) = q
I
(def. do de

)
= {q Q : q
I

= q} (def. de q
I
).
50
ii) Caso x = ya:

( q
I
, ya) =

(

( q
I
, y), a) (def. do de

)
=

({q : q
I
y
= q}

P
, a) (hip. indutiva sobre y)
= {q

: (q P) q
a
= q

} (def. de

)
= {q

: (q) q
I
y
= q
a
= q

} (def. de P)
= {q

: q
I
ya
= q

} (Observacao ??).
Fica terminada a demonstracao. 2
Podemos agora vericar que A e

A reconhecem a mesma linguagem.
Proposicao 3.22 L(A) = L(

A).
Demonstrac ao Tem-se
x L(A) (q F) q
I
x
= q (def. de L(A))
{q : q
I
x
= q} F = (matematica)

( q
I
, x) F = (Proposicao ??)

( q
I
, x)

F (def. de

F)
x L(

A) (def. de L(

A)).
Logo L(A) = L(

A). 2
Exemplo 3.23 Retomemos o AFND dos n umeros sem sinal apresentado no
Exemplo ??. Comecamos por construir uma tabela auxiliar, onde para todo o
estado q e smbolo de entrada a se determinam os estados q

tal que q
a
= q

(recorde-se que isto quer dizer que q




). A
tabela, que se obtem por inspeccao directa do diagrama que dene o AFND,
e a seguinte:
d . E +
1 1, 2, 3, 4, 6, 7
2 1, 2, 3, 4, 6, 7 3 5, 6
3 3, 4, 6, 7
4 3, 4, 6, 7 5, 6
5 6, 7 6 6
6 6, 7
7 6, 7
51
Em seguida determinamos o estado inicial: q
I
= {q : 1

= q} = {1}.
Podemos iniciar o processo iterativo que constroi em simultaneo

Q e

. O
processo sera materializado pela construcao da tabela da funcao de transicao

, que tem as linhas indexadas por



Q e as colunas por T. Inicialmente, de

Q
so conhecemos q
I
= {1}, e as suas transicoes ainda nao sao conhecidas, pelo
que a tabela se resume a:
d . E +
{1}
Para preencher esta linha, consulta-se a tabela auxiliar, obtendo-se:
d . E +
{1} {1, 2, 3, 4, 6, 7}
Obtivemos dois novos estados, que se acrescentam `a tabela:
d . E +
{1} {1, 2, 3, 4, 6, 7}
{1, 2, 3, 4, 6, 7}

Para preencher a primeira destas linhas faz-se a uniao casa a casa das linhas
da tabela auxiliar indexadas por 1, 2, 3, 4, 6, 7. A segunda linha tem todas as
casas vazias:
d . E +
{1} {1, 2, 3, 4, 6, 7}
{1, 2, 3, 4, 6, 7} {1, 2, 3, 4, 6, 7} {3} {5, 6}

Desta vez obtiveram-se dois novos estados, {3} e {5, 6}, que se acrescentam
`a tabela. Para estes estados procede-se como anteriormente. O processo ter-
mina quando nao forem gerados novos estados (a terminacao esta garantida
por ser apenas ser possvel gerar um n umero nito de conjunto de estados
do AFND dado). A tabela nal e:
d . E +
{1} {1, 2, 3, 4, 6, 7}
{1, 2, 3, 4, 6, 7} {1, 2, 3, 4, 6, 7} {3} {5, 6}

{3} {3, 4, 6, 7}
{5, 6} {6, 7} {6} {6}
{3, 4, 6, 7} {3, 4, 6, 7} {5, 6}
{6, 7} {6, 7}
{6} {6, 7}
52
Para aligeirar a tabela, e costume deixar em branco as casas com e eliminar
a linha de :
d . E +
1 {1} {1, 2, 3, 4, 6, 7}
2 {1, 2, 3, 4, 6, 7} {1, 2, 3, 4, 6, 7} {3} {5, 6}
3 {3} {3, 4, 6, 7}
4 {5, 6} {6, 7} {6} {6}
5 {3, 4, 6, 7} {3, 4, 6, 7} {5, 6}
6 {6, 7} {6, 7}
7 {6} {6, 7}
Renomearam-se tambem os estados para simplicar a apresentacao do dia-
grama correspondente:
\
1
d
\
2
.

d
. \
4
d

+,

\
6
d
.
\
3
d
\
5
E

\
7
d

2
3.5 Automatos nitos e linguagens regulares
Comecamos por ver que as linguagens reconhecidas por automatos nitos
(deterministas ou nao) sao fechadas para as operacoes regulares, a comple-
mentacao e a interseccao.
Proposicao 3.24 Sejam L
1
e L
2
linguagens reconhecidas por automatos -
nitos. Entao as linguagens L
1
L
2
, L
1
.L
2
, L

1
, T

L
1
e L
1
L
2
sao reco-
nhecidas por automatos nitos.
Demonstrac ao Sejam A
1
= (T, Q
1
, q
1
I
,
1
, F
1
) e A
2
= (T, Q
2
, q
2
I
,
2
, F
2
)
AF ou AFND tais que L
1
= L(A
1
) e L
2
= L(A
2
). Vamos construir AFND
A

, A
.
, A

, A

, A

que reconhecem respectivamente L


1
L
2
, L
1
.L
2
, L

1
, T

L
1
e L
1
L
2
.
As construcoes de cada automato serao ilustradas gracamente com base
na seguinte representacao esquematica dos AFND:
53
E _
q
I
g_
F
_
`

_
_
_
_

`
`
`
`

E conveniente supor que Q


1
Q
2
= , o que nao se traduz em perda de
generalidade visto que se for necessario o nome dos estados pode ser mu-
dado `a vontade sem alterar as linguagens reconhecidas. Para simplicar
a denicao matematica das construcoes que iremos apresentar, identicare-
mos cada funcao de transicao com o conjunto de triplos (q, a, P) tal que
(q, a) = P.
Caso L
1
L
2
:
O automato A

tem a seguinte representacao esquematica:


E _
q

d
d
d
d
d

_
q
1
I
g_
F
1
_
`

_
_
_
_

`
`
`
`

A
1
_
q
2
I
g_
F
2
_
`

_
_
_
_

`
`
`
`

A
2
Mais formalmente, A

= (T, Q

, q

I
,

, F

), com:
Q

= Q
1
Q
2
{p}, em que p Q
1
Q
2
.
q

I
= p.

=
1

2
{(p, , {q
1
I
, q
2
I
})}.
F

= F
1
F
2
.

E facil ver que A

reconhece L
1
L
2
, visto que as palavras reconhecidas
correspondem a percursos em A
1
ou em A
2
, e portanto pertencem a L
1
ou a
L
2
.
Caso L
1
.L
2
:
O automato A
.
tem a forma:
54
E _
q
1
I
_
F
1
_
`

_
_
_
_

`
`
`
`

A
1
E

_
q
2
I
g_
F
2
_
`

_
_
_
_

`
`
`
`

A
2
Nao houve criacao de estados, o estado inicial de A
1
e o estado inicial
de A
.
, os estados de aceitacao de A
.
sao os de A
2
, e criaram-se transicoes
etiquetadas por dos estados de aceitacao de A
1
para o estado inicial de A
2
.
Mais precisamente, A
.
= (T, Q
.
, q
.
I
,
.
, F
.
) e denido por:
Q
.
= Q
1
Q
2
.
q
.
I
= q
1
I
.

.
=
1

2
{(q, , {q
2
I
}) : q F
1
}.
F
.
= F
2
.
As palavras reconhecidas por A
.
sao as que determinam um percurso em A
1
de q
1
I
a F
1
, seguidas de um percurso em A
2
de q
2
I
a F
2
, por conseguinte sao
as palavras de L
1
.L
2
.
Caso L

1
:
Neste caso A

tem a forma:
E g_
q

I
E

_
q
1
I
g_
F
1
_
`

_
_
_
_

`
`
`
`

A
1
Acrescentou-se um novo estado a Q
1
, simultaneamente estado inicial e de
aceitacao de A

, e acrescentaram-se transicoes etiquetadas por dos estados


de aceitacao para q
1
I
. Assim, A

= (T, Q

, q

I
,

, F

), onde:
Q

= Q
1
{p}, p Q
1
.
q

I
= p.

=
1
{(q, , {q
1
I
}) : q F
1
{p}}.
F

= F
1
{p}.
55
As palavras reconhecidas por A

sao todas as que percorrem zero ou mais


vezes A
1
de q
1
I
a F
1
, isto e, sao as palavras do fecho L

1
de L
1
.
Caso T

L
1
:
Para esta construcao temos de supor que o automato A
1
e determinista
(ver justicacao na Observacao ?? abaixo), o que nao causa problema por-
que sabemos como passar de um automato nao-determinista a um automato
determinista que reconhece a mesma linguagem. O automato A

tambem
e determinista e consiste apenas em trocar em A
1
os estados de aceitacao
com os de nao aceitacao. Tem-se A

= (T, Q

, q

I
,

, F

) com Q

= Q
1
,
q

I
= q
1
I
,

=
1
e F

= Q
1
F
1
.
Caso L
1
L
2
:
Como L
1
L
2
= T

((T

L1)(T

L
2
)), resulta dos casos anteriores
que L
1
L
2
e reconhecida por um AFND.
Fica concluda a demonstracao.
2
Observacao 3.25 Se o automato A nao for determinista, a troca dos estados
de aceitacao pelos de nao-aceitacao nao garante que o automato resultante
passe a reconhecer o complemento da linguagem que reconhecia. Basta olhar
para os automatos da gura seguinte e observar que ambos reconhecem a
palavra a:
\
1
a

\
2
\
1
a

\
2
\
3
\
3
2
Observacao 3.26 Nas condicoes da proposicao anterior, se os automatos
A
1
e A
2
que reconhecem L
1
e L
2
forem deterministas, podem construir-se
directamente versoes deterministas de A

e A

. Em ambos os casos, os
conjuntos de estados, estados iniciais e funcoes de transicao sao iguais; os
automatos so diferem nos estados de aceitacao. Podemos entao escrever
A

= (T, Q, q
I
, , F

),
A

= (T, Q, q
I
, , F

),
em que:
Q = Q
1
Q
2
.
q
I
= (q
1
I
, q
2
I
).
56
((q
1
, q
2
), a) = (
1
(q
1
, a),
2
(q
2
, a)).
F

= (F
1
Q
2
) (Q
1
F
2
).
F

= F
1
F
2
.
De um ponto de vista intuitivo, cada um destes automatos simula o funci-
onamento de A
1
e A
2
em simultaneo. Os seus estados guardam a informacao
sobre os estados em que se encontram A
1
e A
2
. Em particular, o estado
inicial corresponde ao estado inicial de cada um deles. Uma transicao simula
as transicoes correspondentes de A
1
e A
2
. Nao e difcil concluir que se uma
palavra x determina um percurso de (q
1
, q
2
) a (q

1
, q

2
), entao x determina um
percurso de q
1
a q

1
em A
1
e um percurso de q
2
a q

2
em A
2
. Os automatos A

e A

so diferem no criterio de aceitacao. Consideremos primeiro A

. Uma
palavra x cujo percurso a partir do estado inicial termina num estado em
F

, termina em F
1
Q
2
ou em Q
1
F
2
. No primeiro caso, o percurso que x
determina em A
1
comeca no estado inicial e termina em F
1
, logo x L
1
. No
segundo caso se conclui analogamente que x L
2
. Como se verica um caso
ou outro (ou ambos), tem-se x L
1
L
2
. Invertendo o raciocnio conclui-se
que toda a palavra em L
1
L
2
e reconhecida por A

. Conjugando as duas
observacoes tem-se L(A

) = L
1
L
2
. Para o automato A

conclui-se de
forma semelhante (e alias mais simples) que L(A

) = L
1
L
2
. 2
Teorema 3.27 Toda a linguagem regular e reconhecida por algum automato
nito.
Demonstrac ao As linguagens , {} e {a} com a T sao reconhecidas
pelos AFND:
_
a
_
{} {a}
Qualquer outra linguagem regular obtem-se a partir destas por um n umero
nito de aplicacoes das operacoes de uniao, concatenacao e fecho, logo, pela
propriedade anterior, e reconhecida por um AFND. 2
Exemplo 3.28 Vamos construir passo a passo um AFND que reconhece
(a+ba

b)

. Nos AFNDs que se seguem, omite-se a etiqueta nas transicoes


para nao sobrecarregar as guras.
Expressao regular a:

a
_
57
Expressao regular a

:
_
a
_
.

.
Expressao regular a

b:
_

_
_


.
.

a
_
.

b
_
Expressao regular ba

b:

b



a
_
.

b
_
Expressao regular a +ba

b:

a
_


b



a

.

b
_
Expressao regular (a +ba

b)

:

a
_
.

.
.
.
_


b



a

.

b
_

_
_
_
_
_


AF equivalente:
_
b

a
_
b
.

a
.

b

_
b

58
Por tecnicas que veremos mais adiante, este AF podia ser simplicado
para o seguinte AF equivalente:
_
a


a
.
b

2
Mostraremos em seguida que a inversa do teorema anterior tambem e
verdadeira, isto e, as linguagens reconhecidas pelos automatos nitos sao
regulares.
Denicao 3.29 Seja A = (T, Q, q
I
, , F) um AF (determinista). O sistema
linear direito associado a A e

X
q
= (q) +

aT
aX
(q,a)
(q Q),
onde (q) = se q F e (q) = se q F.
Assim, existe uma incognita X
q
para cada estado q Q e uma equacao
para cada incognita. O membro direito da equacao de X
q
e uma soma de
varios termos. O primeiro desses termos, (q), e ou consoante q e ou nao
de aceitacao (no ultimo caso, o pode omitir-se). Os outros termos estao
associados `as transicoes a partir de q: para cada q

tal que q

= (q, a), existe


um termo aX
q
. Como veremos, este sistema tem uma solucao unica em que
cada X
q
e o conjunto de todas as palavras que levam de q a um estado de
aceitacao. Em particular, X
q
I
e a linguagem reconhecida pelo AF.
Exemplo 3.30 Ao AF
\
1
a

\
2
a
.
b

esta associado o sistema

X
1
= +aX
1
+bX
2
X
2
= bX
1
+aX
2
.
Resolvendo o sistema comecando por eliminar a incognita X
2
usando a se-
gunda equacao, obtinha-se a solucao X
1
= (a +ba

b)

e X
2
= a

b(a +ba

b)

.
Note-se que a solucao para X
1
e a expressao regular a partir da qual cons-
trumos no exemplo anterior o AF de que partimos neste exemplo. Isso nao
e de estranhar visto que, como veremos, a solucao da incognita associada ao
estado inicial e a linguagem reconhecida pelo automato. 2
59
Teorema 3.31 Seja A = (T, Q, q
I
, , F) um AFD. As linguagens
L
q
= {x T

(q, x) F} (q Q)
(palavras que levam de q a F) sao a solucao unica do sistema linear direito

X
q
= (q) +

aT
aX
(q,a)
(q Q).
Em particular, a linguagem reconhecida por A satisfaz L(A) = L
q
I
, logo e
regular.
Demonstrac ao Dizer que as linguagens L
q
(q Q) sao solucao do sistema
signica que
L
q
= (q)

aT
aL
(q,a)
para todo o q (ao passar da notacao das expressoes regulares para a das
linguagens, estamos a supor que (q) = {} em vez de (q) = quando for
esse o caso, isto e, quando for (q) = ). Temos de mostrar que para todo o
q Q e todo o x T

se tem
x L
q
x (q)

aT
aL
(q,a)
.
Distinguimos dois casos.
Caso x = :
L
q

(q, ) F
q F
(q)
(q)

aT
aL
(q,a)
.
Caso x = ay:
ay L
q

(q, ay) F

((q, a), y) F
y L
(q,a)
ay aL
(q,a)
ay (q)

aT
aL
(q,a)
.
60
Esta assim demonstrado que os L
q
(q Q) sao uma solucao do sistema.
Vamos agora mostrar que nao ha outras solucoes. Mais precisamente, se M
q
(q Q) for outra solucao, entao M
q
= L
q
para todo o q Q. Seja
M
q,n
= {x M
q
: |x| = n}
o conjunto das palavras de M
q
de comprimento n, e dena-se L
q,n
analo-
gamente. Para provar que M
q
= L
q
, mostraremos por inducao em n que
M
q,n
= L
q,n
para todo o n. O passo crucial do raciocnio e notar que, dado
que M
q
(q Q) e solucao do sistema, se tem
M
q
= (q)

aT
aM
(q,a)
.
Ora as palavras de M
q
de comprimento 0 estao no primeiro termo, (q), e as
de comprimento n + 1 com n 0 estao no segundo,

aT
aM
(q,a)
, quando
se tomam em M
(q,a)
as palavras de comprimento n. Pode-se escrever
M
q,0
= (q), M
q,n+1
=

aT
aM
(q,a),n
.

E evidente que os L
q
(q Q) satisfazem igualdades semelhantes,
L
q,0
= (q), L
q,n+1
=

aT
aL
(q,a),n
,
visto que como vimos sao solucao do sistema. Estamos em condicoes de
apresentar o raciocnio indutivo. Para n = 0 vem
M
q,0
= (q) = L
q,0
.
Assumindo como hipotese indutiva que M
q,n
= L
q,n
para n 0, tem-se
M
q,n+1
=

aT
aM
(q,a),n
=

aT
aL
(q,a),n
= L
q,n+1
,
onde a segunda igualdade resulta da hipotese indutiva. Fica concluda a
demonstracao. 2
Os Teoremas ?? e ?? mostram que as linguagens reconhecidas pelos
automatos nitos sao exactamente as linguagens regulares. Ja sabamos pela
Proposicao ?? que os automatos nitos reconhecem as linguagens racionais.
Conclui-se que:
Teorema 3.32 Uma linguagem e regular se, e so se, for racional.
61
3.6 Existencia de linguagens nao-regulares
Em face do Teorema ?? podemos concluir que uma linguagem nao e regular se
nao for racional, isto e, se a sua representacao sob a forma de arvore nao tiver
um n umero nito de sub-arvores distintas. Outro criterio para reconhecer
que certas lcinguagens nao sao regulares baseia-se no seguinte resultado.
Proposicao 3.33 (Pumping Lemma) Seja L uma linguagem regular
innita sobre um alfabeto T. Existem palavras x, y, z T

tais que y = e
xy
n
z L para todo o n 0.
Demonstrac ao Consideremos um AF que reconhece L e seja k o seu
n umero de estados. Como a linguagem L e innita, tem uma palavra w =
a
1
a
m
de comprimento m k (as palavras de comprimento < k sao em
n umero n
0
+ n
1
+ n
k1
, em que n e o n umero de smbolos em T). O
percurso q
0
a
1
q
1

am
q
m
no AF do estado inicial q
I
= q
0
a um estado
de aceitacao q
m
F passa por m + 1 > k estados, logo ha pelo menos um
que se repete:
E _ E _
a
1
. . . _ E _
a
i
E _
a
j+1
. . . _ E _
a
m

q
I F
_
x
_
z
_
B
a
i+1
.
.
.
_
_
c
a
j
.
.
.
_
s
`
y
Assim, existem i e j tais que 0 i < j m e q
i
= q
j
. Verica-se facilmente
que as palavras
x = a
1
a
i
,
y = a
i+1
a
j
,
z = a
j+1
a
m
satisfazem as condicoes do enunciado. 2
62
Exemplo 3.34 Ja sabemos que a linguagem L = {a
n
b
n
: n 0} nao e
regular, por nao ser racional (ver Exemplo ??). Vejamos agora como se pode
chegar `a mesma conclusao aplicando o pumping lemma.
Se a linguagem fosse regular, existiriam x, y = , z com xy
n
z L para
todo o n 0. Vamos mostrar que isto e impossvel, o que nos permitira
concluir que a linguagem nao e regular. Mais concretamente, mostraremos
que assumindo que xy
n
z L para todo o n 0 se chega a uma contradicao.
Como por hipotese xyz L (quando n = 1), distinguimos tres casos.
1
o

caso y so com as:


Dado que as palavras de L sao formadas por ocorrencias de a seguidas
de igual n umero de ocorrencias de b, as palavras x, y e z tem de ter a
forma x = a
p
, y = a
q
e z = a
r
b
s
para alguns p, q, r, s com q > 0 (porque
y = ) e p + q + r = s (igual n umero de as e de bs em xyz). Mas entao
xy
2
z = a
p+2q+r
b
s
pertenceria `a linguagem, donde p + 2q +r = s = p +q +r,
ou seja, q = 0. Isto contradiz o facto de que q > 0.
2
o

caso y so com bs:


Este caso e analogo ao anterior.
3
o

caso y com as e bs:


Neste caso teramos x = a
p
, y = a
q
b
r
, z = b
s
para alguns p, q, r, s 0 com
q, r > 0 e p + q = r + s. Por hipotese, xy
2
z L. Mas xy
2
z = a
p
(a
q
b
r
)
2
b
s
=
a
p
a
q
b
r
a
q
b
r
b
s
. Como q, r > 0, viria algum b antes de algum a, de novo uma
contradicao. 2
3.7 Automato acessvel
Um automato nito determinista (AF) pode ser simplicado de duas formas:
primeiro, eliminando estados que nunca serao usados; segundo, fundindo em
um so estados que exibem o mesmo comportamento, e por isso sao redun-
dantes. Estas duas simplicacoes serao apresentadas respectivamente nesta
secc ao e na proxima.
Denicao 3.35 (AF acessvel) Seja A = (T, Q, q
I
, , F) um AF. Um es-
tado q Q diz-se acessvel se q
I
a
1

a
2

an
q para alguns a
1
, a
2
, . . . , a
n

T. Noutros termos, se existir x T

tal que

(q
I
, x) = q. O automato A
diz-se acessvel se todos os seus estados forem acessveis.
Exemplo 3.36 No AF seguinte, os tres estado de cima sao acessveis e o
63
que esta mais abaixo e inacessvel:

_

b

(Para maior clareza omitiu-se o estado de erro, como se fara nos exemplos
seguintes.) Como e evidente, o estado inacessvel nao tem qualquer inuencia
no comportamento do AF visto que nunca e usado, e por iso pode ser remo-
vido sem que isso afecte a linguagem reconhecida. Obtem-se o AF:

_
A simplicacao que resulta da remocao de estados inacessveis e descrita com
toda a generalidade na proposicao seguinte. 2
Proposicao 3.37 Para todo o AF A = (T, Q, q
I
, , F), existe um AF acessvel
A

= (T, Q

, q

I
,

, F

) que reconhece a mesma linguagem.


Demonstrac ao O automato A

obtem-se de A removendo todos os estados


que nao sao acessveis. Mais precisamente:
Q

= {q Q : (x T

(q
I
, x) = q},
q

I
= q
I
,

(q, a) = (q, a) (q Q

, a T),
F

= F Q

.
Tem-se tambem

(q, x) =

(q, x) para todo o q Q

e x T

, como se
mostra facilmente por inducao no comprimento de x. Com efeito,

(q, ) =
q =

(q, ) e

(q, ay) =

(q, a), y) (por denicao de

)
=

((q, a), y) (por denicao de

)
=

((q, a), y) (por hipotese indutiva)


=

(q, ay) (por denicao de

).
64
Tem-se L(A) = {x :

(q
I
, x) F} = {x :

(q

I
, x) F

} = L(A

). 2
3.8 Automato reduzido
Consideremos o seguinte AF:

` _
1

b
.

\
2
s

\
3
` _
1

Os estados 1

e 1

sao equivalentes, no sentido em que nao e possvel observar


nenhuma diferenca entre os comportamentos de ambos. Imaginemos que o
AF e uma caixa, com botoes para os smbolos de entrada e uma lampada
que se acende para assinalar estados de aceitacao:
Caixa negra
b
b
s
_
T
s
B
E '
Suponhamos que se tem dois exemplares do mesmo AF, um no estado 1

e
o outro no estado 1

. Dizer que nao e possvel distinguir os comportamen-


tos de ambos signica que, premindo a mesma sucessao de botoes nos dois
exemplares, qualquer que ela seja, observa-se em ambos a mesma sucessao
de estados da lampada.

E facil concluir que 1

e 1

sao equivalentes. Por um lado, nenhum e


de aceitacao, de modo que inicialmente a lampada esta apagada em ambos.
Por outro lado, premindo qualquer botao, eles mudam para o mesmo estado
(premindo s mudam ambos para o mesmo estado de erro implcito), logo nao
vai haver diferenca na sucessao de estados da lampada.
A importancia de haver estados equivalentes e que eles podem ser redu-
zidos a um so, dando um AF com menor n umero de estados que reconhece a
mesma linguagem. A reducao efectua-se fundindo ou amalgamando estados
65
equivalentes e as respectivas transicoes associadas. Amalgamando 1

e 1

obtinha-se:

\
1
b

\
2
s

\
3
Note-se que as transicoes 1

b
2 e 1

b
2 foram amalgamadas, enquanto
2
s
1

originou 2
s
1.
Denicao 3.38 (Estados equivalentes) Dados dois estados q, q

Q de
um AF, poe-se q q

e diz-se que q e q

sao equivalentes se

(q, x) F

(q

, x) F
para todo o x T

, isto e,

(q, x) e

(q

, x) sao ambos de aceitacao ou


nenhum e.
Observacao 3.39 A denicao anterior corresponde `a ideia intuitiva de que
os comportamento a partir dos dois estados sao iguais. Os estados por que
o AF passa a partir de q e q

quando le a palavra x = a
1
a
2
a
n
sao, respec-
tivamente,
q =

(q, ),

(q, a
1
),

(q, a
1
a
2
), . . .

(q, a
1
a
2
a
n
),
q

(q

, ),

(q

, a
1
),

(q

, a
1
a
2
), . . .

(q

, a
1
a
2
a
n
).
Como a denicao anterior se aplica a todo o x, aplica-se, em particular, `as
palavras , a
1
, a
1
a
2
, a
1
a
2
a
n
. Deste modo, os pares de estados intermedios
que se vao obtendo nos dois casos sao ambos de aceitacao ou nenhum e, o
que corresponde `a ideia de que os estados da lampada sao identicos nas duas
situacoes. 2
Proposicao 3.40 (Caracterizacao alternativa de )
q q

L
q
= L
q
,
onde L
q
= {x T

(q, x) F}.
Demonstrac ao Com efeito,
L
q
= L
q
(x T

) x L
q
x L
q

(x T

(q, x) F

(q

, x) F
q q

,
como se pretendia. 2
66
Proposicao 3.41 A relacao e uma relacao de equivalencia.
Demonstrac ao

E preciso vericar que satisfaz tres propriedades, para
todos os q, q

, q

Q:
Reexividade: q q;
Simetria: q q

implica q

q;
Transitividade: q q

e q

implicam q q

.
Estas propriedades sao faceis de vericar recorrendo `a proposicao anterior.
Vejamos a ttulo de exemplo a transitividade. Se q q

e q

, entao
L
q
= L
q
e L
q
= L
q
. Pela transitividade da igualdade, L
q
= L
q
, donde
q q

. 2
A ideia intuitiva de amalgamar estados equivalentes traduz-se matema-
ticamente em substituir os estados do AF dado por conjuntos de estados
equivalentes. A construcao precisa encontra-se na Denicao ??, mas antes
precisamos de introduzir algumas nocoes auxiliares.
Denicao 3.42 (Classe de equivalencia) O conjunto de todos os estados
equivalentes a q Q (estados que denem a mesma linguagem L
q
que q)
representa-se por [q]

ou por [q] para simplicar a escrita e chama-se


a classe de equivalencia de q.
Observacao 3.43 As classes de equivalencia satisfazem algumas proprieda-
des importantes.
Em primeiro lugar, tem-se sempre q [q], visto que q e equivalente a q
(reexividade). Conclui-se que a uniao de todas as classes e Q:

qQ
[q] = Q.
Seguidamente, se q q

, entao [q] = [q

], isto e, estados equivalentes


pertencem `a mesma classe. Com efeito, usando as propriedades de simetria
e transitividade de , q

[q] sse q

q sse q

q q

sse q

q
sse q

sse q

[q

]. Assim, [q] e [q

] tem os mesmos elementos, logo sao


iguais.
Daqui se infere que se [q] [q

] = , entao [q

] = [q], isto e, duas classes de


equivalencia ou sao disjuntas ou sao iguais. Com efeito, seja q

[q] [q

].
Tem-se q q

, donde q q

, logo [q] = [q

]. 2
Denicao 3.44 (Conjunto cociente) O conjunto Q/ = {[q] : q Q} de
todas as classes de equivalencia chama-se o conjunto cociente de Q por .
67
A denicao seguinte concretiza a ideia de construir um automato a partir
da aglomeracao de estados equivalentes.
Denicao 3.45 (Automato reduzido) Seja A = (T, Q, q
I
, , F) um AF.
O AF reduzido de A e o AF
A
R
= (T, Q
R
, q
R
I
,
R
, F
R
),
onde:
Q
R
= Q/ e o conjunto das classes de equivalencia de ;
q
R
I
= [q
I
] e a classe do estado inicial de A;

R
([q], a) = [(q, a)] para todo o q Q e todo o a A;
F
R
= {[q] : q F} e o conjunto de classes de equivalencia dos estados
de aceitacao de A.
Observacao 3.46

E preciso vericar que a funcao
R
esta correctamente
denida, no sentido em que o valor
R
([q], a) nao depende do estado q esco-
lhido na classe [q]. Por outras palavras, temos de vericar que se [q] = [q

],
entao [(q, a)] = [(q

, a)]. Tem-se:
[q] = [q

] q q

(x T

(q, ax) F

(q

, ax) F
(x T

((q, a), x) F

((q

, a), x) F
(q, a) (q

, a)
[(q, a)] = [(q

, a)],
como se pretendia. 2
A construcao do automato reduzido A
R
esta, bem entendido, dependente
de se conhecer a relacao , isto e, de se conhecer efectivamente que pares de
estados sao equivalentes. Mais adiante veremos um metodo (algoritmo) que
permite calcular a relacao de equivalencia entre estados. Por agora vamos
mostrar que A
R
reconhece a mesma linguagem que A, mas primeiro vejamos
um exemplo.
68
Exemplo 3.47 Aceitemos que o AF

` _
1

` _
2

` _
2

` _ \
3

` _
1

b
` _ \
3

satisfaz as equivalencias
1

, 2

, 3

e as que resultam destas por reexividade e simetria. As classes de equi-


valencia sao
[1

] = [1

] = {1

, 1

},
[2

] = [2

] = {2

, 2

},
[3

] = [3

] = {3

, 3

},
e constituem os estados do AF reduzido. O estado {1

, 1

} pode ser interpre-


tado como a fusao de 1

e 1

, e analogamente para {2

, 2

} e {3

, 3

}.
O estado inicial e [1

] = {1

, 1

} e os de aceitacao sao [3

] e [3

], que
sao de resto iguais a {3

, 3

}. A funcao de transicao satisfaz


R
([1

], b) =
[(1

, b)] = [2

] = {2

, 2

}. Dado que [1

] = [1

], podia tambem ter-se calcu-


lado
R
([1

], b) = [(1

, b)] = [2

] = {2

, 2

}.
O AF reduzido e:

\

{1

, 1

}
b

\

{2

, 2

}
s

`
_
\

{3

, 3

}
Depois de obtido o AF reduzido podem renomear-se os estados para aligeirar
a notacao, por exemplo, A = {1

, 1

}, B = {2

, 2

}, C = {3

, 3

}. 2
69
Proposicao 3.48 Com as notacoes anteriores, para todo o q Q e x T

R
([q], x) = [

(q, x)].
Demonstrac ao Esta propriedade generaliza a

R
a condicao que dene

R
. A sua demonstracao e por inducao no comprimento de x.
Caso x = :

R
([q], ) = [q] (def. de
R
)
= [

(q, )] (def. de ).
Caso x = ay:

R
([q], ay) =

R
(
R
([q], a), y) (def. de
R
)
=

R
([(q, a)], y) (def.
R
)
= [

((q, a), y)] (hip. indutiva)


= [

(q, ay)] (def. de ).


Fica terminada a demonstracao. 2
Teorema 3.49 Sejam A um AF e A
R
o seu AF reduzido. Tem-se
L(A
R
) = L(A).
Demonstrac ao Para todo o x T

:
x L(A
R
)

R
(q
R
I
, x) F
R
(def. L(A
R
))

R
([q
I
], x) F
R
(def. q
R
I
)
[

(q
I
, x)] F
R
(prop. anterior)

(q
I
, x) F (def. F
R
)
x L(A) (def. L(A)).
Como L(A
R
) e L(A) tem os mesmos elementos, sao iguais. 2
Para terminar este topico falta-nos apenas mostrar como se pode calcu-
lar a relacao . Para cada k 0, vamos denir uma aproximacao por
excesso,
k
, de . Intuitivamente, dizer que q
k
q

signica que nao e


possvel distinguir os estados q e q

observando apenas os comportamentos


de comprimento k a partir de cada um deles.
A designacao por excesso quer dizer que se q q

, entao q
k
q

. Isto e
evidente a partir da explicacao intuitiva de
k
, visto que se q q

, entao nao
e possvel distinguir q e q

por nenhum dos seus comportamentos, logo, por


maior forca de razao, nao e possvel distingui-los apenas por comportamentos
de comprimento k.
70
A mesma explicacao intuitiva mostra-nos que se q
k
q

para todo o
k 0, entao q q

.
Assim, o calculo de consiste em ir determinando
0
,
1
,
2
, . . . e assim
sucessivamente. Como veremos nao e necessario calcular
k
para todo o
k 0, mas apenas ate que se verique
k+1
=
k
, altura em que =
k
. Um
tal k existe sempre, e tem-se ainda k n2, em que n e o n umero de estados
do AF.
Vamos agora dar denicoes mais precisas destas nocoes.
Denicao 3.50 (Equivalencia-k) As relacoes
k
no conjunto de estados
Q de um AF denem-se por inducao em k como segue, para todos os q, q

Q:
q
0
q

sse q, q

F ou q, q

QF.
q
k+1
q

sse q
k
q

e, para todo o a T, (q, a)


k
(q

, a).
A seguinte proposicao justica as armacoes acima feitas sobre as relacoes

k
.
Proposicao 3.51 Consideremos um AF e as relacoes
k
da denicao an-
terior.
1. Cada
k
e uma relacao de equivalencia.
2. Para todos os q, q

Q,
q q

(k 0) q
k
q

.
3. Para todo o k n 2,
k
=
k+1
(n e o n umero de estados do AF).
4. Para todos os q, q

Q,
q q

q
n2
q

.
Demonstrac ao Todas estas propriedades sao conceptualmente simples,
por isso nao as demonstraremos em pormenor, limitando-nos a dar algumas
indicacoes sobre a forma como as demonstracoes poderiam ser conduzidas.
1. Esta armacao e demonstrada por inducao em k. Para k = 0 e
simples. No caso indutivo, a demonstracao de que
k+1
e uma equivalencia
e uma consequencia imediata da hipotese indutiva de que
k
tambem o e.
2. Este facto e crucial. A implicacao prova-se por inducao em k. Para
provar a implica cao inversa, , mostra-se, para todo o x T

, que

(q, x) e

(q

, x) estao ambos em F ou ambos em QF, por inducao no comprimento


de x.
71
3. Como q
k+1
q

implica q
k
q

, o n umero de classes de equivalencia


de
k+1
e superior ou igual ao n umero de classes de
k
. A relacao
0
tem, por denicao, duas classes. Quando o processo estabiliza, no pior dos
casos ha n classes (com um estado cada) e em cada transicao ate se atingir
a estabilizacao aumentou-se apenas em um o n umero de classes. Logo o
processo estabiliza no maximo ao m de n 2 transicoes.
4. Esta armacao e uma consequencia de 2 e 3. 2
Exemplo 3.52 Vamos ver como o resultado anterior pode ser usado para
determinar e, por conseguinte, construir o AF reduzido. Consideremos o
seguinte AF, dado por um diagrama e por uma tabela:

\
2
\
1
c

\
3
a

\
4
\
5
a
.
\
6
b

Q a b c
> 1 7 5 2
2 7 7 7
3 6 7 7
4 7 7 7
5 6 7 7
6 7 3 4
7 7 7 7
Na tabela acrescentou-se o estado 7, de erro, implcito no diagrama, marcou-
se o estado inicial com > e os estados de aceitacao com .
Como n = 7, tem-se n 2 = 5 e sabemos que
k+1
=
k
para todo o
k 5. Na verdade, como veremos, este exemplo nao representa o pior caso
e as relacoes
k
estabilizam a partir de k = 2.
O calculo das sucessivas relacoes
k
ate `a estabilizacao esta apresentado
nas tabelas seguintes:

0
Q a b c
1 A A B
3 A A A
A 5 A A A
6 A A B
7 A A A
B 2 A A A
4 A A A

1
Q a b c
A 1 B B C
6 B B C
3 A B B
B 5 A B B
7 B B B
C 2 B B B
4 B B B

2
Q a b c
A 1 C B D
6 C B D
B 3 A C C
5 A C C
C 7 C C C
D 2 C C C
4 C C C
Vejamos como se constroi a primeira tabela. Na primeira coluna repre-
sentaram-se as duas classes de
0
, nomeadamente, A = QF = {1, 3, 5, 6, 7}
72
e B = F = {2, 4}. O resto da tabela e identico `a tabela de transicoes de
estado, excepto que se escreveram as classes a que os elementos pertencem em
vez dos proprios elementos. Dois elementos q e q

na mesma classe e com


linhas iguais satisfazem q
0
q

e (a T) (q, a)
0
(q

, a), logo q
1
q

.
Assim, as classes de
1
sao formadas pelos estados dentro de uma mesma
classe de
0
que tem linhas iguais. Conclui-se que
1
tem tres classes,
que podem ser renomeadas como A = {1, 6}, B = {3, 5, 7} e C = {2, 4}.
Podemos agora completar a segunda tabela como zemos com a primeira.
Tal como anteriormente, estados numa mesma classe de
1
com linhas iguais
constituem uma classe de
2
. Ha quatro classes, que permitem construir
a terceira tabela pelo processo ja conhecido. Nesta tabela, os estados em
qualquer classe tem linhas iguais, o que mostra que
3
coincide com
2
. O
processo estabilizou, portanto
2
e a relacao .
O AF reduzido extrai-se da ultima tabela tomando as classes como esta-
dos:
Q
R
a b c
> A C B D
B A C C
C C C C
D C C C
` _
A
b

` _
B
a

b,c

` _ \
D
a,b,c

` _
C
a,b,c

O estado inicial e a classe que contem o estado inicial do AF dado e os estados


de aceitacao sao as classes dos estados de aceitacao do AF dado (neste caso
so uma). 2
3.9 Algumas propriedades decidveis
Vamos aqui considerar algumas questoes que se podem por a respeito de
automatos nitos e que tem uma resposta Sim ou Nao. Antecipando
materia que sera apresentada mais adiante, tais questoes dizem-se decidveis
se existirem algoritmos que permitem obter uma resposta em todas as si-
tuacoes possveis. As questoes que agora vamos considerar sobre automatos
nitos sao todas decidveis, mas adiante veremos que ha questoes semelhantes
a proposito de outros modelos computacionais que ja nao sao decidveis.
Existem algoritmos para as seguintes questoes, em que A, A
1
, A
2
sao
automatos nitos com alfabeto de entrada T e x T

:
1. x L(A) ?
73
Basta determinar o estado q =

(q
I
, x) e ver se q F.
2. L(A) = ?
Basta ver se algum estado de aceitacao e acessvel, isto e, se existe
algum percurso do estado inicial para um estado de aceitacao.
3. L(A) = T

?
Pela Propriedade ??, constroi-se um automato A

tal que L(A

) =
T

L(A) e ve-se se L(A

) = .
4. L(A
1
) L(A
2
) ?
Tem-se L(A
1
) L(A
2
) se, e so se, (T

L(A
2
)) L(A
1
) = . Usando
a Propriedade ??, constroi-se um automato A tal que L(A) = (T


L(A
2
)) L(A
1
) e ve-se se L(A) = .
5. L(A
1
) = L(A
2
) ?
Ve-se se L(A
1
) L(A
2
) e L(A
2
) L(A
1
).
74
Captulo 4
Gramaticas independentes do
contexto
As gramaticas sao o modelo mais utilizado para a denicao da sintaxe das
linguagens formais. Neste captulo, apos a denicao geral de gramatica,
concentraremos a nossa atencao nas gramaticas independentes do contexto,
que constituem a classe de gramaticas que e usada na quase totalidade dos
casos na pratica.
4.1 Gramaticas
Os automatos sao dispositivos reconhecedores: testam palavras, veri-
cando se satisfazem certos criterios de reconhecimento. Ao inves, as gramati-
cas sao dispositivos geradores: produzem palavras, utilizando certo tipo de
regras de producao. O mecanismo de geracao usado e a rescrita: substituicao
de uma sub-palavra por outra palavra. A rescrita e especicada por regras
de producao ou producoes: indicam como uma palavra pode ser substituda
por outra. Estes sao os ingredientes principais da nocao de gramatica.
Denicao 4.1 (Gramatica) Uma gramatica G e constituda por quatro ti-
pos de entidades:
1. Um alfabeto T de smbolos ditos terminais.
2. Um alfabeto N, disjunto de T, de smbolos nao-terminais. A uniao dos
dois alfabetos escreve-se
V = T N.
3. Um smbolo nao-terminal S N chamado o smbolo inicial da gramatica.
75
4. Um conjunto nito P de producoes. Uma producao e um par (, ),
que em geral se escreve na forma

(ou, por vezes, ::= ), em que V

NV

e V

(isto signi-
ca que tem de conter pelo menos um smbolo nao-terminal e e
arbitraria). Diz-se que e a cabeca e e o corpo da producao.
Costuma-se escrever G = (T, N, S, P) para tornar explcitos todos os compo-
nentes da gramatica G.
Exemplo 4.2 A gramatica G = (T, N, S, P) seguinte sera usada em varios
exemplos mais abaixo:
T = +, =, 1;
N = E, A, B;
S = E;
P = E +A ,
A BAB ,
A = ,
+B B+ ,
B 1
.
(Quando introduzirmos as gramaticas independentes do contexto veremos
uma forma mais aligeirada de apresentar a denicao de gramaticas.) 2
Denicao 4.3 (Derivacao directa, rescrita) Seja P uma
producao e uma palavra contendo como sub-palavra.
`
A substituicao
da ocorrencia de por chama-se derivacao directa ou rescrita de em
e escreve-se

G
.
Havendo so uma gramatica em consideracao, nao ha possibilidade de confusao
e escreve-se simplesmente omitindo o ndice G.
De forma sucinta, pode dizer-se que uma derivacao directa consiste em
substituir numa palavra uma ocorrencia da cabeca de uma producao pelo
seu corpo. Aplicando sucessivamente varias derivacoes directas obtem-se
uma derivacao.
76
Denicao 4.4 (Derivacao) Uma derivacao consiste numa sucessao de zero
ou mais derivacoes directas. Mais precisamente, escreve-se

G

(ou simplesmente

) se existirem
0
,
1
, . . . ,
n
V

tal que
=
0

1

n
= .
A sucessao anterior chama-se a derivacao de em e o n umero n de res-
critas e o seu comprimento. Quando se pretende evidenciar o comprimento
da derivacao poe-se

n
G
.
A notacao
+
G
signica que existe uma derivacao de comprimento dife-
rente de zero.
Exemplo 4.5 Eis algumas derivacoes directas para a gramatica do Exem-
plo ??, cujas producoes reproduzimos aqui para facilitar a consulta:
E +A ,
A BAB ,
A = ,
+B B+ ,
B 1 .
Em todos os casos estao assinalados a cabeca e o corpo da producao utilizada:
E +A, +A +BAB, +BAB B+AB.
Mostra-se a seguir uma derivacao da palavra 1 + 1 = 11 a partir do
smbolo inicial E, onde antes de cada rescrita se sublinha a cabeca (mas nao
o corpo) da producao utilizada:
E +A +BAB +BBABB +BB = BB B +B = BB
1 +B = BB 1 + 1 = BB 1 + 1 = 1B 1 + 1 = 11
2
Observacao 4.6 Em geral, uma palavra pode ser rescrita de varias maneiras
diferentes. Por exemplo, a palavra +BB = BB tem cinco rescritas possveis,
+BB = BB B +B = BB,
+BB = BB +1B = BB,
+BB = BB +B1 = BB,
+BB = BB +BB = 1B,
+BB = BB +BB = B1,
77
onde se sublinhou a cabeca da producao utilizada em cada caso. Pela mesma
razao, uma derivacao a partir de uma palavra dada e uma entre varias
possveis. Note-se, no entanto, que quando sao rescritas duas partes de uma
palavra que nao se intersectam, como acontece em todos os casos acima ex-
cepto nos dois primeiros, a ordem em que as rescritas sao efectuadas nao
inui no resultado nal. Por essa razao, muitas derivacoes acabam por gerar
a mesma palavra sobre o alfabeto terminal, visto que sao variantes umas
das outras que diferem apenas na ordem de aplicacao de rescritas indepen-
dentes. Por exemplo, embora sejam muitas as derivacoes a partir da pala-
vra +BB = BB, as palavras geradas sobre o alfabeto terminal sao apenas
+11 = 11, 1 + 1 = 11 e 11+ = 11. Quando estudarmos as gramaticas in-
dependentes do contexto veremos como e possvel caracterizar as derivacoes
equivalentes pelo facto de partilharem a mesma arvore de derivacao. 2
Propriedades 4.7 Com as notacoes anteriores:
1. Se P, entao .
(Resulta de se fazer = = na denicao de rescrita.)
2. Para todo o V

.
(

E o caso n = 0 na denicao de derivacao.)


3. Se

, entao

.
(Imediato, pela denicao de derivacao.)
Denicao 4.8 (Linguagem gerada) Se G uma gramatica. O conjunto
das palavras que derivam de V

e
T() = V

.
Restringindo-nos ao alfabeto terminal, obtemos a linguagem derivada por :
L() = x T

x.
A l inguagem gerada pela gramatica, L(G), e por denicao a linguagem L(S)
derivada pelo smbolo inicial S, isto e,
L(G) = x T

: S

x.
Exemplo 4.9 Retomemos a gramatica do Exemplo ??, cujas producoes se
reproduzem uma vez mais:
E +A ,
A BAB ,
A = ,
+B B+ ,
B 1 .
78
Uma derivacao generica tem a forma
E +A +BAB +B
2
AB
2
+B
n
AB
n
+B
n
= B
n
B +B
n1
= B
n
B
k
+B
nk
= B
n
1
k
+ 1
nk
= 1
n
.
Apos a aplicacao da producao de E, aplica-se um certo n umero de vezes (n)
a primeira producao do A, seguida de uma aplicacao da segunda producao,
obtendo-se E

+B
n
= B
n
. Em seguida, trocam-se + e B um certo n umero
de vezes (k) usando a pen ultima producao e termina-se substituindo B por 1
com a ultima producao. Bem entendido, esta ordem de rescritas nao e unica,
em virtude de muitas delas serem independentes, mas e a mais sistematica
e por isso e a que melhor se presta a compreender o que a gramatica gera.
Nao e difcil ver que toda a derivacao tem essencialmente esta forma, pelo
que a linguagem gerada e
L(E) = 1
k
+ 1
n
= 1
k+n
: k, n 0
e pode ser interpretada como a tabuada da adicao em numeracao unaria (o
n umero natural n e representado em numeracao unaria por 1
n
; em particular,
0 e representado por ). 2
4.2 Classicacao de Chomsky
A classicacao de Chomsky das gramaticas agrupa-as em quatro categorias
segundo a forma das suas producoes.
Tipo 0
Nas gramaticas de tipo 0, as producoes nao estao sujeitas a qualquer res-
tricao. Tem entao a forma geral

com V

NV

e V

. Para acentuar este facto, estas gramaticas


chamam-se por vezes nao-restringidas. Bem entendido, toda a gramatica e
de tipo 0.
Tipo 1
Nas gramaticas de tipo 1 as producoes tem a forma
A
79
com , V

e V
+
( ,= ). A intuicao e que o smbolo nao-terminal
A pode ser substitudo por ,= desde que A esteja rodeado `a esquerda por
e ` a direita por (tambem se diz que a substituicao e feita no contexto
(, ), que parmanece inalterado pela operacao).
As gramaticas do tipo 1, em que todas as producoes tem a forma indi-
cada com a possvel excepcao da producao S para o smbolo inicial
da gramatica se ele nao ocorrer no corpo de nenhuma producao, ainda de-
pendentes do contexto, em virtude da interpretacao dada `as suas producoes.
Claramente, as gramaticas do tipo 1 sao tambem do tipo 0.
Tipo 2
As gramaticas de tipo 2 tem todas as producoes da forma
A
com A N e V

(note-se que pode ser = ). Estas gramaticas


tambem se chamam independentes do contexto, visto que o smbolo nao-
terminal A pode ser sempre substitudo pela palavra (que pode ser vazia)
independentemente do contexto em que A se encontre.
Se nas producoes de tipo 1 nao se tivesse exigido que ,= , as producoes
de tipo 2 seriam um caso particular daquelas, bastando para isso tomar
= = . A unica excepcao sao as producoes da forma A , que sao
de tipo 2 mas nao de tipo 1. Assim, uma gramatica de tipo 2 pode nao ser
de tipo 1, nomeadamente se contiver producoes A com A ,= S.
Tipo 3
Finalmente, as producoes de tipo 3 tem uma de duas formas,
A x ou A xB,
com A, B N e x T

. Estas gramaticas chamam-se tambem lineares di-


reitas, visto que o corpo das suas producoes contem no maximo um smbolo
nao-terminal, o qual ocorre o mais `a direita possvel. Como as producoes
de tipo 3 sao de tipo 2, as gramaticas lineares direitas sao independentes
do contexto. A forma das producoes e a designacao das gramaticas sugerem
uma relacao estreita com os sistemas de equacoes lineares direitos, e por con-
seguinte com os automatos nitos. De facto, mostraremos mais adiante que
existem traducoes muito directas , em ambos os sentidos, entre gramaticas
lineares direitas e AFND que preservam as linguagens gerada e reconhecida.
Que se pode dizer sobre as relacoes entre as classes de linguagens geradas
por estes tipos de gramaticas?
80
Para i = 0, 1, 2, 3, seja L
i
a classe das linguagens geradas pelas gramaticas
do tipo i. Tem-se as seguintes inclusoes estritas:
L
3
L
2
L
1
L
0
.
As inclusoes (nao estritas) L
3
L
2
e L
1
L
0
sao faceis de estabelecer, visto
que as producoes dos tipos 3 e 1 sao casos particulares, respectivamente,
das producoes dos tipos 2 e 0. A inclusao L
2
L
1
sera vista mais adiante,
bem como as inclusoes estritas L
3
L
2
L
1
. A inclusao estrita L
1
L
0
nao sera aqui estabelecida, porque no que se segue estaremos exclusivamente
interessados nas gramaticas independentes do contexto (tipo 2) e no caso
particular das gramaticas lineares direitas (tipo 3).
Convencao importante: A partir deste ponto,
quando nos referirmos a uma gramatica sem especicar
o seu tipo, teremos sempre em mente uma gramatica
independente do contexto, que se abrevia para GIC.
4.3 Derivacoes em GIC
Ha duas propriedades que as derivacoes em GIC satisfazem e que sao usadas
in umeras vezes sem que isso seja referido explicitamente. A primeira pro-
priedade capta a ideia de que as rescritas se mantem validas se as palavras
rescritas forem inseridas em contextos maiores. Mais precisamente, se de-
rivar , entao tambem o faz em qualquer contexto (, ), isto e, deriva
.
Proposicao 4.10 Para todos os , , , V

implica

.
Demonstrac ao No caso em que

e uma derivacao directa


= A =
com A P tem-se, evidentemente, a derivacao directa
= A = ,
logo

.
No caso geral, ha uma derivacao
=
0

1

n
= .
81
Aplicando a cada derivacao directa a conclusao anterior, obtem-se
=
0

1

n
= ,
e uma vez mais se conclui que

. 2
Podemo-nos perguntar se toda a palavra derivada a partir de e da
forma em que deriva . Mas isto pode nao ser verdade, porque quer
quer podem conter smbolos nao-terminais que sao rescritos durante a
derivacao, e portanto esta nao se ca so a dever a uma derivacao de . No
entanto, se e contiverem apenas smbolos terminais, ja isso nao acontece e
a derivacao decorre mesmo de uma derivacao de , como o proximo resultado
mostra.
Proposicao 4.11 Sejam , V

e x, y T

. Entao
xy

implica V

:
= xy,

.
Demonstrac ao Se xy

tem-se
xy x
1
y x
n
y = ,
em que cada se rescreve no seguinte visto que x e y nao tem ocorrencias
de smbolos nao-terminais. Tem-se assim

1

n
.
Fazendo =
n
, conclui-se

, como se pretende. 2
4.4

Arvores de derivacao
As derivacoes numa gramatica podem ser apresentadas sob a forma de uma
arvore, chamada uma arvore de derivacao. As arvores de derivacao tem varias
vantagens sobre as derivacoes quando se trata de captar a estrutura das
palavras derivadas, estrutura essa que e essencial para atribuir signicado `as
palavras, como veremos. Antes de dar a denicao geral vamos apresentar um
exemplo, mas primeiro e conveniente introduzir uma convencao que permite
simplicar a escrita de gramaticas particulares.
82
Convencao 4.12 Em exemplos as GIC serao representadas apenas pelas
suas producoes. Por convencao, os smbolos nao-terminais sao as cabecas das
producoes, o smbolo inicial e a cabeca da primeira producao e os smbolos
terminais sao os restantes smbolos que ocorrem nos corpos das producoes.

E costume tambem adoptar uma convencao que simplica a escrita das


producoes. Se
A
1
, A
2
, . . . , A
n
foremtodas as producoes existentes na gramatica para o smbolo nao-terminal
A, a sua escrita abrevia-se para
A
1
[
2
[ [
n
.
Esta expressao pode ler-se da seguinte maneira: um A e um
1
ou um
2
ou
. . . um
n
.
Consideremos por exemplo a gramatica
EE +T
ET
T T F
T F
F(E)
Fa
Trata-se de uma gramatica muito simplicada de expressoes aritmeticas,
onde as expressoes basicas (variaveis e n umeros) estao uniformemente repre-
sentadas pelo smbolo a. De acordo com as nossas convencoes, os smbolos
nao-terminais sao E, T, F, sendo E o smbolo inicial, e os smbolos termi-
nais sao +, , (, ), a. Com a escrita abreviada das producoes, a gramatica
ca
EE +T [ T
T T F [ F
F(E) [ a
Esta gramatica e algumas variantes serao usadas ao longo desta seccao. 2
Exemplo 4.13 Consideremos de novo a gramatica
EE +T [ T
T T F [ F
F(E) [ a
83
As producoes podem ser representadas por arvores:
E

E
E
+
T T
T

T
T

F F
F

F
(
E
) a
A cabeca de cada producao etiqueta a raiz e o corpo as folhas, ordenada-
mente, da esquerda para a direita.

E importante observar que cada no e
etiquetado por um e um so smbolo. Quando existe uma producao de corpo
vazio, A , representa-se por
A

Uma arvore de derivacao constroi-se expandindo uma folha etiquetada


por um smbolo nao-terminal pela arvore de uma producao para esse smbolo.
Como exemplo, tem-se a seguinte arvore de derivacao:
E

E
+
T

T T

F
F F
a
a a
As folhas desta arvore estao etiquetadas por smbolos terminais e os nos
interiores por smbolos nao-terminais. Cada no interior, juntamente com os
seus sucessores imediatos, constitui uma arvore de producao.
84
Concatenando as etiquetas das folhas da esquerda para a direita obtem-se
uma palavra sobre o alfabeto terminal, neste caso a palavra a +a a. Nao e
difcil ver que esta palavra pode ser derivada a partir da gramatica. A partir
da arvore, alias, podem extrair-se varias derivacoes desta palavra. Duas delas
tem especial interesse. Comecando na raiz e seleccionando sempre o smbolo
mais `a esquerda ainda nao expandido para ser rescrito obtem-se a derivacao
esquerda da palavra:
E E +T T +T F +T a +T
a +T F a +F F a +a F
a +a a
Rescrevendo sempre o smbolo nao-terminal mais `a direita, obtem-se uma
derivacao direita:
E E +T E +T F E +T a
E +F a E +a a T +a a
F +a a a +a a
Muitas outras derivacoes da mesma palavra sao possveis, variando a escolha
do smbolo a rescrever. Uma vantagem da arvore de derivacao e que e uma
representacao unica que inclui todas as derivacoes possveis. 2
Denicao 4.14 (

Arvore de derivacao) Seja G = (T, N, S, P) uma gra-


matica. Uma arvore de derivacao de G caracteriza-se do seguinte modo:


E uma arvore nita, nao vazia e ordenada. Esta ultima condicao sig-
nica que os sucessores imediatos de cada no se consideram totalmente
ordenados. Em representacoes gracas, os nos desenham-se da es-
querda para a direita na respectiva ordem.
A raiz e etiquetada por um elemento de N.
Os nos interiores sao etiquetados por elementos de N, que tambem po-
dem etiquetar folhas. Se um no interior tiver etiqueta A e os sucesso-
res imediatos, na ordem esquerda-direita, tiverem etiquetas X
1
, . . . , X
n
,
entao A X
1
X
n
e uma producao da gramatica.
Os nos nao etiquetados por elementos de N, que sao necessariamente
folhas, sao etiquetados por elementos de T .
Note-se que um so no etiquetado por qualquer A N e uma arvore de
derivacao, e e a mais simples possvel visto que a arvore nao pode ser vazia.
85
Denicao 4.15 (Fronteira) Chama-se fronteira de uma arvore de deriva-
cao `a palavra que resulta concatenando as etiquetas das suas folhas da es-
querda para a direita, isto e, a sequencia de folhas que se obtem no percurso
prexo da arvore.
Representaremos esquematicamente por
A

a arvore de derivacao de raiz (etiquetada por) A e fronteira .


A propriedade seguinte relaciona derivacoes e arvores de derivacao.
Proposicao 4.16 Sejam A N e V

. Tem-se A

sse for a
fronteira de uma arvore de derivacao de raiz A.
Demonstrac ao Vamos considerar separadamente os dois casos da equiva-
lencia.
Caso se:
Suponhamos que e dada uma arvore de derivacao de raiz A e fronteira
e mostremos que A

. Se a arvore se reduz a um no, a raiz e igual


`a fronteira, isto e, A = . Tem-se A

A, logo A

. No caso geral a
arvore tem a forma
A

X
1

. . .
X
n

1
n
em que A X
1
X
n
e uma producao e =
1

n
. Assumindo, por
inducao na altura da arvore, que X
1


1
, . . . , X
n


n
, deduz-se que
X
1
X
n


1

n
. Como A X
1
X
n
e =
1

n
, conclui-se que
A

.
Caso so se:
Agora vamos supor que A

e vamos mostrar que existe uma arvore


de derivacao de raiz A e fronteira . A demonstracao e por inducao no
comprimento da derivacao A

.
Se o comprimento for zero, tem de ser = A, e a arvore procurada tem
um unico no etiquetado por A.
86
Se o comprimento for n+1, existe uma producao A X
1
X
n
tal que
X
1
X
n

e o comprimento desta ultima derivacao e n. Por uma pro-


priedade das derivacoes, existem
1
, . . . ,
n
tal que X
1


1
, . . . , X
n


n
e
1

n
= . (Note-se que se algum X
i
T, entao
i
= X
i
.) Como cada
derivacao X
i


i
tem comprimento n, podemos supor, pela hipotese
indutiva, que existem arvores de derivacao
X
i

i
para i = 1, . . . , n. Mas entao a arvore
A

X
1

. . .
X
n

1
n
satisfaz as condicoes requeridas. Fica terminada a demonstracao. 2
Este resultado mostra que a linguagem gerada por uma gramatica G e
o conjunto de todas as palavras x T

para as quais existe uma arvore de


derivacao
S

x
de raiz S (smbolo inicial da gramatica) e fronteira x. Esta arvore e impor-
tante porque confere a x uma estrutura que e usada para lhe dar signicado.
4.5 Consideracoes semanticas
Nesta seccao fazemos uma primeira abordagem ao tema da atribuicao de si-
gnicado `as palavras de uma linguagem (semantica da linguagem) com base
na estrutura que as palavras adquirem atraves das suas arvores de derivacao.
Ilustraremos esta observacao com gramaticas de expressoes aritmeticas (mas
generalizavel a qualquer tipo de expressoes), e discutiremos nomeadamente
questoes de precedencia de operadores e de ordem de avaliacao de operacoes.
87
Avaliacao de expressoes
Consideremos uma variante da gramatica que temos vindo a utilizar em
exemplos, excepto que em vez de a vamos ter os dgitos decimais:
E E +T [ T
T T F [ F
F (E) [ 0 [ 1 [ 2 [ 3 [ 4 [ 5 [ 6 [ 7 [ 8 [ 9
A arvore de derivacao de 3 + 2 5 e a seguinte:
E

E
+
T

T T

F
F F 5
3 2
O valor numerico que a expressao aritmetica 3 +2 5 representa pode ser
directamente calculado a partir da sua arvore de derivacao:
Partindo das folhas em direccao `a raiz, calcula-se o valor de cada
no interior da maneira evidente em funcao dos valores dos seus
lhos, sendo que o valor de uma folha etiquetada com um dgito
e o valor desse dgito.
Repete-se a seguir a arvore de derivacao anterior, indicando junto de cada
no o seu valor:
E
.
.
.
.
.
.
.
.
.
.

13
.
.
.
.
.
.

E 3

+
T

10

T 3

T 2


F 5

F 3

F 2

5 5
3 3 2 2
No captulo sobre gramaticas de atributos veremos como se pode denir
com precisao a avaliacao de expressoes (e de muitas outras caractersticas
semanticas de linguagens), mas para os nossos objectivos aqui esta descricao
informal e suciente.
88
Prioridade na avaliacao de operadores
O calculo do valor da expressao 3 + 2 5 efectuou em primeiro lugar a mul-
tiplicacao 2 5 = 10 e so depois a adicao 3 + 10 = 13, como seria desejavel.
Mas como se conseguiu esse efeito?
Olhando para a arvore de derivacao que ilustra esse calculo ve-se que, no
sentido das folhas para a raiz, a operacao e encontrada antes de + e os
operandos da adicao so cam completamente conhecidos depois de ter sido
efectuada a multiplicacao.
Na gramatica esse efeito consegue-se separando as producoes que intro-
duzem adicoes das que produzem multiplicacoes e hierarquizando-as. A
producao que introduz as adicoes e E E+T. Esta producao e usada em
primeiro lugar para gerar todas as adicoes que se desejem e so depois se usa
a producao E T para gerar multiplicacoes a partir de T. Desta forma
garante-se que as multiplicacoes quem mais proximas das folhas e por isso
sejam avaliadas antes das adicoes.

E curioso observar que nao seria difcil conceber uma gramatica que tro-
casse a prioridade convencional dos operadores. Na verdade, bastaria, como e
evidente, trocar o + com o , mas na gramatica abaixo trocaram-se tambem
T e F para manter o signicado convencional de termo e de factor, res-
pectivamente elemento de uma soma e elemento de um produto. Eis entao a
gramatica:
E E F [ F
F F +T [ T
T (E) [ 0 [ 1 [ 2 [ 3 [ 4 [ 5 [ 6 [ 7 [ 8 [ 9
Esta gramatica gera a mesma linguagem que a anterior. Na gura seguinte
mostra-se a arvore de derivacao de 3 +2 5 juntamente com a sua avaliacao:
E
.
.
.
.
.
.
.
.
.
.

25
.
.
.
.
.
.

E 5


F 5

F
.
.
.
.
.
.
.
.
.
.

5
.
.
.
.
.
.

T 5

F 3

+
T 2

5 5
T 3 2 2
3 3
89
Este exemplo mostra que nao basta em geral conceber uma gramatica
para gerar a sintaxe da linguagem em que estamos interessados, e importante
que a gramatica seja concebida para ter em conta os aspectos semanticos
pretendidos.
Regressando `a gramatica com a prioridade convencional dos operadores,
observemos que esta disponvel o mecanismo habitual de inverter a ordem de
avaliacao quando isso for desejavel, que e o uso de parenteses. Na expressao
(3 + 2) 5 os parenteses obrigam a efectuar a adicao antes da multiplicacao.
Eis a sua arvore de derivacao:
E
T
.
.
.
.
.
.
.
.
.
.

T

F
F

a
(
E

)
E
+
T
T F
F
a
a
Operadores unarios
Em geral, os operadores unarios (com um so argumento), quando existem, sao
os que tem maior prioridade.

E o que acontece, por exemplo, nas expressoes
aritmeticas com o operador que calcula o simetrico de um n umero. De
acordo com a discussao apresentada acima, nao e difcil ver que este operador
pode ser introduzido numa gramatica de expressoes aritmeticas na seguinte
forma:
E E +T [ T
T T F [ F
F P [ P
P (E) [ 0 [ 1 [ 2 [ 3 [ 4 [ 5 [ 6 [ 7 [ 8 [ 9
90
Esta gramatica garante que uma expressao como 1 + 3 e calculada com o
seu valor correcto, que e 2, em vez do valor incorrecto 4 que se obteria se
se efectuasse em primeiro lugar a adicao (desenhe a arvore de derivacao!).
Ordem de avaliacao
Numa expressao a +a +a podemos querer que ela seja avaliada da esquerda
para a direita ou da direita para a esquerda. No primeiro caso usamos uma
gramatica da forma
E a [ E +a
Intuitivamente, ao avaliar o + numa expressao E+a, todas as adicoes geradas
por E `a esquerda do + que ocorre na producao tem de ser avaliadas
antes. Podemos observar essa situacao na arvore de derivacao de a +a +a:
E

+ a
E
+ a
a
Se pretendessemos a avaliacao da direita para a esquerda usaramos a
gramatica
E a [ a +E
A expressao a + E mostra que antes de avaliar o + que la ocorre e preciso
avaliar as adicoes geradas por E. Como estas se situam `a direita do + que
estamos a considerar, a avaliacao faz-se da direita para a esquerda.
A arvore de derivacao de a +a +a seria:
E

a +
E

a +
E
a
4.6 Ambiguidade
Ate aqui assumimos implicitamente que cada palavra tinha uma so arvore
de derivacao. O que acontece quando existem duas arvores de derivacao
diferentes para a mesma palavra?
91
Denicao 4.17 (Gramatica ambgua) Uma gramatica G diz-se ambgua
se existir uma palavra sobre V = T N que tem (pelo menos) duas arvores
de derivacao diferentes.
Nao e difcil encontrar exemplos de gramaticas ambguas. Uma pri-
meira classe de exemplos tem a ver com situacoes em que e necessario gerar
sequencias de elementos. Por exemplo, a gramatica de que se mostra o frag-
mento
S A [ SS
A
e ambgua, como o mostram as duas arvores de derivacao seguintes da palavra
AAA:
S

S
S S A
A A
S

S S

A S S
A A
Para gerar AAAe preciso usar em primeiro lugar a producao S SS, o que
requer decompor a palavra AAA em duas e gerar cada uma delas por S. O
problema e que ha duas formas de decompor AAA, donde a ambiguidade. O
problema resolve-se estipulando uma forma unica de efectuar a decomposicao.
Por exemplo, pode-se dizer que a primeira palavra tem apenas um A e a outra
os restantes. Isto levaria a substituir a producao S SS por S AS.
Outra solucao, simetrica desta, seria dizer que e a segunda palavra que tem
apenas um A, o que nos levaria `a nova producao S SA. Assim, a
gramatica anterior poderia ser substituda por qualquer das seguintes:
S A [ AS S A [ SA
A , A ,
assumindo que as producoes de A nao introduzem S de novo.
Ha muitas variantes da gramatica anterior. O problema seria essencial-
mente o mesmo se se pudesse gerar a sequencia vazia ou se os elementos da
sequencia estivessem separados por vrgulas:
S [ A [ S, S
No caso das expressoes aritmeticas poderamos ter, por exemplo,
E a [ E +E
92
e a segunda producao poderia ser substituda por E E+a ou E a+E
consoante se previlegiasse a avaliacao da esquerda para a direita ou da direita
para a esquerda.
Se tivessemos expressoes aritmeticas com mais de um operador, ao remo-
ver a ambiguidade teramos de ter em atencao a prioridade dos operadores.
Consideremos por exemplo a gramatica:
E E +E [ E E [ (E) [ a
Os termos (E) e a nao introduzem ambiguidade visto que E esta rodeada
por parenteses. Isolando estes termos e representando-os por F chega-se `a
gramatica:
E E +E [ E E [ F
F (E) [ a
A linguagem gerada pelas producoes de E gera sequencias de F separadas
por + ou por , como por exemplo
F +F +F F +F F.
podamos remover a ambiguidade imaginando que estas expressoes eram de-
compostas de forma a que a segunda expressao fosse F, para se ter a avaliacao
da esquerda para a direita. A gramatica a que se chegava seria:
E F [ E +F [ E F
F (E) [ a
O problema com esta gramatica e que nem sempre se quer avaliar as ex-
pressoes na ordem estrita esquerda-direita quando ha em jogo operadores de
diferentes prioridades. A arvore de derivacao seguinte da palavra a + a a
ilustra esta armacao:
E


F
E
+
F
a
F
a
a
A alternativa e olhar para a sequencia de F separados por + e e ter uma
leitura a dois nveis. Num primeiro nvel decompomos a sequencia em sub-
93
sequencias separadas por + e num segundo nvel consideramos essas sub-
sequencias como sequencia de F separadas por :
F F

T
+F F

T
+ +F F

T
Por exemplo, para a sequencia apresentada acima tem-se
F

T
+ F

T
+F F

T
+F F

T
Assim, E gera sequencias de T separadas por + e T gera sequencias de F
separadas por , como se mostra na gramatica seguinte:
E T [ E +T
T F [ T F
F (E) [ a
Problemas de ambiguidade tambem surgem com operadores unarios, como
na gramatica
E a [ E +a [ E
Aqui o problema e que quando se escreve a + a nao se sabe se o sinal
afecta toda a expressao ou somente o primeiro a:
E

E
+ a
a
E

+ a

E
a
Neste caso, atendendo a que tem prioridade superior a +, bastaria subs-
tituir a producao E E por E a. Numa situacao um pouco mais
geral viu-se num exemplo anterior como introduzir esta operacao unaria.
Nesta passagem nao muito sistematica por algumas fontes de ambiguidade
convem referir o uso excessivo de . A gramatica
S [ AS
A [ a
gera todas as sequencias de a, incluindo a vazia. Para gerar uma sequencia de
comprimento k, pode comecar por gerar uma sequencia de A de comprimento
n k e depois, usando a producao A , eliminar nk desses A. Existem
94
assim muitas maneiras de gerar, por exemplo, a palavra a, tres das quais se
ilustram a seguir:
S

A S
a

S

A S

a
A S

S

A S

A S
a

A solucao neste caso seria nao permitir apagar A para obrigar a gerar o
n umero exacto requerido, o que se consegue eliminando a producao A .
A gramatica caria
S [ AS
A a
Os exemplos anteriores mostram que uma mesma linguagem pode ter
gramaticas ambguas e gramaticas nao-ambguas. O que acontece se tods as
gramaticas para uma mesma linguagem forem ambguas?
Denicao 4.18 (Linguagem inerentemente ambgua) Uma linguagem
diz-se inerentemente ambgua se toda a gramatica que gera a linguagem for
ambgua.
Uma linguagem inerentemente ambgua e
a
i
b
i
c
j
: i, j 1 a
i
b
j
c
j
: i, j 1.
Nao procuraremos justicar esta armacao. Uma explicacao intuitiva podera
ser que a linguagem exige metodos diferentes para gerar cada uma das sub-
linguagens que entram na sua denicao, mas entao as palavras a
i
b
i
c
i
(i 1)
pertencem a ambas as sub-linguagens, e por conseguinte podem ser geradas
de duas maneiras diferentes.
4.7 Gramaticas lineares direitas e automatos
nitos
Nesta seccao vamos mostrar como se passa de uma gramatica linear direita
(GLD) a um automato nito (AF) que reconhece a linguagem gerada pela
gramatica e vice-versa. Recordemos que numa GLD as producoes tem a
forma A x ou A xB com A, B N e x T

. Para relacionar
GLD com AF e conveniente dispor de uma forma ainda mais simplicada
das producoes, o que e objecto da propriedade seguinte.
95
Proposicao 4.19 Toda a GLD G = (T, N, S, P) pode ser transformada
numa GLD G

tal que L(G) = L(G

) e as producoes de G

sao da forma
A , A B ou A aB
com A, B N e a T.
Demonstrac ao A demonstracao e um algoritmo para transformar G em
G

que se executa em dois passos.


1
o

passo
Seja A x uma producao com x T
+
, isto e, x T

mas x ,= . Este
tipo de producoes nao e permitido em G

. Consequentemente, retiramos de
P a producao A x e em sua substituicao acrescentamos as producoes
A xB e B onde B e um novo smbolo nao-terminal (novo
no sentido em que nao existia previamente em V ). Mais formalmente, esta
operacao consiste em denir a gramatica
G
0
= (T, N
0
, S, P
0
),
em que
N
0
= N B com B , V, e
P
0
= (P A x) A xB, B .

E facil concluir que L(G


0
) = L(G). Com efeito, para ver que L(G) L(G
0
)
observe-se que toda a palavra sobre T derivada em G pode ser derivada em
G
0
. Para tal, substitui-se cada rescrita wA wx em G em que e usada a
producao A x (necessariamente a ultima rescrita das derivacoes em que
ocorre) por wA wxB wx em G
0
. A vericacao de que L(G
0
) L(G)
e semelhante. Temos de ver que toda a palavra sobre T derivada em G
0
tambem e derivada em G. Em qualquer derivacao de G
0
, se qualquer uma
das novas producoes for usada, entao tem de ser as duas usadas em bloco,
B imediatamente a seguir a A xB. A razao de ser deste facto e
que sendo B um novo smbolo, as duas unicas producoes em que ocorre (na
cabeca ou no corpo) sao as novas producoes. Assim, obtem-se uma derivacao
em G substituindo wA wxB wx por wA wx.
Para nalizar o primeiro passo, repete-se esta operacao ate que nao exis-
tam mais producoes da forma A x com x T
+
. Seja
G
1
= (T, N
1
, S, P
1
)
a gramatica a que se chegou. Como acabou de se ver, tem-se L(G
1
) = L(G).
Por outro lado, as producoes desta gramatica tem a forma
A ou A xB.
96
Resta-nos eliminar estas ultimas em que [x[ > 1, substituindo-as por producoes
com a forma requerida.
2
o

passo
Seja A a
1
a
2
a
n
B uma producao de G
1
com a
1
, a
2
, . . . , a
n
T e
n > 1. Esta producao elimina-se substituindo-a pelas producoes
A a
1
A
1
A
1
a
2
A
2
.
.
.
A
n1
a
n
B
onde A
1
, A
2
, . . . , A
n1
sao novos smbolos nao-terminais. Seja G
2
a gramati-
ca assim obtida (cuja denicao mais formal se deixa como exerccio). A
vericacao de que L(G
2
) = L(G
1
) faz-se como no passo anterior. Assim, `a
derivacao directa
xA xa
1
a
2
a
n
B
em G
1
usando a producao eliminada corresponde em G
2
a derivacao
xA xa
1
A
1
xa
1
a
2
A
2
xa
1
a
n1
A
n1
xa
1
a
n
B.
Inversamente, as novas producoes em G
2
tem de ser usadas em bloco como
na derivacao anterior, visto que A
1
, A
2
, . . . , A
n1
sao novos smbolos que so
ocorrem nas novas producoes, e isso corresponde `a derivacao directa xA
xa
1
a
2
a
n
B em G
1
. Por este processo de traducao em ambos os sentidos
se ve que G
1
e G
2
derivam as mesmas palavras sobre T, como se pretende.
Iterando este passo ate nao existirem mais producoes da forma indicada, ca-
se com uma GLD G

tal que L(G

) = L(G) e cujas producoes tem a forma


desejada. 2
Depois de dar um exemplo, estamos em condicoes de relacionar GLD e
AFND.
Exemplo 4.20 A GLD
S aS [ cc [ A
A bcA [
transforma-se ao m do primeiro passo em
S aS [ ccB [ A
B
A bcA [
97
Depois do segundo passo obtem-se nalmente
S aS [ cB
1
[ A
B
1
cB
B
A bA
1
[
A
1
cA
2
Proposicao 4.21 (De GLD para AFND) Para toda a GLD G, existe um
AFND M tal que L(M) = L(G).
Demonstrac ao Suponhamos que toda a producao em G = (T, N, S, P)
tem a forma A ou A aB com A, B N e a T . (Se G nao
tiver essa forma, transforma-se primeiro numa gramatica que a tenha usando
a proposicao anterior.) O AFND M = (T, Q, q
I
, , F) dene-se como segue:
Q = N,
q
I
= S,
(A, a) = B : A aB P, A N, a T ,
F = A : A P.

E facil ver que a toda a derivacao


S a
1
A
1
a
1
a
2
A
2
a
1
a
n
A
n
a
1
a
n
em G corresponde um percusro
q
I
= S
a
1
A
1
a
2
A
2

an
A
n
F
em M e vice-versa, logo L(M) = L(G). 2
Exemplo 4.22
`
A GLD
S aS [ T
T bT [
corresponde o AFND
GFED @ABC
S

a
.
GFED @ABC ?>=< 89:;
T
b
.
A derivacao
S aS aT abT ab
98
na gramatica tem o correspondente percurso
S
a
S

T
b
T.
no automato. 2
Proposicao 4.23 (De AFND para GLD) Para todo o AFND A, existe
uma GLD G tal que L(G) = L(A).
Demonstrac ao Seja A = (T, Q, q
I
, , F) um AFND. Dene-se a GLD
G = (T, N, S, P) por
N = Q,
S = q
I
,
P = q ap : p (q, a)

q : q F.
A vericacao de que L(G) = L(A) e como na Proposicao ??. 2
Exemplo 4.24 A gura seguinte mostra um automato e a gramatica que
dele se extrai:
?>=< 89:;
q
b

?>=< 89:; 7654 0123


p
b

a
.

q aq [ bp
p [ bq [ ap
Note-se que se se passasse de novo da gramatica ao automato usando a cons-
truc ao da Proposicao ?? obtinha-se o automato de que se partiu. Se se
efectuassem as passagens GLD AFND GLD, a gramatica nal seria
igual `a inicial. 2
4.8 Propriedades de fecho das linguagens in-
dependentes do contexto
Proposicao 4.25 (Fecho para as operacoes regulares) Se L e L

forem
linguagens independentes do contexto, entao L L

, L.L

e L

sao indepen-
dentes do contexto.
Demonstrac ao Suponhamos que G = (T, N, S, P) e G

= (T, N

, S

, P

)
(mesmo T) sao GIC tais que L = L(G) e L

= L(G

). Podemos supor,
sem perda de generalidade, que N N

= , porque se isso nao acontecesse,


99
poderamos sempre renomear os smbolos de N

de forma a satisfazer esta


propriedade sem alterar a linguagem gerada. Para cada uma das operacoes
regulares sobre linguagens, vamos apresentar uma gramatica que gera a lin-
guagem em questao.
Caso L L

:
Consideremos a gramatica
G

= (T,
N N

S
0
, (S
0
, T N N

)
S
0
,
P P

S
0
S [ S

).
As palavras geradas por S nesta gramatica sao as que sao geradas por S em
G, visto que N N

= e por conseguinte numa derivacao a partir de S


nunca pode ser rescrito um smbolo nao-terminal em N

. Assim, S gera em
G

a linguagem L(G). Analogamente, S

gera L(G

) em G

. Como S
0
tem
as producoes S
0
S [ S

, conclui-se que L(S


0
) = L(S) L(S

), isto e,
L(G

) = L(G) L(G

).
Caso L.L

:
Neste caso, a gramatica
G

= (T,
N N

S
0
, (S
0
, T N N

)
S
0
,
P P

S
0
SS

)
satisfaz L(G

) = L(G) L(G

). O raciocnio e identico ao do caso anterior.


Caso L

:
Para a operacao de iteracao pode usar-se a gramatica
G

= (T,
N S
0
, (S
0
, T N)
S
0
,
P S
0
[ SS
0
).
Em qualquer derivacao a partir de S
0
, a producao S
0
SS
0
e aplicada um
certo n umero n 0 de vezes, seguida de uma aplicacao de S
0
para
eliminar o smbolo S
0
.

E assim gerada uma sequencia SS S de n 0
ocorrencias de S, cada uma das quais gera uma palavra de L. As palavras
geradas sao entao os produtos de zero ou mais palavrs de L, logo sao as
plavras de L

. 2
100
Proposicao 4.26 (Interseccao e complementacao) A classe das lingua-
gens independentes do contexto nao e fechada para as operacoes de inter-
secc ao e complementacao.
Demonstrac ao Veremos mais adiante que a linguagem
a
n
b
n
c
n
: n 0
nao e independente do contexto. Aqui vamos para ja usar esse facto para
denir linguagens independentes do contexto L e L

cuja interseccao L L

nao e independente do contexto. Sejam


L = a
n
b
n
c
k
: n, k 0,
L

= a
n
b
k
c
k
: n, k 0.
A linguagem L e gerada pela gramatica
a
n
b
n
c
k
) a
n
b
n
) c
k
)
a
n
b
n
) a a
n
b
n
) b [
c
k
) c c
k
) [
onde usamos os smbolos nao-terminais a
n
b
n
c
k
), a
n
b
n
) e c
k
) para maior
clareza. A linguagem L

dene-se por uma gramatica semelhante. Assim, L


e L

sao independentes do contexto, mas a sua interseccao,


L L

= a
n
b
n
c
n
: n 0,
nao e, como veremos. Isto mostra que a classe das linguagens independentes
do contexto nao e fechada para a interseccao. Tambem nao e fechada para a
complementacao porque se assim fosse entao
L L

= T

((T

L) (T

))
seria independente do contexto, o que ja sabemos nao ser. 2
4.9 Gramatica reduzida
Vamos comecar por apresentar algoritmos que determinam conjuntos de
smbolos que satisfazem certas propriedades.
101
Smbolos que geram a palavra vazia
O primeiro e o conjunto dos smbolos nao-terminais que geram a palavra
vazia. Como veremos, esta e uma informacao a que e necessario recorrer com
bastante frequencia.
Proposicao 4.27 O conjunto dos smbolos nao-terminais que geram a pa-
lavra vazia e o conjunto denido indutivamente como segue:
Se A P, entao A .
Se A P e

, entao A .
(A primeira condicao e um caso particular da segunda e em rigor poderia ser
dispensada, mas assim cam mais explcitos a base da denicao indutiva e o
passo indutivo.)
Demonstrac ao Sejam = A N : A

e o conjunto denido
indutivamente no enunciado. Vamos mostrar que = . Comecamos por
mostrar a inclusao , isto e, se A , entao A

. Segundo a
denicao de , ha duas possibilidades. Ou A P, caso em que
A

, como se pretende. Ou existe

tal que A P. Supondo


que ja se demonstrou para cada smbolo nao-terminal que ocorre em que
esse smbolo gera , entao tambem gera e tem-se A

.
Para demonstrar a inclusao inversa, , tomemos A e uma
derivacao A

. Mostramos por inducao no comprimento da derivacao


que A . O primeiro passo da derivacao consiste na utilizacao de uma
producao A , e a derivacao decompoe-se em A

. Se = ,
entao A pela primeira condicao da denicao de . Se nao, todos os
smbolos nao-terminais em geram com derivacoes de comprimento inferior
ao da derivacao a partir de A que estamos a considerar. Por hipotese indutiva,
cada smbolo nao-terminal em pertence a , logo

. Pela segunda
condicao da denicao de , tambem neste caso se tem A . Fica terminada
a demonstracao. 2
Exemplo 4.28 A gramatica seguinte exemplica o calculo dos smbolos que
geram :
S aAb [ bAa
A BC [ aB [ Cb
B [ aB
C [ Cb
Passo
1
o
B, C
2
o
A
= A, B, C.
102
O algoritmo e apresentado sob a forma da marcacao de smbolos: no primeiro
passo marcam-se com uma barra os smbolos que tem uma producao com o
corpo vazio; no passo n+1 marcam-se com n+1 barras os smbolos ainda nao
marcados que tem uma producao cujo corpo tem todos os smbolos marcados.
2
Smbolos produtivos
Numa gramatica podem existir smbolos que nao desempenham qualquer pa-
pel util e por isso podem ser eliminados sem afectar a linguagem gerada pela
gramatica. Os primeiros que iremos encontrar sao os smbolos improdutivos.
Denicao 4.29 (Smbolos produtivos e improdutivos) Um smbolo nao
-terminal A de uma gramatica diz-se produtivo se L(A) ,= e improdutivo se
L(A) = .
Proposicao 4.30 O conjunto Pr dos smbolos produtivos pode ser denido
indutivamente pelas duas condicoes seguintes:
Se A x P e x T

, entao A Pr.
Se A P e (T Pr)

, entao A Pr.
(Tambem neste caso a primeira condicao e um caso particular da segunda.)
Demonstrac ao Tal como na denicao indutiva de , inicialmente nao se
conhecem elementos em Pr, donde a primeira condicao e equivalente neste
caso ` a segunda: os primeiros s mbolos A N reconhecidos como pertencen-
tes ao conjunto denido indutivamente sao aqueles para os quais existe uma
producao A x com x T

, smbolos esses que sao evidentemente pro-


dutivos. Nos passos seguintes selecciona-se uma producao A P com
(T Pr)

. Assumindo indutivamente que L() ,= , tem-se igualmente


L(A) ,= . Isto permite conlcuir que todos os smbolos do conjunto de-
nido indutivamente sao produtivos. Para ver que o conjunto contem todos o
smbolos produtivos, tomamos um smbolo A N qualquer nao pertencente
ao conjunto e vericamos que ele e improdutivo. Com efeito, dado que ele
nao pertence ao conjunto, toda a producao A tem no seu corpo um
smbolo nao terminal que tambem nao pertence ao conjunto. Segue-se que
toda a palavra derivada a partir de A tem um smbolo nessas condicoes, e
em particular nao pertence a T

. Isto quer dizer que L(A) = , como se


pretendia. 2
Podemos eliminar os smbolos improdutivos de uma gramatica que isso
nao altera a linguagem gerada.
103
Proposicao 4.31 Seja G = (T, N, S, P) uma GIC com L(S) ,= e Pr o
conjunto de smbolos produtivos. A gramatica
G

= (T, Pr, S, A P : A Pr, (Pr T)

satisfaz L(G

) = L(G).
Demonstrac ao Toda a derivacao em G

e uma derivacao em G, visto que


G

e G tem o mesmo smbolo inicial e as producoes de G

tambem pertencem
a G. Mas a inversa tambem e verdadeira para as derivacoes em G de palavras
sobre T a partir de S, atendendo a que nenhum smbolo improdutivo pode
ocorrer nessas derivacoes. Assim, L(G

) = L(G). 2
Exemplo 4.32 Para a seguinte gramatica tem-se Pr = A, B, C, calculado
em tres passos:
A aBb [ bBa
B CD [ aC [ Ab
C a [ aC
D E [ DA
E aE [ Da
Passo Pr
1
o
C
2
o
B
3
o
A
Na aplicacao do algoritmo usou-se um processo de marcacao semelhante ao
do c alculo de . A gramatica simplicada e:
A aBb [ bBa
B aC [ Ab
C a [ aC
2
Smbolos acessveis
Agora vamos eliminar os smbolos inacessveis de uma gramatica, isto e, os
smbolos que nao entram em nenhuma derivacao a partir do smbolo inicial.
Denicao 4.33 (Smbolos acessveis e inacessveis) Seja G uma gramatica.
Um smbolo X V diz-se acessvel se existirem , V

tal que
S

X,
o que se representa na arvore de derivacao esquematica
S

O
O

Um smbolo que nao seja acessvel diz-se inacessvel.


104
Proposicao 4.34 O conjunto Ac dos smbolos acessveis dene-se indutiva-
mente por:
S Ac.
Se A Ac e A X P, entao X Ac.
Demonstrac ao A denicao indutiva pode ser ilustrada pela gura se-
guinte:
S

O
O

E facil ver que os smbolos acessveis satisfazem as condicoes do enunciado e


que todos os smbolos que satisfazem essas condicoes sao acessveis. 2
Exemplo 4.35 O algoritmo que se extrai da denicao indutiva e o seguinte:
Inicializacao Com Ac vazio, coloca-se S em Ac.
Iteracao Repete-se a operacao seguinte, ate nao ser possvel seleccionar mais
elementos:
Selecciona-se um smbolo nao-terminal em Ac que nao tenha sido an-
teriormente seleccionado e acrescentam-se a Ac todos os smbolos que
ocorrem nos corpos das producoes do smbolo seleccionado.
Esta algoritmo foi aplicado `a gramatica abaixo, usando como de costume
um processo de marcacao:
A aBb [ bBa
B Cb [ bC
C a [ aC
D E [ Dc
E dE [ Da
Tem-se Ac = a, b, A, B, C. Eliminando os smbolos inacessveis obtem-se:
A aBb [ bBa
B Cb [ bC
C a [ aC
Estas gramaticas geram, evidentemente, a mesma linguagem. 2
105
Proposicao 4.36 Seja G = (T, N, S, P) uma GIC e AC o conjunto de
smbolos acessveis. A gramatica
G

= (T Ac, N Ac, S, A P : A Ac
satisfaz L(G

) = L(G).
Demonstrac ao Semelhante `a da Proposicao ??. 2
Gramatica reduzida ou limpa
Como vimos, os smbolos improdutivos e os inacessveis sao in uteis, na me-
dida em que nao contribuem para denir a linguagem que a gramatica gera,
por isso podem ser eliminados.
Denicao 4.37 (Gramatica reduzida ou limpa) Uma gramatica diz-se
reduzida ou limpa se nao contiver smbolos improdutivos nem inacessveis.
Proposicao 4.38 Seja G uma gramatica. Seja G

a gramatica que se obtem


de G eliminando, por esta ordem,
1
o
os smbolos improdutivos,
2
o
os smbolos inacessveis
e todas as producoes onde eles ocorrem. Entao G

e uma gramatica reduzida.


Demonstrac ao A gramatica G

nao tem smbolos inacessveis, visto que


estes foram os ultimos a ser eliminados. Antes dessa eliminacao, os smbolos
ja eram todos produtivos, visto que os improdutivos tinham sido eliminados
anteriormente. Apos a eliminacao dos inacessveis, os produtivos continua-
ram produtivos, visto que as derivacoes a partir deles so contem smbolos
acessveis, que por isso permaneceram tambem na gramatica. Assim, todos
os smbolos sao produtivos e acessveis, logo a gramatica e reduzida. 2
Exemplo 4.39 A ordem pela qual os smbolos in uteis sao eliminados e im-
portante. Observe-se a gura seguinte:
S a [ A
A AB
B b
Pr

S a
B b
Ac

Ac

S a
106
Na gramatica inicial todos os smbolos sao acessveis. Se se tivessem elimi-
nado os inacessveis em primeiro lugar, a gramatica nao teria sofrido al-
teracao. Ora a eliminacao de smbolos improdutivos pode fazer com que cer-
tos smbolos anteriormente acessveis passem a ser inacessveis, como acontece
neste exemplo. Logo a eliminacao de inacessveis em primeiro lugar seguida
da eliminacao de improdutivos pode nao levar a uma gramatica reduzida. 2
4.10 Forma normal de Chomsky
A forma normal de Chomsky aplica-se a gramaticas que nao tem producoes
cujo corpo e vazio. Nao ha grande perda de generalidade nesta restricao,
como vamos ver de imediato: a menos da derivacao da palavra vazia, as
producoes de corpo vazio podem ser totalmente eliminadas sem que se altere
o conjunto de palavras nao vazias que sao geradas. Bem entendido, nao ha
milagres: a eliminacao das producoes de corpo vazio tem de ser compensada
pela adicao de producoes apropriadas de corpo nao vazio.
Denicao 4.40 (Gramatica livre-) Uma producao A de corpo va-
zio chama-se uma producao-. Uma gramatica livre- e uma gramatica sem
producoes-.
Proposicao 4.41 Para toda a gramatica G, existe uma gramatica livre- G

tal que L(G

) = L(G)
Demonstrac ao Sendo G = (T, N, S, P), a gramatica G

= (T, N, S, P

)
difere de G apenas no seu conjunto de producoes. Para obter P

, retiram-
se de P as producoes-, para a gramatica car livre-, mas compensa-se
indirectamente o seu efeito acrescentando outras producoes. Mais precisa-
mente, para cada A X
1
X
n
em P com n > 0, acrescentam-se todas as
producoes da forma A X
i
1
X
i
k
(k > 0) onde os X
j
omitidos geram
(isto e, X
j

para j 1, . . . , n i
1
, . . . , i
k
).
Toda a palavra gerada em G

pode tambem ser gerada em G: sempre


que em G

se usar uma das novas producoes A X


i
1
X
i
k
, em G usa-se
uma derivacao A

X
i
1
X
i
k
construda com base na producao A
X
1
X
n
e em derivacoes X
j

para todo j 1, . . . , n i
1
, . . . , i
k
.
Reciprocamente, uma derivacao de uma palavra ,= em G pode ser
reproduzida em G

com as modicacoes apropriadas: sempre que em G se


use uma producao A X
1
X
n
em que X
i
1
, . . . , X
i
k
nao venham a gerar
a palavra vazia mas os outros X
j
sim, em G

emprega-se directamente a
107
producao A X
i
1
X
i
k
. Este processo esta ilustrado na gura seguinte:
A

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
.
A

X
1

...
X
i
1

...
X
j

...
X
i
k

...
X
n

X
i
1

. . .
X
i
k

x
i
1
x
i
k

x
i
1
x
i
k
Fica terminada a demonstracao. 2
Exemplo 4.42 Na gura seguinte mostram-se uma gramatica com =
X, Y e a gramatica de onde foram eliminadas as producoes-.
E TX
X +TX [
T FY
Y FY [
F (E) [ a
E TX [ T
X +TX [ +T
T FY [ F
Y FY [ F
F (E) [ a
Para comparacao, apresentam-se as arvores de derivacao de a +a a em
ambas as gramaticas:
E

F Y
+
T

X
a
F Y


a
F Y
a

E

T X

F
+
T

a
F Y

a
F
a
2
Denicao 4.43 (Forma normal de Chomsky) Uma gramatica diz-se na
forma normal de Chomsky (FNC) se so tiver producoes da forma
A a ou A BC
com a T e A, B, C N.
108
O resultado seguinte mostra que toda a gramatica pode ser transformada
noutra gramatica em FNC desde que seja livre-.
Proposicao 4.44 Toda a gramatica livre- G pode ser transformada numa
gramatica G

em FNC tal que L(G

) = L(G).
Demonstrac ao A construcao de G

a partir de G sera feita em tres passos.


Cada passo sera ilustrado por um exemplo.
1
o
passo
Para cada a T:
Cria-se um novo smbolo nao-terminal A.
Substitui-se a por A em todas as producoes.
Acrescenta-se a producao A a.
Seja G
1
a gramatica obtida ao m do primeiro passo.

E evidente que G e G
1
geram a mesma linguagem. Por exemplo, a gramatica
S aSb [ c
e transformada em
S ASB [ C
A a
B b
C c
Ao m deste passo ca-se com uma gramatica G
1
que so tem producoes da
forma A a ou A B
1
B
n
com n > 0, a T e A, B
1
, . . . , B
n
N.
2
o
passo
Substitui-se cada producao A B
1
B
n
em que n > 2 por
A B
1
C
1
C
1
B
2
C
2
.
.
.
C
n2
B
n1
B
n
onde C
1
, . . . , C
n2
sao novos smbolos nao-terminais.
109
Seja G
2
a gramatica a que se chega. Por um raciocnio analogo a um ja por
diversas vezes aqui feito se conclui que L(G
2
) = L(G
1
). Por exemplo, para
a gramatica G
1
do exemplo em curso obtem-se, para G
2
,
S AT [ C
T SB
A a
B b
C c
Dispomos agora de uma gramatica G
2
em que as producoes tem a forma
A a ou A B ou A BC, sendo necessario eliminar as da forma
A B.
3
o
passo
Para cada derivacao A
+
B em um ou mais passos e cada producao
B em que , N (isto e, tem a forma a ou CD), acrescenta-se
a producao A .
No m, removem-se as producoes da forma A B.
A gramatica G

assim obtida esta evidentemente em FNC. Que G e G

geram
a mesma linguagem deve-se a que se podem converter arvores de derivacao de
uma gramatica em arvores da outra usando a transformacao esquematizada
a seguir:
A
1
A
2
.
.
.
.
A
1

...
A
n1

A
n

Continuando o exemplo anterior, chegava-se nalmente `a gramatica


S AT [ c
T SB
A a
B b
C c
(Note-se que a gramatica podia ainda ser simplicada eliminando o smbolo
nao-terminal C e a producao C c visto que C e inacessvel.) 2
A importancia da FNC deve-se, em parte, a que ela permite decidir se
uma palavra e ou nao gerada por uma gramatica.
110
Proposicao 4.45 Para toda a gramatica G, e decidvel se x L(G) com
x T

.
Demonstrac ao Analisam-se separadamente os casos em que x = e
x ,= .
Caso x = :
Calcula-se e verica-se S .
Caso x ,= :
Procede-se do seguinte modo:
1. Determina-se uma gramatica livre- G

tal que
L(G

) = L(G) ,
o que e possvel pela Proposicao ??. Como x ,= , tem-se x L(G) se,
e so se, x L(G

).
2. Constroi-se, pela Proposicao ??, G

em FNC com
L(G

) = L(G

).
Tem-se entao a seguinte propriedade:
Seja [x[ = n > 0. Se x L(G

), entao x e derivada em 2n 1 passos.


Com efeito, seja x = a
1
a
n
. Primeiro deriva-se
S
n1
A
1
A
n
em n 1 passos usando producoes do tipo A BC (parte-se da
palavra S de comprimento 1 para chegar a uma de comprimento n e
em cada passo o comprimento da palavra aumenta de uma unidade em
virtude de as producoes usadas terem dois smbolos no corpo, logo sao
necessarios n 1 passos). Depois deriva-se
A
1
A
n

n
a
1
a
n
com producoes do tipo A a, o que requer n passos.
3. Com base nesta observacao, usa-se o seguinte algoritmo:
Enumeram-se todas as derivacoes esquerdas em G

de compri-
mento 2n 1.
Verica-se se x e gerada ou nao.
2
111
Exemplo 4.46 Consideremos de novo a gramatica obtida na demonstracao
da Proposicao ??, que se reproduz:
S AT [ c
T SB
A a
B b
Para saber que palavras de comprimento tres sao geradas, basta considerar
todas as derivacoes de comprimento 2 3 1 = 5, que se podem organizar
sob a forma de arvore:
S


0
AT

c

1
aT


2
aSB
.
.
.
.
.
.
.
.
.
.
.
.
.
.


3
aATB

acB


4
aaTB acb

5
Constata-se que acb e a unica palavra de comprimento tres que pertence a
L(G). 2
4.11 Propriedade de iteracao
A propriedade seguinte e usada para mostrar que certas linguagens nao sao
independentes do contexto.
Proposicao 4.47 (Teorema uvwxy) Seja G uma GIC que gera uma lin-
guagem innita. Existe k > 0 tal que todo o
z L(G) com [z[ > k
se pode escrever na forma
z = uvwxy
em que
v ,= ou x ,=
112
e
uv
n
wx
n
y L(G)
para todo o n 0.
Demonstrac ao Suponhamos que existe k > 0 tal que toda a palavra
z L(G) com comprimento [z[ > k tem uma derivacao da forma
S

uAy

uvAxy

uvwxy = z (4.1)
com u, v, w, x, y T

, A N e v ,= ou x ,= . Repetindo n vezes a
sub-derivacao A

vAx vem A

v
n
Ax
n
, logo
S

uAy

uv
n
Ax
n
y

uv
n
wx
n
y.
Assim, uv
n
wx
n
y L(G) para todo o n 0, como se pretende. Falta apenas
ver que a derivacao (??) existe.
Comecemos entao por denir k. Ponhamos
p = max[[ : A, A P,
m = n umero de elementos em N,
k = p
m+1
.
Noutros termos, p e o comprimento maximo do corpo das producoes da
gramatica e m e o n umero de smbolos nao-terminais. A escolha de k deve-se
a que se a arvore de derivacao de x T

tiver altura h (n umero de desnveis),


o comprimento de x e majorado por p
h
, por denicao de p:

[x[ p
h
x
Escolhamos entao z L(G) com [z[ > k = p
m+1
. Se a arvore de derivacao de
z tivesse altura m+1 ter-se-ia [z[ p
m+1
= k. Logo a arvore de derivacao
de z tem pelo menos um ramo de comprimento m+ 2.
S

O
O


m+2

O
O

O
O

u v w x y

113
Esse ramo tem um n umero de smbolos nao-terminais m + 1, logo pelo
menos um deles aparece repetido. Esta situacao corresponde praticamente
`a derivacao (??), resta-nos apenas vericar que existe um tal caminho com
v ,= ou x ,= .
Se v = x = , isso quer dizer que A

A. Removendo essa parte da


derivacao, por ser desnecessaria, cava-se com a arvore:
S

O
O

u
A

y
w
Se fosse possvel eliminar deste modo todos os nos com smbolos nao-terminais
repetidos em caminhos da raiz ate `as folhas, cava-se com uma arvore de al-
tura m + 1, o que ja sabemos ser impossvel. Logo existe um caminho
como o indicado em que v ,= ou x ,= . 2
Proposicao 4.48 (Uma linguagem nao-IC) A linguagem L = a
n
b
n
c
n
:
n 0 nao e independente do contexto.
Demonstrac ao Vamos supor que L = L(G) para uma certa GIC G para
chegar a uma contradicao. Seja z = a
n
b
n
c
n
com 3n > k (k da proposicao
anterior). Tem-se z = uvwxy com v ,= ou x ,= e uv
i
wx
i
y L para todo
o i 0. Vamos distinguir dois casos:
Caso 1
Suponhamos que v ou x contem pelo menos dois dos smbolos a, b, c.
Entao em uv
2
wx
2
y, um b precede um a ou um c precede um b, o que e
impossvel.
Caso 2
Agora vamos considerar o caso em que v e x contem apenas um ou zero
de a, b, c (mas nao ambos zero). Entao uv
2
wx
2
y nao tem igual n umero de
a, b, c, o que e de novo impossvel. 2
114
Captulo 5
Gramaticas de Atributos
Este captulo e uma primeira introducao ao estudo da semantica das lingua-
gens formais.
5.1 O metodo dos atributos
Vimos anteriormente, para gramaticas de expressoes aritmeticas, como se
podiam usar as arvores de derivacao para calcular o valor das expressoes. O
ponto de vista que vamos aqui adoptar e que o valor de uma expressao e
apenas um dos seus possveis atributos. Vamos ver como se podem associar
atributos aos smbolos nao terminais de uma gramatica, e como se pode
especicar o calculo dos valores desses atributos.
Consideremos a seguinte gramatica muito simplicada de expressoes ari-
tmeticas, que contempla apenas adicoes de algarismos decimais:
S E
E E + F | F
F 0 | 1 | 2 | | 9
Estamos interessados em especicar o calculo do valor de uma destas ex-
pressoes, usando arvores de derivacao como no captulo anterior. Por exem-
plo, a palavra 3 + 2 + 9 tem a seguinte arvore de derivacao, com o valor de
cada no interior (etiquetado por um smbolo nao terminal) indicado entre
115
parenteses:
S
(14)
E
v
v
v
v
v
v
H
H
H
H
H
H
(14)
E
v
v
v
v
v
v
H
H
H
H
H
H
(5) +
F
(9)
E
(3) +
F
(2)
9
F
(3)
2
3
O valor de cada no interior e calculado em funcao do valor dos lhos. Como
um no e os seus lhos correspondem `a cabeca e ao corpo de uma producao,
respectivamente, tambem se pode dizer que o valor da cabeca e calculado em
func ao do valor dos smbolos do corpo.
Consideremos primeiro a producao S E. Representando por v(S) o
valor de S e por v(E) o valor de E, o calculo de v(S) em funcao de v(E)
pode exprimir-se pela igualdade v(S) = v(E), que arma que o valor de S e
igual ao valor de E (conhecido este, determina-se aquele).
Saltemos de momento a producao E E + F. A producao E F
trata-se de uma forma analoga `a anterior pondo v(E) = v(F), onde v(F)
representa o valor de F.
As producoes F 0, . . . , F 9 nao trazem surpresas, vindo v(F) =
0, . . . , v(F) = 9.
Regressemos `a producao E E + F. Para indicar que o valor da
cabeca e a soma dos valores dos smbolos nao terminais do corpo podamos
escrever v(E) = v(E) + v(F), mas esta equacao deixa v(E) indeterminado
e v(F) = 0. Ha pois necessidade de distinguir as duas ocorrencias de E na
producao. Ela passa a ser escrita (exclusivamente para ns de denicao dos
atributos) na forma E
1
E
2
+F, onde se acrescentaramndices diferentes
`as duas ocorrencias de E.

E importante notar que E
1
e E
2
nao sao dois
novos smbolos nao terminais, mas sim duas ocorrencias distintas do mesmo
smbolo. Pode entao escrever-se v(E
1
) = v(E
2
) + v(F).
A gramatica, juntamente com as equacoes que denem os atributos,
116
mostra-se a seguir:
S E v(S) = v(E)
E
1
E
2
+ F v(E
1
) = v(E
2
) + v(F)
E F v(E) = v(F)
F 0 v(F) = 0
.
.
.
.
.
.
F 9 v(F) = 9
A arvore de derivacao anterior pode agora redesenhar-se indicando explicita-
mente o atributo a que os valores se referem (isto e particularmente necessario
quando um smbolo tiver mais de um atributo).
S
(v=14)
E
o
o
o
o
o
o
o
o
o
o
O
O
O
O
O
O
O
O
O
O
(v=14)
E
o
o
o
o
o
o
o
o
o
o
O
O
O
O
O
O
O
O
O
O
(v=5) +
F
(v=9)
E
(v=3) +
F
(v=2)
9
F
(v=3)
2
3
Os atributos sao usados para atribuir signicado `as palavras de uma lin-
guagem. Diz-se entao que se esta a denir a semantica da linguagem. Mas
o signicado atribudo depende do objectivo que se tem em mente. Por
exemplo, para a gramatica anterior deniu-se o valor de cada expressao, mas
poderiam ter-se denido muitos outros atributos, como o codigo numa lin-
guagem maquina que avalia a expressao, ou a expressao escrita na forma
pos-xa. Vejamos em pormenor este ultimo caso.
A forma pos-xa de uma expressao consiste em escrever sistematicamente
os argumentos em primeiro lugar e so depois o smbolo da operacao a efectuar.
Assim, a forma pos-xa de 3+2 e 3 2+, mas ja a de 3+2+9 depende da ordem
de execucao das operacoes. Se a ordem requerida for (3 + 2) + 9, a forma
pos-xa e 3 2 +9+, se se pretender 3 +(2 +9), deve ter-se 3 2 9 ++ (para ver
que assim e, percorra-se a forma da esquerda para a direita e, sempre que se
encontrar o +, somem-se os dois ultimos n umeros encontrados ou resultantes
de avaliacoes anteriores). Na gramatica anterior, e dada precedencia aos
operadores mais `a esquerda (observe-se que as arvores de derivacao tendem
a crescer para a esquerda), logo e a primeira das formas anteriores que se
117
pretende. A forma pos-xa de uma expressao reduzida a um algarismo e o
proprio algarismo.
Seja p o atributo de S, E e F cujo valor e a forma pos-xa da expressao
representada pelo smbolo em questao. Para qualquer atributo que se dena,
seja ele a, e preciso denir o conjunto V
a
dos valores que ele pode tomar. No
exemplo anterior tinha-se
V
v
= Nat,
em que Nat = {0, 1, 2, . . .} e o conjunto dos n umeros naturais. Para p tem-se
V
p
= {+, 0, 1, . . . , 9}

.
Nao e difcil de ver que p se pode denir como segue:
S E p(S) = v(E)
E
1
E
2
+ F p(E
1
) = p(E
2
)p(F)+
E F p(E) = p(F)
F 0 p(F) = 0
.
.
.
.
.
.
F 9 p(F) = 9
A arvore de derivacao para 3 + 2 + 9 ca:
S
(p=3 2+9+)
E
l
l
l
l
l
l
l
l
l
l
l
l
l
R
R
R
R
R
R
R
R
R
R
R
R
R
(p=3 2+9+)
E
l
l
l
l
l
l
l
l
l
l
l
l
l
R
R
R
R
R
R
R
R
R
R
R
R
R
(p=3 2+) +
F
(p=9)
E
(p=3) +
F
(p=2)
9
F
(p=3)
2
3
A ttulo de exemplo considere-se a primeira ocorrencia de E, mesmo abaixo
de S. A equacao apropriada e p(E
1
) = p(E
2
)p(F)+, onde E
1
representa a
ocorrencia em questao e E
2
o seu lho esquerdo. Tem-se entao p(E
2
) = 3 2+
e p(F) = 9, donde p(E
1
) = 3 2 + 9+.
118
5.2 Atributos sintetizados e atributos herda-
dos
Um atributo diz-se sintetizado se o seu valor num no de uma arvore de
derivacao depender dos valores dos atributos dos lhos e, possivelmente, de
outros atributos do proprio no. Assim, para uma producao dene-se um
atributo sintetizado da sua cabeca em funcao de atributos do corpo e de
outros atributos da cabeca. Nos exemplos anteriores, ambos os atributos
eram sintetizados.
Mas existem atributos cujo valor num no depende dos valores de atributos
dos irmaos e do pai. Chamam-se herdados a esses atributos. Numa producao,
denem-se atributos herdados de smbolos nao terminais do corpo, em funcao
de outros atributos da producao.
Em resumo, numa producao podem denir-se:
atributos sintetizados da cabeca;
atributos herdados de smbolos nao terminais do corpo.
Qualquer destes atributos pode depender, em princpio, de qualquer outro
atributo da producao. Veremos adiante uma restricao que se pode impor a
estas dependencias que permite o calculo eciente do valor dos atributos.
Para ilustrar o uso de atributos sintetizados e herdados, consideremos a
seguinte gramatica:
S E
E FX
X +FX |
F 0 | 1 | | 9
Trata-se de uma gramatica de expressoes aritmeticas que dene a mesma lin-
guagem da gramatica apresentada na seccao anterior. Mas ha uma diferenca
importante, do ponto de vista do calculo de atributos: as palavras geradas
pelo smbolo X nao sao expressoes aritmeticas, por isso nao se pode, por
exemplo, atribuir-lhes um valor numerico.
Suponhamos que pretendemos denir atributos que permitam determinar
o valor numerico das expressoes geradas pela gramatica. Por analogia com
o exemplo anterior, e de esperar que se dena para S, E e F um atributo v
de valores em V
v
= Nat.

E mesmo facil ver como se calculam v(S) e v(F)
com as producoes S E e F 0, . . . , F 9: as equacoes sao como
no exemplo referido, e v e um atributo sintetizado de S e F.
119
Ja nao e tao imediato ver como se calcula v(E) para a producao E
FX, visto que esse valor deve depender dos atributos de X, os quais ainda
nem sequer se conhecem. Comecemos entao por ver que atributos X deve
ter.
Numa derivacao a partir de S, se num dado ponto o smbolo nao terminal
mais `a esquerda for X, ele deve estar precedido por uma palavra a
1
+ +a
n
onde a
1
, . . . , a
n
sao dgitos, como se observa na derivacao seguinte:
S E FX a
1
X a
1
+ FX a
1
+ a
2
X
a
1
+ a
2
+ FX a
1
+ + a
n
X .
A palavra que precede X tem um valor associado que e a soma dos dgitos
a
1
, . . . , a
n
. Este valor, que e conhecido ou dado quando se inicia a derivacao
de X numa derivacao esquerda, constitui o atributo d de X. Este atributo,
que nao depende de nenhuma producao para X, nao pode ser calculado para
a cabeca X de uma producao em funcao de atributos do corpo, logo nao e
sintetizado. Assim, so podera ser herdado.
As palavras sobre o alfabeto terminal que X deriva tem a forma a
n+1
+
+a
n+k
ou . Se ao dado de X, d(X), se forem sucessivamente adicionando
os algarismos a
n+1
, . . . , a
n+k
(ou nada, no caso de ), obtem-se um valor
numerico como resultado da derivacao de X. Este valor constitui o atributo
r de X, o qual e sintetizado.
Em resumo, os atributos da gramatica, os seus tipos e os seus domnios
de valores sao os seguintes:
Sint. Herd.
S v
E v
X r d
F v
V
v
= V
r
= V
d
= Nat.
Para denir os atributos, procedemos do seguinte modo: para cada produ-
cao, denimos os atributos sintetizados da cabeca e os atributos herdados
dos smbolos nao terminais do corpo. Dado o signicado pretendido para
os atributos anteriormente explicado, nao e difcil ver que se devem ter as
seguintes denicoes:
120
Sintetizados Herdados
S E v(S) = v(E)
E FX v(E) = r(X) d(X) = v(F)
X
1
+FX
2
r(X
1
) = r(X
2
) d(X
2
) = d(X
1
) + v(F)
X r(X) = d(X)
F 0 v(F) = 0
.
.
.
.
.
.
F 9 v(F) = 9
A seguinte arvore de derivacao de 3 + 2 + 9 mostra a sequencia do calculo
dos atributos:
S v = 14
E
u
u
u
u
u
u
u
u
u
u
K
K
K
K
K
K
K
K
K
K
Kv = 14

F v = 3

d = 3

X
m
m
m
m
m
m
m
m
m
m
m
m
m
m
m
m
s
s
s
s
s
s
s
s
s
s
s
K
K
K
K
K
K
K
K
K
K
K
r = 14
_
3 +
F v = 2
+

d = 5

X
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
s
s
s
s
s
s
s
s
s
s
s
K
K
K
K
K
K
K
K
K
K
K
r = 14
_
2 +
F v = 9
+

d = 14

X r = 14
_
9
5.3 Gramaticas de atributos
Uma gramatica com denicao de atributos chama-se uma gramatica de atri-
butos. Mais formalmente, uma gramatica de atributos consiste nos seguintes
elementos:
I. Gramatica
Uma gramatica independente do contexto G = (T, N, S, P), onde
G esta na forma reduzida.
S nao ocorre no corpo de nenhuma producao.
121
II. Atributos
Um conjunto A de elementos chamados atributos.
Para cada a A, um conjunto V
a
dos valores de a.
Para cada A N, um conjunto
A(A) A
dos atributos de A.
O conjunto A(A) e uma uniao
A(A) = H(A) S(A)
de um conjunto H(A) de atributos ditos herdados e de um con-
junto S(A) de atributos ditos sintetizados, com H(A) S(A) = .
O smbolo inicial nao tem atributos herdados, isto e, H(S) = e
A(S) = S(S).
III. Calculo dos atributos
Para cada producao
X
0
X
1
X
n
dene-se, para cada atributo sintetizado da cabeca e cada atributo herdado
do corpo, uma funcao que indica como calcular os valores desse atributo em
termos dos restantes atributos. Mais precisamente:
Seja a A(X
k
), onde a S(X
k
) se k = 0 e a H(X
k
) se k > 0.
Entao, para certos
a
1
A(X
k
1
), . . . , a
m
A(X
km
)
com 0 k
1
k
m
n, e dada uma funcao
f : V
a
1
V
am
V
a
.

E costume escrever a(X


k
) para indicar o valor do atributo a de X
k
, e
entao o seu calculo e representado pela equacao
a(X
k
) = f(a
1
(X
k
1
), . . . , a
m
(X
km
)).
122
5.4 Outro exemplo
A seguinte gramatica descreve, de forma muito simplicada, a parte de de-
claracoes de uma linguagem de programacao:
S L
L | D; L
D var V : T
V a | | z
T int | real
Pretende-se denir atributos que permitam construir uma tabela de iden-
ticadores associada a cada palavra. A tabela sera representada por um
conjunto
d(S) = {(x
1
, t
1
), . . . , (x
n
, t
n
)}
de todos os pares (x
i
, t
i
) formados por uma variavel x
i
{a, . . . , z} e um
tipo t
i
{int, real} correspondentes `as declaracos contidas na palavra.
Na gramatica nao ha nada que impeca que uma variavel seja declarada
mais de uma vez, mas isso e considerado um erro, mesmo que na declaracao
repetida a variavel tenha o mesmo tipo. Assim, tambem se pretende deter-
minar o conjunto
e(S) = {(y
1
, u
1
), . . . , (y
m
, u
m
)}
dos erros resultantes de declaracoes repetidas.
Note-se que a linguagem formada pelas palavras sem declaracoes repetidas
(isto e, com uma arvore de derivacao para a qual e(S) = ) e uma sub-
linguagem propria da linguagem denida pela gramatica. Essa sub-linguagem
poderia ser directamente denida por uma gramatica, mas a gramatica nao
seria independente do contexto, e e de esperar que fosse complicada e difcil
de compreender. Por isso, na pratica e prefervel denir uma linguagem
mais geral por meio de uma gramatica independente do contexto (que e mais
facil de conceber e compreender) e restringi-la posteriormente com metodos
sem anticos, como estamos aqui a fazer com o metodo dos atributos.

E essa a
atitude adoptada, em particular, na denicao das linguagens de programacao.
Os atributos que irao ser usados estao denidos na seguinte tabela:
Sint. Herd.
S d, e
L d
S
, e
S
d
A
, e
A
D v, t
V v
T t
123
Sobre o signicado de d e e ja falamos. Os valores destes atributos sao
conjuntos de pares (variavel, tipo), logo
V
d
= V
e
= P(V
v
V
t
)
onde V
v
= {a, . . . , z} e V
t
= {int, real}. O smbolo L tem atributos herdados
d
A
e e
A
, e atributos sintetizados d
S
e e
S
. O signicado destes atributos e
semelhante ao dos atributos de X no exemplo das expressoes aritmeticas
anteriormente apresentado. Numa derivacao
S

var x
1
: t
1
; . . . ; var x
n
: t
n
; L
d
A
(L) e o conjunto das declaracoes que ocorrem antes de L, isto e, no prexo
var x
1
: t
1
; . . . ; var x
n
: t
n
omitindo as repeticoes, e e
A
(L) sao as declaracoes repetidas de variaveis (isto
e, os erros) antes de L. Mas L deriva uma palavra que tem a mesma forma
do prexo acima, e entao d
S
(L) contem as declaracoes seguintes `a derivacao
de L, isto e, as declaracoes em d
A
(L) `as quais se vieram juntar as existentes
na palavra derivada de L. O conjunto e
S
(L) dene-se de forma semelhante.
Os conjuntos de valores de d
A
, e
A
, d
S
e e
S
sao, bem entendido, iguais aos de
d e e:
V
d
A
= V
e
A
= V
d
S
= V
e
S
= P(V
v
V
t
).
Os atributos v e t sao faceis de caracterizar: sao respectivamente a variavel
e o tipo do smbolo a que se aplicam. Os seus conjuntos de valores V
v
e V
t
ja foram denidos.
Para denir os atributos temos necessidade de uma funcao auxiliar
vars : P(V
v
V
t
) P(V
v
)
que dado um conjunto X V
v
V
t
de pares (variavel, tipo) forma o conjunto
vars(X) = {x : (t) (x, t) X}
das variaveis que guram como primeiras componentes desses pares. Por
outras palavras, se X for um conjunto de declaracoes, vars(X) e o conjunto
de variaveis declaradas.
A denicao de atributos e a seguinte:
124
Sintetizados Herdados
S L d(S) = d
S
(L) d
A
(L) =
e(S) = e
S
(L) e
A
(L) =
L d
S
(L) = d
A
(L)
e
S
(L) = e
A
(L)
L
1
D; L
2
d
S
(L
1
) = d
S
(L
2
) d
A
(L
2
) = d
A
(L
1
)
if v(D) vars(d
A
(L
1
))
then
else {(v(D), t(D))}
e
A
(L
2
) = e
A
(L
1
)
if v(D) vars(d
A
(L
1
))
then {(v(D), t(D))}
else
D var V : T v(D) = v(V )
t(D) = t(T)
V a v(V ) = a
.
.
.
T int t(T) = int
.
.
.
A equacao para d
A
(L
2
) podia escrever-se
d
A
(L
2
) =

d
A
(L
1
) se v(D) vars(d
A
(L
1
)),
d
A
(L
1
) {(v(D), t(D))} caso contrario.
O mesmo se diz, evidentemente, de e
A
(L
2
)
5.5 Ordem de avaliacao dos atributos cir-
cularidade
Ate aqui nao referimos a ordem pela qual devem ser calculados os atributos,
nem levantamos sequer o problema de saber se eles podem sempre ser calcu-
lados. Vamos aqui considerar uma situacao em que os atributos dependem
uns dos outros de forma circular. O seu calculo obrigaria `a resolucao de um
sistema de equacoes, o que nem sempre e possvel. A apresentacao deste
125
problema sera feita por meio de um exemplo. Nao procuraremos dar uma
denicao formal de circularidade ou apresentar algoritmos que permitam
a sua deteccao.
Consideremos entao a gramatica
S BA
B BA | b
A a
onde estao denidos os seguintes atributos:
Sint. Herd.
S s, t, u V
s
= V
t
= V
u
B s, v z = V
v
= V
z
= Nat.
A z
Consideremos a denicao dos atributos:
Sintetizados Herdados
S BA s(S) = z(A) + 1 z(B) = 2s(S) + 1
t(S) = s(B) + 2 z(A) = t(S) + 1
u(S) = 0
B
1
B
2
A s(B
1
) = z(A) + 1 z(B
2
) = z(B
1
) + 1
v(B
1
) = v(B
2
) + z(B
2
) z(A) = 2v(B
1
) + 3
B b s(B) = 0
v(B) = 0
A a
Seja ainda a arvore de derivacao da palavra baa:
S
w
w
w
w
w
w
w
w
w
G
G
G
G
G
G
G
G
G
G
t

u s

B
1
w
w
w
w
w
w
w
w
w
G
G
G
G
G
G
G
G
G
z
.
v

A
1
z

B
2
z

s A
2
z

a
b
a
126
As duas ocorrencias de A e B foram distinguidas por meio de ndices. Indica-
ram-se os atributos de cada no mas nao os seus valores. As setas a ponteado
indicam as dependencias entre atributos, tal como se deduz das equacoes que
os denem. O percurso fechado no sentido indicado pelas setas corresponde
`a circularidade na denicao dos atributos. Para ver como a dependencia
circular se traduz em termos do calculo dos atributos, escrevemos as equacoes
dos atributos que intervem no percurso fechado:
s(S) = z(A
1
) + 1
z(A
1
) = t(S) + 1
t(S) = s(B
1
) + 2
s(B
1
) = z(A
2
) + 1
z(A
2
) = 2v(B
1
) + 3
v(B
1
) = v(B
2
) + z(B
2
)
v(B
2
) = 0
z(B
2
) = z(B
1
) + 1
z(B
1
) = 2s(S) + 1.
Efectuando as substituicoes sucessivas chegava-se `a equacao
s(S) = 4s(S) + 12.
Esta equacao traduz a dependencia de s(S) de si proprio. Esta independencia
e indesejavel porque na maioria dos casos nao tem solucao, e mesmo quando
tem, o calculo dos atributos e ineciente. No nosso caso, a equacao nao tem
solucao porque estamos a considerar como domnio de valores dos atribu-
tos o conjunto Nat = {0, 1, 2, . . .}, mas se estivessemos a considerar Int =
{. . . , 2, 1, 0, 1, 2, . . .} ja teria a solucao s(S) = 4.
5.6 Avaliacao da esquerda para a direita
Os atributos podem ser facilmente avaliados na chamada avaliacao da es-
querda para a direita se a sua denicao satiszer a seguinte propriedade:
Para toda a producao X
0
X
1
X
2
X
n
:
Os atributos sintetizados de X
0
so dependem de:
atributos herdados de X
0
;
atributos quaisquer de X
1
, . . . , X
n
.
Os atributos herdados de X
k
com 1 k n so dependem de:
atributos herdados de X
0
;
127
atributos quaisquer de X
1
, . . . , X
k1
.
Todos os exemplos vistos ate aqui, com excepcao do que ilustra o fenomeno
da circularidade, satisfazem estas condicoes. Nesse caso, a avaliacao dos atri-
butos pode ser feita de acordo com o seguinte esquema recursivo, aplicado a
um no N de uma arvore de derivacao:
avalia(N):
begin
Seja X
0
X
1
X
n
a producao usada no no N;
for k := 1 to n do
if X
k
e um nao-terminal then
begin
V := k-esimo lho de N;
Avaliar os atributos herdados de V ;
avalia(V )
end;
Avaliar os atributos sintetizados de N
end
Quando avalia(N) e chamado, conhecem-se os atributos herdados de
N e calculam-se primeiro os atributos dos lhos e depois os seus atributos
sintetizados.
128
Captulo 6
Automatos de Pilha
[VERS

AO PRELIMINAR.]
Um automato de pilha (AP) e essencialmente um automato nito ao qual
se acrescentou uma pilha, que pode conter smbolos de um alfabeto especial
chamado alfabeto da pilha. Lendo a pilha do topo ate `a base, smbolo a
smbolo, forma-se uma palavra que descreve completamente o seu conte udo.
Uma caracterstica importante dos AP, que os distingue dos automatos ni-
tos, e que tem memoria innita, visto que se podem guardar na pilha todas
as palavras sobre o alfabeto correspondente.
Uma transicao de um AP depende nao so do estado em que ele se encontra,
como do smbolo que esta no topo da pilha. No m da transicao, tanto o
estado como o conte udo da pilha se alteraram. A modicacao do estado
consiste em substitu-lo por outro, eventualmente o mesmo. A modicacao
da pilha consiste em desempilhar o smbolo do topo e em seu lugar empilhar
uma palavra arbitraria.
As transicoes sao especicadas por uma funcao com tres argumentos. Ao
escrever (q, z, a), q e um estado, z e o smbolo do topo da pilha, e a pertence
ao alfabeto de entrada ou e . Em geral, (q, z, a) e um conjunto nito de
pares da forma (p, ), que permitem seleccionar de forma nao determinista o
estado seguinte p e a palavra que substitui z no topo da pilha.
Denicao 6.1 [Automato de pilha] Um automato de pilha (AP) e um septuplo
A = (T, Q, Z, q
I
, z
I
, , F),
em que:
T e o alfabeto de entrada;
Q e um conjunto nito de estados;
Z e o alfabeto da pilha;
129
q
I
Q e o estado inicial;
z
I
Z e o smbolo inicial da pilha;
e a funcao de transicao de conguracoes;
F Q e o conjunto de estados de aceitacao.
A funcao tem por domnio o conjunto
QZ (T {}),
o que quer dizer que se calcula (q, z, a) para q Q, z Z e a T {},
como explicado mais acima. O codomnio de e o conjunto
P
n
(QZ

)
de todos os subconjuntos nitos de QZ

. Assim, (q, z, a) e um conjunto


nito de pares da forma (p, ) com p Q e Z

, como tambem referido


anteriormente. Escreve-se entao
: QZ (T {}) P
n
(QZ

).
Denicao 6.2 [Conguracao] Uma conguracao de um AP e um par (q, )
descrevendo o estado em que o AP se encontra e o conte udo da pilha. A
conguracao inicial e (q
I
, z
I
). O conjunto de todas as conguracoes e QZ

.
Denicao 6.3 [Transicao] Escreve-se
(q, z)
a
(q

)
se
(q

) (q, z, a),
onde q, q

Q, z Z, ,

e a T {}. Diz-se entao que ha uma


transicao da conguracao (q, z) para a conguracao (q

) etiquetada por
a, o que justica o nome dado a .
Note-se que, ao representar o conte udo da pilha por uma palavra, o
smbolo do topo e o primeiro da esquerda. Assim, em z, o topo e z, o
qual, depois de desempilhado e substitudo por

, da o novo conte udo

E costume representar gracamente um AP na seguinte forma:


130

b
a a
b
Z

Pilha
e
e

Cabeca de Leitura e Escrita

e
e
Cabeca de Leitura
q Q
Unidade de
Controlo

1 0 1 1
x T

Fita de
Leitura
Vejamos com mais pormenor a interpretacao do seu funcionamento.
Inicialmente:
Uma palavra x T

esta inscrita na ta de leitura, e a cabeca de leitura


esta colocada sobre o primeiro smbolo de x (o mais `a esquerda).
A unidade de controlo esta no estado inicial q
I
.
A pilha contem unicamente o smbolo z
I
e a cabeca de leitura e escrita
esta colocada sobre z
I
.
Em resumo, inicialmente o AP esta na conguracao inicial (q
I
, z
I
) e tem a
palavra x para ler.
Em certa etapa do funcionamento:
A cabeca de leitura esta sobre uma celula da ta de leitura contendo
um smbolo a T que ocorre na palavra x; os smbolos `a esquerda de
a (mas nao o proprio a) ja foram lidos.
Na pilha esta inscrita uma palavra de Z

, podendo dar-se dois casos:


Essa palavra e a palavra vazia .
A palavra e nao vazia e o primeiro smbolo (z, digamos) esta a ser
inspeccionado pela cabeca de leitura e escrita. Podemos designar
essa palavra por z, com z Z e Z

. (Inicialmente, z = z
I
e
= .)
A unidade de controlo esta num estado q Q.
Assim, o AP esta numa conguracao (q, ) ou (q, z), esta a examinar o
smbolo a T, e prepara-se para efectuar uma transicao para uma nova
conguracao.
Transicao de conguracao:
Consideremos a conguracao anterior. Se a palavra inscrita na pilha
for , isto e, se a conguracao for (q, ), nao ha transicao possvel.
131
Caso contrario, a transicao vai depender dos smbolos q, z, podendo
o AP escolher entre ignorar ou nao o smbolo a. Esta possibilidade
de escolha, que traduz o primeiro aspecto nao determinista do AP,
existe em princpio visto que tanto (q, z, ) como (q, z, a) (ignorar e
nao ignorar a, respectivamente) pertencem ao domnio de .
Ignorando a, suponhamos que
(q, z, ) = {(q
1
,
1
), . . . , (q
r
,
r
)}.
Entao o AP pode escolher qualquer um dos pares acima enumera-
dos, que e o segundo aspecto do nao determinismo de um AP. Se
escolheu (q
i
,
i
), transita para a conguracao (q
i
,
i
) e mantem
a cabeca de leitura sobre o smbolo a. O novo estado da unidade
de controlo e q
i
, e a cabeca de leitura e escrita apagou (desempi-
lhou) z e escreveu (empilhou)
i
, cando a inspeccionar o primeiro
smbolo de
i
. Se
i
= , esta accao reduz-se a desempilhar z.
Se
i
= z, a pilha ca inalterada. Se
i
= z, a accao consiste em
empilhar em cima de z. Note-se que se (q, z, ) = , nao ha
transicao possvel ignorando a.
Tendo a em consideracao, se
(q, z, a) = {(p
1
,
1
), . . . , (p
s
,
s
)},
tudo se passa como anteriormente, com a excepcao de que o smbolo
a foi lido, e portanto a cabeca de leitura avanca para o proximo
smbolo de x (se existir; se nao, para a proxima celula da ta, que
esta vazia). Se (q, z, a) = , nao ha transicao possvel lendo a.
O comportamento do AP consiste numa sucessao de transicoes a partir da
conguracao inicial. Contrariamente ao caso dos automatos nitos, e habito
considerar dois criterios de reconhecimento de linguagens.
Criterios de reconhecimento:
Apos ler uma palavra, o AP atinge uma conguracao em que a pilha
esta vazia. A linguagem reconhecida por este criterio chama-se lin-
guagem nula e denota-se N(A) para um AP A.
Apos ler uma palavra, o AP atinge uma conguracao em que o estado
e de aceitacao. A linguagem reconhecida por este criterio denota-se
L(A).
Uma situacao de erro e detectada em qualquer dos casos quando a
palavra nao tiver sido toda lida e (q, z, ) = = (q, z, a) para o
estado corrente q, topo da pilha z e smbolo de entrada a.
132
Para formalizar as nocoes de funcionamento e reconhecimento comecamos
por generalizar a relacao de transicao de conguracoes a palavras arbitrarias
de T

.
Denicao 6.4 [Transicao iterada] Dadas conguracoes c e c

e x T

, poe-
se
c
x
c

se e so se existirem
conguracoes c
0
, c
1
, . . . , c
n
e
elementos a
1
, a
2
, . . . , a
n
T {}
tais que
c = c
0
a
1
c
1
a
2

an
c
n
= c

, e
x = a
1
a
2
a
n
.
A relacao c
x
c

signica que o AP pode atingir a conguracao c

partindo
de c apos ter lido a palavra x. Convenciona-se que
c

c
para toda a conguracao c, o que esta de acordo com a interpretacao anterior.
Denicao 6.5 [Linguagem reconhecida] Seja A um AP. A linguagem reco-
nhecida por A pelo criterio da pilha vazia, ou linguagem nula de A, e a
linguagem
N(A) = {x T

: (q Q) (q
I
, z
I
)
x
(q, )}.
A linguagem reconhecida por A pelo criterio dos estados de aceitacao e
L(A) = {x T

: (q F, Z

) (q
I
, z
I
)
x
(q, )}.
Veremos adiante que estes dois criterios sao equivalentes, no sentido em
que denem a mesma classe de linguagens.
Exemplo 6.6 Para toda a palavra x = a
1
a
2
a
n
sobre um determinado
alfabeto, seja
x
I
= a
n
a
2
a
1
a palavra inversa de x, tambem chamada imagem ao espelho de x. Seja
agora T = {a, b} e consideremos a linguagem
L = {xx
I
: x T

}
133
formada por palavras arbitrarias seguidas da sua imagem ao espelho. Um AP
A para reconhecer esta linguagem pelo criterio da pilha vazia pode funcionar
do seguinte modo.
O automato vai lendo sucessivamente os smbolos inscritos na ta de
leitura e empilha-os. Num dado momento, adivinha (nao deterministica-
mente) que leu a metade x da palavra xx
I
inicialmente na ta de leitura,
e altera o seu modo de funcionamento. Se o seu palpite estiver correcto,
o conte udo da pilha e x
I
, como e facil de ver. Assim, o automato passa a
comparar o smbolo lido com o smbolo do topo da pilha e, caso sejam iguais
(como e de esperar, se a palavra inicialmente na ta de leitura pertencer a L
e se o palpite estiver correcto), desempilha, avanca na ta de leitura, e repete
a operacao ate a pilha car vazia.
O AP vai ter dois estados, Q = {p, q}, tal que no estado p empilha e
no estado q desempilha. Como a operacao inicial e desempilhar, deve ter-
se q
I
= p. O alfabeto da pilha e Z = {a, b, z}, onde z e um smbolo que
inicialmente tem de estar na pilha para ela nao estar vazia. Por essa mesma
razao, z
I
= z. Como o AP vai reconhecer a linguagem pelo criterio da pilha
vazia, o conjunto F e irrelevante e podemos por F = . Para terminar a
especicacao do automato falta denir a funcao , o que e feito mediante a
seguinte tabela:
a b
p, z p, az p, bz q, z
p, a p, aa p, ba q, a
p, b p, ab p, bb q, b
q, z q,
q, a q,
q, b q,
As linhas da tabela estao indexadas por pares em Q Z que indicam o
estado corrente e o topo da pilha (omitiram-se os parenteses da notacao usual
dos pares para simplicar a leitura). As colunas estao indexadas por T {},
e as casas da tabela contem os valores de . Por exemplo, no cruzamento da
linha p, z com a coluna a encontra-se p, az, o que indica que
(p, z, a) = {(p, az)}.
Evidentemente, varios pares podem ocupar a mesma casa, visto que os valores
de podem ser conjuntos com mais de um elemento. Algumas casas podem
estar vazias, e nesse caso o valor de e o conjunto vazio, como em (q, z, a) =
na tabela acima.
134
O comportamento do AP no estado p e independente de o smbolo que
esta no topo da pilha ser z, a ou b, e consiste ou em empilhar o smbolo lido
ou em mudar para o estado q sem ler. Neste estado desempilham-se todos
os smbolos da pilha que coincidam com os smbolos lidos ou, no caso de no
topo da pilha estar z, este e desempilhado sem atender `a ta de leitura. O
comportamento em p e nao determinista, visto que ha a opccao entre ler o
proximo smbolo e empilha-lo, e ignora-lo mudando o estado para q.
O comportamento do AP pode ser observado passo a passo indicando as
sucessivas conguracoes pelas quais vai passando juntamente com a porcao
da ta que ainda falta ler. Um comportamento possvel em que a palavra
abba e reconhecida e o seguinte:
ESTADO PILHA FITA
p z abba
p az bba
p baz ba
q baz ba
q az a
q z
q
A palavra ab nao e reconhecida, visto que nenhum comportamento conduz
a pilha vazia com a palavra toda lida. Eis um comportamento possvel:
ESTADO PILHA FITA
p z ab
p az b
q az b
A partir daqui nao existem transicoes, visto que o topo da pilha nao coincide
com o primeiro smbolo da ta de leitura. Em alternativa, a partir da segunda
linha podia prosseguir-se para
p baz
q baz
mas de novo nao haveria transicao. Aqui a palavra foi toda lida, mas como
nao se consegue esvaziar a pilha, a palavra nao e reconhecida.
No proximo exemplo introduzimos o conceito de AP determinista, que
nao e exactamente o que se espera por analogia com os automatos nitos.
135
Exemplo 6.7 O comportamento nao determinista do AP do Exemplo 6.6
era devido `a necessidade de adivinhar o meio da palavra a reconhecer. As-
sim, e de esperar que se modicarmos a linguagem inserindo a meio de cada
palavra um smbolo separador especial, o automato passe a ter um compor-
tamento determinista. A razao e que, ao detectar esse smbolo, o automato
ca a saber que e a altura de passar da fase de empilhar `a de desempilhar.
Assim, suponhamos que T = {a, b, c} onde c e o tal smbolo especial e
redenamos
L = {xcx
I
: x {a, b}

}.
O AP correspondente e denido por Q = {p, q}, q
I
= p, Z = {a, b, z},
z
I
= z e F = tal como no automato do Exemplo 6.6. Por comparacao com
esse automato, nao e difcil reconhecer que pode ser denida pela tabela
seguinte:
a b c
p, z p, az p, bz q, z
p, a p, aa p, ba q, a
p, b p, ab p, bb q, b
q, z q,
q, a q,
q, b q,
Note-se que se considera que este AP e determinista, mesmo tendo transi-
coes etiquetadas por , ao contrario do que se passa com os automatos nitos.
Isto e razoavel, porque em nenhumas circunstancias e necessario optar en-
tre duas ou mais transicoes possveis. Isto pode ser constatado da seguinte
maneira:
Cada casa da tabela tem no maximo um par, logo nao ha escolhas a
fazer dentro de cada casa.
Em cada linha, quando a coluna de esta preenchida, as de T estao
vazias, e quando pelo menos uma coluna de T esta preenchida, e a de
que esta vazia. Assim, nao ha escolhas a fazer entre uma ou outra
casa.
O determinismo do AP pode ser observado com o reconhecimento da palavra
136
abcba:
ESTADO PILHA FITA
p z abcba
p az bcba
p baz cba
q baz ba
q az a
q z
q
Este comportamento deve ser comparado com o do Exemplo 6.6 para a pa-
lavra abba.
Vamos agora ver um exemplo de um AP que reconhece uma linguagem
pelo criterio dos estados de aceitacao.
Exemplo 6.8 Consideremos a linguagem
L = {a
n
1
b
n
1
a
n
2
b
n
2
a
n
k
b
n
k
: k 1, n
1
1, n
2
1, . . . , n
k
1},
sobre o alfabeto T = {a, b}. Uma palavra de L consiste numa seccao da forma
a
n
1
b
n
1
, com igual n umero de a e b, que se repete algumas vezes, possivelmente
com outros n umeros de a e b.
O automato que vamos denir tem estados Q = {q
I
, q, q
F
}, onde q
I
e
evidentemente o estado inicial e q
F
e o unico estado de aceitacao, isto e,
F = {q
F
}. O alfabeto da pilha e Z = {a, z
I
}, sendo z
I
o smbolo inicial.
Vejamos primeiro informalmente como se dene , em termos do comporta-
mento desejado para o automato.
O reconhecimento de
a
n
1
b
n
1
a
n
2
b
n
2
a
n
k
b
n
k
processa-se do seguinte modo:
O estado q
I
empilha os n
1
smbolos a em cima de z
I
. Ao encontrar o
primeiro b, desempilha um a e passa para o estado q.
O estado q le os restantes n
1
1 smbolos b e por cada um desempilha
um a. Quando no topo da pilha estiver z
I
, o estado passa a q
F
deixando
a pilha inalterada.
Se k = 1, a palavra foi toda lida e e reconhecida por q
F
ser de aceitacao.
Se k > 1, o automato le o proximo a, empilha-o sobre z
I
, e regressa ao
estado q
I
, onde o ciclo que acabou de ser descrito se repete.
137
Desta descricao informal apercebemo-nos facilmente que o AP e deter-
minista. Isso tambem pode ser observado na tabela mais abaixo como se
indicou a proposito do Exemplo 6.7.
a b
q
I
, z
I
q
I
, az
I
q
I
, a q
I
, aa q,
q, z
I
q
F
, z
I
q, a q,
q
F
, z
I
q
I
, az
I
Note-se que a linha de q
F
, a foi omitida, por ter todas as casas vazias.
Uma diferenca importante entre os criterios de aceitacao por pilha vazia
e por estados de aceitacao pode observar-se desde ja: quando a pilha ca
vazia, o automato para; porem, quando atinge um estado de aceitacao, pode
prosseguir com a computacao, passando mesmo por estados que nao sao de
aceitacao antes de regressar a um estado de aceitacao.
Denicao 6.9 [AP determinista] Para um conjunto nito X, seja |X| o
n umero dos seus elementos. Um AP A diz-se determinista se, para todo o
q Q e z Z:
ou (a T) |(q, z, a)| 1 e (q, z, ) = ;
ou (a T) (q, z, a) = e |(q, z, )| 1.
A seguinte propriedade e a que se espera.
Proposicao 6.10 Seja c QZ

uma conguracao de um AP determinista


e a T. Se existirem transicoes c
a
1
c
1
e c
a
2
c
2
com a
1
, a
2
{a, } e
c
1
, c
2
QZ

entao a
1
= a
2
e c
1
= c
2
.
Dem. Pela Denicao 6.3, se c
a
i
c
i
(i = 1, 2) entao c tem a forma (q, z)
e existe (q
i
,
i
) (q, z, a
i
) tal que c
i
= (q
i
,
i
). Nao se pode ter a
1
= a
2
porque entao um dos dois seria igual a a e o outro igual a , vindo |(q, z, a)| >
0 e |(q, z, )| > 0, o que nao e permitido pela denicao de AP determinista.
Tem-se entao a
1
= a
2
. Se c
1
= c
2
, isto e, (q
1
,
1
) = (q
2
,
2
), teria de ser
(q
1
,
1
) = (q
2
,
2
). Como a
1
= a
2
, isto implicaria |(q, z, a
1
)| 2, o que
tambem contraria a denicao de AP determinista. Conclui-se que tem de ser
c
1
= c
2
.
138
Convencao 6.11 No que se segue e comodo considerar que a funcao e de-
nida por um conjunto de quntuplos (q, z, a, p, ) tais que (p, ) (q, z, a).
Por comodidade de leitura, escreveremos tais quntuplos na forma (q, z)
a

(p, ), e chamar-lhes-emos regras de transicao. As regras de transicao po-


dem ser interpretadas em termos da tabela que caracteriza , como indicando
que a casa indexada por (q, z) na linha e a na coluna contem o elemento (p, ),
possivelmente entre outros elementos.
Vamos agora ver que os criterios de reconhecimento por pilha vazia e
por estados de aceitacao sao equivalentes, no sentido em que reconhecem a
mesma classe de linguagens.
Teorema 6.12 Seja A um AP e N(A) a linguagem por ele reconhecida pelo
criterio da pilha vazia. Existe um AP A

que reconhece a mesma linguagem


pelo criterio dos estados de aceitacao, isto e, tal que L(A

) = N(A). Alem
disso, se A for determinista, A

e determinista.
Dem. O automato A

e construdo como uma extensao de A. Vai ter um


novo estado inicial q

I
e um novo smbolo inicial na pilha z

I
, e a sua primeira
transicao e (q

I
, z

I
)

(q
I
, z
I
z

I
), determinada por uma regra de transicao
(q

I
, z

I
)

(q
I
, z
I
z

I
). A partir daqui, A

comporta-se exactamente como A,


excepto que cada conguracao por que passa tem o smbolo adicional z

I
na
base da pilha. Mais precisamente, as conguracoes de A

tem a forma (q, z

I
)
para toda a conguracao (q, ) de A. Quando A esta numa conguracao de
aceitacao (q, ) em que a pilha esta vazia, A

esta na conguracao (q, z

I
). O
que e preciso fazer entao e promover a transicao desta conguracao para uma
outra com um estado de aceitacao. Para tanto basta criar apenas um estado
de aceitacao q

F
e acrescentar a A

as regras de transicao (q, z

I
)

(q

F
, z

I
)
para cada q Q. Tem-se a transicao (q, z

I
)

(q

F
, z

I
), como se pretende.
Vejamos com mais precisao a denicao de A

. Tem-se
A

= (T, Q

, Z

, q

I
, z

I
,

, F

),
em que:
Q

= Q {q

I
, q

F
} com q

I
, q

F
Q;
Z

= Z {z

I
} com z

I
Z;
F

= {q

F
};

e constituda pelas regras de , `as quais se acrescentaram:


(q

I
, z

I
)

(q
I
, z
I
z

I
); e
139
(q, z

I
)

(q

F
, z

I
) para todo o q Q.
Atendendo `a discussao anterior, ve-se facilmente que (q
I
, z
I
)
x
(q, ) se e so
se (q

I
, z

I
)
x
(q

F
, z

I
), o que mostra que L(A

) = N(A). Alem disso, as regras


de transicao que foram acrescentadas a nao introduzem nao determinismo,
pelo que A

e determinista se A o for.
Exemplo 6.13 Consideremos o automato A do Exemplo 6.7. Da construcao
do automato A

apresentamos apenas a denicao da funcao

a b c
q

I
, z

I
q
I
, z
I
z

I
p, z p, az p, bz q, z
p, a p, aa p, ba q, a
p, b p, ab p, bb q, b
q, z q,
q, a q,
q, b q,
p, z

I
q

F
, z

I
q, z

I
q

F
, z

I
Note-se que esta tabela se obteve acrescentando a primeira e as duas
ultimas linhas `a tabela de , seguindo a prescricao da demonstracao do teo-
rema anterior.
O resultado seguinte e o inverso do anterior. Note-se porem, que nao se
faz a correspondente armacao sobre o caso determinista.
Teorema 6.14 Para todo o AP A, e possvel construir um AP A

tal que
N(A

) = L(A).
Dem. Tambem neste caso A

e uma extensao de A, executando uma pri-


meira transicao (q

I
, z

I
)

(q
I
, z
I
z

I
) e passando a simular A. Quando A
atinge uma conguracao (q, ) para um estado de aceitacao q F, A

atinge
a conguracao (q, z

I
), podendo escolher nao deterministicamente continuar
a simular A ou esvaziar a pilha. O esvaziamento da pilha consegue-se tran-
sitando para um estado q

V
por meio da regra de transicao (q, z)

(q

V
, z), o
qual se encarrega de desempilhar todos os smbolos usando regras (q

V
, z)

(q

V
, ). A denicao completa de A

e a seguinte:
A

= (T, Q

, Z

, q

I
, z

I
,

, F

),
140
em que:
Q

= Q {q

I
, q

V
} com q

I
, q

V
Q;
Z

= Z {z

I
} com z

I
Z;
F

= ;

e constituda pelas regras de e pelas regras:


(q

I
, z

I
)

(q
I
, z
I
z

I
);
(q, z)

(q

V
, z) para todo o q F e z Z

; e
(q

V
, z)

(q

V
, ) para todo o z Z

.
Para x T

e q F, tem-se (q
I
, z
I
)
x
(q, ) para um certo se e so se
(q

I
, z

I
)
x
(q

V
, ), logo N(A

) = L(A).
Exemplo 6.15 Dado o automato A do Exemplo 6.8, a tabela da funcao

do automato A

e a seguinte:

a b
q

I
, z

I
q
I
, z
I
z

I
q
I
, z
I
q
I
, az
I
q
I
, a q
I
, aa q,
q, z
I
q
F
, z
I
q, a q,
q
F
, z
I
q
I
, az
I
q

V
, z
I
q
F
, z

I
q

V
, z

I
q
F
, a q

V
, a
q

V
, z q

V
,
(Na ultima linha, z e qualquer dos smbolos z

I
, z
I
, a.) Note-se que,
embora A seja determinista, A

nao o e em virtude de se ter acrescentado a


regra (q
F
, z
I
)

(q

V
, z
I
).
O facto de, no teorema anterior, se chegar a um automato que pode ser
nao determinista, mesmo partindo de um automato determinista, e inde-
sejavel, mas pode ser corrigido com um artifcio simples. Trata-se de acres-
centar um smbolo terminador, que representaremos por $, a cada palavra, e
permitir que o automato A

reconheca a linguagem N(A

) = L(A){$}.
Teorema 6.16 Seja A um AP determinista e $ um smbolo nao pertencente
a T. Existe um AP determinista A

tal que N(A

) = L(A){$}.
141
Dem. A construcao de A

e semelhante `a do teorema anterior. A unica


diferenca e que a decisao de esvaziar a pilha e determinista, e ocorre quando
se encontra $ na ta de leitura. Mais precisamente, tem-se:
A

= (T {$}, Q

, Z

, q

I
, z

I
,

, F

),
em que Q

, Z

e F

se denem como anteriormente, e

e constituda pelas
regras de e pelas regras:
(q

I
, z

I
)

(q
I
, z
I
z

I
);
(q, z)
$
(q

V
, z) para todo o q F e z Z

; e
(q

V
, z)

(q

V
, ) para todo o z Z

E facil ver que N(A

) = L(A){$} e A

e determinista.
Exemplo 6.17 Retomemos o automato A do Exemplo 6.8. A tabela da
func ao

para o automato A

com o smbolo terminador $ e a seguinte:

a b $
q

I
, z

I
q
I
, z
I
z

I
q
I
, z
I
q
I
, az
I
q
I
, a q
I
, aa q,
q, z
I
q
F
, z
I
q, a q,
q
F
, z
I
q
I
, az
I
q

V
, z
I
q
F
, z

I
q

V
, z

I
q
F
, a q

V
, a
q

V
, z q

V
,
Esta tabela deve ser comparada com a do exemplo anterior.
Vamos agora ver uma generalizacao de automato de pilha em que se
permite que as transicoes sejam determinadas, nao apenas pelo smbolo que
esta no topo da pilha, mas possivelmente tambem por alguns smbolos que
se lhe seguem.
Denicao 6.18 [AP generalizado] Um automato de pilha generalizado dene-
se tal como um automato de pilha, excepto que o domnio de e Q
ZZ

(T {}). Noutros termos, as regras de transicao tem a forma


(q, z)
a
(q

) com z Z e Z

. Diremos que o AP generalizado


e determinista no primeiro smbolo se o AP que se obtem substituindo cada
regra (q, z)
a
(q

) por (q, z)
a
(q

) for determinista.
142
Assim, em cada transicao de um AP generalizado, desempilha-se a palavra
z e empilha-se

. O AP generalizado e determinista no primeiro smbolo se


a escolha da transicao a efectuar car determinada pelo smbolo z do topo da
pilha. O proximo resultado mostra que os AP generalizados nao aumentam
a classe das linguagens reconhecidas pelos AP, pelo que se resumem a ser de
utilizacao mais comoda em certas situacoes. Veremos uma tal utilizacao na
construcao de analisadores sintacticos ascendentes.
Teorema 6.19 Toda a linguagem reconhecida por um AP generalizado e
reconhecida por um AP (normal). Alem disso, se o AP generalizado for
determinista no primeiro smbolo, o correspondente AP e determinista.
Dem. O AP generalizado e transformado num AP substituindo cada regra
(q, z
1
z
k
)
a
(q

) (k > 1)
pelas regras
(q, z
1
)
a
(r
2
, )
(r
2
, z
2
)

(r
3
, )
.
.
.
(r
k
, z
k
)

(q

)
onde r
2
, . . . , r
k
sao novos estados, distintos dos estados previamente existen-
tes no automato e dos estados criados por analoga transformacao de outras
regras. A primeira das regras introduzidas le a (se a T) e desempilha z
1
; a
segunda desempilha z
2
, e assim sucessivamente, ate que a ultima desempilha
z
k
, muda o estado para q

e empilha

. Procedendo desta forma, ve-se que


os dois automatos reconhecem a mesma linguagem. Os estados r
2
, . . . , r
k
nao introduzem nao determinismo, como tambem nao o introduz a regra
(q, z
1
)
a
(r
2
, ) se o AP generalizado for determinista no primeiro smbolo.
Fica concluda a demonstracao.
Vamos agora relacionar os automatos de pilha com as gramaticas inde-
pendentes do contexto.
Teorema 6.20 Para toda a gramatica independente do contexto G, existe
um automato de pilha A tal que N(A) = L(G).
Dem. Dada a gramatica G = (T, N, S, P), dene-se A = (T, Q, Z, q
I
, z
I
, , F)
por
Q = {q}.
143
Z = V .
q
I
= q.
z
I
= S.
F = .
e denida pelas regras:
Reconhecimento: (q, a)
a
(q, ) para todo o a T.
Expansao: (q, A)

(q, ) para toda a producao A P.
Se mostrarmos que
(q, )
x
(q, )

E
x,
conclumos que
N(A) = {x T

: (q, S)
x
(q, )} = {x T

: S

E
x} = L(G),
como se pretende. Para demonstrar a equivalencia acima, comecemos por
supor que (q, )
x
(q, ). Se esta transicao tiver um so passo, ela resulta da
aplicacao de uma regra de reconhecimento ou de uma regra de expansao. No
primeiro caso, a transicao tem a forma (q, a)
a
(q, ), dando de imediato
a

E
a. No segundo caso tem-se uma transicao (q, A)

(q, ) para
uma producao A , e de novo A
E
. Se a transicao tiver mais de um
passo, a conclusao

E
x segue por transitividade.
Suponhamos agora que se tem uma derivacao esquerda directa xA
E
x para uma producao A . Aplicando |x| regras de reconhecimento
e uma regra de expansao, obtem-se (q, xA)
x
(q, A)

(q, ). Generali-
zando a derivacoes esquerdas arbitrarias

E
x, obtem-se, por transitivi-
dade, (q, )
x
(q, ).
Exemplo 6.21 Consideremos a gramatica de producoes S aSb | c. O
automato construdo na demonstracao do teorema anterior tem a funcao de
transicao denida na seguinte tabela:
a b c
q, S q, aSb q, c
q, a q,
q, b q,
q, c q,
144
Note-se que a casa da linha q, S e coluna tem dois elementos, logo o
automato e nao determinista.
`
A derivacao S aSb acb corresponde o
seguinte comportamento no automato:
ESTADO PILHA FITA
q S acb
q aSb acb
q Sb cb
q cb cb
q b b
q
O n ao determinismo do automato corresponde exactamente `a existencia de
varias producoes para um mesmo smbolo nao terminal. A construcao do
teorema anterior tem o interesse teorico de mostrar que a analise sintactica
e possvel em todos os casos. Nos captulos seguintes vamos estudar alguns
casos importantes em que a analise sintactica pode ser feita por AP deter-
ministas.
O resultado recproco do anterior tambem e valido.
Teorema 6.22 Para todo o automato de pilha A, existe uma gramatica in-
dependente do contexto G tal que L(G) = N(A).
Dem. Para todos os q, p Q e Z

, consideremos a linguagem
N
q,,p
= {x T

: (q, )
x
(p, )} (6.1)
formada por todas as palavras que levam o automato da conguracao (q, )
`a conguracao (p, ). Dado que a linguagem N(A) e o conjunto das palavras
que levam da conguracao inicial (q
I
, z
I
) a uma conguracao (p, ) para
algum p Q, tem-se
N(A) =

pQ
N
q
I
,z
I
,p
. (6.2)
A gramatica G = (T, N, S, P) que gera N(A) dene-se do seguinte modo.
O alfabeto terminal e o alfabeto de entrada do automato. Os smbolos nao
terminais sao o smbolo inicial S e um smbolo A
q,z,p
para cada (q, z, p)
Q Z Q, que se pretende que gere a linguagem N
q,z,p
. Em virtude da
equacao 6.2, escolhem-se para S as producoes
S A
q
I
,z
I
,p
(6.3)
145
para todo o p Q. Pela equacao 6.2, se cada L(A
q,z,p
) = N
q,z,p
entao
L(S) = N(A), como se pretende. Falta-nos denir as producoes dos smbolos
A
q,z,p
.
Comecemos por mostrar que se tem a igualdade
N
q,z,p
=

(q,z)
a
(r,)
{a}N
r,,p
. (6.4)
(A uniao e feita para todos os elementos na linha (q, z) da tabela de .) Se
x N
q,z,p
entao, pela equacao 6.1 que dene estes conjuntos, deve ter-se
(q, z)
x
(p, ). No primeiro passo da derivacao utilizou-se uma certa regra
(q, z)
a
(r, ), pelo que a derivacao se decompoe em (q, z)
a
(r, )
y
(p, )
com x=ay. De novo pela equacao 6.1, tem-se y N
r,,p
, logo x = ay
{a}N
r,,p
. Isto mostra que o membro esquerdo da equacao 6.4 esta contido no
seu membro direito. O raciocnio pode ser facilmente invertido, concluindo-se
que o membro direito tambem esta includo no esquerdo, donde a igualdade.
Os conjuntos N
r,,p
que aparecem na equacao 6.4 nao correspondem ne-
cessariamente a um smbolo nao terminal, visto que se pode ter || = 1.
Assim, antes de podermos escrever as producoes para os smbolos A
q,z,p
com
base na equacao 6.4, temos de ver com descrever os conjuntos N
r,,p
.
Se = z

Z, para cada regra (q, z)


a
(r, z

) a gramatica tem a producao


A
q,z,p
aA
r,z

,p
(6.5)
visto que {a}N
r,z

,p
N
q,z,p
pela equacao 6.4.
Se = , a equacao 6.1 mostra que N
r,,p
= se r = p e N
r,,p
= {} se
r = p. Isto signica que na equacao 6.4 podemos ignorar as regras (q, z)
a

(r, ) com r = p. Para cada uma das regras (q, z)


a
(p, ), a gramatica tem
a produ cao
A
q,z,p
a (6.6)
visto que, sendo N
p,,p
= {}, se tem {a}N
p,,p
= {a} N
q,z,p
.
Se = z, tem-se a igualdade
N
q,z,p
=

rQ
N
q,z,r
N
r,,p
. (6.7)
Com efeito, se x N
q,z,p
entao, pela equacao 6.1, (q, z)
x
(p). Como o
conte udo inicial z da pilha e completamente desempilhado, ha uma con-
guracao intermedia (r, ) na anterior derivacao em que pela primeira vez o
conte udo da pilha e . Existem entao palavras w e y tais que x = wy e
146
(q, z)
w
(r, )
y
(p, ). As transicoes de (q, z)
w
(r, ) nao dependem de ,
visto que em nenhuma situacao intermedia o conte udo da pilha e . Deve
entao ter-se tambem (q, z)
w
(r, ), o que mostra que w N
q,z,r
e y N
r,,p
.
Deste modo, x = wy N
q,z,r
N
r,,p
, logo o membro esquerdo da equacao 6.7
esta contido no seu membro direito. Por um raciocnio analogo se mostra
que o membro direito esta contido no esquerdo, o que justica que se tenha
a igualdade.
Iterando a equacao 6.7, ve-se que, se n > 1,
N
q,z
1
zn,p
=

p
1
,...,p
n1
Q
N
q,z
1
,p
1
N
p
1
,z
2
,p
2
N
p
n1
,zn,p
. (6.8)
Assim, para cada regra (q, z)
a
(r, z
1
z
n
) com n > 1, a gramatica tem as
producoes
A
q,z,p
aA
q,z
1
,p
1
A
p
1
,z
2
,p
2
A
p
n1
,zn,p
(6.9)
para todos os p
1
, . . . , p
n1
Q, pelas equacoes 6.4 e 6.8. As producoes 6.5, 6.6
e 6.9 sao todas as producoes do smbolo A
q,z,p
. Juntando as producoes destes
smbolos `as producoes 6.3 para S, obtem-se o conjunto P das producoes da
gramatica. Fica terminada a demonstracao.
147
Captulo 7
Gramaticas LL(1)
[VERS

AO PRELIMINAR.]
Neste captulo apresenta-se uma classe de gramaticas independentes do
contexto as gramaticas LL(1) para as quais o problema da analise
sintactica descendente e particularmente simples. O algoritmo e determi-
nista, como e desejavel, no sentido em que em cada passo da analise existe
(e e conhecida) uma unica accao a executar. Alem disso, a escolha dessa
accao e determinada pelo primeiro smbolo da porcao da ta de leitura que
ainda falta analisar (um so smbolo de avanco ou lookahead). O algoritmo
termina sempre, quer aceitando a palavra inicial quer assinalando um erro.
Este captulo trata sucessivamente da denicao das gramaticas LL(1), da
apresentacao de algoritmos que vericam se uma gramatica dada e LL(1), e
nalmente da caracterizacao do automato de pilha associado a uma gramatica
LL(1).
7.1 Denicao das gramaticas LL(1)
Em todo este captulo, G = (T, N, S, P) e uma gramatica independente do
contexto que se supoe estar na forma reduzida. Recordemos que isso signica
que:
todo o smbolo nao terminal A e produtivo, isto e, gera uma linguagem
L(A) = ;
todo o smbolo X N T, terminal ou nao, e acessvel a partir do
smbolo inicial S, isto e, existem palavras , (N T)

tais que
S

X.
Como de costume, pomos V = N T.
148
Denicao do conjunto dos primeiros
Dada uma gramatica em que as producoes do smbolo inicial sejam, por
exemplo,
S a | b
com a, b T e , V

, toda a palavra gerada por S comeca quer por a


quer por b. Dizemos entao que o conjunto dos primeiros de S e {a, b} e
escrevemos
Prim(S) = {a, b}.
Mais geralmente, podemos denir o conjunto Prim() para qualquer palavra
V

. Por exemplo, para as duas expansoes de S temos


Prim(a) = {a}, Prim(b) = {b},
visto que toda a palavra gerada a partir de a comeca necessariamente por
a e toda a palavra gerada a partir de b comeca por b. A importancia de se
conhecerem estes conjuntos na analise sintactica pode tambem ser ilustrada
com o fragmento de gramatica anterior. Se se pretendesse analisar uma
palavra da forma a a partir de S, teria de se utilizar a primeira producao
de S, visto que Prim(a) = Prim(a) = {a}, e prosseguia-se analisando a
partir de . Se a palavra a analisar tivesse a forma b entao utilizava-se a
segunda producao de S. Se nao tivesse nenhuma destas duas formas, isto e,
se o primeiro smbolo da palavra a analisar nao fosse a nem b, teria de ser
assinalado um erro na palavra em analise.
Suponhamos agora que as producoes de S tinham a forma
S |
em que Prim() = {a, b} e Prim() = {b, c}. Se se pretendesse analisar uma
palavra da forma b, o conhecimento apenas do primeiro smbolo de b nao
permitiria decidir entre as duas producoes de S, visto que b Prim() e
b Prim(). Deste modo, b podia em princpio ser gerada tanto a partir
de como a partir de . Por esta razao, quando se tem producoes da forma
A
1
| |
n
exige-se que se i = j entao Prim(
i
) Prim(
j
) = . Esta condicao, que e
obviamente necessaria, nao e, contudo, suciente, e sera generalizada mais
adiante. Mas por agora contentemo-nos em denir rigorosamente o conjunto
dos primeiros de uma palavra.
149
Denicao 7.1 [Primeiros] O conjunto dos primeiros de V

, que se
denota Prim(), dene-se por
Prim() = {a T : ( V

a}.
Assim, Prim() e o conjunto de todos os smbolos terminais que sao os
primeiros smbolos das palavras geradas por . A determinacao de Prim(),
embora nao seja conceptualmente complicada, nao e tao simples como o po-
dera ter dado a entender o fragmento de gramatica anterior. Um algoritmo
sera apresentado no paragrafo seguinte. Aqui, vamos extrair algumas con-
sequencias da denicao, para a esclarecer melhor.
Propriedades 7.2 Sejam a T, A N e , V

. Entao:
i) Prim(a) = {a}.
Imediato.
ii) Se A
1
| |
n
forem todas as producoes de A entao Prim(A) =
Prim(
1
) Prim(
n
).
Com efeito, se a Prim(
i
) entao
i

a para algum V

, donde
A
i

a e a Prim(A). Inversamente, se a Prim(A) existe


uma derivacao da forma A

a. Se A
i
for a producao usada no
primeiro passo tem-se A
i

a, o que mostra que a Prim(


i
).
iii) Prim() = .
Imediato.
iv)
Prim() =

Prim() se

,
Prim() Prim() se

.
Com efeito, se

e se a Prim(), de forma que

a para
algum V

, vem

a. Nesse caso, tambem se tem


a Prim().
Estas propriedades mostram que para calcular Prim() para V

arbitrario basta conhecer Prim(A) para todo o A N. No paragrafo seguinte


apresenta-se um algoritmo que determina os primeiros de qualquer smbolo
nao terminal. Consideremos por exemplo a gramatica de producoes
S AB
A a |
B b
Tem-se Prim(A) = Prim(a) Prim() = {a}, Prim(B) = {b} e, como A

, Prim(S) = Prim(AB) = Prim(A)Prim(B) = {a, b}. Isto alias e evidente


se observarmos que L(S) = {ab, b}.
150
Denicao do conjunto dos seguintes
Consideremos a gramatica com as seguintes producoes:
S AB
A a |
B a
O unico smbolo nao terminal com mais de uma producao e A, e tem-se
Prim(a) Prim() = {a} = . Tentemos, porem analisar a palavra aa:
PILHA FITA
S aa
AB aa
?
Se o analisador tiver acesso apenas ao primeiro smbolo da palavra na ta de
leitura, do seu ponto de vista ela tanto pode ser aa como a. No primeiro caso,
A a e a producao que deve ser escolhida para expandir A em AB, enquanto
que a producao apropriada ao segundo caso e A . Nao e pois possvel
decidir entre as duas accoes a tomar, e o tipo de gramaticas que permite que
tais situacoes ocorram tem de ser eliminado para que o analisador funcione
como se pretende.
Para vermos o que ha de errado com a gramatica anterior, suponhamos
que na pilha AB congelavamos temporariamente a expansao de A. A unica
expansao possvel para B levaria `a nova pilha Aa. Ve-se assim que o smbolo
a, que e um primeiro de A, tambem e um seguinte de A, isto e, pode ocorrer
imediatamente a seguir a A numa palavra que deriva do smbolo inicial S.
Assim, quando o primeiro smbolo da ta e a, nao se sabe em princpio se
ele esta ali no papel de primeiro de A ou de seguinte de A, visto que A pode
gerar .
Denicao 7.3 [Seguintes] O conjunto dos seguintes de A N dene-se por
Seg(A) = {a T : (, V

) S

Aa}.
Assim, como cou dito atras, os seguintes de A sao todos os smbolos
terminais que podem ocorrer imediatamente a seguir a A em palavras que
derivam do smbolo inicial. Em face do exemplo anterior, nao e difcil concluir
que, quando se tem duas producoes distintas A e A para um mesmo
smbolo nao terminal A em que

, deve ter-se
Seg(A) Prim() = .
151
Para ver que assim e, suponhamos, pelo contrario, que a Seg(A)Prim().
Consideremos uma situacao em que a e o primeiro smbolo da ta de leitura
e A e o conte udo da pilha. Para a ser reconhecido, tem de ser produzido no
topo da pilha, o que em princpio pode ser feito de duas maneiras. Por um
lado, a pode ser produzido por A, como em A

a, em virtude
de ser a Prim(). Por outro lado, a pode ser produzido por , devido a ser
a Seg(A), vindo A

a. Nao se sabe se se deve escolher a


expansao se a , que e precisamente o nao determinismo que se pretende
evitar.
As duas condicoes que acabamos de ver, a que se refere aos primeiros
e a que envolve os seguintes, podem ser reunidas numa so condicao, que
apresentaremos adiante.
Denicao de gramatica LL(1)
Para integrar as condicoes dos primeiros e dos seguintes denem-se os smbolos
directores de uma producao.
Denicao 7.4 [Smbolos directores] O conjunto dos smbolos directores de
uma producao A dene-se do seguinte modo:
Dir(A, ) =

Prim() se

,
Prim() Seg(A) se

.
Podemos agora denir gramatica LL(1).
Denicao 7.5 [Gramatica LL(1)] Uma gramatica G diz-se LL(1) se satis-
zer as seguintes condicoes:
A gramatica esta na forma reduzida.
Para todo o par de producoes distintas A e A para o mesmo
smbolo nao terminal,
Dir(A, ) Dir(A, ) = ;
nao se pode ter

.
A primeira destas condicoes e a reuniao numa so das condicoes dos primei-
ros e dos seguintes. A segunda condicao merece alguns comentarios, para o
que necessitamos de uma denicao preliminar.
Denicao 7.6 [Recursividade esquerda] Uma gramatica diz-se recursiva se
existir um smbolo nao terminal A tal que A
+
A para alguns , V

,
e recursiva `a esquerda se A
+
A para algum V

.
152
Uma gramatica recursiva nao e necessariamente indesejavel. Bem pelo
contrario, pode demonstrar-se que uma gramatica so gera uma linguagem
innita (como em geral se pretende) se for recursiva. Ja uma gramatica
recursiva `a esquerda e indesejavel do ponto de vista da analise sintactica
descendente, porque pode originar computacoes innitas. Suponhamos que
numa dada fase da analise de uma certa palavra se chegava `a situacao
PILHA FITA
A x
e que a gramatica dada era recursiva `a esquerda em A. Se se empregassem
sucessivamente expansoes que levassem de A a A chegava-se `a situacao
PILHA FITA
A x
e o processo repetia-se indenidamente, nao havendo pois possibilidade de o
algoritmo terminar.
Ora a primeira das condicoes denidoras das gramaticas LL(1) nao ga-
rante so por si que a gramatica nao seja recursiva `a esquerda. Consideremos,
por exemplo, a gramatica com as seguintes producoes:
S A | B
A B |
B A |
Tem-se L(S) = L(A) = L(B) = {}, por conseguinte os conjuntos directores
sao todos vazios, e a primeira condicao verica-se trivialmente. A gramatica
e, porem, recursiva `a esquerda, visto que A B A. Logo, a primeira
condicao so por si nao elimina a possibilidade de existencia de recursividade
`a esquerda. Note-se, contudo, que a gramatica em exemplo nao e LL(1),
visto nao satisfazer a segunda condicao. Pode alias demonstrar-se o seguinte
resultado.
Proposicao 7.7 Uma gramatica LL(1) nao e recursiva `a esquerda.
Dem. Seja G uma gramatica LL(1) (na forma reduzida, recorde-se!) e
comecemos por admitir que G e recursiva `a esquerda, para em seguida chegar
a uma contradicao. Seja A recursivo `a esquerda, e consideremos a arvore de
uma derivacao A
+
A. Todos os nos da raiz A `a folha A sao etiquetados
por smbolos recursivos `a esquerda. Com efeito, seja B a etiqueta de um
no nesse caminho, e tomemos a sub-arvore enraizada nesse no. Se na folha
153
A da sub-arvore dependurarmos uma copia da arvore inicial, obtemos um
caminho da raiz B a um no B, o que mostra que B e recursivo; como os
irmaos esquerdos de B geram a palavra vazia, B e recursivo `a esquerda. Se
todos esses smbolos recursivos `a esquerda tivessem apenas uma producao na
gramatica, essa producao teria outro smbolo recursivo `a esquerda no corpo,
logo os smbolos nao seriam produtivos, contrariando a suposicao de que G
esta na forma reduzida. Assim, ha pelo menos um smbolo nao terminal
recursivo `a esquerda com mais de uma producao, e podemos supor, sem
perda de generalidade, que esse smbolo e A.
Uma vez que, por hipotese, A
+
A, existe uma producao A tal
que A

A. Como existe outra producao A para A, podemos


escrever
A

A .
Assim, ve-se que Prim() Prim(). Se Prim() = , segue-se que Dir(A, )
Dir(A, ) = , contrariamente `a hipotese de G ser LL(1). Se Prim() = ,
como G e reduzida tem-se L() = {}, donde em particular

. Nao
se pode ter Prim() = , se nao

pela mesma razao anterior e por-


tanto

, contrariando a segunda condicao da denicao de


gramatica LL(1). Logo, Prim() = . A derivacao anterior mostra que
Prim() Seg(A) Dir(A, ) e Prim() Prim() Dir(A, ), por con-
seguinte Dir(A, ) Dir(A, ) = . Uma vez mais se contradiz a hipotese de
que a gramatica dada e LL(1), e ca terminada a demonstracao.
Voltando `a segunda condicao da denicao de gramatica LL(1), se ela
e indispensavel, como se viu, frequentemente ela e uma consequencia da
primeira condicao. Na pratica, ha uma maneira de garantir que isso se passa
sempre assim, adicionando `a gramatica um smbolo terminador $.
Proposicao 7.8 Seja G = (T, N, S, P) e dena-se G

= (T

, N

, S

, P

)
pondo T

= T {$}, N

= N {S

} e P

= P {S

S$}, onde $ e
S

sao smbolos distintos nao existentes em V . Tem-se L(G

) = L(G){$}
e, se G

satiszer a primeira condicao da denicao de gramaticas LL(1),


tambem satisfaz a segunda.
Dem.

E evidente que L(G

) = L(G){$}, visto que, como e facil reconhecer,


S

se e so se S

$. Uma consequencia deste facto e que se S

A entao e terminada por $, logo Seg(G

, A) (os seguintes de A em G

) e
nao vazio. Assim, se A e A forem producoes tais que

, os seus conjuntos directores em G

contem ambos Seg(G

, A) = .
Como G

satisfaz a primeira condicao das gramaticas LL(1), tem de ser = ,


logo a segunda ccondicao tambem ca satisfeita.
154
Com as notacoes da proposicao anterior, G e LL(1) se e so se G

for LL(1).
Esta e a razao pela qual e tao util acrescentar a cada palavra gerada por G
um terminador especial $.
7.2 Vericacao das condicoes LL(1)
Nesta seccao vamos apresentar algoritmos para a determinacao dos primeiros
e seguintes de smbolos nao terminais. Mostramos tambem como se pode
eliminar a recursividade `a esquerda de uma gramatica num caso simples.
Determinacao dos primeiros
O algoritmo consiste em denir um grafo apropriado e obter os primeiros
directamente a partir do grafo.
Denicao 7.9 [Grafo dos primeiros] O grafo dos primeiros dene-se do se-
guinte modo:
Os vertices sao os smbolos de V .
Para cada producao A X
1
X
2
X
n
com n > 0, ha uma arco de
A para X
1
; se X
1

, ha tambem um arco de A para X


2
, e assim
sucessivamente.
Note-se que so partem arcos de smbolos nao terminais, e nunca de
smbolos terminais. Havendo um arco de A para X, a propriedade cru-
cial e que A

X para algum , como e facil de vericar directamente


a partir da denicao de arco. Esta propriedade mantem-se valida ao longo
de um caminho. Assim, se existir um arco de X para Y , tem-se X

Y
para algum , logo A

Y . O raciocnio pode ser repetido para cami-


nhos de comprimento qualquer. Em particular, se existir um caminho de A
para um smbolo terminal a entao A

a para algum , por conseguinte


a Prim(A).
Inversamente, se a Prim(A), isto e, se A

a para algum , na arvore


de derivacao correspondente existe um caminho da raiz A para a folha a, e
todas as folhas `a esquerda dessa tem etiqueta . Dois nos consecutivos X
e Y nesse caminho na arvore estao relacionados por uma producao X
X
1
X
k
, em que Y e um certo X
j
. Mas entao os smbolos X
i
com i < j
geram a palavra vazia, logo no grafo dos primeiros existe um arco de X para
Y . Conclui-se que existe um caminho de A para a nesse grafo. Ficou assim
mostrado:
155
Proposicao 7.10 Para todos os smbolos nao terminal A e terminal a, tem-
se a Prim(A) se e so se existe um caminho de A para a no grafo dos
primeiros.
Esta propriedade mostra que Prim(A) se calcula determinando todos os
descendentes terminais de A no grafo dos primeiros. Consideremos, por
exemplo, a gramatica de producoes
S E$
E TU
U +TU |
T FG
G FG |
F (E) | a
Os smbolos que geram a palavra vazia sao U e G. Os nos do grafo dos
primeiros sao S, E, U, T, G, F, $, +, , (, ), a. Os arcos podem ser descritos in-
dicando os sucessores de cada no (necessariamente um smbolo nao terminal).
Na tabela seguinte mostram-se os sucessores e os primeiros dos smbolos nao
terminais.
Nos Sucessores Primeiros
S E (, a
E T (, a
U + +
T F (, a
G
F (, a (, a
Determinacao dos seguintes
O algoritmo para determinar os seguintes e uma consequencia das duas
propriedades enunciadas a seguir. Relembre-se que estamos a supor que
a gramatica em consideracao esta na forma reduzida.
Propriedades 7.11 Seja A B uma producao. Tem-se:
i) Prim() Seg(B).
Com efeito, como A e acessvel tem-se S

A B para
alguns e . Se a Prim(), tem-se

a para algum . Mas


entao S

Ba, donde a Seg(B).


156
ii) Se

entao Seg(A) Seg(B).


Se a Seg(A) tem-se S

Aa Ba

Ba para alguns
e , logo a Seg(B).
A determinacao dos seguintes tambem se baseia na construcao de um
grafo.
Denicao 7.12 [Grafo dos seguintes] O grafo dos seguintes dene-se por:
Os vertices sao os smbolos de V .
Para cada producao A B com um smbolo nao terminal B no
corpo,
existe um arco de B para cada b Prim();
se

, existe tambem um arco de B para A.


Tal como no caso dos primeiros, nao e difcil concluir que se tem a seguinte
propriedade.
Proposicao 7.13 Para todos os smbolos nao terminal A e terminal a, tem-
se a Seg(A) se e so se existe um caminho de A para a no grafo dos
seguintes.
Deste modo, Seg(A) calcula-se determinando todos os descendentes ter-
minais de A no grafo dos seguintes. Para a gramatica do exemplo anterior,
mostram-se na tabela seguinte os sucessores no grafo dos seguintes e os se-
guintes dos smbolos nao terminais.
Nos Sucessores Seguintes
S
E $, ) $, )
U E, U $, )
T +, E, U $, +, )
G T, G $, +, )
F , T, G $, , +, )
157
Eliminacao da recursividade a esquerda
Quando uma gramatica e recursiva `a esquerda, ja se sabe que nao e LL(1).
Vamos apresentar um procedimento que permite transformar uma gramatica
recursiva `a esquerda numa que nao o e. Este procedimento nao garante, evi-
dentemente, que a gramatica obtida seja LL(1), mas e aplicavel num grande
n umero de situacoes. Vamos limitar-nos a remover a recursividade `a es-
querda que surge de forma directa em producoes do tipo A A.
Proposicao 7.14 Seja G uma gramatica cujas producoes para um smbolo
nao terminal A sao
A A
1
| | A
n
|
1
| |
k
.
Seja G

a gramatica que se obtem substituindo estas producoes por


A
1
B | |
k
B
B |
1
B | |
n
B
em que B e um novo smbolo nao terminal nao existente em V . Nestas
condicoes, tem-se L(G

) = L(G).
Dem. Nao e difcil ver como toda a arvore de derivacao em G de raiz
etiquetada por A pode ser transformada numa arvore em G

com a mesma
fronteira, bem como a transformacao inversa.
Aplicando o procedimento descrito nesta proposicao ate nao existirem
producoes do tipo indicado, elimina-se a recursividade `a esquerda directa.
Por exemplo, a gramatica de producoes
S E$
E E + T | T
T T F | F
F (E) | a
ca transformada em
S E$
E TU
U +TU |
T FG
G FG |
F (E) | a
para os dois novos smbolos nao terminais U e G. Para esta gramatica ja
foram calculados os conjuntos de primeiros e seguintes de cada smbolo nao
terminal. Podemos entao calcular os conjuntos directores de cada producao
e vericar se a gramatica e ou nao LL(1).
158
Denicao 7.15 [Tabela de analise sintactica] Os conjuntos directores po-
dem ser representados pela chamada tabela de analise sintactica que, para
uma gramatica G = (T, N, S, P), e uma tabela de linhas indexadas por N,
colunas indexadas por T, e casas preenchidas por palavras de V

ou vazias.
A palavra ocupa a casa da linha A e coluna a se e so se a Dir(A, ).
A gramatica e LL(1) se e so se uma mesma casa nao for ocupada por duas
ou mais palavras diferentes. As casas vazias constituem situacoes de erro, a
serem detectadas na analise sintactica. A tabela para a gramatica anterior e
a seguinte:
( a + ) $
S E$ E$
E TU TU
U +TU
T FG FG
G FG
F (E) a
Verica-se que a gramatica dada e LL(1).
7.3 Reconhecimento de gramaticas LL(1)
Seja G = (T, N, S, P) uma gramatica LL(1). O automato de pilha que reco-
nhece L(G) tem a forma
A = (T, Q, Z, q
I
, z
I
, , F)
em que:
Q = {q
L
} {q
a
: a T}.
Z = V .
q
I
= q
L
.
z
I
= S.
A funcao de transicao e denida mais abaixo.
F = .
A funcao de transicao de A e descrita pelas seguintes regras:
Regras de leitura
(q
L
, z)
a
(q
a
, z)
159
para todo o estado z Z e todo o a T.
Regras de reconhecimento
(q
a
, a)

(q
L
, )
para todo o a T.
Regras de expansao
(q
a
, A)

(q
a
, )
para todo o triplo (a, A, ) tal que a Dir(A, ).
Este automato e evidentemente determinista. Pretende-se a linguagem
N(A) reconhecida pelo criterio da pilha vazia. Tem-se o seguinte resultado:
Teorema 7.16 Com as notacoes anteriores, L(G) = N(A).
Dem. A COMPLETAR.
Como exemplo, consideremos a gramatica de producoes
S E$
E TU
U +TU |
T FG
G FG |
F (E) | a
que ja sabemos ser LL(1). As regras de leitura e reconhecimento sao analogas
para todos os automatos. Mostram-se a seguir as regras de expansao para este
exemplo. Para simplicar a leitura, cada regra (q
a
, A)

(q
a
, ) e escrita na
forma a, A a, , omitindo-se a etiqueta da seta bem como os parenteses
nos pares `a sua esquerda e `a sua direita, e representando os estados q
a
apenas
por a.
(, S (, E$ (, T (, FG
a, S a, E$ a, T a, FG
(, E (, TU +, G +,
a, E a, TU , G , FG
+, U +, +TU ), G ),
), U ), $, G $,
$, U $, (, F (, (E)
a, F a, a
Como se observa, as regras obtem-se directamente a partir da tabela da
analise sintactica, a qual contem portanto toda a informacao util para a
analise sintactica.
160
Captulo 8
Gramaticas da famlia LR
[VERS

AO PRELIMINAR.]
8.1 Gramaticas LR(0)
Neste captulo, G = (T, N, S, P) denota uma gramatica independente do
contexto na forma reduzida, isto e, sem smbolos in uteis nem improdutivos.
Supomos ainda que o smbolo inicial S nao ocorre no corpo de nenhuma
producao. (Uma gramatica que nao satisfaca esta condicao pode ser facil-
mente transformada numa que a satisfaca criando um novo smbolo inicial
S

e acrescentando a producao S

S.) Como de costume, V = N T.


Denicao 8.1 [Forma ponteada] Uma forma ponteada e um elemento do
conjunto V

{.}T

, isto e, e uma palavra .x formada por palavras V

e x T

separadas por um ponto, o qual se supoe que e um smbolo nao


pertencente a V .
Intuitivamente, uma forma ponteada .x representa uma conguracao de
um analisador sintactico em que o conte udo da pilha e e o da ta de leitura
x. Convenciona-se que o topo da pilha e o smbolo mais `a direira de . Se
= ou x = , em vez de .x ou . escreveremos frequentemente .x e .
para simplicar a leitura.
Denicao 8.2 [Derivacao ponteada] A derivacao ponteada e uma relacao
.x .y
entre formas ponteadas, que se dene pelas duas seguintes regras:
Transferencia: a.x .ax se a T.
161
Expansao: A.x .x se A N e A P.
O fecho reexo-transitivo

dene-se da maneira usual.


A derivacao ponteada pode ser vista como uma derivacao direita na qual
se tem um controlo mais no relativamente `as operacoes efectuadas. Na
realidade, se ignorarmos o ponto, vemos que e sempre o smbolo nao terminal
mais `a direita que e expandido. O ponto funciona como uma especie de marca
que indica o local da palavra onde se vai efectuar a proxima operacao. Se
`a esquerda do ponto estiver um smbolo terminal, nao ha nada a fazer e
transfere-se o smbolo para a sua direita; se estiver um smbolo nao terminal,
expande-se.
Escrevendo .y .x se .x .y, podemos interpretar a nova relacao
como descrevendo os passos do funcionamento do analisador sintactico que
sera construdo mais adiante. Assim, .ax a.x consiste em ler e empilhar
o primeiro smbolo da ta de leitura, e .x A.x em reduzir a A no
topo da pilha por meio da producao A .
O resultado seguinte e basico.
Proposicao 8.3 Para todos os , , , V

e x, y, z T

, tem-se:
i) Se .x

.y entao x

D
y.
ii) Se

x entao .

.x.
iii) L(G) = {x T

: S.

.x}.
iv) Se .x

.y entao .xz

.yz.
v) Se

x entao .y

.xy.
Dem. i) Uma derivacao ponteada
1
.x
1

n
.x
n
transforma-se numa
derivacao direita eliminando o ponto das palavras
i
.x
i
, removendo as pa-
lavras que cam repetidas devido `as aplicacoes da regra de transferencia, e
nalmente substituindo por
D
. Conclui-se que
1
x
1

D

n
x
n
.
ii) Se

x, consideremos uma derivacao direita de x a partir de


. Tal derivacao direita ca inteiramente determinada pela sequencia de
producoes utilizadas. A derivacao ponteada requerida constroi-se usando a
mesma sequencia de producoes para as expansoes, juntamente com as trans-
ferencias necessarias.
iii) Esta armacao e uma consequencia de que, pelas alneas anteriores,
S.

.x se e so se S

x.
iv) A armacao e imediata se a derivacao dada consistir de um so passo.
Assim, para uma transferencia a.x.ax tem-se tambem a.xz.axz, e
o caso da expansao e analogo. O caso geral segue por inducao no comprimento
da derivacao.
162
v)

E uma consequencia de ii) e iv).
Denicao 8.4 [Prexo viavel] Um prexo viavel e uma palavra sobre V
tal que S.

.x para algum x T

. Se = S, diremos que e um prexo


viavel proprio.
Escrevendo .x

S., pode interpretar-se um prexo viavel em termos


do analisador sintactico a ser denido como um valor para a pilha que pode
ser reduzido a S dada uma palavra apropriada na ta de leitura.
Note-se que se = for um prexo viavel entao S.

.y para
algum y T

. Como a gramatica esta na forma reduzida,

x para
algum x T

, donde, pela proposicao anterior, .y

.xy. Conclui-se que


S.

.xy, o que mostra que e um prexo viavel. Demonstramos assim:


Proposicao 8.5 Se for um prexo viavel e = entao e um prexo
viavel.
Denicao 8.6 [Item] Um item de uma gramatica G e uma producao com
um ponto inserido no corpo, isto e, um item tem a forma A . com
A P. Um item completo e um item da forma A ., em que
o ponto ocorre o mais `a direita possvel. O item A . e o unico item
associado `a -producao A (resulta da denicao geral com = = ),
e e completo.
Denicao 8.7 [Item valido] Um item A . diz-se valido para o prexo
viavel se tiver a forma e se A for um prexo viavel. O conjunto dos
itens validos para sera representado por Iv().
Assim, tem-se uma derivacao ponteada da forma
S.

A.y .y

.xy
supondo que

x. Intuitivamente, lendo a derivacao ponteada da direita


para a esquerda no sentido de , ve-se que o item A . representa uma
possibilidade que a pilha tem de evoluir para e reduzir-se a A pela
producao A . A palavra `a direita do ponto no item indica o que
falta ainda `a pilha para a reducao poder ter lugar. Em particular, se A .
for v alido para , entao e possvel reduzir imediatamente a pilha a A. Se,
por outro lado, A .a for valido para , isso signica que e possvel
transferir a da ta de leitura para a pilha, cando-se com o item A a.
valido para a.
163
Assim, Iv() representa o conjunto das operacoes que e possvel efec-
tuar no analisador sintactico quando a sua pilha e . Para que o analisador
seja determinista, so deve ser possvel executar uma operacao de cada vez.
Quando for possvel reduzir a pilha, isso deve ser feito de uma unica maneira,
portanto Iv() nunca deve ter dois itens completos distintos. Por outro lado,
nunca deve ser possvel ao mesmo tempo efectuar uma reducao e uma trans-
ferencia, pelo que a presenca de um item completo em Iv() deve impedir
a existencia de um item A .a com um smbolo terminal `a direita do
ponto. Quando estas condicoes nao se vericam, diz-se que se tem respec-
tivamente um conito reducao/reducao e um conito reducao/transferencia.
As gramaticas LR(0) denem-se como sendo gramaticas onde estes conitos
estao ausentes.
Denicao 8.8 [Gramaticas LR(0)] Uma gramatica diz-se LR(0) se satiszer
as seguintes condicoes:
A gramatica esta na forma reduzida e o seu smbolo inicial nao ocorre
no corpo de nenhuma producao.
Para todo o prexo viavel tal que Iv() contem um item completo
A .,
Iv() nao contem nenhum outro item completo;
se Iv() contiver um item B .X, entao X N.
Esta denicao, bem como as observacoes anteriores de caracter intuitivo,
mostram bem da importancia de se dispor de um metodo para calcular os
conjuntos Iv().
8.2 Calculo dos conjuntos de itens validos
O calculo dos conjuntos de itens validos baseia-se na construcao de um
automato nito apropriado. Comecamos por denir uma operacao sobre
conjuntos de itens.
Denicao 8.9 [Fecho] Seja I um conjunto de itens. O fecho de I e o con-
junto Fe(I) de itens denido indutivamente como segue:
I Fe(I).
Se A .B Fe(I) e B P entao B . Fe(I).
Proposicao 8.10 Se I Iv() entao Fe(I) Iv().
164
Dem. Um item de Fe(I), ou pertence a I, e nesse caso pertence a Iv(), ou
entao e da forma B . para uma producao B e um item A .B
em Fe(I). Para ver que B . e valido para basta vericar que B e um
prexo viavel. Por hipotese indutiva, podemos assumir que o item A .B
e valido para . Existe entao tal que = e A e um prexo viavel.
Tem-se S.

A.x B.x para um certo x, o que mostra que B e


um prexo viavel. Pela Proposicao 8.5, B = B e um prexo viavel, como
se pretendia.
Podemos agora passar `a anunciada construcao do automato dos itens
validos.
Denicao 8.11 [Automato dos itens validos] O automato dos itens validos
de G tem a seguinte denicao:
M = (V, Q, q
I
, , Q\ {}),
em que:
O alfabeto de entrada e V = N T.
Q e q
I
sao denidos como segue, onde cada q Q e um conjunto de
itens de G:
q
I
= Fe({S . : S P}) Q.
Se q Q e X V entao (q, X) Q.
A funcao dene-se por
(q, X) = Fe({A X. : A .X q}),
onde q Q e X V .
Todos os estados sao de aceitacao, exceptuando o conjunto vazio de
itens.
Para V

, abreviamos

(q
I
, ) para (). Trata-se do estado nal do
percurso determinado por a partir do estado inicial.
Teorema 8.12 Se for um prexo viavel, entao Iv() = (). Alem disso,
a linguagem reconhecida por M e o conjunto dos prexos viaveis proprios de
G.
Dem. Comecamos por mostrar a inclusao Iv() () da primeira
armacao. Se A . e um item valido para o prexo viavel entao,
para um certo V

, tem-se que = e A e um prexo viavel, donde


S.

A.x .x .
165
A demonstracao prossegue por inducao no comprimento n desta derivacao
ponteada.
Se n = 1 vem
S.
0
S. .
para uma producao S , donde = , = e A = S. Tem-se
S . q
I
= (), por denicao de q
I
, donde S . (), por
denicao de .
Para n > 1, consideremos na derivacao ponteada anterior a producao
B
2
A que introduziu o smbolo nao-terminal A. A derivacao tem entao
a forma
S.


1
B.x
2

2
A.x
2

2
A.x
1
x
2

2
.x
1
x
2
em que

x
1
, =
1

2
e x = x
1
x
2
. O item B
2
.A e valido para

2
= , porque
1
B e um prexo viavel. Como a derivacao S.

2
A.x
2
tem comprimento inferior a n, podemos assumir por hipotese indutiva que
B
2
.A (). Como o conjunto de itens () e fechado, A .
(), donde A . () = ().
Demonstraremos agora a inclusao inversa () Iv(), desta vez por
inducao no comprimento de . Consideremos em primeiro lugar o caso em
que = . Todo o item da forma S . e valido para , porque S e
um prexo viavel. Sendo I o conjunto desses itens, tem-se I Iv(), logo
() = q
I
= Fe(I) Iv(), pela Proposicao 8.10.
Suponhamos agora que tem a forma X para X V . O conjunto
(X) = ((), X) e o fecho do conjunto I = {A X. : A .X
()}. Assim, basta provar que I Iv(X), porque, pela Proposicao 8.10,
teremos (X) = Fe(I) Iv(X), como se pretende. Teremos entao de
mostrar que se A .X () entao A X. e valido para X, isto
e, que para algum se tem X = X e A e um prexo viavel. Mas isso
resulta de que, por hipotese indutiva, A .X Iv(), logo tem a forma
e A e um prexo viavel.
Vamos agora provar a ultima armacao. Teremos de mostrar que V

e um prexo viavel proprio se e so se () = .


Se for um prexo viavel proprio, existe uma derivacao ponteada S.

.x de comprimento maior do que zero, para algum x T

. Se A foi o ultimo
smbolo nao terminal a ser expandido, a derivacao anterior tem a forma
S.


1
A.x
2

2
x
1
.x
2

2
.x
1
x
2
para uma producao A
2
x
1
, onde =
1

2
e x = x
1
x
2
. Segue-se que o
item A
2
.x
1
e valido para , isto e, pertence a Iv(). Como Iv() = (),
conclui-se que () = .
166
Inversamente, suponhamos que () = . Se = , e um prexo viavel
proprio, visto que S.

.x para algum x T

por a gramatica estar na


forma reduzida. Se = X, como (X) e nao vazio tem de existir um item
da forma A .X em (). Mas entao () = e, por hipotese indutiva,
e um prexo viavel proprio. Nesse caso Iv() = (), por conseguinte o
item A .X e valido para . Isto quer dizer que = e A e um prexo
viavel para algum , logo existe uma derivacao ponteada
S.

A.y X.y

X.xy
para alguns x, y T

tal que

x. Isto mostra que X = X e um


prexo viavel proprio, como se pretende.
Fica concluda a demonstracao.
8.3 Reconhecimento de gramaticas LR(0)
Seja G = (T, N, S, P) uma gramatica LR(0) e M = (V, Q, q
I
, , Q \ {}) o
seu automato de itens validos. Consideremos o automato de pilha
R = (T, K, Z, k
I
, z
I
, , F)
denido por:
K = {k, k
F
}.
Z = V Q.
k
I
= k.
z
I
= q
I
.
A relacao de transicao e denida mais abaixo.
F = {k
F
}.
Existem tres tipos de transicoes, que designaremos de aceitacao, reducao
e transferencia. Ao escrever o conte udo da pilha como uma palavra sobre
Z, o topo encontra-se `a direita. Note-se que, em virtude da forma das regras
de reducao, R e um automato de pilha generalizado.
Regras de aceitacao
(k, q)

(k
F
, q)
para todo o estado q Q contendo um item completo S . para o smbolo
inicial de G.
Regras de reducao
(k, q
0
X
1
q
1
X
n
q
n
)

(k, q
0
Aq)
167
para todo o percurso q
0
X
1
q
1
X
n
q
n
em M tal que q
n
contenha o item com-
pleto A X
1
X
n
. com A = S, e onde (q
0
, A) = q.
Regras de transferencia
(k, q)
a
(k, qaq

)
para todo o estado q contendo um item com a `a direita do ponto, e onde
(q, a) = q

.
Note-se que o automato de pilha correspondente a este automato de pilha
generalizado e determinista. A linguagem em que estamos interessados e
L(R), determinada pelo criterio dos estados de aceitacao.
Teorema 8.13 Com as notacoes anteriores, L(G) = L(R).
Dem. A COMPLETAR.
8.4 Gramaticas LR(1)
As gramaticas LR(1) generalizam as gramaticas LR(0) porque permitem que
as decisoes do automato reconhecedor tenham em consideracao o smbolo
corrente na ta de leitura.
Denicao 8.14 [Item LR(1)] Um item LR(1) de uma gramatica G tem a
forma
A ., L
em que A . e um item LR(0) chamado n ucleo do item, e L T e o
conjunto de smbolos de avanco do item (lookahead set). O item e completo
se o seu n ucleo for completo como item LR(0).
A partir deste ponto supomos que $ e um smbolo que nao pertence a V .
Denicao 8.15 [Item valido] Um item A ., {a} diz-se valido para o
prexo viavel se existir x T

tal que
S.

A.x, e
a Prim(x$),
onde Prim(x$) e o conjunto formado pelo primeiro smbolo de x se x =
ou por $ se x = . Um item A ., L e valido para se todo o item
A ., {a} com a L for valido para . Denotaremos por Iv1() o
conjunto dos itens LR(1) validos para .
Podemos agora denir gramatica LR(1).
168
Denicao 8.16 [Gramaticas LR(1)] Uma gramatica G diz-se LR(1) se sa-
tiszer as seguintes condicoes:
A gramatica esta na forma reduzida e o seu smbolo inicial nao ocorre
no corpo de nenhuma producao.
Sempre que algum Iv1() contenha um item completo A ., L,
se Iv1() contiver outro item completo B ., K, tem-se LK =
;
se Iv1() contiver um item B .X, K, entao X L.
O calculo dos conjuntos Iv1() e feito de forma analoga ao dos respectivos
conjuntos de itens no caso LR(0). Comecamos por caracterizar a nocao
adequada a este caso de fecho de um conjunto de itens.
Denicao 8.17 [Fecho LR(1)] Seja I um conjunto de itens LR(1). O fecho
de I e o conjunto Fe1(I) de itens denido indutivamente como segue:
I Fe1(I).
Se A .B, L Fe1(I), B P e K = Prim(L) entao
B ., K Fe1(I).
Nesta denicao, Prim(L) e o conjunto dos primeiros das palavras a com
a L. Os itens validos para prexos viaveis sao denidos por um automato
nito, cuja denicao e muito semelhante `a do caso LR(0).
Denicao 8.18 [Automato dos itens validos LR(1)] O automato dos itens
validos LR(1) de G tem a seguinte denicao:
M = (V, Q, q
I
, , Q\ {}),
em que:
O alfabeto de entrada e V = N T.
Q e q
I
sao denidos como segue, onde cada q Q e um conjunto de
itens LR(1) de G:
q
I
= Fe1({S ., {$} : S P}) Q.
Se q Q e X V entao (q, X) Q.
A funcao dene-se por
(q, X) = Fe1({A X., L : A .X, L q}),
onde q Q e X V .
169
Todos os estados sao de aceitacao, exceptuando o conjunto vazio de
itens.
Abreviamos tambem

(q
I
, ) = ().
Teorema 8.19 Se for um prexo viavel, entao Iv1() = (). Alem
disso, a linguagem reconhecida por M e o conjunto dos prexos viaveis proprios
de G.
Dem. A COMPLETAR.
A denicao do automato de pilha reconhecedor e tambem semelhante ao
caso anterior, supondo dado o automato M dos itens validos para prexos
viaveis. Em vez de um unico estado k alem do estado de aceitacao k
F
, o
automato de pilha tem agora um estado k
L
de leitura que se limita a ler
o pr oximo smbolo a na ta de leitura e o memoriza transformando-se no
estado k
a
. A operacao de transferencia no estado k
a
consiste em empilhar a
e mudar o estado para k
L
.
Dado que e necessario conhecer sempre o proximo smbolo na ta de
leitura, suporemos que ela esta terminada pelo smbolo terminador $, que
se supoe que nao pertence a V , como indicado mais acima.
O automato de pilha reconhecedor tem a forma
R = (T {$}, K, Z, k
I
, z
I
, , F)
em que:
K = {k
L
, k
F
} {k
a
: a T {$}}.
Z = V Q.
k
I
= k
L
.
z
I
= q
I
.
A relacao de transicao e denida mais abaixo.
F = {k
F
}.
As regras de transicao de R sao as seguintes:
Regras de leitura
(k
L
, q)
a
(k
a
, q)
para todo o estado q Q e todo o a T {$}.
Regras de aceitacao
(k
$
, q)

(k
F
, q)
para todo o estado q Q contendo um item completo S ., {$} para o
smbolo inicial de G.
170
Regras de reducao
(k
a
, q
0
X
1
q
1
X
n
q
n
)

(k
a
, q
0
Aq)
para todo o a T e todo o percurso q
0
X
1
q
1
X
n
q
n
em M tal que q
n
contenha um item completo A X
1
X
n
., L com a L, e onde (q
0
, A) =
q.
Regras de transferencia
(k
a
, q)

(k
L
, qaq

)
para todo o a T e todo o estado q contendo um item com a `a direita do
ponto, e onde (q, a) = q

.
Tem-se o seguinte resultado esperado:
Teorema 8.20 Com as notacoes anteriores, L(G) = L(R).
Dem. A COMPLETAR.
8.5 Relacoes com as gramaticas LL(1)
As gramaticas LR(0) e as gramaticas LL(1) nao sao comparaveis: ha gramaticas
que sao LR(0) e LL(1), outras que sao LR(0) e nao sao LL(1), e ainda outras
que nao sao LR(0) e sao LL(1). Por exemplo, a gramatica de producoes
S A
A Aa | b
e LR(0) mas nao LL(1), por ser recursiva `a esquerda. A gramatica de
producoes
S Ab
A aA |
e LL(1) mas nao LR(0): o estado inicial do automato dos itens validos,
{S .Ab, A .aA, A .},
contem um item completo e outro com um smbolo terminal `a direita do
ponto.
Ja sobre a relacao entre gramaticas LL(1) e LR(1) se pode armar o
seguinte:
Teorema 8.21 Toda a gramatica LL(1) e LR(1).
Dem. A COMPLETAR.
Outro resultado importante e que toda a linguagem independente do con-
texto determinista (isto e, aceite por um automato de pilha determinista)
pode ser gerada por uma gramatica LR(1).
171

Você também pode gostar