Académique Documents
Professionnel Documents
Culture Documents
Teoria da Computacao
(Versao preliminar em constante modicacao)
Prof. Celso Antonio Alves Kaestner, Dr. Eng.
Universidade Tecnologica Federal do Parana
celsokaestner@utfpr.edu.br
28 de marco de 2011
1 Introducao
O objetivo deste texto e o de apresentar, em forma de roteiro de estudo constitudo de resumo
da teoria, exemplos resolvidos e exerccios a resolver, os principais conceitos envolvidos no
tratamento de linguagens formais e automatos. Em cada secao sao enfatizadas as denicoes,
os principais teoremas e exemplos ilustrativos, que sao necessarios `a compreensao dos temas
envolvidos, e que devem ser complementados com a resolucao dos exerccios propostos.
As principais referencias para este assunto sao as seguintes: [5], [6], [2], [4], [3], [7] e [8].
1
2 Alfabetos e linguagens
Denicao 1 Um alfabeto e um conjunto nito cujos elementos sao chamados de smbolos.
Exemplo 1 Alguns exemplos de alfabetos:
O alfabeto = a, b;
O alfabeto binario B = 0, 1;
O alfabeto octal O = 0, 1, 2, 3, 4, 5, 6, 7;
O alfabeto hexadecimal H = 1, . . . 9, A, B, C, D.E, F;
O alfabeto formado pelos codigos ASCII.
Denicao 2 Um string (ou cadeia) e uma seq uencia nita de smbolos de um alfabeto.
Ou seja, se w e um string sobre um alfabeto , entao w =
1
2
. . .
n
onde
i
.
Observacao: Para facilitar a notacao empregar-se-ao letras do incio do nosso alfabeto, tais
como a, b, etc para indicar smbolos, e letras do nal do nosso alfabeto, tais como u, v, etc
para designar strings.
Exerccio 1 De exemplos de alfabetos e strings. Quais os alfabetos e strings mais utilizados
em computacao?
Denicao 3 O comprimento de um string w, denotado por [w[, e o n umero de smbolos
que o compoem.
Desta forma, se w =
1
2
. . .
n
e
i
entao [w[ = n.
Denicao 4 O string vazio, denotado por , e o string de tamanho zero.
Denicao 5 O conjunto de todos os strings sobre um alfabeto e denotado por
, e
constitui o denominado mon oide livre associado a .
Exemplo 2 Sao exemplos de strings:
a, bab e abbaba sobre a, b
;
101 e 11011 sobre B
;
2
064 e 1453 sobre O
;
0A12F e FFFF sobre H
;
isto eh um string sobre o alfabeto ASCII;
se = a, b entao
2
. . .
m
e v =
1
2
. . .
n
sobre dene-se a
concatenacao de u e v como um novo string u.v ou simplesmente uv dado por uv =
2
. . .
m
2
. . .
n
.
Evidentemente tem-se [u.v[ = [u[ +[w[, e ainda u. = .u = u.
Denicao 7 O reverso de um string w =
1
2
. . .
n
e o string w
R
=
n
. . .
2
1
.
E possvel escrever denicoes formais com uso de recursao para o comprimento (ver
denicao 3) e para o reverso (ver denicao 7):
1. (a) [[ = 0, e (b) [u.a[ = [u[ + 1 para u
e a .
2. (a)
R
= , e (b) (u.a)
R
= a.u
R
.
Exemplo 3 Obtem-se (abbab)
R
recursivamente da seguinte forma:
(abbab)
R
= b(abba)
R
, de 2.(b) acima;
(abba)
R
= a(abb)
R
, de 2.(b) acima;
(abb)
R
= b(ab)
R
, de 2.(b) acima;
(ab)
R
= b(a)
R
de 2.(b) acima;
(a)
R
= (.a)
R
= a.()
R
= a. = a, de 2.(a) acima, e portanto:
(abbab)
R
= babba dos itens anteriores.
Exerccio 2 Repita o exerccio anterior calculando (100111)
R
.
Exerccio 3 De modo similar aos exerccios anteriores, calcule recursivamente [bab[ (sobre
o alfabeto a, b) e [01101[ (sobre 0, 1).
3
Denicao 8 Dados strings u e v sobre um mesmo alfabeto diz-se que u e um prexo de
v se e somente se (sse) existe um string y tal que v = uy. Similarmente u e suxo de v sse
existe x com v = xu; e u e substring de v sse existem x e y com v = xuy.
Exemplo 4 Seja o monoide livre a, b
, isto e L
.
Exemplo 5 Se = a, b entao os subconjuntos de strings
L
1
= a, ab, abb, abbb, abbbb, abbbbb . . . = ab
n
[ n 0,
L
2
= ab, aab, aba, abb, bab, aaba, aabb . . . = x.ab.y [ x, y
e
L
3
= , a, abbb, bbbbb sao linguagens sobre .
Como se pode observar deste exemplo, as linguagens podem ser conjuntos nitos ou
innitos.
A denicao 9 e de carater bastante geral, e considera simplesmente que linguagens sao
subconjuntos de strings sobre um alfabeto. Isto permite que se denam com facilidade
algumas opera c oes sobre linguagens:
Denicao 10 Se L
1
e L
2
sao linguagens sobre um alfabeto entao tambem sao linguagens:
1. A uniao L
1
L
2
;
2. A intersecao L
1
L
2
;
3. O complemento
L
1
=
L
1
;
4. A concatenacao L
1
.L
2
= w = x.y [x L
1
e y L
2
;
5. O fechamento (ou estrela de Kleene)
L
1
= w = x
1
x
2
. . . x
k
[ k 0 e x
i
L
1
para 1 i k.
4
As operacoes denidas em (1), (2) e (3) sao simplesmente a aplicacao de operac oes
usuais sobre conjuntos, visto que as linguagens sao conjuntos. A operacao (4) estende
a nocao de concatenacao vista na denicao 6, a conjuntos de strings. A operacao (5)
permite que strings de um conjunto sejam repetidos um n umero arbitrario de vezes,
podendo o string selecionado no conjunto ser diferente a cada passo da repetic ao. Este
procedimento permite a obtencao de conjuntos innitos, desde que a operacao estrela (*)
seja aplicada a um conjunto nao-vazio.
Exemplo 6 Utilizando as linguagens L
1
, L
2
e L
3
do exemplo anterior, obtem-se, por exem-
plo (parenteses utilizados apenas para enfase):
L
1
L
2
= a, ab, aab, aba, abb, bab, aaba, aabb, abbb, . . .;
L
1
L
2
= ab, abb, abbb . . .;
L
3
=
L
3
= b, aa, ab, aaa, aab, aba, abb . . .;
L
1
.L
2
= (a)(ab), (a)(aab), (a)(aba) . . . , (ab)(ab), (ab)(aab), (ab)(aba) . . . , ;
L
1
= , a, ab, abb . . . , (a)(a), (a)(ab), (a)(abb) . . . , (a)(a)(a) . . . ,
(a)(a)(a)(a), (a)(a)(a)(ab) . . .;
Exerccio 5 Indique alguns strings para L
2
L
3
,
L
2
, L
2
.L
1
e L
1
do exemplo acima.
Exerccio 6 Sejam L
4
= ba, baa, baaa, baaaa . . . = ba
n
[ n 1 e
L
5
= aab, aabb, aabbb, aabbbb . . . = aab
n
[ n 1. Indique alguns strings para L
4
L
5
,
L
4
.L
5
,
L
5
, e L
4
.
5
3 Express oes regulares
Um ponto crucial no estudo de linguagens e o de encontrar uma representacao seja formal
e nita. Isto e possvel com o auxlio de formalismo baseado nas operacoes anteriormente
denidas.
Denicao 11 Dado um alfabeto as express oes regulares (ER) sobre este alfabeto sao
denidas recursivamente da seguinte forma:
, e cada elemento a sao ER;
se e sao ER entao ( ), (.) e (
) sao ER;
As ER sao obtidas unicamente pelas regras acima.
Observacao: Na denicao das ER os parenteses podem ser omitidos caso sua supressao
nao ocasione ambiguidade.
Uma correspondencia / (homomorsmo) pode ser facilmente estabelecida entre o con-
junto das ER sobre e as linguagens sobre este mesmo alfabeto:
/() = ;
/() = ;
/(a) = a;
/( ) = /() /();
/(.) = /()./();
/(
) = (/())
;
Denicao 12 Uma linguagem e dita regular se e correspondente a alguma ER.
Exemplo 7 Sao exemplos de ER sobre = a, b:
a(a b);
(a b)
;
ab
;
6
(a b)
ab;
(a b)
ab(a b)
.
( a abbb bbbbb).
Exerccio 7 Indique alguns strings das linguagens associadas `as ER do exemplo anterior.
Exerccio 8 Escreva ER associadas `as linguagens sobre a, b denidas informalmente a
seguir:
Strings que comecam com a;
strings que terminam com bb;
strings que contem aba como substring;
strings que N
.
Denicao 14 Uma conguracao de um AFD e um par (q, w) onde q e o estado atual e
w
e a entrada restante.
Denicao 15 Um AFD M evolui em um passo da conguracao (q, w) para a con-
guracao (q
.
A aplicacao de n passos sucessivos em um AFD M corresponde a evolucao
n passos
(q, w)
M
(q
, x) . . .
M
(q
M
(q
, y).
Denicao 16 Um AFD M aceita um string w sse (s, w)
M
(f, ) com f F; no outro
caso diz-se que M rejeita w. O conjunto de todos os strings aceitos por M forma a lin-
guagem reconhecida por M, denotada por /(M).
Exemplo 8 Seja M = (K, , , s, F) com K = q
0
, q
1
, = a, b, s = q
0
, F = q
0
e tal
que (q
0
, a) = q
0
, (q
0
, b) = q
1
, (q
1
, a) = q
1
, e (q
1
, b) = q
0
.
Normalmente a funcao de transicao e dada na forma de tabela:
9
Figura 1: Automato correspondente ao exemplo 8
:
q q
q
0
a q
0
q
0
b q
1
q
1
a q
1
q
1
b q
0
M aceita aabba, pois: (q
0
, aabba) (q
0
, abba) (q
0
, bba) (q
1
, ba) (q
0
, a) (q
0
, ) e
q
0
F.
M rejeita ababb, pois: (q
0
, ababb) (q
0
, babb) (q
1
, abb) (q
1
, bb) (q
0
, b) (q
1
, ) e q
1
, F.
Aut omatos podem ser representados por grafos. Neste caso a cada estado do automato
corresponde um no, cada transicao (q, a) = q
rotulado
por a, s e indicado por uma seta e os estados nais sao indicados por crculos duplos na
representacao do no.
Se um AFD M e representado por um grafo G
M
, a condi cao de aceitacao de um string
w corresponde `a existencia de um caminho em G
M
do estado inicial a um dos estados nais
rotulada por w.
Exemplo 9 O automato do exemplo 8 e representado pelo grafo apresentado `a Figura 1.
Uma analise dos caminhos que conduzem do estado inicial q
0
ao estado nal q
0
permite
deduzir que este automato aceita strings sobre a, b que tem n umero par de bs.
Exerccio 12 A ferramenta JFLAP [7] (disponvel em www.jflap.org) permite o estudo de
express oes regulares e automatos, em um ambiente graco executavel sob Java. Utilizando
esta ferramenta, ingresse o automato descrito acima e faca o reconhecimento de strings no
mesmo.
10
Exerccio 13 Utilizando a JFLAP, construa AFD para reconhecer as linguagens indicadas
no exerccio 8.
Os automatos nitos podem ser estendidos para incluir nao-determinismo, isto e, para
permitir que varios caminhos sejam percorridos simultaneamente, de acordo com a denicao
a seguir.
Denicao 17 Um aut omato nito nao-determinista (AFND) e uma 5-upla M =
(K, , , s, F) onde K, , s e F sao denidos como no AFD, e e uma relacao (denom-
inada relacao de transicao) sobre K ( ) K.
Em um AFND um string w e aceito sse existe ao menos uma evolucao (s, w)
M
(f, )
com f F.
Exemplo 10 Seja o AFND M = (K, , , s, F) com K = q
0
, q
1
, q
2
, = a, b, s = q
0
,
F = q
2
e dada pela tabela:
:
q q
q
0
a q
0
q
0
b q
0
q
0
a q
1
q
1
a q
2
q
1
q
2
M e nao-determinista, pois (q
0
, a, q
0
) e (q
0
, a, q
1
) . Alem disto (q
1
, , q
2
) . M
aceita bba pois (q
0
, bba) (q
0
, ba) (q
0
, a) (q
1
, ) (q
2
, ) e q
2
F. Note que tambem
ocorre (q
0
, bba) (q
0
, ba) (q
0
, a) (q
0
, ) e q
0
, F. Uma vericacao mais detalhada mostra
que /(M) e formada pelas cadeias sobre a, b
).
A prova deste resultado e construtiva e pode ser encontrada, por exemplo, em [5] e
[2]. Se M = (K, , , s, F) e um AFND, os estados do AFD M
para M
([E
1
], a) = [E
2
]
com E
2
=
q
a
[ q E
1
e (q, a, q
a
) , para um estado [E
1
] de M
e a . A ferramenta
JFLAP permite que se acompanhe passo a passo o algoritmo que transforma um AFND
em um AFD.
11
Exemplo 11 Seja o AFND M = (q
0
, q
1
, q
2
, a, b, , q
0
, q
2
) onde = (q
0
, a, q
1
),
(q
0
, b, q
0
), (q
1
, b, q
2
), (q
1
, , q
2
), (q
2
, a, q
0
). O estado inicial do AFD correspondente e [q
0
] (o
unico estado atingvel de q
0
usando o string ). A funcao de transicao do AFD e obtida
pela vericacao dos estados atingveis a partir de estados ja desenvolvidos. Por exemplo, a
partir de [q
0
] usando o smbolo a podemos atingir os estados q
1
e q
2
, visto que q
0
a
q
1
e
q
0
a
q
1
q
2
. Isto dene ([q
0
], a) = [q
1
q
2
], e de modo analogo ([q
0
], b) = [q
0
]. Em seguida
encontram-se ([q
1
q
2
], a) = [q
0
] (ja que a partir de q
1
e possvel chegar a q
0
fazendo-se, por
exemplo, q
1
q
2
a
q
0
), e ([q
1
q
2
], b) = q
2
(ja que o unico estado atingvel de q
1
usando
b e q
2
, e nenhum estado pode ser atingido de q
2
usando b). Usando o mesmo procedimento
obtem-se ([q
2
], a) = [q
0
] e ([q
2
], b) = []. Finalmente ([], a) = ([], b) = []. Os estados
nais s ao aqueles que incluem estados nais do AFND, ou seja neste caso [q
2
] e [q
1
q
2
], o
que completa a construcao do AFD.
Em resumo o AFD obtido e M
= ([q
0
], [q
1
q
2
], [q
2
], [], a, b, , [q
0
], [q
2
], [q
1
q
2
]) com
dada pela tabela:
:
q q
q q
[q
0
] a [q
1
q
2
] [q
2
] a [q
0
]
[q
0
] b [q
0
] [q
2
] b []
[q
1
q
2
] a [q
0
] [] a []
[q
1
q
2
] b [q
2
] [] b []
A equivalencia estabelecida entre os AFND e os AFD leva a um questionamento sobre
sua utilidade: anal, por que utilizar AFND ? Como sera visto em seguida, os AFND sao
utilizados para o estabelecimento de uma correspondencia entre AF (termo usado indistin-
tamente para AFD e AFND) e as ER.
Teorema 2 Para toda ER existe um AF M tal que /() = /(M), e reciprocamente, a
todo AF M corresponde uma ER tal que /(M) = /().
(ER AFND, esboco da prova) Seja uma ER sobre um alfabeto :
1. Se = entao o AF M = (q
0
, , , q
0
, ) e tal que /(M) = ;
2. Se = entao o AF M = (q
0
, , , q
0
, q
0
) e tal que /(M) = ;
3. Se = a para a entao o AF M = (q
0
, q
1
, , , q
0
, q
1
) com = (q
0
, a, q
1
) e
tal que /(M) = a;
12
4. Se e sao ER associadas aos AF M
1
= (K
1
, ,
1
, s
1
, F
1
) e M
2
= (K
2
, ,
2
, s
2
, F
2
)
respectivamente, entao
M = (K
1
K
2
s
0
, ,
1
2
(s
0
, , s
1
), (s
0
, , s
2
), s
0
, F
1
F
2
)
aceita ;
5. Se e sao ER associadas aos AF M
1
= (K
1
, ,
1
, s
1
, F
1
) e M
2
= (K
2
, ,
2
, s
2
, F
2
)
respectivamente, entao
M = (K
1
K
2
, ,
1
2
(f
i
1
, , s
2
) [ , f
i
1
F
1
, s
1
, F
2
)
aceita .; e
6. Se e ER associada ao AF M
1
= (K
1
, ,
1
, s
1
, F
1
), entao
M = (K
1
s
0
, ,
1
(s
0
, , s
1
) (f
i
1
, , s
1
) [ , f
i
1
F
1
, s
0
, s
0
, s
1
)
aceita
;
7. Aplicando-se os procedimentos descritos nos itens anteriores sucessivamente e possvel,
a partir de qualquer ER, obter um AF que aceita a mesma linguagem.
Nos tres itens anteriores considerou-se que K
1
K
2
= .
(AF ER) O procedimento construtivo consiste na eliminacao de estados e rotulacao das
transicoes por strings de smbolos, conforme o seguinte procedimento a seguir:
1. Incluir um novo estado inicial e um unico estado nal;
2. Eliminar sucessivamente estados do AF utilizando o esquema indicado na Figura 2,
que rotula a transicao entre q
i
e q
f
quando da eliminacao de q
out
a partir dos rotulos
existentes nas transicoes entre q
i
, q
f
e q
out
;
3. Ao nal, quando so restam os estados inicial e nal, a ER resultante rotula a unica
transicao existente.
Pode-se provar que a ER assim obtida corresponde `a linguagem aceita pelo AF correspon-
dente (ver [5]).
Em Ciencia da Computacao os formalismos ER e os AF sao utilizados para a especi-
cacao e reconhecimento do lexico de linguagens. A analise lexica constitui o primeiro
passo de execucao de um compilador (ver por exemplo [1]).
13
&%
'$
q
i
&%
'$
q
f
&%
'$
q
out
-
J
J
J
J
J^
&%
'$
q
i
&%
'$
q
f
-
(.
.)
Figura 2: Eliminacao de estado na passagem de AF para ER
Exerccio 14 Utilizando a JFLAP encontre os AFs associado `as ERs:
1. a
b;
2. (a b)
ab;
3. (ab b)
(a );
4. (aab
;
5. (b
ab
ab
);
6. (a (ab)
) (b (ba)
).
Exerccio 15 Utilizando a JFLAP encontre os AFDs correspondentes aos AFNDs obti-
dos no exerccio anterior.
Exerccio 16 Utilizando a JFLAP encontre as ERs associadas aos AFs do exerccio 13.
Exerccio 17 Seja M um AFD que reconhece L. Como e possvel obter um AF para
reconhecer
L ?
Exerccio 18 Sejam M
1
e M
2
AFDs que reconhecem L
1
e L
2
respectivamente. Como e
possvel obter um AF para reconhecer L
1
L
2
? Esboce os passos necessarios para se obter
este aut omato.
Considere os AF apresentados na Figura 3. Ambos sao deterministas e aceitam a mesma
linguagem, formada por strings sobre a, b que terminam com a. No entanto o AFD inferior
tem tres estados, e o superior tem apenas dois.
Isto leva a questao da minimizacao de automatos. Um AFD M
min
= (K
m
, ,
m
, s
m
, F
m
)
e dito mnimo sse para qualquer outro automato M = (K, , , s, F) tal que /(M) =
14
Figura 3: Dois AFD que reconhecem a mesma linguagem (a b)
a
/(M
min
) tem-se K
m
K
. Ou seja M
min
e, entre os automatos que aceitam a mesma lin-
guagem, o que tem o menor n umero de estados. A obtencao de M
min
e possvel encontrando-
se uma relacao de equivalencia entre os estados, conforme o teorema a seguir.
Teorema 3 Seja M = (K, , , s, F) um AFD; entao sempre existe um AFD mnimo
M
min
= (K
m
, ,
m
, s
m
, F
m
) tal que /(M) = /(M
min
) e K
m
K
.
Esboco da prova (para a prova completa ver [5], [6] ou [2]): Inicialmente elimine estados
inalcanc aveis usando um algoritmo de alcancabilidade em grafo, partindo do estado inicial
s. Supondo que todos os estados sao alcacaveis, calcule a relacao de equivalencia entre
estados (ou, equivalentemente, uma particao do conjunto K) denida recursivamente por:
(1) (
0
) = F, K F;
(2) Ate que se tenha (
n+1
) = (
n
):
calcule a relacao (
n+1
) para n 0 a partir de (
n
) por:
(q, q
) (
n+1
) somente se (q, q
) (
n
) e
para todo a tem-se ((q, a), (q
, a)) (
n
).
Os estados de M
min
sao os elementos da ultima relacao de equivalencia (
n
) encontrada.
15
Exerccio 19 Utilizando a JFLAP encontre o AFD
min
correspondente ao segundo automato
da Figura 3.
Exerccio 20 Utilizando a JFLAP encontre os AFD
min
s associados aos AFs do exerccio
15.
Os resultados apresentados permitem deduzir que, se L
1
e L
2
sao linguagens aceitas pelos
AF M
1
e M
2
, entao e possvel obter AF para reconhecer as linguagens L
1
L
2
, L
1
L
2
e
L
1
(ver teorema 2 e os exerccios 17 e 18). Mas sera que existem linguagens que nao sao
reconhecidas pelos AFs ? O teorema a seguir conduz `a resposta desejada.
Teorema 4 (Teorema do Bombeamento I) Seja M = (K, , , s, F) um AFD que reconhece
uma linguagem L. Se L e innita (um conjunto innito) entao existe um string w L com
[w[ > [K[ que w pode ser escrito como w = xyz com y ,= e tal que xy
n
z L para todo
n 0.
Prova: ver [5], [6] ou [2].
Exemplo 12 Uma conseq uencia importante deste teorema e que a linguagemL = a
n
b
n
[ n
0 a, b
a
r
y
a
s
z
a
(prs)
b
p
. Neste caso se repetimos (bombeamos) y
duas vezes teramos
x
a
r
yy
a
2s
z
a
(prs)
b
p
L, mas L so contem strings com n umero igual de as e bs...
O mesmo raciocnio pode ser aplicado `a decomposicao a
p
b
p
=
x
a
p
b
(prs)
y
b
s
z
b
r
.
Finalmente se a decomposicao fosse a
p
b
p
=
x
a
r
y
a
(pr)
b
(ps)
z
b
s
o bombeamento duplo
de y levaria a
x
a
r
y
a
(pr)
b
(ps)
y
a
(pr)
b
(ps)
z
b
s
e portanto a uma mistura de as e bs ...
Concluindo, L nao atende ao Teorema do Bombeamento I, e portanto nao pode ser
reconhecida por AF ou ER.
16
Desta forma conclui-se que o formalismo AF (ou equivalentemente ER) nao e suciente
para o estudo geral de linguagens. Sao necessarios novos formalismos como veremos na
seq uencia.
17
5 Gramaticas
Um outro formalismo similar aos AFs e `as ERs, e que pode ser potencialmente mais geral
e formado pelas gramaticas.
Denicao 18 Uma gramatica (ou sistema de reescritura) e uma 4-upla G = (V, , R, S)
onde:
V e um conjunto nito nao-vazio de smbolos nao-terminais;
e um conjunto nito nao-vazio de smbolos, disjunto de V , cujos elementos sao
denominados smbolos terminais;
S V e o smbolo inicial;
R e um conjunto de regras de producao ou reescritura, na forma u v, onde u e
v sao strings sobre V , com certas restricoes conforme o tipo da gramatica.
Denicao 19 Uma derivacao em G = (V, , R, S), denotada por w
1
G
w
2
, ocorre quando
se aplica ao string w
1
= x.u.y a regra de producao u v, gerando o string w
2
= x.v.y. A
geracao de um string w
G
w.
Finalmente, a linguagem gerada por G e /(G) = w
[ S
G
w.
Exemplo 13 Seja G = (V, , R, S) com V = S, = a, b e R = S
1
aSb, S
2
.
O string aabb e gerado por G, pois S
1
aSb
1
aaSbb
2
aabb (na derivacao o subndice
referencia a regra de G utilizada). Observe que neste exemplo /(G) = a
n
b
n
[ n 0,
linguagem esta que nao e gerada por nenhum AF (ver exemplo 12).
Denicao 20 Uma gramatica e dita regular (GR) se suas producoes sao todas na forma
A aB, A a ou A , onde A, B V e a .
Exemplo 14 Seja G = (A, B, a, b, A
1
aA, A
2
bB, B
3
aB, B
4
bA, A
5
, A). O string aababbab e gerado por G, pois A
1
aA
1
aaA
2
aabB
3
aabaB
4
aababA
2
aababbB
3
aababbaB
4
aababbabA
5
aababbab. Neste exemplo /(G) =
/((a
ba
ba
.
Exemplo 15 Seja G = (S, A, B, a, b, R, S) onde R e o conjunto S
1
SAB,
S
2
SBA, S
3
, A
4
aAB, A
5
aBA, A
6
a, B
7
bAB, B
8
bBA, B
9
b. G
e uma GLC. Um string gerado por G e w = bbaabaab, pois S
1
SAB
2
SBAAB
3
BAAB
8
bBAAAB
9
bbAAAB
4
bbaABAAB
6
bbaaBAAB
9
bbaabAAB
6
bbaabaAB
6
bbaabaaB
9
bbaabaab = w. Esta gramatica gera strings com o mesmo
n umero de as e bs.
Exemplo 16 A gramatica denida no exemplo 13 e uma GLC.
Assim como os AF e as ER, as GLC tem papel crucial em Ciencia da Computacao.
Utilizam-se GLC para realizar a analise sintatica de linguagens, o segundo passo na execucao
de um compilador [1].
Denicao 22 Um derivacao e dita mais `a esquerda se a aplicacao das producoes ocorre
sempre pela substituicao do nao-terminal mais `a esquerda no string que esta sendo gerado.
De forma analoga e possvel gerar derivacoes mais `a direita.
19
Exemplo 17 A derivacao de bbaabaab no exemplo 15 e mais `a esquerda. Observe que
algumas derivacoes nao sao nem mais `a esquerda nem mais `a direita.
Exerccio 23 Faca uma derivacao mais `a direita de w = bbaabaab do exemplo 15. Faca
uma outra derivacao para w que nao seja nem mais `a esquerda, nem mais `a direita.
As diversas derivacoes derivacoes para um mesmo string podem ser representadas de
maneira unicada pela arvore de parsing do string.
Denicao 23 Seja uma GLC G = (V, , R, S) e um string w =
1
2
. . .
n
/(G). A
arvore de parsing (arvore de analise sintatica ou ainda arvore de reconhecimento) do
string w, denotada por /(G, w) e uma estrutura na forma de arvore obtida da seguinte
forma:
a raiz de /(G, w) e S;
as folhas de /(G, w) sao os smbolos que compoem w, obedecendo a ordem de aparec-
imento da esquerda para a direita, isto e,
1
,
2
, . . .
n
;
os nos internos de /(G, w) sao formados por producoes em R.
Se A x R, esta producao constitui uma sub-arvore de raiz A e cujas folhas sao os
smbolos de x. As producoes devem ser usadas de forma a conectar adequadamente S, w e
os demais nos intermediarios de /(G, w).
Exemplo 18 Seja G e w do exemplo 15. A arvore de parsing correspondente e indicada
`a Figura 4. Observe o correspondencia entre os nos da arvore e as producoes aplicadas,
indicadas pelo n umero correspondente. A leitura das folhas da arvore da esquerda para a
direita fornece o string gerado: bbaabaab = bbaabaab.
Numa arvore de parsing a ordem de substituicao dos smbolos nao-terminais nao e
apresentada de forma explcita, dependendo apenas da maneira com que se percorre a arvore.
Uma derivacao mais `a esquerda corresponde, por exemplo, a percorrer a arvore de cima para
baixo e da esquerda para a direita.
Com a introducao da nocao de arvore de parsing, o problema da analise sintatica (ou de
parsing) pode ser simplicadamente descrito da seguinte forma: dada uma GLC G e um
string w, e possvel construir uma arvore sintatica /(G, w) ? Uma resposta armativa indica
que w /(G).
20
S
d
d
d
d
d
d
d
(1)
~
~
~
~
~
~
~
~
S
d
d
d
d
d
d
d
(2)
A
(6)
d
d
d
d
d
d
d
d
B
(9)
d
d
d
d
d
d
d
d
S
(3)
B
(8)
d
d
d
d
d
d
d
A
(6)
d
d
d
d
d
d
d
d
a
b
b B
(9)
d
d
d
d
d
d
d
(4)
''
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
a
b
a
A
(6)
B
(9)
a
b
Figura 4:
Arvore de parsing para G e w do exemplo 15
Exerccio 24 Seja G = (S, A, B, a, b, R, S) com R = S
1
AB, A
2
aA, A
3
, B
4
bB, B
5
b. Mostre que o string aaaabb pertence a /(G). Construa a arvore de
parsing para w. Descreva /(G).
Exerccio 25 Seja G = (S, A, B, a, b, R, S) com R = S
1
ASB, S
2
, A
3
a, B
4
bb. Mostre que o string aaabbbbbb pertence a /(G). Construa a arvore de parsing
para w. Descreva /(G).
21
6 Aut omatos de Pilha
De maneira similar ao que ocorre com as ERs, as gramaticas sao utilizadas principalmente
para especicar linguagens. Os procedimentos utilizados para tratar o problema de parsing
sao outros: os automatos de pilha.
Denicao 24 Um aut omato de pilha (AP) (nao-determinista) e uma 6-upla M =
(K, , , , s, F) onde:
K e um conjunto nito nao-vazio des estados;
e o alfabeto de entrada;
e o alfabeto da pilha, que e disjunto de ;
s K e o estado inicial do automato;
F K e o conjunto de estados nais;
e a relacao de transicao, [K ( )
] [K
].
Como indica seu proprio nome, um AP pode ser considerado como um AF ao qual se in-
corpora uma estrutura auxiliar que funciona como uma pilha. Um elemento [(q, , ), (q
, )]
indica que se o AP M esta no estado q, ao processar na entrada e tendo no topo de
sua pilha, passa a ter o estado q
, x, ), escrevendo-se (q, w, )
M
(q
, x, ), sse w = ax, = , = e
[(q, a, ), (q
, )] .
Como no caso dos AF a aplicacao de n passos sucessivos em um AP M corresponde a
evolucao denotada por (q, w, )
n
M
(q
M
(q
M
(f, , ) com f F; no
outro caso M rejeita w. O conjunto de todos os strings aceitos por M forma a linguagem
reconhecida por M, denotada por /(M).
Observe o que AP inicia sua execucao com a pilha vazia, e que a mesma deve tambem ter-
minar vazia. Ou seja, a pilha funciona como um mecanismo de armazenamento temporario,
mas nao retorna nenhuma informacao sobre o resultado do processamento.
Exemplo 19 Considere o AP M = (K, , , , s, F) dado por K = q
0
, q
1
, = a, b,
= A, B, s = q
0
, F = q
1
e = 1 : ((q
0
, a, ), (q
0
, A)), 2 : ((q
0
, b, ), (q
0
, B)),
3 : ((q
0
, c, ), (q
1
, )), 4 : ((q
1
, a, A), (q
1
, )), 5 : ((q
1
, b, B), (q
1
, )).
A entrada w = abbcbba e aceita por este automato, pois a evolucao de M a partir de w
ocorre conforme a tabela a seguir.
estado entrada pilha transicao
q
0
abbcbba -
q
0
bbcbba A 1
q
0
bcbba BA 2
q
0
cbba BBA 2
q
1
bba BBA 3
q
1
ba BA 5
q
1
a A 5
q
1
4
Este AP e, em particular, determinista, pois a cada passo uma unica transicao pode ser
aplicada. Observe ainda que se nenhuma transicao pode ser aplicada `a determinada con-
guracao o AP termina sua execucao e nao aceita a entrada. Por exemplo, ao receber
a entrada acb temos a evolucao (q
o
, acb, ) (q
0
, cb, A) (q
1
, b, A) ??. Este automato
reconhece a linguagem /(M) = wcw
R
[ w a, b
(verique !).
Exemplo 20 Seja o AP M = (K, , , , s, F) onde K = q
0
, q
1
, q
2
, = a, b,
= A, B, C, s = q
0
, F = q
2
e e dada pelo seguinte conjunto de transicoes:
=
1 : ((q
0
, , ), (q
1
, C)), 2 : ((q
1
, a, A), (q
1
, AA)), 3 : ((q
1
, a, B), (q
1
, )),
4 : ((q
1
, a, C), (q
1
, AC)), 5 : ((q
1
, b, A), (q
1
, )), 6 : ((q
1
, b, B), (q
1
, BB)),
7 : ((q
1
, b, C), (q
1
, BC)), 8 : ((q
1
, , C), (q
2
, ))
23
A entrada w = abbaba e aceita por este automato, pois a evolucao de M a partir de w ocorre
conforme a tabela a seguir.
estado entrada pilha transicao
q
0
abbaba -
q
1
abbaba C 1
q
1
bbaba AC 4
q
1
baba C 5
q
1
aba BC 7
q
1
ba C 3
q
1
a BC 7
q
1
C 3
q
2
8
Este automato e nao determinista, pois no estado q
1
se pode aplicar a transicao 3 e alguma
das transicoes de 2 a 7, dependendo da entrada e do topo da pilha existentes. O automato
reconhece a linguagem sobre a, b formada por strings que contem o mesmo n umero de as
e bs (verique !).
Assim como ocorre uma correspondencia entre ER e AF, e possvel estabelecer um rela-
cionamento entre as GLC e os AP.
Teorema 6 Dada uma GLC G = (V, , R, S) e possvel obter um AP M
t
= (K, , , , s, F)
tal que /(G) = /(M).
Prova (processo top-down): Inicialmente denem-se K = p, q, s = p, F = q. O alfabeto
de terminais de G e evidentemente o alfabeto de entrada de M
top
, e o alfabeto da pilha e
dado por = V . Finalmente as transicoes em sao obtidas a partir das tres regras a
seguir:
1. ((p, , ), (q, S)) ;
2. ((q, , A), (q, w)) para toda regra A w R;
3. ((q, a, a), (q, )) para todo terminal a .
Exemplo 21 Seja a gramatica G do exemplo 15. Tem-se G = (S, A, B, a, b, R, S) e
R = S
1
SAB, S
2
SBA, S
3
, A
4
aAB, A
5
aBA, A
6
a, B
7
bAB,
B
8
bBA, B
9
b.
24
Seguindo o metodo acima indicado o AP associado a G e M
top
= (K, , , , s, F) onde
se tem:
K = p, q;
= a, b;
= S, A, B, a, b;
s = p;
F = q; e
contem as transicoes:
1. ((p, , ), (q, S)) de (1) do teorema 6;
2. (a) ((q, , S), (q, SAB)) de (2) aplicado `a 1
a
producao de G;
(b) ((q, , S), (q, SBA)) de (2) aplicado `a 2
a
producao de G;
(c) ((q, , S), (q, )) de (2) aplicado `a 3
a
producao de G;
(d) ((q, , A), (q, aAB)) de (2) aplicado `a 4
a
producao de G;
(e) ((q, , A), (q, aBA)) de (2) aplicado `a 5
a
producao de G;
(f) ((q, , A), (q, a)) de (2) aplicado `a 6
a
producao de G;
(g) ((q, , B), (q, bAB)) de (2) aplicado `a 7
a
producao de G;
(h) ((q, , B), (q, bBA)) de (2) aplicado `a 8
a
producao de G;
(i) ((q, , B), (q, b)) de (2) aplicado `a 9
a
producao de G;
3. (a) ((q, a, a), (q, )) de (3) aplicado ao terminal a ; e nalmente
(b) ((q, b, b), (q, )) de (3) aplicado ao terminal b .
.
A prova desta armacao e similar `a indicada no Exemplo 12 e pode ser encontrada nas re-
ferencias ja indicadas. Conclui-se aqui que o formalismo GLC / AP, embora tenha ampliado
as linguagens tratadas, nao e sucientemente geral para representar todas as linguagens. O
formalismo mais amplo possvel, que representa todo o poder computacional de um computa-
dor digital como conhecido atualmente, denomina-se Maquina de Turing, e sera abordado
na seq uencia.
29
7 Maquinas de Turing
As Maquinas de Turing (MT) constituem um formalismo proposto por A. Turing, na
primeira metade do seculo XX, para representar o conceito de computacao, no sentido de
calculo efetivo. Na verdade este era o sentido original do termo computacao, hoje inevitavel-
mente associado aos computadores. O formalismo proposto por Turing serviu de base para
o surgimento de toda a Ciencia da Computacao. Uma MT e constituda por um mecanismo
de controle que opera sobre uma ta innita, podendo ler e gravar smbolos na ta, bem
como movimenta-la nos dois sentidos.
Denicao 28 Uma maquina de Turing determinista (MTD) e uma 5-upla
M = (K, , , s, H) onde:
K e um conjunto nito e nao-vazio de estados;
e o alfabeto de entrada;
s K e o estado inicial;
H K e o conjunto de estados de parada; e
e a funcao de transicao:
: ((K H) ) (K L, S, R)
representada por
(q, ) = (q
, m)
A funcao de transicao associa a um estado (nao-nal) e a um smbolo lido, um novo
estado, um smbolo a ser gravado e um movimento na ta de entrada, e representa o programa
da MT. Como dito anteriormente, uma MT opera sobre uma ta innita composta de
celulas, uma das quais apontada pela cabeca de leitura / gravacao da MT. Considera-se
que toda a ta (a menos do string de entrada) esta inicializada com um smbolo especial
branco . . Observe a semelhanca entre a denicao de MT e a denicao de um AFD
(ver denicao 13). A diferenca esta na funcao de transicao, que agora pode ler e gravar,
alem de que a entrada pode ser lida e relida conforme o movimento da cabeca de leitura. O
movimento m pode ser para a esquerda (L left), direita (R right) ou sem movimento
(S stay).
Denicao 29 A conguracao de uma MTD e dada por (q, uav), onde q K e o estado
corrente da MT, a e o smbolo corrente sob a cabeca de leitura / gravacao e u e v sao
os strings `a esquerda e `a direita da cabeca de leitura, respectivamente.
30
Como a ta e considerada innita, para que u e v possam ser strings (isto e, seq uencias
nitas de smbolos) uma restricao deve ser imposta: o primeiro smbolo de u e o ultimo
smbolo de v devem ser diferentes de .. Formalmente, usando ER:
u /(( .)
) e v /(
( .) )
Desta forma o restante da ta nao representada por uav e constitudo apenas por simbolos
brancos (.).
Denicao 30 A evolucao de uma MTD da conguracao (q, uav) para a congura cao
(q
, b, S);
(q, uav) (q
, c, L);
(q, uav) (q
, c, R).
Exemplo 24 Seja M = (K, , , s, H) onde K = q
0
, h, = ., a, s = q
0
, H = h e
(q, ) = (q
m
1 q
0
a q
0
. R
2 q
0
. h . S
A partir da conguracao inicial (q
0
, aaaa) esta MTD evolui da seguinte forma:
estado ta transicao
q
0
aaaa -
q
0
.aaa 1
q
0
. . aa 1
q
0
. . .a 1
q
0
. . . . . 1
h . . . . . 2
Observe que a tabela apresenta os smbolos brancos apenas para uma referencia posi-
cional, j a que os (innitos) brancos `a direita e `a esquerda do string presente na ta nao sao
representados. Portanto, a mesma evolucao poderia ser mais corretamente indicada por:
31
(q
0
, aaaa)
1
(q
0
, aaa)
1
(q
0
, aa)
1
(q
0
, a)
1
(q
0
, .)
2
(h, .)
Esta m aquina limpa a ta, tornando brancos os smbolos do string w /(a
) quando a
cabeca de leitura inicia no smbolo mais `a esquerda do string de entrada.
A posicao inicial do string de entrada e da cabeca de leitura sao importantes para a
denicao da funcao de transicao . Por convencao sera sempre considerado que a cabeca de
leitura esta posicionada no primeiro smbolo nao branco (se houver) mais `a esquerda na ta
de entrada.
Exemplo 25 Seja M = (K, , , s, H) onde K = q
0
, h, = ., a, b, s = q
0
, H = h e
(q, ) = (q
, m) dada por:
q q
m
1 q
0
a q
0
b R
2 q
0
b q
0
a R
3 q
0
. h . S
A partir de (q
0
, abbaa) esta MTD produz a evolucao:
estado ta transicao
q
0
abbaa -
q
0
bbbaa 1
q
0
babaa 2
q
0
baaaa 2
q
0
baaba 1
q
0
baabb. 1
h baabb. 3
Esta MT troca os as e bs na ta. Se trocarmos a e b por 0 e 1, esta operacao coincide com
o complemento de um utilizado em processadores.
Exerccio 30 Seja M = (K, , , s, H) onde K = q
0
, q
1
, h, = ., a, b, s = q
0
, H = h
e dada por:
32
q q
m
1 q
0
a q
0
a R
2 q
0
b q
1
b R
3 q
0
. h . S
4 q
1
a q
0
b R
5 q
1
b q
0
b R
6 q
1
. h . S
Faca a evolucao desta MTD a partir das entradas bbaab e babbaabb. O que faz esta MT ?
33
Uma MT pode ser utilizada com dois objetivos:
como dispositivo de computacao: para calcular uma funcao sobre os strings de um
alfabeto; ou
como dispositivo de reconhecimento: para vericar se strings dados na entrada per-
tencem a uma determinada linguagem.
Denicao 31 Diz-se que uma MT M = (K, , , s, h) computa uma funcao
f : ( .)
( .)
M
(h, by) com w = by
e w = f(v).
Verique que, como ja observado, a MT do exemplo 25 computa a funcao complemento
de um sobre um string dado na entrada. Por convencao adota-se que a cabeca de leitura
da MT deve estar posicionada no primeiro smbolo mais `a esquerda do string nao-branco,
tanto no incio quanto no nal da computacao.
Exemplo 26 Seja a MT M = (q
0
, q
1
, q
2
, h, ., 0, 1, , q
0
, h) com dada por:
q q
m
1 q
0
0 q
0
0 R
2 q
0
1 q
0
1 R
3 q
0
. q
1
. L
4 q
1
0 q
2
1 L
5 q
1
1 q
1
0 L
6 q
1
. q
2
1 L
7 q
2
0 q
2
0 L
8 q
2
1 q
2
1 L
9 q
2
. h . R
34
Esta MT opera sobre o string 1011 da seguinte forma:
estado ta transicao
q
0
1011 -
q
0
1011 2
q
0
1011 1
q
0
1011 2
q
0
1011. 2
q
1
1011 3
q
1
1010 5
q
1
1000 5
q
2
1100 4
q
2
1100 8
q
2
.1100 8
h 1100 9
Esta maquina computa a funcao f : ^ ^, f(n) = n + 1 para n umeros em binario
(verique !).
Exerccio 31 A partir das maquinas dos exemplos 25 e 26 escreva uma MT que calcula o
complemento de dois de um n umero binario dado na entrada.
Denicao 32 Uma MT M = (K, , , s, y, n) decide a linguagem (ou e um procedimento
de decisao para a linguagem)
L ( .)
, v = ax tem-se:
(s, ax)
M
(y, . . .) sse w L
(s, ax)
M
(n, . . .) sse w , L
Exemplo 27 Seja a MT M = (q
0
, q
1
, y, n, ., a, b, , q
0
, y, n) com dada por:
q q
m
1 q
0
a q
0
a R
2 q
0
b q
1
b R
3 q
0
. y . S
4 q
1
a q
1
a R
5 q
1
b q
0
b R
6 q
1
. n . S
35
Esta MT e um procedimento de decisao para a linguagem (a
ba
ba
, formada pelos
strings de as e bs com n umero par de bs. Observe a semelhanca entre esta MT e o AF
que reconhece a mesma linguagem, visto no exemplo 8.
Exerccio 32 Faca a execucao da MT do exemplo anterior a partir dos strings aabab e
abbaab. Compare as evolucoes obtidas com o reconhecimento efetuado pelo AF do exemplo
8.
Exerccio 33 A partir do exerccio anterior, voce e capaz de estabelecer um procedimento
que permita obter, a partir de um AFD que reconhece uma linguagem L, uma MT que
decide a mesma linguagem ?
Em um procedimento de decisao as computacoes realizadas pelas MTs sempre param,
indicando pelo estado atingido (y ou n) se o string deve ou nao ser reconhecido. No entanto,
o formalismo MT permite uma outra forma de se reconhecer uma linguagem: por meio de
semi-decisao.
Denicao 33 Uma MT M = (K, , , s, h) semi-decide a linguagem (ou e um procedi-
mento de semi-decisao para a linguagem)
L ( .)
, v = ax tem-se:
(s, ax)
M
(h, . . .) se w L
(s, ax)
M
entra em loop, no outro caso.
Como veremos, decisao e semi-decisao nao sao equivalentes, e denem duas classes de lingua-
gens. As linguagens para as quais e possvel denir um procedimento de decisao (MT que
sempre para, indicando pelo estado nal atingido se o string dado na entrada deve ou nao ser
aceito) sao denominadas linguagens recursivas, e aquelas para as quais e possvel denir uma
semi-decisao (MT que para se o string de entrada pertence `a linguagem, e entrando em loop
no outro caso) sao denominadas recursivamente enumeraveis. Esta importante distincao sera
detalhada oportunamente, no estudo de problemas indecidveis. Denindo formalmente:
Denicao 34 Seja L ( .)
ba
ba