Vous êtes sur la page 1sur 53

UNIVERSIDADE FEDERAL DE JUIZ DE FORA UFJF

INSTITUTO DE CINCIAS EXATAS


DEPARTAMENTO DE CINCIA DA COMPUTAO













Linguagens Formais e Autmatos












Prof. Itamar Leite de Oliveira
Curso de Cincia da Computao


Juiz de Fora MG



1


1. Teoria de Linguagens Formais
1.1 Conceitos Iniciais

Nesta seo sero apresentados alguns conceitos gerais sobre gramticas e linguagens
que serviro para fundamentar o estudo de todos os tipos de linguagens que viro a
seguir.
1.1.1 Introduo

A teoria de Linguagens Formais e a teoria de Mquinas (e autmatos) so tpicos
abrangentes que inserem no estudo da Teoria da Computao em geral. A Teoria da
Computao uma cincia que procura organizar o conhecimento formal relativo aos
processos de computao, como complexidade de algoritmos, linguagens formais,
problemas intratveis, etc.

Atualmente, o termo computar est associado ao conceito de fazer clculos ou
aritmtica usando para isso, mquinas computadoras. Entretanto, a noo de
computabilidade pode ser dissociada da implementao fsica da mquina.
Originalmente, a palavra latina putare significa pensar, mas no caso da teoria da
computao o sentido mais adequado seria algo como manipulao de smbolos, o
que no , necessariamente, pensamento. Essa manipulao de smbolos, envolvendo,
computadores, segundo Alan Turing (1969) realiza qualquer operao formal de que o
ser humano seria capaz.

Mesmo assim, alguns filsofos sustentam que os computadores no podem computar
(fazer aritmtica), porque no compreendem a noo de nmero (apenas manipulam
sinais eltricos). Todavia, pode-se falar, sem entrar no mrito da questo, que os
computadores realizam uma computao perceptvel j que transformam uma entrada
em sada como se estivessem realmente computando. Neste caso, o que importa o
efeito final do processo e no a maneira como ele feito.
1.1.2 Smbolo

Um smbolo uma entidade abstrata que no precisa ser definida formalmente, assim
como ponto e linha no so definidos na geometria. Letras e dgitos so exemplos
de smbolos freqentemente usados.

Smbolos so ordenveis lixicograficamente, e, portanto podem ser comparados quanto
igualdade ou precedncia. A principal utilidade dos smbolos est na possibilidade de
us-los como elementos atmicos em definies de linguagens.

Exemplo: a, b, U, P, >, /,A, +, *, etc.





2


1.1.3 Cadeia

Uma cadeia (ou string, ou palavra) uma seqncia finita de smbolos justapostos (isto
, sem vrgulas separando os caracteres.) Por exemplo, se a, b, e c so smbolos, ento
abcb um exemplo utilizando estes smbolos.
1.1.4 Alfabeto

Um alfabeto (ou vocabulrio) definido simplesmente como um conjunto finito,no
vazio, de smbolos (elementos). Representaremos um alfabeto por.

Exemplo:
V = {a, b, c,...,z }
V = {0, 1}
V = {a, e, i, o ,u}

Tamanho: O tamanho de uma cadeia o comprimento da seqncia de smbolos que a
forma. O tamanho de uma cadeia w ser denotado por |w|.

Exemplo: Seja V = { a , b , c }
se x = aba, ento |x| = 3
se x = c, ento |x| = 1

Cadeia vazia: A cadeia vazia denotada por c (pslon), e tem tamanho igual a zero, isto
, no possui nenhum smbolo; assim |c| = 0.

Prefixo e sufixo: Um prefixo de uma cadeia um nmero qualquer de smbolos tomados
de seu incio e sufixo um nmero qualquer de smbolos tomados de seu fim.

Exemplo: Seja a cadeia abc
Prefixos: c, a, ab, abc
Sufixos: c, c, bc, abc.

Um prefixo ou sufixo que no seja a prpria cadeia chamado de prefixo prprio ou
sufixo prprio respectivamente.

Concatenao: A concatenao de duas cadeias a cadeia formada pela escrita da
primeira cadeia seguida da segunda, sem nenhum espao no meio.

Exemplo: a concatenao de horta e lia hortalia.

O operador de concatenao a justaposio. Isto , se w e x so variveis que denotam
cadeias, ento wx a cadeia formada pela concatenao de w e x.

Potncia: A n-sima potncia de uma cadeia x, denotada por x
n
a concatenao de x
com ela mesma n vezes.
Exemplo: (abc)
3
= abcabcabc. a
5
= aaaaa a
2
b
4
1
6
= aabbbb111111



3


Fechamento: o fechamento de um alfabeto V, representado por V
*
, o conjunto todas as
cadeias que podem ser formadas com os smbolos de V, inclusive a cadeia vazia.

Exemplo: V = {a, b}
V
*
= {c, a, b, ab, ba, aaa, aab, aba, abb, ......}

Fechamento positivo: O fechamento positivo de V, representado por V
+
definido como
V
*
-{c}
Exemplo: V = {a, b}
V
+
= {a, b, ab, ba, aaa, aab, aba, abb, ......}
1.1.5 Linguagem

Uma linguagem (formal) um conjunto de cadeias de smbolos tomados de algum
alfabeto. Isto , uma linguagem sobre um alfabeto V um subconjunto de V
*
. Note-se
que esta definio meramente extensional, isto , no considera os mecanismos
formadores da linguagem, mas apenas a sua extenso. Assim, por exemplo, o conjunto
de sentenas vlidas da lngua portuguesa poderia ser definido extensionalmente como
um subconjunto de {a, b, c, ..., z, A, B, C, ..., Z}
*
.

Exemplos: Seja V = {0, 1}
A linguagem {0
n
1
n
| n > 0} um subconjunto de V
*
.
A linguagem {0
n
1
m
| n > 0, m > 0} um subconjunto de V
*
.
A linguagem {w | possui um nmero par de 1s} um subconjunto de V
*
.

Uma linguagem finita se suas sentenas formam um conjunto finito. Caso contrrio, a
linguagem infinita. Uma linguagem infinita precisa ser definida atravs de uma
representao finita.

Um reconhecedor para uma linguagem um dispositivo formal usado para verificar se
uma determinada sentena pertence ou no a uma determinada linguagem. So
exemplos de reconhecedores de linguagens a Mquina de Turing, o Autmato finito e o
Autmato de Pilha. Cada um destes mecanismos reconhece um conjunto bastante
particular de linguagens. Entretanto, os modelos so inclusivos: todas as linguagens
reconhecveis por um autmato finito podem ser reconhecidas por um autmato de pilha
e todas as linguagens reconhecveis por um autmato de pilha so reconhecveis por
mquinas de Turing. As recprocas, porm no so verdadeiras.

Um sistema gerador um dispositivo formal atravs do qual as sentenas de uma
linguagem podem ser sistematicamente geradas. Exemplos de sistemas geradores so as
gramticas gerativas, definidas pela primeira vez por Noam Chomsky, em seus estudos
para sistematizar a gramtica da Lngua Inglesa.
1.2 Gramticas

Uma Gramtica gerativa um instrumento formal capaz de construir (gerar) conjuntos
de cadeias de uma determinada linguagem. As gramticas so instrumentos que
facilitam muito a definio das caractersticas das linguagens.



4


Usar um mtodo de definio de conjuntos particular para definir uma linguagem pode
ser um passo importante no projeto de um reconhecedor para a linguagem,
principalmente se existirem mtodos sistemticos para converter a descrio do
conjunto em programa que processa o conjunto.

Exemplo intuitivo de uma Gramtica: (um subconjunto da gramtica da lngua
portuguesa)

<sentena> :: = <sujeito> <predicado>
<sujeito> :: = <substantivo>
| <artigo> <substantivo>
| <artigo> <adjetivo> <substantivo>
<predicado> :: = <verbo> <objeto>
<substantivo> :: = Joo | Maria | cachorro | livro | po
<artigo> :: = o | a
<adjetivo> :: = pequeno | bom | bela
<verbo> :: = morde | l | olha
<objeto> :: = <substantivo>
| <artigo> <substantivo>
| <artigo> <adjetivo> <substantivo>
1.2.1 Definio Formal

Uma gramtica possui um conjunto finito de variveis (tambm chamadas no-
terminais). A linguagem gerada por uma gramtica definida recursivamente em
termos das variveis e dos smbolos primitivos chamados terminais.

As regras que relacionam terminais e variveis so chamadas de produes. Uma regra
de produo tpica estabelece como uma determinada configurao de variveis e
terminais pode ser reescrita, gerando uma nova configurao.

Uma gramtica especificada por uma qudrupla (N, T, P, S), onde:
a) N o conjunto de no-terminais ou variveis.
b) T o conjunto de terminais, ou alfabeto, sendo que N e T so conjuntos
disjuntos.
c) P um conjunto finito de produes, ou regras, sendo que
( ) ( )
*
T N T N P _
+

d) S um smbolo no-terminal inicial, sendo que N S e

Uma produo (n, p) pode ser escrita como n p, para facilitar a leitura. No caso de
existir mais de uma alternativa para uma mesma configurao e smbolos do lado
esquerdo da regra, como, por exemplo:

<substantivo> coisa
<substantivo> co
<substantivo> pedra

O smbolo pode ser ido como: definido por, e o smbolo | pode ser lido como
ou.



5


Exemplo: Formalizando o subconjunto da gramtica da lngua portuguesa, apresentado
na seo anterior, teramos:

Gportugues = (N, T, P, S), onde:
N = { <sentena> , <sujeito> , <predicado> , <substantivo> ,
<artigo> , <adjetivo> , <predicado> , <verbo> , <objeto> }
T = {joo, maria, cachorro, livro, po, o, a, pequeno, bom, bela, morde, l, olha}
P = o conjunto das regras gramaticais apresentado
S = <sentena>
1.2.2 Derivao

Uma gramtica pode ser usada para gerar uma linguagem atravs de reescrita ou
derivao. A derivao pode ser definida da seguinte maneira: dada uma sentena
1

a
1
bb
1
, com a
1
e a
2
sendo cadeias de terminais e no-terminais, se existir uma regra da
forma b c, ento a sentena inicial pode ser reescrita como a
1
cb
1
. A derivao, ou
reescrita denotada da seguinte forma:

a
1
bb
1
a
1
cb
1


Se a b, ento se diz que a produz diretamente b. O fecho transitivo e reflexivo da
relao
*
. Portanto, se a b ... z, ento se diz que a produz z,
simplesmente, anotando a produo por
*
. O fecho transitivo pode ser definido da
seguinte forma:

a) a
0
a
b) a
1
b se a b
c) a
n+1
z se a
n
y e y
1
z para todo n>1.
d) a
*
z se a
n
z para algum n>1.
Seja, por exemplo, a seguinte gramtica, onde as regras so numeradas para
acompanhar o desenvolvimento da derivao:
1: <S> <X>+<X>=
2,3: <X> 1<X> | 1
4: <X>+1 <X>1+
5: <X>1 1<X>
6: <X>+= <X>
7: 1<X> <X>1
A derivao de uma sentena a partir desta gramtica consiste em uma seqncia de
aplicaes das produes a partir do smbolo inicial. Por exemplo:

<S> <X>+<X>= [1]
1<X>+<X>= [2 no primeiro <X>]
1<X>+1= [3 no segundo <X>]
1<X>1+= [4]
11<X>+= [5]

1
Uma sentena neste texto uma cadeia de terminais e no-terminais. Assim, se w uma sentena,
ento ( )
*
U T w e .


6


11<X> [6]
111 [3]
O fato das regras terem sido aplicadas praticamente em seqncia foi mera
coincidncia. A princpio, qualquer regra de derivao pode ser aplicada a qualquer
ponto da sentena desde que a configurao de smbolos do lado esquerdo da regra
aparea na sentena sendo derivada.

Originalmente, a motivao do uso de gramticas foi o de descrever estruturas sintticas
da lngua natural. Poderia-se escrever regras (produes) como:

<frase> <artigo><substantivo><verbo><artigo><substantivo>.|
<artigo><substantivo><verbo>.
<verbo> dorme | escuta | ama
<substantivo> gato | rdio | rato
<artigo> o | a | os | as

Desta gramtica pode-se obter derivaes como:

<frase> <artigo><substantivo><verbo><artigo><substantivo>.
o<substantivo><verbo><artigo><substantivo>.
o gato <verbo><artigo><substantivo>.
o gato ama <artigo><substantivo>.
o gato ama o<substantivo>.
o gato ama o rato.

Entretanto, a mesma gramtica tambm permite derivar o gato dorme o rato, frase que
no faz sentido. Para evitar a gerao de tais frases, pode-se usar uma gramtica
sensvel ao contexto, estabelecendo que <verbo> s pode ser reescrito para dorme se
for sucedido pelo ponto final da frase:

<frase> <artigo><substantivo><verbo><artigo><substantivo>.|
<artigo><substantivo><verbo>.
<verbo>. dorme
<verbo><artigo> escuta | ama
<substantivo> gato | rdio | rato
<artigo> o | a | os | as

Para esta gramtica impossvel derivar as cadeias o gato dorme o rato, o gato ama
e o gato escuta. O verbo dorme s pode ser derivado se for sucedido por um ponto
final e os verbos escuta e ama s podem ser derivados se forem sucedidos por um
artigo.
1.2.3 Notao

Como conveno notacional, pode-se admitir que smbolos no terminais sero sempre
representados por letras maisculas, e terminais por minsculas. Assim, uma regra
como <a> <a>b | b poderia ser escrita como A Ab | b. Alm disso, os conjuntos T
e N podem ficar subentendidos, e no precisam ser expressos sempre.



7


Pode-se ainda arbitrar que o smbolo inicial S ser o no-terminal que aparecer primeiro
do lado esquerdo da primeira produo da gramtica. Assim, bastaria listar as regras de
produo para se ter a definio completa da gramtica.
1.3 Tcnicas para Definio de Gramticas

Nesta seo sero introduzidas algumas tcnicas padro para definio de produes
para fins especficos. So elas: listas simples, lista com separadores, opo,
concatenao, aninhamento e relaes quantitativas.

Lista simples: xxxxx...x Exemplo: nmeros naturais
A xA | x ou N DN | D
A Ax | x D 0 | 1 | 2 | 3 | ... | 9

Lista com separadores: xSxSxSxS...Sx Exemplo:cadeias de as separadas por $.
A xSA | x S A$S
A aA | a

Opo: G1 ou G2 Exemplo1: comentrio em pascal Exemplo2: conj. nmeros
inteiros.
A B | C C H | P Z P | N
H {M} P U | +U
P (*M*) N -U
M LM | M U DU | D
M a | b | c |...| z | A | B | ... | Z | c D 0 | 1 |...|9

Concatenao: G1G2 Exemplo: nmero em ponto flutuante
C AB R NPN | N | PN | NP
P .
N DN | D
D 0 | 1 | 2 | 3 | ... | 9

Aninhamento: Exemplo: expresses aritmticas com + e *
A aAf | c E N | E+E | E*E | (E)
N DN | D
D 0 | 1 | 2 | 3 | ... | 9
Relaes quantitativas: Exemplos:

1) {a
i
b
2i
| i > 0} = {c, abb, aabbbb, ...} A aAbb | c

2) {a
i
b
j
| j > 0 e i > j} = {c, aab, aaaa, aaaabb ...} L aLb | S
S a | aS

3) {a
i
b
j
| j = 2i ou i > j} = {c, aab, aaaa, aaaabb, abb ...} P A | L
A aAbb | c
L aLb | S
S a | aS



8


4) {a
i
b
j
c
k
d
m
| i = m e j = 3k} = {abbbcd, aabbbbbbccdd,...} L aLd | S
S bbbSc | c

5) {a
i
b
j
| i = j e i,j > 0} = {abbb, aab, aaabbbb, aaaab...} S aSb | L
L A | B
A a | aA
B b | bB

6) {a
i
b
j
c
i+j
| i,j > 0} = {abcc, aabccc, aabbbccccc, ...} S aSc | B
B bBc | bc
1.4 Exerccios

1) Uma palndrome uma cadeia que pode ser lida da mesma maneira da direita para a
esquerda e da esquerda para a direita. Exemplos: a, aba, osso, asddsa. Defina uma
gramtica para a linguagem palndrome (conjunto de todas as palndromes sobre o
alfabeto A = {a, b, c, ..., z}).

2) Seja G = ({S}, {a, b}, P, S). D definies para o conjunto de produes P, de
maneira a gerar as seguintes linguagens:

a) Cadeias que comeam e terminam com a.
b) Cadeias com tamanho mpar.
c) Cadeias onde todos os as aparecem consecutivos.
d) Cadeias onde todos os bs precedem todos os as.
e) Cadeias onde o nmero de bs par.
Observe que a gramtica deve ter apenas um no terminal.

3) Defina uma gramtica que gere as expresses numricas com o seguinte alfabeto
dgitos: 0 a 9; sinais: +, - , * e /; parnteses: ( e ). Teste sua definio mostrando a
derivao das seguintes cadeias:

a) 1+(3*534)
b) ((8/2-(25+3))
1.5 Linguagens definidas por gramticas

A linguagem definida por uma gramtica consiste no conjunto de cadeias de terminais
que esta gramtica pode potencialmente gerar. Este conjunto ser denotado por um
L(G). A linguagem definida por uma gramtica G = (N, T, P, S) dada por:

( ) { } e e e
* *
| e = S e T G L

Em outras palavras, uma cadeia pertence a L(G) se e semente se ela consiste somente de
terminais e pode ser produzida a partir de S.

Uma cadeia em ( )
*
N T chamada de forma sentencia l(ou sentena) se ela pode ser
produzida a partir de S. Assim, pode caracterizar L(G) como o conjunto de todas as
formas sentenciais que contm apenas terminais.


9


1.6 Tipos de Gramticas

Impondo restries na forma das produes, pode-se identificar quatro tipos diferentes
de gramticas. Esta classificao foi feita por Chomsky e conhecida como hierarquia
de Chomsky:
a) Tipo 0. No h restrio na forma das produes. Este o tipo mais geral.

b) Tipo 1. Seja G = (N, T, P, S). Se (i) O smbolo inicial S no aparece no lado
direito de nenhuma produo, e (ii) para cada produo o
1
o
2
, verdadeiro que
|o
1
| s |o
2
| (com exceo para a regra S c), ento se diz que G uma gramtica
do tipo 1, u Gramtica Sensvel ao Contexto (GSC).

c) Tipo 2. Uma gramtica G = (N, T, P, S) do tipo 2 ou Livre de Contexto (GLC) se
cada produo livre de contexto, ou seja, cada produo da forma A o, com
AeN e oe( )
*
N T .

d) Tipo 3. Uma gramtica G de tipo 3, ou regular, se cada produo da
forma A aB, A a ou A c, onde A e B so no-terminais (AeN e BeN) e
a um terminal (aeT).

Isto claramente, uma restrio de tipo 2. A importncia deste tipo simples de
gramtica ser estudada mais adiante.
1.7 Tipos de Linguagens

Uma linguagem L de tipo i se existe uma gramtica G de tipo i tal que L = L(G), para
i igual a 0, 1, 2 ou 3. Pode-se ver que cada linguagem de tipo 3 tambm de tipo 2, cada
linguagem de tipo 2 tambm de tipo 1, e cada linguagem de tipo 1 tambm de tipo 0.
Estas incluses so estritas, isto , existem linguagens de tipo 0 que no so de tipo 1,
existem linguagens de tipo 1 que no so de tipo 2 e existem linguagens de tipo 2 que
no so de tipo 3.

Pode-se relacionar cada tipo de gramtica com uma mquina reconhecedora da seguinte
maneira: a gramtica de tipo 0 gera linguagens reconhecveis por mquinas de Turing; a
gramtica de tipo 2 gera linguagens reconhecidas por autmatos de pilha; a gramtica
de tipo 3 gera linguagens reconhecidas por autmatos finitos.

No h uma classe de reconhecedores para apenas linguagens de tipo 1, porque qualquer
mquina capaz de reconhecer linguagens de tipo 1 poderosa o suficiente para
reconhecer linguagens de tipo 0. A principal razo para identificar as linguagens de tipo
1 como um tipo separado porque toda a linguagem de tipo 1 decidvel, isto , se G =
(N, T, P, S) ento existe um algoritmo tal que, para qualquer cadeia a, responda sim
se a pertence L(G) e no caso contrrio.
1.8 Exerccios

a) Seja a gramtica G = (N, T, P, S), com N = {<sentena>, A, B}, T = {Este, , o,
gato, que, matou, rato, comeu, malte, estava, no, poro, da, casa, Joo, constuiu}, S =
<sentena> e P dado por:


10


<sentea> AB
A Este o | A gato que matou
matou B matou o rato que comeu B
comeu B comeu o malte que estava no B
B poro da casa que Joo construiu
Derive duas cadeias diferentes a partir desta gramtica, indicando as derivaes.

b) Seja G a seguinte GLC (gramtica livre de contexto):

S aSbSa | c

Mostre quatro cadeias de L(G) e a derivao de cada uma delas.

c) Escreva uma gramtica para cada uma das seguintes linguagens:

a) { } { } 0 | 0 |
3 1 2 1 2 3
> >
+ + +
i b a i b a
i i i i

b) { } 0 , |
3
> j i e d c b a
i j j i

c) { } j i ou j i com j i b a
j i
= = > 2 2 0 , |
d) { } k j e l i l k j i d c b a
l k j i
= s > , 0 , , , |
e) { } 0 , | > j i a b b a
j i j i


Identifique o tipo de gramtica que foi definida para cada um dos casos.

d) Escreva uma gramtica livre de contexto para gerar a linguagem: conjunto de todas
as cadeias sobre o alfabeto { } ) (, , , , c b a com os parnteses corretamente aninhados.
e) Caracterize e explique as relaes entre linguagem, gerador e reconhecedor.

f) Defina uma gramtica livre de contexto para os cabealhos de declarao de
procedimentos e funes da linguagem Pascal.

g) Indique, entre os parnteses, o tipo de cada gramtica:

( ) S aS | b
( ) S c | aB B Ab | a
( ) S AAA | a A AbcA | c
( ) S (S) | S+S (S+S) [id+id]
( ) S aA | Aba aA a | baA


11


2. Linguagens Regulares e Autmatos Finitos
As linguagens regulares constituem um conjunto de linguagens decidveis bastante
simples e com propriedades bem definidas e compreendidas. Essas linguagens podem
ser reconhecidas por autmatos finitos e so facilmente descritas por expresses
simples, chamadas expresses regulares (ER).
Ling. Sensveis ao Contexto ou do Tipo 1

Ling. Livres de Contexto ou do Tipo 2
Ling. Recursivamente Enumerveis ou do Tipo 0
Linguagens
Regulares ou do
Tipo 3

Figura 2-1: Hierarquia de Chomsky.
O estudo das linguagens regulares (ou linguagens do tipo 3 na Hierarquia de Chomsky,
veja Figura 2-1, as mais simples, permitindo abordagens de pequena complexidade,
grande eficincia e fcil implementao) pode ser abordado atravs de 3 diferentes
formalismos:

- operacional ou reconhecedor: Autmato Finito, que pode ser determinstico,
no determinstico ou com movimento vazio (com c-transio).
- axiomtico ou gerador: Gramtica Regular
- denotacional: Expresso Regular (tambm pode ser considerado gerador).
2.1 Autmatos Finitos
Um autmato finito, pode ser vista como uma mquina composta basicamente por trs
partes (Figura 2-2):

- Fita: Dispositivo de entrada que contm a informao a ser processada. A fita
finita esquerda e direita. dividida em clulas onde cada uma armazena um
smbolo. Os smbolos pertencem a um alfabeto de entrada. No possvel
gravar sobre a fita. No existe memria auxiliar. Inicialmente a palavra a ser
processada, isto , a informao de entrada ocupa toda a fita.
- Unidade de Controle: Reflete o estado corrente da mquina. Possui uma
unidade de leitura (cabea de leitura), que acessa uma unidade da fita de cada
vez. Pode assumir um nmero finito e pr-definido de estados. Aps cada leitura
a cabea move-se uma clula para a direita.
- Programa ou Funo de Transio: Funo que comanda as leituras e define o
estado da mquina. Dependendo do estado corrente e do smbolo lido determina
o novo estado do autmato. Usa-se o conceito de estado para armazenar as
informaes necessrias determinao do prximo estado, uma vez que no h
memria auxiliar.


12


a a b c c b a a
Controle

Figura 2-2: Autmato Finito como uma mquina com controle finito.
2.1.1 Autmato Finito Determinstico (AFD)

Um autmato finito determinstico (AFD), ou simplesmente autmato finito, M uma
quntupla:

M = (E, Q, o, q0, F),

onde:
E - Alfabeto de smbolos de entrada
Q - Conjunto finito de estados possveis do autmato
o - Funo programa ou funo de transio o: Q x E Q
q
0
- Estado inicial tal que q
0
e Q
F - Conjunto de estados finais, tais que F _ Q.

A funo programa pode ser representada como um grafo orientado finito conforme
representado pela Figura 2-3 e Figura 2-4:
p
a
q
estado
anterior
smbolo
lido
novo
estado

Figura 2-3: Representao da Funo programa como um grafo.

qf q0

Figura 2-4: Representao dos estados inicial (com uma seta) e final (com linha grossa) como nodos de
um grafo.

O processamento de um autmato finito M para uma palavra de entrada w consiste na
sucessiva aplicao da funo programa para cada smbolo de w, da esquerda para
direita, at ocorrer uma condio de parada.



13


Exemplo: Autmato Finito
O autmato finito M
1
= ({a, b}, {q
0
, q
1
, q
2
, q
f
}, o
1
, q
0
, {q
f
}), onde o
1
representada
pela tabela abaixo e pelo grafo da Figura 2-5, reconhece a linguagem

L1 = {w | w possui aa ou bb como subpalavra}

o
1
a b



*
q0
q1
q2
qf
q1
qf
q1
qf
q2
q2
qf
qf
a
a
a
b
b
b
q0
q1 q2
qf

Figura 2-5: Grafo do autmato finito determinstico M1.

O algoritmo apresentado usa os estados q1 e q2 para memorizar o smbolo anterior.
Assim q1 representa o smbolo anterior a e q2 representa o smbolo anterior b.
Aps identificar dois aa ou dois bb consecutivos o autmato assume o estado qf (final) e
varre o sufixo da palavra de entrada sem qualquer controle lgico, somente para
terminar o processamento. A Figura 2-6 ilustra o processamento do autmato finito
M1 para a palavra de entrada w = abba, a qual aceita.
a b b a
1
2
f
f
0

Figura 2-6: Seqncia de processamento.

Note-se que um autmato finito sempre pra ao processar qualquer entrada, pois como
toda palavra finita e como um novo smbolo de entrada lido a cada aplicao da


14


funo programa, no existe a possibilidade de ciclo (loop) infinito. A parada do
processamento pode ocorrer de duas maneiras: aceitando ou rejeitando uma entrada w.
As condies de parada so as seguintes:

a) Aps processar o ltimo smbolo da fita o autmato finito assume um estado
final. O autmato para e a entrada w aceita.
b) Aps processar o ltimo smbolo da fita, o autmato finito assume um estado
no final. O autmato para e a entrada w rejeitada
c) A funo programa indefinida para o argumento (estado corrente e smbolo
lido). O autmato para e a entrada w rejeitada.

Definio: Linguagens Regulares ou do Tipo 3
Uma linguagem aceita por um autmato finito uma Linguagem Regular ou do Tipo 3.

Exerccio
Desenvolver AFDs que reconheam as seguintes linguagens sobre E = {a, b}:
a) {w | w possui aaa como subpalavra}
b) {w | o sufixo de w aa}
c) {w | w possui um nmero mpar de a e b}
d) {w | w possui nmero par de a e mpar de b ou vice-versa}
e) {w | o quinto smbolo da esquerda para a direita de w a}

Exemplos: Autmato Finito
Os autmatos M2 = ({a,b}, {q0}, o2, q0, C) e M3 = ({a, b}, {q0}, o3, q0, {q0}), cujo
diagramas esto na Figura 2-7, reconhecem respectivamente as linguagens L1 = C e
L2 = E*, onde o2 e o3 so representadas abaixo em forma de tabela.

M2 M3
o2 a b
o3 a b
q0 q0 q0
*
q0 q0 q0

b
q0
a
M3
b
q0
a
M2

Figura 2-7: Exemplo de Autmato Finito.

O autmato M4 = ({a, b}, {q0, q1, qa2, q3}, o, q0, {q0}), Figura 2-8, reconhece a
linguagem:

L4 = {w | w possui um nmero par de a e b}.


15



q1 q0
b
q3 q2
a a
a
a
b
b
b
M4

Figura 2-8: Diagrama de transies de estado para o autmato M4.
2.1.2 Autmato Finito No-Determinstico (AFND)
- No-determinismo uma importante generalizao dos AFs, essencial para a
teoria da computao e para a teoria das linguagens formais.
- Qualquer AFND pode ser simulado por um autmato finito determinstico.
q
pn p1
p0
a
a
a
...

Figura 2-9: Exemplo de um AFND.
- Em AFNDs, a funo programa leva de um par (estado, smbolo) a um conjunto
de estados possveis.
- Pode-se entender que o AFND assume simultaneamente todas as alternativas de
estados possveis {p0, p1, ..., pn} a partir do estado atual (q e Q) e do smbolo
recebido (a e E), como se houvesse uma unidade de controle para processar
cada alternativa independentemente, sem compartilhar recursos com as demais,
Figura 2-9.
- Assim o processamento de um caminho no influi no estado, smbolo lido e
posio da cabea dos demais caminhos alternativos.


Definio: Autmato Finito No-Determinstico (AFND)

Um AFND uma quntupla

M = (E, Q, o, q0, F),

onde:
E - Alfabeto de smbolos de entrada
Q - Conjunto finito de estados possveis do autmato
o - Funo programa ou funo de transio o: Q x E 2
Q
, parcial.
q
0
- Estado inicial tal que q
0
e Q
F - Conjunto de estados finais, tais que F _ Q.



16


Portanto, os componentes do AFND so os mesmos do AFD, com exceo da funo
programa (ver Figura 2-9).

Exemplo: Autmato Finito No-Determinstico
O AFND M5 = ({a, b}, {q0, q1, q2, qf}, o5, q0, {qf}), veja Figura 2-10, reconhece a
linguagem L5 = {w | w possui aa ou bb como sub-palavra}, onde o5 dada abaixo, na
forma de tabela:

o
5
a b




*
q0
q1
q2
qf
{q0, q1}
{qf}
-
{qf}
{q0, q2}
-
{qf}
{qf}

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

Figura 2-10: Diagrama de transies de estados do AFND M5.

Exemplo: Autmato Finito No-Determinstico
O AFND M6 = ({a,b}, {q0, q1, q2, qf}, o6, q0, {qf}), representado na Figura 2-11
reconhece a linguagem L6 = { w | w possui aaa como sufixo }

q0 q2
qf
q1
a a
a,b
a

Figura 2-11: Diagrama de transies do AFND M6.
2.1.3 Autmato Finito com Movimentos vazios (ou com c-Transio)

- Movimentos vazios constituem uma generalizao dos AFND e so transies
que ocorrem sem que haja a leitura de smbolo algum.
- Os movimentos vazios podem ser interpretados como um no-determinismo
interno do autmato, que encapsulado.
- A no ser por uma eventual mudana de estados, nada mais pode ser observado
sobre um movimento vazio.
- Qualquer AFc pode ser simulado por um autmato finito no-determinstico.


17



Definio: Autmato Finito com Movimento Vazio (AFc)

Um autmato finito no-determinstico e com movimento vazio (AFNDc), ou
simplesmente autmato finito com movimento vazio (AFc), uma quntupla:

M = (E, Q, o, q0, F),
onde:
E - Alfabeto de smbolos de entrada
Q - Conjunto finito de estados possveis do autmato
o - Funo programa ou funo de transio o: Q x (E {c}) 2
Q
, parcial.
q
0
- Estado inicial tal que q
0
e Q
F - Conjunto de estados finais, tais que F _ Q.

Portanto, os componentes do AFc so os mesmos do AFND, com exceo da funo
programa, veja a Figura 2-12.


p
0
p
1
p
n
q

. . .
c
a
1
a
n

Figura 2-12: Esquema genrico de um AFNDc possuindo uma c-transio.

O processamento dos AFc similar ao dos AFND. Por analogia o processamento de
uma transio para uma entrada vazia tambm no-determinstica. Assim um AFc ao
processar uma entrada vazia assume simultaneamente os estados de origem e destino da
transio.

Exemplo: Autmato Finito com Movimento Vazio

O AFc M7 = ({a,b}, {q
0
, q
f
}, o7, q0, {q
f
}), representado na figura abaixo reconhece a
linguagem L7 = {w | qualquer smbolo a antecede qualquer smbolo b}, onde o7
representada na forma da tabela:


o7 a b
c
q
0
{q
0
} - {q
f
}
* q
f
- {q
f
} -
b
a
q
0
q
f

c

Figura 2-13: Diagrama do AFc M7.


18


2.2 Operaes de Concatenao e Fechamento

Seja C um conjunto finito de smbolos (alfabeto), e sejam L, L
1
e L
2
subconjuntos de C
*

(linguagens sobre o alfabeto C). A concatenao de L
1
e L
2
, denotada por L
1
L
2
, o
conjunto {xy | xeL
1
e yeL
2
}. Em outras palavras, as cadeias da linguagem L
1
L
2
so
formadas por uma cadeia de L
1
concatenada a uma cadeia de L
2
, nesta ordem, incluindo
a todas as combinaes possveis.

Define-se L
0
= {c} e L
n
=L L
n-1
para n > 1. O fecho de Kleene (ou simplesmente fecho)
de uma linguagem L, denotado por L
*
, o conjunto:

=
=
0
*
i
i
L L

e o fecho positivo da linguagem L, denotado por L
+
, o conjunto:

=
+
=
1 i
i
L L
Em outras palavras, L
*
denota as cadeias construdas pela concatenao de qualquer
nmero de cadeias tomadas de L. O conjunto L
+
semelhante, mas neste caso, as
cadeias de zero palavras, cuja concatenao definida como c, so excludas. Note-se,
porm que L
+
contm c se e somente se L a contm. Esta definio difere da definio
do fechamento de alfabetos, onde A
+
era definido como A
*
- {c}. Note-se que no caso de
linguagens podem ocorrer dois casos:

a) Se ceL, ento L
+
= L
*

b) Se ceL, ento L
+
= L
*
- {c}

Exemplo 1:
Se L
1
= {10,1} e L
2
= {0011,11}. Ento L
1
L
2
= {100011,1011,10011,111}

Exemplo 2:
Se L
1
= {10,11} e L
2
= {0011,11}. Ento L
1
L
2
= {100011,1011,110011,1111}
2.3 Expresses Regulares

Uma expresso regular (ER) sobre um alfabeto E indutivamente definida como se
segue:
a) C uma ER que denota a linguagem vazia.
b) c uma ER que denota a linguagem contendo exclusivamente a cadeia vazia, ou seja
{c}.
c) Qualquer smbolo x pertencente ao alfabeto E uma ER e denota a linguagem
contendo a cadeia unitria x, ou seja {x}.
d) Se r e s so ERs e denotam respectivamente as linguagens R e S, respectivamente,
ento:
i) (r+s) ER e denota a linguagem R S
ii) (rs) ER e denota a linguagem {uv | ue R e v e S}
iii) (r*) ER e denota a linguagem R*




19


Observaes:
1. Os parnteses podem ser omitidos, respeitando-se as seguintes prioridades de
operaes:
- A concatenao sucessiva tem precedncia sobre a concatenao e a unio, e
- A concatenao tem precedncia sobre a unio.
2. Uma linguagem gerada por um expresso regular r representada por L(r) ou
GERA(r).

Exemplos:

Expresso Regular Linguagem Representada
aa Somente a cadeia aa.
ba* Todas as cadeias que iniciam por b, seguido de zero ou mais a.
(a+b)* Todas as cadeias sobre o alfabeto {a, b}
(a+b)*aa(a+b)* Todas as cadeias contendo aa como subpalavra.
a*ba*ba* Todas as cadeias contendo exatamente dois b
(a+b)*(aa+bb) Todas as cadeias que terminam com aa ou bb.
(a+c)(b+ba)* Todas as cadeias que no possuem dois a consecutivos
0*1*2* Todas as cadeias de 0 seguidas de 1s seguidas d 2s

Exerccios:
Desenvolva expresses regulares que gerem as seguintes linguagens sobre E = {a, b}:
1. {w | w tem no mximo um par de a como subcadeia e no mximo um par de b
como subcadeia}.
2. {w | qualquer par de a antecede qualquer par de b}
3. {w | w no possui aba como subpalavra}
2.4 Equivalncia entre AFs e ERs

Pode-se facilmente construir um AF com c-transies a partir de qualquer expresso
regular. O mtodo deve ser aplicado para a base (casos (a), (b) e (c)) e indutivamente
para cada tipo de construo das ERs.

a) Para expresso C, construa o seguinte AF:
b)
e
f
e
0


c) Para ER c, construa o seguinte AF:
d)
e
f


c) Para ER a (para algum aeE), construa o seguinte AF:
d)
e
f
e
0
a


d) Para ER (A + B), construa a seguinte estrutura:


20



d
2
e
2
d
1
e
1
e
f
e
0
A

B

c

c

c

c




onde e
1
e d
1
so, respectivamente, os estados inicial e final da ER A, e e
2
e d
2

so, respectivamente, os estados inicial e final da ER B.

e) Para ER AB, construa a seguinte estrutura:

d
2
d
1
A
B

c


e
1 e
2


onde e
1
e d
1
so, respectivamente, os estados inicial e final da ER A, e e
2
e d
2

so,respectivamente, os estados inicial e final da ER B.

f) Para ER A*, construa a seguinte estrutura:
e
2
e
1
d
2
e
0
A

c

c

c

c




onde e
1
e e
2
so, respectivamente, os estados inicial e final da ER A.
2.5 Transformao de GR em AF

Para transformar uma gramtica regular G = (N, T, P, S) em um autmato finito
M=(E,A,t,e
0
,F), proceda como segue:

Algoritmo: Transformao de GR em AF
Entrada: Uma Gramtica Regular G = (N, T, P, S)
Sada: Um Autmato Finito M=(E, A, t, e
0
, F)

E:= N {e
novo
, S}, onde e
novo
um smbolo que no pertence a N;
A := T;
e
0
:= S;
se S ::= c e P ento
F := { e
novo
, S}
seno
F := { e
novo
};



21


fimSe;
Construa t de acordo com as seguintes regras:
a) Para cada produo da forma B::=aeP c/ ae{T{c}}, crie uma transio
t(B,a) = e
novo
;
b) Para cada produo da forma B::=aC e P, crie uma transio t(B,a) = C;
c) Para todo ae T, deixe t(e
novo
,a) indefinida (ou use o estado ERRO).

2.6 Transformao de AF em GR

Para transformar um AF em uma gramtica regular equivalente, proceda como segue:

Algoritmo: Transformao de AF em GR
Entrada: Um Autmato Finito M=(E, A, t, e
0
, F)
Sada: Uma Gramtica Regular G = (N, T, P, S)

N := E;
T := A;
S := e
0
;
Defina P de acordo com as seguintes regras:
a) Se t(B, a) = C ento adicione B::=aC em P;
b) Se t(B, a) = C e CeF, ento adicione B::=a em P;
c) Se e
0
eF, ento adicione S::= c em P.
2.7 Determinizao de AFND

Por definio, todo AFD um caso especial de AFND no qual a relao de transio
uma funo. Assim, a classe de linguagens reconhecidas por um AFND inclui as
linguagens regulares (aquelas que so reconhecidas por AFDs). Entretanto, pode-se
provar que as linguagens regulares so as nicas linguagens reconhecidas por um
AFND. Para isto, basta mostrar que para qualquer AFND pode-se construir um AFD
que reconhece a mesma linguagem. Um mtodo de transformao dado a seguir.

Algoritmo: Determinizao de Autmato Finito
Entrada: Um AFND MN = (E, A, t, e
0
, F)
Sada: Um AFD MD = (E, A, t, e
0
, F)

1. Rotule a primeira linha da tabela de transies t para MD com um conjunto unitrio
contendo apenas o estado inicial e
0
de MN. Aplique o passo (2) a este conjunto.

2. Dado um conjunto de estados S, rotulando uma linha da tabela t para MD, para a
qual as transies ainda no foram computadas, encontre os estados de MN que podem
ser alcanados a partir dos estados contidos em S para cada smbolo de entrada; coloque
estes estados na coluna correspondente ao smbolo de entrada na tabela para MD.

3. Para cada novo conjunto gerado pelas transies do passo (2), determine se ele j
usado como rtulo para alguma linha de MD. Se o conjunto ainda no foi usado, ento
crie uma nova linha com o conjunto como rtulo. Se o conjunto j foi usado, no
necessrio fazer nada com ele.


22



4. Se existe alguma linha em MD para a qual as transies no forma computadas, volte
e aplique o passo (2) quela linha. Se todas as transies j forma computadas, v pra o
passo (5).

5. Para todas as linhas de MD rotuladas com conjuntos que contenham pelo menos um
estado final de MN, marque esta linha como estado final de MD. Fim.

Exemplo: Construo de um AFD a partir do AFND M6.

Determinizar o AFND M6 = ({a,b}, {q
0
, q
1
, q
2
, q
f
}, t, q
0
, {q
f
}), dado na Figura 2-11 e
repetido a seguir.

q0 q2
qf
q1
a a
a,b
a


Tabela de t para o autmato M6 mostrado acima.

t a b




*
q
0

q
1

q
2

q
f

q
0
, q
1

q
2

q
f

-
q
0

-
-
-

Executando o algoritmo:

t' a b
q
0
q
01

q
01

q
01
, q
2

q
0

q
0



t' a b
q
0
q
01

q
012

q
01

q
012
q
012
, q
f

q
0

q
0
q
0


t' a b
q
0
q
01

q
012
q
012f

q
01

q
012
q
012f
q
012f

q
0

q
0
q
0
q
0


Adicionando os estados restantes e determinando os estados finais, tem-se a tabela do
autmato M6 determinizado (M6D):



23


t' a b



*


*
q
0
q
01

q
012
q
012f
q
1
q
2
q
f

q
01

q
012
q
012f
q
012f
q
2
q
f
-
q
0

q
0
q
0
q
0
-
-
-

O AFD M6D = ({a, b}, Q, t, q
0
, F), construdo conforme o algoritmo dado :
a a
b
a
q
012f
q
f
q
012
q
01
q
0
b
b
b
a
q
1
q
2
a a

onde:
Q = {q
0
, q
1
, q
2
, q
f
, q
01
, q
012
, q
012f
}
F = {q
f
, q
012f
}.
t = Exibida acima.
2.8 Equivalncia entre AFs com e sem c-transies
Para um autmato finito com c-transies (ou com movimento vazio) define-se o
c-fechamento de um estado e como o conjunto de estados alcanveis a partir de e
utilizando-se somente c-transies. Para o exemplo a seguir tem-se o seguinte:

0 1 2
c
e
0
e
0

C C
e
1

e
1

C
e
1

C
e
2

* e
2

C C
e
2

C

c-fecho(e
0
) = {e
0
, e
1
, e
2
}
c-fecho(e
1
) = {e
1
, e
2
}
c-fecho(e
2
) = {e
2
}

Seja M = (E, A, t, e
0
, F), um AF com c-transies, pode-se construir M = (E, A, t, e
0
,
F) sem as c-transies da seguinte maneira:

Algoritmo: Eliminao de c-transies
Entrada: Um AFND M = (E, A, t, e
0
, F)
Sada: Um AFND sem c-transies M = (E, A, t, e
0
, F)
1. F ser definido por F{e | eeE e c-fecho(e) contm um estado de F};


24


2. t deve conter todas as transies de t que no so c-transies e mais aquelas que
so obtidas pela composio de transies de t com as c-transies de t, da seguinte
maneira:
a) se (e
1
, a, e
2
)et e e
3
ec-fecho(e
2
) ento coloque (e
1
, a, e
3
)et;
a) se (e
1
, a, e
2
)et e e
1
ec-fecho(e
3
) ento coloque (e
3
, a, e
2
)et;
2.9 Minimizao de Autmatos Finitos

Diz-se que um AF mnimo se ele no possui estados inatingveis ou mortos e se no
existem estados equivalentes entre si. Se um AF no mnimo, ento um AF
equivalente com menos estados pode ser obtido pela eliminao dos estados inatingveis
e mortos e pela combinao dos estados equivalentes. Este processo de reduo pode ser
repetido at que um AF mnimo seja encontrado. Assim, todo AF tem um AF mnimo
correspondente.

Realizando estas redues por caminhos diferentes, ou iniciando com mquinas
equivalentes, mas diferentes, pode-se obter mquinas mnimas que paream ser
diferentes. Entretanto, estas mquinas sero, de fato, idnticas em tudo, com exceo
dos nomes usados para os estados.

Pode-se concluir que, exceto pelos nomes dos estados, existe apenas uma mquina
mnima para um dado problema de reconhecimento. Isto significa que no importa a
forma do AF inicialmente encontrado para reconhecer uma determinada linguagem e
no importa a forma com que as redues so feitas: existe apenas uma mquina
mnima que pode ser encontrada pra este problema.
2.9.1 Estados Inatingveis

Pode haver alguns estados no AF que nunca sero atingidos com nenhuma seqncia de
smbolos a partir do estado inicial.

Tais estados so chamados de estados inatingveis. As linhas que correspondem a
estados inatingveis podem ser simplesmente removidas da tabela de transio para
deixar a mquina com menos estados.

Algoritmo: Eliminao de Estados Inatingveis
Entrada: Um Autmato Finito M = (E, A, t, e
0
, F)
Sada: Um Autmato Finito sem estados Inatingveis M = (E, A, t, e
0
, F)

1. Inicialize o conjunto de estados atingveis E com o estado inicial e
0
.
2. Adicione, em E, para cada estado e, presente no conjunto E, todos os estados d que
podem ser alcanados por uma transio a partir de e, ou seja, todos os estados d tal
que t(e,x) = d para algum xeA.
3. Se nenhum novo estado pode ser adicionado ao conjunto E com o uso destas regras,
j foi obtido o conjunto de estados atingveis.
4. Coloque em t todas as transies t(x,y)=z tal que x,zeE e yeA. Coloque em F
todos os estados que pertencem simultaneamente a F e a E.


25


2.9.2 Estados Mortos

Um estado e de um AF morto se ele no final e se a partir dele no se pode atingir
nenhum estado final. Para eliminar os estados mortos de um AF M proceda como segue:

Algoritmo: Eliminao de Estados Mortos
Entrada: Um AF M = (E, A, t, e
0
, F)
Sada: Um AF sem estados mortos M = (E, A, t, e
0
, F)
1. Inicialize o conjunto de estados no-mortos E com os estados finais F de M.
2. Para cada estado e em E, adicione os estados de E que levam para e com uma
transio de t para algum smbolo de entrada. Ou seja, adicione em E o conjunto
{x| t(x,a) = e, eeE e aeA}
3. Repita o passo (2) at que mais nenhum estado possa ser adicionado ao conjunto E.
4. Coloque em t todas as transies t(x,y) = z tal que x, zeE e yeA. Se e
0
eE ento
faa e
0
= e
0
; caso contrrio, e
0
um novo smbolo de estado e a linguagem
reconhecida pelo autmato vazia, uma vez que o estado inicial morto.
2.9.3 Estados Equivalentes

Dois estados e e d so equivalentes se e somente se as duas condies seguintes forem
satisfeitas:
a) Condio de compatibilidade: os estados e e d devem ser ambos finais ou ambos
no-finais.
b) Condio de propagao: para qualquer smbolo de entrada, os estados e e d devem
levar a estados equivalentes.

As condies (a) e (b) podem ser incorporadas em um teste geral de equivalncia entre
estados. O mtodo chamado mtodo da separao, uma vez que seu objetivo separar,
ou particionar, o conjunto de estados em subconjuntos disjuntos, ou blocos, tal que
estados no-equivalentes fiquem em blocos separados. O mtodo ilustrado por sua
aplicao no AF da tabela seguinte:

t a b
e
1
e
6
e
3

e
2
e
7
e
3

e
3
e
1
e
5

e
4
e
4
e
6

* e
5
e
7
e
3

* e
6
e
4
e
1

* e
7
e
4
e
2


Os estados so inicialmente separados em dois blocos; um contendo os estados finais e
outro contendo os estados no-finais. Para o exemplo, a partio inicial L
0
dada pela
seguinte lista:
L
0
= [{e
1
, e
2
, e
3
, e
4
},{e
5
, e
6
, e
7
}]

j que e
1
, e
2
, e
3
e e
4
so estados no finais e e
5
, e
6
e e
7
so estados finais. Nenhum dos
estados no primeiro bloco equivalente a nenhum dos estados no segundo bloco,
porque tal para violaria a condio de compatibilidade.


26



Agora, observe o que acontece aos estados no bloco {e
1
, e
2
, e
3
, e
4
} com entrada a. Os
estados e
3
e e
4
vo para estados contidos no primeiro bloco (e
1
e e
4
respectivamente),
enquanto os estados e
1
e e
2
vo para estados no segundo bloco (e
6
e e
7
respectivamente).
Isto significa que para qualquer estado no conjunto {e
1
, e
2
} e qualquer estado em
{e
3
, e
4
} os estados seguintes correspondendo a entrada a no sero equivalentes. Isto
uma violao da condio de propagao, e assim se pode concluir que nenhum estado
em {e
1
, e
2
} ser equivalente a nenhum estado em {e
3
, e
4
}. Isto habilita a construo de
uma nova partio:
L
1
= [{e
1
, e
2
},{e
3
, e
4
},{e
5
, e
6
, e
7
}]

Com a propriedade de que estados tomados de blocos diferentes sero sempre no
equivalentes.

Agora se tentar encontrar um bloco em L
1
e uma entrada tal que o bloco possa ser
separado com respeito a entrada e uma nova partio seja assim obtida. Esta nova
partio tambm ter a propriedade de que os estados tomados de diferentes blocos
sero garantidamente no-equivalentes. Este processo deve ser repetido at que
nenhuma nova separao seja possvel. No exemplo, a continuao seria a seguinte:

Separando {e
3
, e
4
} de L
1
com respeito a a:

L
2
= [{e
1
, e
2
},{e
3
},{e
4
},{e
5
, e
6
, e
7
}]

Separando {e
5
, e
6
, e
7
} de L
2
com respeito a a (ou b):

L
3
= [{e
1
, e
2
},{e
3
},{e
4
},{e
5
},{e
6
, e
7
}]

A partio L
3
no pode ser mais separada. Para verificar isto, observe que todos os
estados no bloco {e
1
, e
2
} vo para estados no bloco{e
6
, e
7
} com entrada a, e para o
bloco {e
3
} com entrada b. Similarmente {e
6
, e
7
} vo para os blocos {e
4
} e {e
1
, e
2
} com
entrada a e b, respectivamente. Os outros blocos tm apenas um elemento, e assim no
podem mais ser separados.

Quando o procedimento termina, os estados dentro de um mesmo bloco so
equivalentes. No exemplo, os estados e
1
e e
2
so equivalentes e os estados e
6
e e
7

tambm so equivalentes.

Os blocos da partio final podem ser usados para construir uma nova mquina, a qual
equivalente original, porm sem possuir estados equivalentes. Para o exemplo a
mquina mnima resultante seria:

t a b t a b
{e
1
, e
2
} {e
6
, e
7
} {e
3
}

e
1
e
5
e
2

{e
3
} {e
1
, e
2
} {e
5
} e
2
e
1
e
4

{e
4
} {e
4
} {e
6
, e
7
} ou e
3
e
3
e
5

* {e
5
} {e
6
, e
7
} {e
3
} * e
4
e
5
e
2

* {e
6
, e
7
} {e
4
} {e
1
, e
2
} * e
5
e
3
e
1


ou em forma de diagrama de transio (com os estados renomeados):


27


e
1
a
e2
e5
b
a
b
e4
e3
a
b
a
a
b
b

O conjunto de estados da nova mquina o conjunto de blocos da partio final. As
transies para a nova mquina so obtidas a partir da antiga observando quais blocos
seguem quais para cada entrada. Assim, na tabela acima, a transio do estado {e
1
, e
2
}
com entrada a definida para o estado {e
6
, e
7
}, porque os estados contidos no primeiro
bloco vo para os estados do segundo bloco com entrada a. O estado inicial da nova
mquina simplesmente o bloco que contm o estado inicial da mquina original e os
estados finais so aqueles blocos que contm estados finais da mquina original.

Algoritmo: Eliminao de Estados Equivalentes
Entrada: Um Autmato finito M = (E, A, t, e
0
, F)
Sada: Um Autmato finito sem estados equivalentes M = (E, A, t, e
0
, F)

Crie uma lista de parties L
0
= [E F, F].
i :=0;
Repita:
L
i+1
:= [];
Para cada elemento p de L
i
faa:
Se | p | = 1 ento:
Coloque p em L
i+1

Seno
p' := C;
e := um estado qualquer de p;
coloque e em p;
para todo smbolo dep-{e} faa:
se d e e so equivalentes ento:
adicione d em p
fim se;
fim para;
coloque p em L
i+1
;
se p = p ento
coloque p p em L
i+1

fim se;
fim se;
fim para;
i := i + 1;
at L
i
= L
i+1
;
Crie um smbolo de estado e
j
para cada elemento p
j
da partio L
i
;
Coloque estes estados e
j
no conjunto E;
Para cada transio t(e, a) = d faa
Crie a transio t(e
j
, a) = e
l
onde ee p
j
e dep
l
, sendo e
l
smbolo de p
j
e e de p.


28


Fim para.
Coloque em F todos os estados e
j
de E originados a partir de algum p
j
tal que xep
j
e
xeF.
e
0
= e
j
, tal que e
j
se originou de p
j
e e
0
de p
j
.
2.9.4 Estado de Erro

Para no deixar transies indefinidas em M, pode-se substituir todas as indefinies
por um estado de erro ERRO e adicionar este estado tabela. Para cada smbolo de
entrada o estado ERRO tem transio para si prprio. O estado de erro no deve
jamais ser definido como estado final.
2.9.5 Autmato Finito Mnimo

Para encontrar um AF mnimo a partir de um AF qualquer preceda como segue:

Algoritmo: Minimizao de Autmato Finito
Entrada: um Autmato Finito M = (E, A, t, e
0
, F).
Sada: um AF mnimo M = (E, A, t, e
0
, F).
1. Elimine os estados inatingveis (ou inalcanveis);
2. Elimine os estados mortos;
3. Adicione o estado de erro;
4. Elimine os estados redundantes


1


3. Linguagens Livres de Contexto

A importncia das LLCs reside no fato de que praticamente todas as linguagens de
programao podem ser descritas por este formalismo, e que um conjunto bastante
significativo destas linguagens pode ser analisado por algoritmos muito eficientes. A
maioria das linguagens de programao pertence a um subconjunto das LLCs que pode
ser analisado por algoritmos que executam n.log(n) passos para cada smbolo da
sentena de entrada. Outro subconjunto, que corresponde s linguagens no ambguas
pode ser analisado em tempo n
2
. No pior caso, uma LLC ambgua pode ser analisada em
tempo n
3
. O que ainda bastante eficiente, se comparado s linguagens sensveis ao
contexto que pode requerer complexidade exponencial (2
n
), sendo, portanto,
computacionalmente intratveis, e as linguagens de tipo 0, que podem ser inclusive
indecidveis, isto , o algoritmo de anlise pode no parar nunca.

Relembrando, uma gramtica livre de contexto (GLC) denotada por G = (N, T, P, S),
onde N e T so conjuntos disjuntos de variveis e terminais, respectivamente, P um
conjunto finito de produes, cada uma da forma A ::= o, onde A uma varivel do
conjunto N e o uma cadeia de smbolos de (T N)
*
. Finalmente, S uma varivel
especial denominada smbolo inicial.
3.1 rvore de Derivao e Ambigidade

Muitas vezes til mostrar as derivaes de uma GLC atravs de rvores. Estas figuras,
chamadas rvores de derivao ou rvores sintticas, impem certas estruturas teis s
cadeias das linguagens geradas, principalmente as de programao.

Os vrtices de uma rvore de derivao so rotulados com terminais ou variveis, ou
mesmo com a cadeia vazia. Se um vrtice n rotulado com A, e os filhos de n so
rotulados com X
1
, X
2
,..., X
k
, da esquerda para a direita, ento A ::= X
1
X
2
...X
k
deve ser
uma produo. Considere, como exemplo, a gramtica:

E ::= E+E | E*E|(E)|id

Uma rvore de derivao para a sentena (id+id)*id gerada por esta gramtica poderia
ser:

E
E E
E
E
E E
id
*
id id
+
) (



2


Mais formalmente, seja G = (N, T, P, S) uma GLC. Ento uma rvore uma rvore de
derivao para G, se:
a) Cada vrtice tem um rtulo, que um smbolo de N T {c}.
b) O rtulo da raiz o smbolo S.
c) Os vrtices interiores so rotulados apenas com smbolos de N.
d) Se o vrtice n tem rtulo A, e os vrtices n
1
, n
2
,..., n
k
so filhos de n, da esquerda
para a direita, com rtulos X
1
, X
2
,..., X
k
, respectivamente, ento:

A ::= X
1
X
2
...X
k


deve ser uma produo em P.
e) Se o vrtice n tem rtulo c, ento n uma folha e c o nico filho de seu pai.

Exemplo

Considere a gramtica G = ({S, A}, {a, b}, P, S), onde P consiste de

S ::= aAS | a
A ::= SbA | SS | ba

A figura seguinte uma rvore de derivao para uma sentena desta gramtica, na qual
os nodos foram numerados para facilitar a explicao:

1
2
3 4
5 6 7 8
9 10 11
S
S A
A S
a
b a
a
b a


Os vrtices interiores so 1, 3, 4, 5 e 7. O vrtice 1 tem rtulo S, e seus filhos, da
esquerda para a direita tm rtulos a, A e S. Note que S ::= aAS uma produo. Da
mesma forma, o vrtice 3 tem rtulo A, e os rtulos de seus filhos so S, b e A, da
esquerda para a direita; A :: SbA tambm uma produo. Os vrtices 4 e 5 tm ambos
o rtulo S. O nico filho deles tem rtulo a; e S ::= a uma produo. Finalmente, o
vrtice 7 tem rtulo A, e seus filhos, da esquerda para a direita, tem rtulos b e a; e
A ::= ba tambm uma produo. Assim as condies para que esta rvore seja uma
rvore de derivao para G foram cumpridas.

Pode-se estender a ordem da esquerda para a direita dos filhos para produzir uma
ordem da esquerda para a direita de todas as folhas. No exemplo acima, o
caminhamento da esquerda para a direita nas folhas da rvore produziria a seguinte
seqncia: 2, 9, 6, 10, 11 e 8.



3


Pode-se ver que a rvore de derivao uma descrio natural para a derivao de uma
forma sentencial particular da gramtica G.

Uma sub-rvore de uma rvore de derivao composta por um vrtice particular da
rvore, juntamente com seus descendentes.

Se uma gramtica G tem mais de uma rvore de derivao para uma mesma cadeia,
ento G chamada de gramtica ambgua. Uma linguagem livre de contexto para a
qual toda gramtica livre de contexto ambgua denominada linguagem livre de
contexto inerentemente ambgua.
3.2 Derivao mais Esquerda e mais Direita

Se cada passo na produo de uma derivao aplicado na varivel mais esquerda,
ento a derivao chamada derivao mais esquerda. Similarmente, uma derivao
onde a cada passo a varivel direita substituda, chamada de derivao mais
direita.

Se w est em L(G), ento w tem ao menos uma rvore de derivao. Alm disso, em
relao a uma rvore de derivao particular, w tem uma nica derivao mais
esquerda e uma nica derivao mais direita.

Evidentemente, w pode ter vrias derivaes mais esquerda e vrias derivaes mais
direita, j que pode haver mais de uma rvore de derivao para w. Entretanto, fcil
mostrar que para cada rvore de derivao apenas uma derivao mais esquerda e
uma derivao mais direita pode ser obtida.

Exemplo:

derivao mais esquerda correspondendo
rvore do exemplo anterior
derivao mais direita
correspondente
S aAS
aSbAS
aabAS
aabbaS
aabbaa
S aAS
aAa
aSbAa
aSbbaa
aabbaa
3.3 Simplificaes de Gramticas Livres de Contexto

Existem vrias maneiras de restringir as produes de uma gramtica livre de contexto
sem reduzir seu poder expressivo. Se L uma linguagem livre de contexto no vazia,
ento L pode ser gerada por uma gramtica livre de contexto G com as seguintes
propriedades:

a) Cada varivel e cada terminal de G aparecem na derivao de alguma palavra de
L.
b) No h produes da forma A::=B, onde A e B so variveis.
c) Se c no est em L, ento no h necessidade de produes da forma A::=c.



4


No caso de (a) estes smbolos (variveis ou terminais) so conhecidos como smbolos
inteis (smbolos improdutivos e smbolos inalcanveis). Em (b) as produes A::=B
so conhecidas como produes unitrias. As produes da forma A::=c (item c) so
conhecidas como c-produes. Existem algoritmos que podem ser aplicados nos casos
(a), (b) e (c) que produzem uma nova gramtica equivalente gramtica original.
Veremos apenas o algoritmo para eliminar as c-produes.
3.3.1 Eliminao das c-produes

Conforme vimos uma GLC pode ter produes do tipo ::=c. Mas toda GLC pode ser
transformada em uma GLC equivalente sem estes tipos de produes (chamadas c-
produes), com exceo da produo S::=c (S o smbolo inicial), se esta existir.
Assim procedendo, possvel mostrar que toda GLC pode obedecer restrio das GSC
(tipo 1).

O mtodo de eliminao das c-produes consiste em determinar, para cada varivel A
em N, se A
*
c. Se isso ocorrer diz-se que a varivel A anulvel. Pode-se, assim,
substituir cada produo da forma B::=X
1
X
2
X
3
...X
n
por todas as produes formadas
pela retirada de uma ou mais variveis X
i
anulveis.

Exemplo:

Dada a gramtica

A ::= BCDe
B ::= c | e
C ::= c | a
D ::= b | cC
Neste caso as variveis anulveis so B e C, assim, a gramtica
pode ser transformada na seguinte gramtica:
A ::= BCDe | CDe | BDe | De
B ::= e
C ::= a
D ::= b | c | cC

Os no-terminais que derivam a cadeia c so chamados c-no-teminais. Um no-
terminal (varivel) A um c-no-terminal se existir uma derivao A
*
c em G. Note
que c est em L(G) se e somente se S um c-no-terminal. Se G no tem c-no-
terminal, ela dita c-livre.

Se G tem c-produes, ento em uma derivao sentencial da forma:

S o
1
o
2
... o
n


Os tamanhos das sentenas iro variar no-monotonicamente um em relao ao outro,
isto , ora aumentam, ora diminui. Entretanto, se G no tem c-produes, ento:

|S| s |o
1
| s |o
2
| s ... s |o
n
|

Isto , os tamanhos das sentenas so monotonicamente crescentes. Esta propriedade
til quando se quer testar se uma dada palavra ou no gerada por uma GLC.

Antes de apresentar um algoritmo para eliminar as c-produes, ser apresentado um
algoritmo para encontrar os c-no-terminais.



5


Algoritmo: Encontrar o Conjunto dos c-no-terminais
Entrada: Uma GLC G = (N, T, P, S)
Sada: O conjunto E de c-no-terminais

E := {A | AeN e A ::= c};
Repita
Q := {X | XeN e XeE e existe pelo menos uma produo da forma X ::= Y
1
Y
2
...Y
n

tal que Y
1
eE, Y
2
eE, ...,Y
n
eE};
E := EQ;
At Q = C;

Exemplo: Seja G a seguinte gramtica:

S ::= aS | SS | bA
A ::= BB
B ::= CC | ab | aAbC
C ::= c

Inicialmente temos E = {C} e se obtem:

B ::= CC | aAbC
C ::= c

Quando o lao executado pela primeira vez deixa Q = {B} e

A ::= BB
B ::= CC | ab | aAbC
C ::= c

obtendo E = {B, C}

Como Q no vazio, uma segunda iterao deixa Q = {A}

S ::= bA
A ::= BB
B ::= CC | ab | aAbC
C ::= c

obtendo E = {A, B, C}.

Mais uma vez, Q no-vazio, mas uma iterao subseqente no acrescenta novos
smbolos, assim o algoritmo termina. A, B e C so os nicos c-no-terminais em G.

Para eliminar os c-no-terminais de uma GLC, pode-se usar o seguinte algoritmo, que
elimina c-no-terminais sem introduzir novos. A estratgia baseada na seguinte idia.
Seja A um c-no-terminal em G. Ento ele dividido conceitualmente em dois no-
terminais A e A, tal que A gera todas as cadeias no vazias e A apenas gera c.
Agora, o lado direito de cada produo onde A aparece uma vez, por exemplo,
B::=oA|, trocado por duas produes B::=oA| e B::=oA|. J que A s gera c,


6


ele pode ser trocado por c, deixando B::=o|. Depois disso, pode-se usar A em lugar de
A. A produo final fica: B::=o| | B::=oA|, onde A no mais um c-no-terminal. Se
B::=oA|A, ento so obtidas as quatro combinaes possveis pelas trocas de A por c,
e assim por diante.

Algoritmo:Eliminao de todos os c-no-terminais
Entrada: Uma GLC G = (N, T, P, S)
Sada: Uma GLC G = (N, T, P, S) c-livre

Construa o conjunto E;
P := {p | peP e p no c-produo}
Repita
Se P tem uma produo da forma A::= oB|, tal que BeE, o|e(NT)
*
e o| = c,
ento inclua a produo A::= o| em P;
at que nenhuma nova produo possa ser adicionada a P;

se SeE ento
Adicione a P as produes S::=S | c
N := N {S};
seno
S := S;
N = N;
Fim-se;
3.3.2 Fatorao de GLC

Uma GLC est fatorada se ela determinstica, ou seja, se ela no possui produes
para um mesmo no terminal no lado esquerdo cujo lado direito inicie com a mesma
cadeia de smbolos ou com smbolos que derivam seqncias que iniciem com a mesma
cadeia de smbolos. De acordo com esta definio, a seguinte gramtica no
determinstica:

S ::= aSB | aSa
A ::= a
B ::= b
Fonte de no
determinismo.


Para fatorar uma GLC (retirar o no determinismo) deve-se alterar as produes
envolvidas no no determinismo da seguinte maneira:

a) As produes com no determinismo direto da forma:

A ::= o| | o sero substitudas por:

A :: oA
A ::= | |
b) O no determinismo indireto retirado atravs de sua transformao em
determinismo direto (atravs de substituies sucessivas) e posterior eliminao
segundo o item (a).



7


Exemplo: Fatorar a gramtica

S ::= aSB | aSa
A ::= b
B ::= a

Eliminando o no
determinismo direto
S ::= aSS
S::=B | a
A ::= b
B ::= a

Veja que na produo

S ::= B | a

tem um no-determinismo indireto, pois o lado direito da varivel B comea com um a.
Para fatorar esta gramtica tem-se que tornar este no determinismo indireto em direto
substituindo o lado direito de B ::= a na varivel B da produo S ::= B. Assim
procedendo tem-se:

S ::= aSS
S::= a | a
A ::= b
B ::= a

Eliminando o no
determinismo direto
S ::= aSS
S::= aS
S ::= c
A ::= b
B ::= a
3.3.3 Eliminao da Recurso Esquerda

Um no-terminal A, em uma GLC G = (N, T, P, S) recursivo se A
+
oA|, para o e |
e(NT)
*
.

Se o = c, ento A recursivo esquerda; se | = c, ento A recursivo direita. Esta
recursividade pode ser direta ou indireta.

Uma gramtica com pelo menos um no-terminal recursivo esquerda ou direita
uma gramtica recursiva esquerda ou direita, respectivamente.

Uma GLC G = (N, T, P, S) possui recurso esquerda direta, se P contm pelo menos
uma produo da forma A ::= Ao.

Uma GLC G = (N, T, P, S) possui recurso esquerda indireta, se existe em G uma
derivao da forma: A
n
A|, para algum n > 2.

Para eliminar as recurses diretas esquerda de um no terminal A, com produes

A ::= Ao
1
| Ao
2
| ... |Ao
m
| |
1
| |
2
| ... | |
n


onde nenhum |
i
comea por A, deve-se substituir estas produes-A pelas seguintes:

A ::= |
1
A | |
2
A | ... | |
n
A
A ::= o
1
A | o
2
A | ... |o
m
A| c




8


Algoritmo: Eliminao da recurso esquerda
Entrada: Uma GLC G = (N, T, P, S);
Sada: Uma GLC G = (N, T, P, S) sem recurso esquerda;
Ordene os no-terminais em uma ordem qualquer (ex: A
1
, A
2
, ...,A
n
);
Para i de 1 a n faa
Para j de 1 a i-1 faa
Substitua as produes A
i
::=A
j
por A
i
::=o
1
| o
2
|...| o
k
, onde A
j
::=o
1
| o
2
|...| o
k

so todas as produes-A
j
correntes;
fim_para;
Elimine as recurses diretas esquerda entre as produes A
i
;
fim_para;
3.4 Tipos Especiais de GLCs

A seguir sero identificados alguns tipos especiais de GLC.

a) Gramtica prpria: Uma GLC prpria se:
a.1) No possui produes cclicas; (ver definio a seguir)
a.2) c-livre; e
a.3) No possui smbolos inteis.

b) Gramtica sem ciclos: G = (N, T, P, S) uma GLC sem ciclos (ou livre de ciclos) se
no existe em G nenhuma derivao da forma A
+
A, para todo AeN.

c) Gramtica reduzida: Uma GLC G = (N, T, P, S) uma GLC reduzida se
c.1) L(G) no vazia;
c.2) Se A ::= oeP ento A=o
c.3) G no possui smbolos inteis.

d) Gramtica de operadores: Uma GLC G = (N, T, P, S) de operadores se ela no
possui produes cujo lado direito contenha no terminais consecutivos.

e) Gramtica unicamente inversvel: Uma GLC reduzida unicamente inversvel se
ela no possui produes com lados direitos iguais.

f) Gramtica linear: Uma GLC G = (N, T, P, S) linear se todas as suas produes
forem da forma A ::= xBw | x, onde A e B pertencem a N, e x e w pertencem a T
*
.

g) Forma normal de Chomsky: Uma GLC est na forma normal de Chomsky se ela c-
livre e todas as suas produes (exceto, possivelmente, S ::= c) so da forma:
g.1) A ::= BC, com a, b e percencentes a N, ou
g.2) A ::= a, com AeN e aeT.

h) Forma normal de Greibach: Uma GLC est na forma normal de Greibach se ela c-
livre e todas as suas produes (exceto, possivelmente, S ::= c) so da forma A ::= ao
tal que aeT, oeN
*
e AeN.



9


3.5 Principais Notaes de GLC

A BNF (Backus Naur Form) uma notao utilizada na especificao formal de sintaxe
de linguagens de programao. Esta a forma de especificao de gramticas que tem
sido utilizada nesse texto. A gramtica a seguir um exemplo de gramtica descrita na
notao BNF:

1. <S> ::= a<S> | c
2. <E> ::= <E>+id | id

A BNFE (BNF Extended) equivalente BNF, mas permite uma especificao mais
compacta da sintaxe de uma linguagem de programao. Os smbolos entre chaves
abreviam os fechos das cadeias que eles representam. A mesma gramtica descrita
acima em BNF pode ser representada em BNFE da seguinte forma:

1. <S> ::= {a}
2. <E> ::= id {+id}


10


4. Autmato de Pilha

4.1 Introduo

Tipos de linguagens

Tipo 0 Linguagens Irrestritas
Tipo 1 Linguagens Sensveis ao Contexto
Tipo 2 Linguagens Livres de Contexto
Tipo 3 Linguagens Regulares

Hierarquia de Chomsky


LR LSC LLC LI


Reconhecedores decidem se uma cadeia w pertence ou no a uma dada linguagem L(G).

= e
no
sim
G L w ? ) (


Exemplo: L= {a
i
b
i
| i>0}


ab e L?, aabb e L?, aaabbb e L?, aaab e L?

Reconhecedores x Linguagens:

Linguagem Reconhecedor
Irrestrita
Sensvel ao Contexto
Mquina de Turing
Livre de contexto Autmato de Pilha
Regular Autmato finito

4.2 Conceito Intuitivo

Suponha L uma LLC sobre o alfabeto E. Verificar se uma cadeia w pertence a L.

Uso de Pinos e Discos

Cadeias com nmeros iguais de as e
bs e os as e b so consecutivos


11







Exemplo: L= {vcv
R
| v e (a,b)
*
, v
R
a cadeia reversa de v}

Assim E = {a, b, c}. Queremos saber: abaacaaba e L? , abaca e L?

Usaremos uma pilha e dois discos: preto e branco. Para cada smbolo de entrada
procederemos da seguinte forma:


- Etapa 1: Se achar a empilhe um disco preto, e se achar b, um disco branco.
- Etapa 2: Se achar c mude de atitude, e prepare-se para desempilhar discos.
- Etapa 3: Compare o smbolo de entrada com o que est no topo da pilha:
- Se for a e o topo da pilha ocupado por um disco preto desempilhe o
disco; ou
- Se for b e o topo da pilha ocupado por um disco branco, desempilhe o
disco.

Se em alguma situao nenhuma das etapas acima puder ser aplicada, ento pare: weL.


Verificar se w = abcba pertence a L? Sim

Smbolo
de entrada
Faz Pilha Resta na
entrada
a Empilha disco preto bcba
b Empilha disco branco cba
c Muda de atitude ba
b Compara e desempilha a
a Compara e desempilha




Verificar se w = cab pertence a L? No

Smbolo
de entrada
Faz Pilha Resta na
entrada
c Muda de atitude ab
a Compara e desempilha

ab

Verificar se w = aabcba pertence a L? No



12


Smbolo
de entrada
Faz Pilha Resta na
entrada
a Empilha disco preto abcba
a Empilha disco preto

bcba
b Empilha disco branco cba
c Muda de atitude ba
b Compara e desempilha a
a Compara e desempilha





4.3 Definio Formal

Um autmato de pilha no determinstico M definido como:

( ) o , , , , ,
1
F q Q M I E =
onde:
E : Alfabeto de entrada
I: Alfabeto da pilha
Q: Conjunto de estados: (q
1
, q
2
,.., q
n
}
q
1
: Estado inicial: q
1
e Q
F: Conjunto de estados finais: F_Q
o: Funo de transio: { } ( ) { } ( ) ( )
*
I I E = Q P Q
f
c c o

Entendendo a funo de transio:

Seja M um AP e suponha que: qeQ, o e E{c} e e I{c}

Dados peQ e u e I
*
, a transio (q, o, ) (p,u) significa que:
- M muda para o estado p.
- M troca por u no topo da pilha.
Casos onde aparecem o c
Casos Interpretao
o = c, (q, c, ) (p,u) A entrada no consultada
= c, (q, o, c) (p,u) A topo da pilha no consultado
o= = c, (q, c, c) (p,u) Nem a entrada, nem o topo da pilha
so consultados.
= c e u = c, (q, o, ) (p, c) Remove da pilha
= c e u = c, (q, o, c) (p, u) Empilha u
= c e u = c, (q, o, c) (p, c) No altera a pilha

Exemplo1: Criar um Autmato de Pilha M
1
para

L
1
= {vcv
R
| v e (a,b)
*
, v
R
a cadeia reversa de v}
E : {a, b, c}
I: {a, b}

Concluso: A entrada dever se aceita se, e somente se, ao final da execuo
do processamento ela foi totalmente consumida e a pilha est vazia


13


o: funo de transio:
( ) { }
( ) { }
( ) { }
( ) { }
( ) { }
Desempilha
q b b q
q a a q
inalterada permanece Pilha q c q
Empilha
b q b q
a q a q
, ) , , (
, ) , , (
, ) , , (
, ) , , (
, ) , , (
2 2
2 2
2 1
1 1
1 1
c o
c o
c c o
c o
c o
=
=
=
=
=


Q = {q
1
, q
2
}, q
1
= q
1
e F = {q
2
}

A funo de transio pode ser colocada em forma de tabela.

Estado Entrada Topo da pilha Transies
a
o
(p
1
, u
1
)
...
(p
s
, u
s
)

Para o autmato M
1
acima


Estado Entrada Topo da
pilha
Transies Descrio
q
1
a
c
(q
1
, a) Acha a e o empilha.
q
1
b
c
(q
1
, b) Acha b e o empilha.
q
1
c
c (q
2
, c) Acha c e muda de estado.
q
2
a a (q
2
, c) Acha a na entrada e na pilha e o
desempilha
q
2
b b (q
2
, c) Acha b na entrada e na pilha e o
desempilha


Forma grfica de uma transio



Exemplo2: Criar um Autmato de Pilha M
2
para



14


L
2
= {vv
R
| v e (a,b)
*
, v
R
a cadeia reversa de v}

E : {a, b}
I: {a, b}
o: funo de transio:

Estado Entrada Topo da
pilha
Transies Descrio
q
1
a
c
(q
1
, a) Acha a e o empilha.
q
1
b
c
(q
1
, b) Acha b e o empilha.
q
1

c c (q
2
, c) Muda de estado.
q
2
a a (q
2
, c) Acha a na entrada e no topo e o desempilha
q
2
b b (q
2
, c) Acha b na entrada e no topo e o
desempilha

Q = {q
1
, q
2
}, q
1
= q
1
e F = {q
2
}
4.4 Exemplos e construes de AP

Exemplo 1: L = {a
i
b
i
| i > 0}

Procedimento com um disco:

- Etapa 1: Se achar um a na entrada, ponha um disco na pilha
- Etapa 2: Se achar um b mude de atitude e passe a comparar a entrada com a
pilha, removendo um disco da pilha para cada b que achar na entrada (incluindo
o primeiro!)


M = ( {a,b}, {a}, {q
1
, q
2
}, q
1
, {q
1
, q
2
}, o)

Onde o est na tabela

Estado Entrada Topo da
pilha
Transies Descrio
q
1
a
c
(q
1
, a) Empilha a.
q
1
b a (q
2
, c) Desempilha a e muda de estado.
q
2
b a (q
2
, c) Desempilha a.

Exemplo 2: L = {w e {a, b} | o nmero de as igual ao nmero de bs}

Procedimento:

- Etapa 1: Empilhar a para cada a encontrado e b para cada b encontrado na
entrada.
- Etapa 2: Empilhar um b sobre um a tem o efeito de desempilhar o b da pilha
e vice-versa.



15


Tabela para o


Estado Entrada Topo da
pilha
Transies Descrio
q
1
a a (q
1
, aa) Acha a e o empilha.
q
1
b b (q
1
, bb) Acha b e o empilha.
q
1
a b (q
1
, c) Desempilha um b.
q
1
b a (q
1
, c) Desempilha um a.

Veja que esta tabela no est bem especificada, pois em qualquer entrada (linha) da
mesma a pilha tem que possuir um smbolo. E, inicialmente, no h smbolo na pilha.
Se apenas adicionarmos as entradas:

q
1
a
c
(q
1
, a) Empilha a.
q
1
b
c
(q
1
, b) Empilha b

o autmato ficar errado.

A sada inventar um novo smbolo | para o alfabeto da pilha. Este smbolo
acrescentado pilha ainda vazia, no incio da computao. Da em diante, o autmato
opera apenas com as e bs na pilha. Assim, ao avistar um | no topo da pilha o autmato
sabe que a pilha no contm mais nenhum a ou b. Para garantir que | s vai ser usado
uma vez, convm reservar ao estado inicial apenas a ao de marcar o fundo da pilha.
Portanto, se q
1
for o estado inicial teremos

o(q
1
, c, c) = {(q
2
, |)}

Com isto se, ao final da computao, a pilha contm apenas o marcador | ento a
palavra est em L e aceita; do contrrio a palavra rejeitada. Entretanto, pela
definio formal o autmato s pode aceitar a palavra se a pilha estiver completamente
vazia. Isto sugere que precisamos de mais uma transio para remover | do fundo da
pilha.

Assim surge um novo problema. Se a palavra est em L, ento ser totalmente
consumida deixando na pilha apenas |. Portanto, a transio que remove | ao final
desta computao, e esvazia completamente a pilha, no tem nenhuma entrada para
consultar. O problema que se permitimos ao autmato remover sem consultar a
entrada, ele pode realizar este movimento no momento errado, antes que a entrada tenha
sido consumida. Como os nossos autmatos so no determinsticos, isto no apresenta
nenhum problema conceitual.

Infelizmente o fato de ainda haver smbolos na entrada abre a possibilidade do
autmato continuar a computao depois de ter retirado o marcador do fundo. Para
evitar isto, o autmato deve, ao remover |, passar a um novo estado q
3
a partir do qual
no h transies. Assim, se o autmato decidir remover o marcador antes da entrada
ser totalmente consumida ele ser obrigado a parar, e no poder aceitar a entrada nesta
computao. Como a pilha s vai poder se esvaziar em q
3
, claro que este ser o nico
estado final deste autmato.


16


Resumindo, temos um autmato que tem {a, b} como alfabeto de entrada; {a, b, |}
como alfabeto da pilha; estados q
1
, q
2
e q
3
; estado inicial q
1
; estado final q
3
; e cuja
funo de transio definida na tabela abaixo.


Estado Entrada Topo da
pilha
Transies Descrio
q
1 c c (q
2
, |) Marca o fundo da pilha
q
2
a
| (q
2
, a|) Acha a e empilha um a
q
2
b
| (q
2
, b|) Acha b e empilha um b
q
2
a a (q
2
, aa) Acha a e empilha um a
q
2
b b (q
2
, bb) Acha b e empilha um b
q
2
b a (q
2
, c) Desempilha um a
q
2
a b (q
2
, c) Desempilha um b
q
2

c | (q
3
, c) Esvazia a pilha

4.5 Exerccios

1) Considere o autmato de pilha no determinstico M com alfabeto E = {a, b} e I =
{a}, estados q
1
e q
2
, estado inicial q
1
e final q
2
e transies dadas pela tabela:

Estrado Entrada Topo da pilha transies
q
1
a
c
(q
1
, a)

(q
2
, c)
q
1
b
c
(q
1
, a)
q
2
a a (q
2
, c)
q
2
b a (q
2
, c)
a) Descreva todas as possveis seqncias de transies de M na entrada aba.
b) Mostre que aba, aa e abb no pertencem a L(M) e que baa, bab e baaaa
pertencem a L(M).

2) Ache um autmato de pilha no determinstico cuja linguagem aceita L onde:
a) L={a
n
b
n+1
| n > 0};
b) L={a
n
b
2n
| n > 0};
c) L={a
n
b
m
c
n
| m,n >1};
d) L={a
n
b
m
a
n+m
| m,n >1};

3) Considere a linguagem dos parnteses balanceados.
a) D exemplo de uma gramtica livre de contexto que gere esta linguagem.
b) D exemplo de um autmato de pilha no determinstico que aceita esta
linguagem.



17


4.6 Gramticas Livres de Contexto e Autmatos de Pilha

Nosso objetivo nesta seo a demonstrao do seguinte resultado fundamental: Uma
linguagem livre de contexto se, e somente se, aceita por algum autmato de pilha
no determinstico. Como uma linguagem livre de contexto se for gerada por uma
gramtica livre de contexto, o que precisamos fazer estabelecer um elo entre
gramticas livres de contexto e autmatos de pilha. Neste caso, iremos elaborar uma
receita que, dada uma gramtica livre de contexto G = (N, T, P, S), construiremos um
autmato de pilha no determinstico M que aceita L(G). No desenvolveremos a
recproca, isto , dado M um autmato de pilha no determinstico, construir G a partir
de M.

Seja G uma gramtica livre de contexto. Nosso objetivo consiste em construir um
autmato de pilha cujas computaes simulem as derivaes mais esquerda em G .
claro que a pilha tem que desempenhar um papel fundamental nesta simulao. O que
de fato acontece que o papel dos estados secundrio, e a simulao se d na pilha.

Seja G = (N, T, P, S) uma gramtica livre de contexto e ( ) o , , , , ,
1
F q Q M I E = o
autmato de pilha a ser construdo a partir de G . Como M deve aceitar L(G), isto
GERA(G)=ACEITA(M), claro que seu alfabeto de entrada E tem que ser igual a T.
Continuando, temos:

E = T (alfabeto de entrada igual conjunto de terminais de G)
q
1
= i (estado inicial i)
I = TN (alfabeto de pilha a unio de terminasi e no terminais de G)

Cada derivao de G corresponde a uma transio de M. Entretanto, como a derivao
de palavras de L(G) feita a partir do smbolo inicial S, o autmato deve comear
pondo este smbolo no fundo da pilha. Observe que o autmato no pode consumir
entrada ao marcar o fundo da pilha, j que precisamos da entrada para gui-lo na busca
da derivao correta. Nem adianta consultar a pilha, j que ainda est totalmente vazia.
Entretanto, uma transio que no consulta a entrada nem a pilha pode ser executada em
qualquer momento da computao. Por isso foramos o autmato a mudar de estado
depois desta transio, impedindo assim que volte a ser executada. Temos ento que

o(i, c, c) = {(f, S)},

onde f, diferente de i, um estado do autmato.

Da em diante toda a ao vai se processar na pilha, e podemos simular a derivao sem
nenhuma mudana de estado adicional. Portanto, f ser o estado final de M . Assim,
regra X ::= o de G fazemos corresponder a transio

(1) (f, c, X) e (f, o)

de M . Contudo, a construo do autmato ainda no est completa. O problema que
M s pode aplicar uma transio como (1) se a varivel X estiver no topo da pilha.
Infelizmente isto nem sempre acontece, como ilustra o exemplo a seguir.


18


Exemplo
Suponhamos G1 = (N, T, P, S) com
T = {a, b, c}
N = { S }
S = S
P = { S ::= Sc | aSb | c}.

Logo, de acordo com as discusses acima, ( ) o , , , , , 1
1
F q Q M I E = , deve ter
E = {a, b, c}
I = {a, b, c, S}
Q = {i, f}
q
1
= i
F = {f}
E o est representado na tabela abaixo

Estado Entrada Topo da pilha Transio
i
c c
(f, S)
f
c
S (f, Sc)
(f, aSb)
(f, c)

A palavra abc
2
tem derivao mais esquerda

S Sc Sc
2
aSbc
2
abc
2
em G1
Agora, deve-se fazer uma computao de M1 que copie na pilha esta derivao abc
2
. A
computao deve comear marcando o fundo da pilha com S e deve prosseguir, a partir
da, executando, uma a uma, as transies de M1 que correspondem s regras aplicadas
na derivao acima. Isto nos d

(2) (i, abc
2
, c) (f, abc
2
, S) (f, abc
2
, Sc) (f, abc
2
, Sc
2
) (f, abc
2
, aSbc
2
).



At aqui tudo bem, mas a transio seguinte deveria substituir S por c. S que para isto
ser possvel a varivel S tem que estar no topo da pilha, o que no acontece neste caso.
Observe, contudo, que o a que apareceu na pilha acima do S na ltima configurao de
(2) corresponde ao primeiro smbolo da palavra de entrada. Alm disso, como se trata
de uma derivao mais esquerda, este smbolo no ser mais alterado. Conclumos
que, como o primeiro smbolo da palavra j foi corretamente derivado, podemos
esquec-lo e partir para o smbolo seguinte. Para implementar isto no autmato basta
apagar da pilha os terminais que precedem a varivel mais esquerda da pilha e que j
foram corretamente construdos. Isto significa acrescentar tabela acima transies que
permitam apagar terminais que apaream simultaneamente na entrada e na pilha:

Estado Entrada Topo da pilha Transio
f a a (f, c)
f b b (f, c)
f c c (f, c)

Levando isto em conta a computao acima continua, a partir da ltima configurao de
(2) da seguinte maneira


19


(3) (f, abc
2
, aSbc
2
) (f, bc
2
, Sbc
2
) (f, bc
2
, bc
2
) (f, c
2
, c
2
) (f, c, c) (f, c, c).

Observe que a passagem da segunda para a terceira configurao em (3) corresponde
regra S ::= c. Todas as outras etapas so aplicadas das transies da segunda tabela.
4.7 Construo de AP Atravs de GLC

Podemos agora descrever de maneira sistemtica a receita usada para construir um
autmato de pilha no determinstico M cuja linguagem aceita L(G). Se a gramtica
livre de contexto G tem por elementos (N, T, P, S), ento o autmato ficar
completamente determinado pelos seguintes os elementos

- o alfabeto de entrada T;
- o alfabeto da pilha TN;
- o conjunto de estados {i, f};
- o estado inicial i;
- o conjunto de estados finais {f};
- a funo de transio

{ } { } ( ) { } ( ) { } ( )
*
, , : N T f i N T T f i c c o

que definida por

( ) ( )
( ) ( ) ( )
( ) ( )

e =
e e =
=
=
T a f a a f
a
T N N X f X f
X
S f i
onde , , ,
: fazer G de terminal todo Para
e onde , , ,
: fazer G de :: regra toda Para
, , ,
*
c o
o o c o
o
c c o


Este autmato executa dois tipos diferentes de transio a partir do estado final f.
- Transies de substituies: substituem uma varivel X no topo da pilha por o
(pertence a TN
*
) quando X ::= o uma regra de G.
- Transies de remoo: removem terminais que aparecem casados na pilha e na
entrada.

Exemplo
Considere a gramtica G2 cujas regras so

E ::= E + T | T
T ::= T * F | F
E ::= (E) | id

Assim, ( ) o , , , , , 2
1
F q Q M I E = , deve ter
E = {id, +, *, (, )}
I = { id, +, *, (, ), E, T, F}
Q = {i, f}


20


q
1
= i
F = {f}

E a funo de transio definida pela tabela

Estado Entrada Topo da pilha Transio
i
c c
(f, E)
f
c
E (f, E+T)
(f, T)
f
c
T (f, T*F)
(f, F)
f
c
F (f,(E))
(f, id)
f ( ( (f, c)
f ) ) (f, c)
f + + (f, c)
f * * (f, c)
f id id (f, c)

Uma computao para a cadeia id + id * id

(i, id+id*id, c) (f, id+id*id, E) (f, id+id*id, E+T) (f, id+id*id, T+T)
(f, id+id*id, F+T) (f, id+id*id, id+T) (f, +id*id, +T) (f, id*id, T) (f, id*id, T*F)
(f, id*id, F*F) (f, id*id, id*F) (f, *id, *F) (f, id, F) (f, id, id) (f, c, c).

5. Mquina de Turing
A mquina de Turing, proposta por Alan Turing em 1936, universalmente conhecida e
aceita como formalizao de algoritmo. Trata-se de um mecanismo simples que
formaliza a idia de uma pessoa que realiza clculos. Lembra, em muito, os
computadores atuais, embora tenha sido proposta anos antes do primeiro computador
digital. Apesar de sua simplicidade, o modelo Mquina de Turing possui, no mnimo, o
mesmo poder computacional de qualquer computador geral.

A mquina de Turing pode ser vista como uma mquina constituda de trs partes, como
segue:
a) Fita. Usada simultaneamente como dispositivo de entrada, de sada e de memria de
trabalho.
b) Unidade de controle. Reflete o estado corrente da mquina. Possui uma unidade de
leitura e gravao (cabea da fita), a qual acessa uma clula da fita de cada vez e
movimenta-se para a esquerda ou para a direita.
c) Programa ou funo de transio. Funo que define o estado da mquina e
comanda as leituras, as gravaes e o sentido de movimento da cabea.

A fita finita esquerda e infinita (to grande quanto necessrio) direita, sendo
dividida em clulas, cada uma armazenando um smbolo. Os smbolos podem pertencer
ao alfabeto de entrada, ao alfabeto auxiliar ou ainda ser branco ou marcador de incio
de fita. Inicialmente, a palavra a ser processada (ou seja, a informao de entrada para
a mquina) ocupa as clulas mais esquerda aps o marcador de incio de fita, ficando


21


as demais com branco, como ilustrado na figura abaixo, onde | e representam
branco e marcador de incio de fita, respectivamente.



a b b c a | | ...
entrada
fita
marcador de
incio de fita
branco
controle
cabea da fita
unidade de
controle



A unidade de controle possui um nmero finito e predefinido de estados. A cabea da
fita l o smbolo de uma clula de cada vez e grava um novo smbolo. Aps a
leitura/gravao (a gravao realizada na mesma clula de leitura), a cabea move
uma clula para a direita ou para a esquerda. O smbolo gravado e o sentido do
movimento so definidos pelo programa.

O programa uma funo que, dependendo do estado corrente da mquina e do smbolo
lido, determina o smbolo a ser gravado, o sentido do movimento da cabea e o novo
estado.

5.1 Modelo Formal

Uma mquina de Turing uma 8-upla:


M = (E, Q, o, q
0
, F, V, |, )

Onde:

E: alfabeto de smbolos de entrada;
Q: conjunto de estados possveis da mquina, o qual finito;
o: programa ou funo de transio:

{ } ( ) { } ( ) { } D E V Q V Q , , , : E E | | o

q
0
: estado inicial da mquina, tal que q
0
eQ;
F: conjunto de estados finais, tal que FcQ;
V: alfabeto auxiliar;
|: smbolo especial branco
: smbolo especial marcador de incio ou smbolo de incio da fita.

O smbolo de incio da fita ocorre exatamente uma vez e sempre na clula mais
esquerda da fita, auxiliando na identificao de que a cabea da fita se encontra na
clula mais esquerda da fita. A funo programa:



22


Considera Para determinar
- estado corrente - novo estado
- smbolo lido da fita - smbolo a ser gravado
- sentido de movimento da cabea, onde esquerda
e direita so representados por E e D,
respectivamente.

Assim, tem-se que:

o(estadoCorrente, smboloLido) = (novoEstado, smboloGravado,sentidoDeMovimento)

ou seja, suponha que p, q e Q, a
u
, a
v
e(EV{|,}) e me{E, D}):

o(p, a
u
) = (q, a
v
, m)

A funo programa pode ser interpretada em um diagrama de transio como
mostrado na figura abaixo.



p q
(a
u
, a
v
, m)
estado corrente
smbolo lido
smbolo gravado
sentido do movimento
estado novo


Neste caso, os estados iniciais e finais so representados como:



q
0
q
f


A funo programa pode ser representada na forma de tabela, veja a seguir. A tabela
ilustra o caso para o(p, a
u
) = (q, a
v
, m):

o ... a
u
... a
v
... |
p
q
...
(q, a
v
, m)

O processamento de uma mquina de Turing M = (E, Q, o, q
0
, F, V, |, ) para uma
palavra de entrada w consiste na sucessiva aplicao da funo programa a partir do
estado inicial q
0
e da cabea posicionada na clula mais esquerda da fita, at ocorrer
uma condio de parada. O processamento de M para a entrada w pode parar ou ficar


23


em loop infinito. A parada pode ser de duas maneiras: aceitando ou rejeitando a entrada
w. As condies de parada so as seguintes:

a) Estado final. A mquina assume um estado final: a mquina pra e a
palavra de entrada aceita.
b) Funo indefinida. A funo programa indefinida para o argumento
(smbolo lido e estado corrente): a mquina pra e a palavra de entrada
rejeitada.
c) Movimento invlido. O argumento corrente da funo programa define
um movimento esquerda e a cabea da fita j se encontra na clula mais
esquerda: a mquina pra e a palavra de entrada rejeitada.

Exemplo: Mquina de Turing M1 para reconhecer a linguagem

L = {a
n
b
n
| n > 0}

A mquina de Turing M1 = ({a,b}, {q
0
, q
1
, q
2
, q
3
, q
4
}, o, q
0
, {q
4
}, {A, B}, |,)
ilustrada abaixo:

TABELA

o a b

A B
|
q
0
(q
0
, , D) (q
1
, A, D) (q
3
, B, D) (q
4
, |, D)
q
1
(q
1
, a, D) (q
2
, B, E) (q
1
, B, D)
q
2
(q
2
, a, E) (q
2
, A, D) (q
2
, B, E)
q
3
(q
3
, B, D) (q
4
, |, E)
q
4


DIAGRAMA DE TRANSIES



(b, B, E)
(a, a, E)
(B, B, E)
(a, a, D)
(B, B, D)
(|, |, E)
(|, |, D)
(B, B, D)
(B, B, D)
(,, D)
(A, A, D)
(a, A, D)
q
0
q
1
q
2

q
3

q
4



O algoritmo apresentado reconhece o primeiro smbolo a, o qual marcado como A, e
movimenta a cabea da fita para a direita, procurando o b correspondente, o qual
marcado como B. Este ciclo repetido sucessivamente at identificar para cada a o seu
correspondente b. Adicionalmente, o algoritmo garante que qualquer outra palavra que


24


no esteja na forma nab
n
rejeitada. Note-se que o smbolo de incio de fita no tem
influncia na souo proposta.

A seguir apresentada uma computao da mquina de Turing M1 para a entrada
w=aabb.

COMPUTAO para a cadeia aabb.



q
0
a a b b | ... a a b b | ... A a b b | ...
q
0
q
0
q
1
A a b b | ... A a b b | ... A a B b | ...
q
2
q
2
q
0
A a B b | ... A A B b | ... A A B b | ...
q
1
q
1
q
2
A A B B | ... A A B B | ... A A B B | ...
q
2
q
0
q
3
A A B B | ... A A B B | ... A A B B | ...
q
3
q
4

Vous aimerez peut-être aussi