Sei sulla pagina 1di 52

Capt lo 7

Captulo
Autmatos de pilha
7.1. Autmatos de pilha no-determinsticos (NPDA)
7.2. Autmatos de pilha e linguagens livres de contexto
7.3. Autmatos de pilha determinsticos e linguagens
livres de contexto determinsticas.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

301

cadeia de entrada

a a b b

q0
q2

q1

CONTROLO

carcter

de
d entrada
d
estado actual
smbolo
b l no topo
t
da
d pilha
ilh

a
b
c
0
1
#

P
i
l
h
a

estado seguinte
movida
escreve na pilha
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

302

7.1. Autmatos de pilha no-determinsticos


Definio 7.1. NPDA
Aceitador no determinstico de pilha
(NPDA- Nondeterministic PushDown Accepter)
M = (Q , , , , q0 , z0 , F )
Q : conjunto finito de estados internos da unidade de controlo
: o alfabeto de entrada
: (gama) conjunto finito de smbolos chamado alfabeto da pilha
: Q ( {}) subconjuntos finitos de Qx * a
funo de transio,
q0 Q : estado inicial da unidade de controlo
z0 : smbolo de inicializao da pilha
F Q : conjunto de estados finais (aceitadores).
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

303

Notas
uma transio pode ter como carcter de entrada , sendo

neste caso uma transio-


a definio de transio exige um smbolo no topo da pilha;
se a pilha estiver vazia, as movidas sero inibidas
embora o NPDA possa ter vrias escolhas possveis para as
suas movidas, elas devem ter um nmero finito de
p
possibilidades.
de uma movida resulta a escrita de uma cadeia
no topo da pilha: abc escrita

a
b
c

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

304

Operaes sobre a pilha


push

push introduzir um carcter adicional


pop - apagar um carcter
substituio de um carcter por outro
inicializao com qqualquer
q
smbolo de ;
normalmente com o carcter especial #

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

305

transio
smbolo de entrada

novo estado

estado actual

(q0 , a , 0) = { (q1 , 10) }


smbolo actual no topo
p
da pilha

push
push 1
1 no topo da
pilha

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

306

Transies

Operaes sobre a a pilha

Significado

1. (q0, a, #) = { (q1, 0#) }

push

2 (q
2.
( 0, b,
b 1) = { ((q1, ) }

pop

acrescenta 0
pilha com #
apaga 1

3. (q1, b, 0) = { (q1, 1) }

substituio

substitui 0 por 1

4. (q0, b, 1) = { (q1, 1) }

nenhuma

no altera

5. (q1, , 0) = { (q2, ) }

pop

apaga 0

6. (q1, , 0) = { (q2, 10) }

push

sem consumir entrada

acrescenta 1
sem consumir entrada

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

307

Exemplo 1

(q1, a, b) = {(q2, cd), (q3, )}


Quando o autmato est no estado q1, se aparecer
Q
p
um a na cadeia
de entrada, ento acontecer uma de duas coisas :
- a unidade de controlo passa ao estado q2
- substitui b pela cadeia cd no topo da pilha (fica com mais
um carcter)
ou
- a unidade de controlo ppassa ao estado q3
- na pilha substitui b por , isto , apaga b do topo da pilha
(que fica assim com menos um carcter).
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

308

Exemplo 2

NPDA

Q = {q0, q1, q2, q3,}

= {a, b}
= {#,
{# 0,
0 1}

(q0 , a , # ) = {(q1 , 1#),


1#) (q3 , )}
(q0 , , # ) = {(q3 ,)}
(q1 , a , 1 ) = {(q1 , 11)}

z0= #

(q1 , b , 1 ) = {(q2 , )}

F= {q3}

(q2 , b , 1 ) = {(q2 , )}
(q
( 2 , , # ) = {(q
{( 3 , )}

no uma funo total.


Se o autmato cair num estado para o qual no est definido, nunca mais
de l sai, estando por isso morto.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

309

H duas transies fundamentais


11 : (q1, a,
a 1 ) = {(q1, 11)}
por cada a que aparece acrescenta um 1 pilha.
2 : (q2, b, 1 ) = {(q2, )}
por cada b que aparece nestas circunstncias, apaga um 1
d pilha,
da
ilh at
t que fique
fi
apenas o smbolo
b l inicial.
i i i l
a passagem do estado q1 ao estado q2 acontece quando
aparece o primeiro b.

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

310

Que faz ento o autmato ?


Q d atinge
Quando
i
q3 ?

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

311

O estado q3 alcanado quando o NPDA l uma cadeia de

L = {an bn : n 0} {a}.
Pode-se
P
d
afirmar,
fi
por analogia
l i com o que acontece
t
nos DFA,
DFA
que o NPDA aceita esta linguagem.

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

312

Descrio instantnea de um NPDA


Completamente definida pelo tripleto

(q, w, u))
(q
q : estado actual do autmato.
w : parte ainda no lida da cadeia de entrada.
u : contedo da pilha
pilha, sendo o topo o smbolo mais
esquerda (conveno).

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

313

Uma movida | de uma descrio de base para outra

(q1, aw, bx) |


| (q2, w, yx)
s ppossvel se existir a transio

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

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

314

movidas com um nmero arbitrrio de passos

||M
indica que a movida se refere ao autmato M.

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

315

Linguagem aceite por um NPDA , L (M)


Definio 7.2. Aceitao por um estado final
M = (Q , , , , q0 , z0 , F )

L (M) = { w * : (q0 , w , z0)

( p , , u), p F, u * }

o conjunto de todas as cadeias capazes de colocarem o


autmato num estado
d fi
finall (aceitador)
( i d ) no fim
fi da
d leitura
l i
da
d
cadeia. O contedo da pilha, u, irrelevante para esta definio.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

316

D fi i 7.3.
Definio
7 3 Aceitao
A it por pilha
ilh vazia
i
M = (Q , , , , q0 , z0 , F )

L (M) = { w * : (q0 , w , z0)

( q , ,), para algum q Q}

o conjunto de todas as cadeias capazes de colocarem o


autmato com a pilha vazia (depois de lidas completamente) e
num estado qualquer
qualquer.

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

317

A dduas ddefinies
As
fi i so
equivalentes:
i l
Se existe um NPDA que aceita uma linguagem
L por um estado final, ento existe um NPDA
que aceita a mesma L pela pilha vazia
vazia.
... e vice-versa
Ver Hopcroft e Coll. (p. 230-236)
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

318

Exemplo 3
Qual o NPDA que aceita

L = {w {a, b}* : na(w) = nb(w)}


necessrio contar o nmero de as e bs, usando a pilha. A ordem dos a e b
no interessa neste caso.
algoritmo:
define
define-se
se um smbolo para contar o nmero de aas,
s, por exemplo o 0,
sempre que aparece um a acrescenta-se um 0 pilha (push),
sempre que aparece um b, apaga-se um zero da pilha (pop),
quando
d no
houver
h
mais
i zeros, restando
t d apenas o smbolo
b l de
d inicializao
i i i li
da pilha, e aparecer um b, acrescenta-se um 1 pilha (push),
q
quando o topo
p da ppilha for um 1 e aparecer
p
um a,, apaga-se
p g
esse 1 (p
(pop).
p)
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

319

Teremos assim as seguintes


g
transies:

(q0, , #) = {(qf, #)}


(q0, a, #) = {(q0, 0#)}
(q0, b,, #)) = {(q0, 1#)}
)}
(q0, a, 0) = {(q0, 00)}
(q0, b, 0) = {(q0, )}
(q0, a, 1) = {(q0, )}
(q0, b, 1) = {(q0, 11)}
M = ({q0, qf}, {a,b}, {#, 0, 1}, , q0, #, {qf})
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

320

O no-determinismo no autmato
A transio com na entrada introduz no-determinismo:

(q0, , #) = {(qf, #)}


(q
( 0, a, #) = {(q
{( 0, 0#)}
Quando aparece um a entrada,
entrada pode acontecer uma de
duas coisas:
o autmato
t t transita
t
it para o estado
t d qf sem consumir
i
o a da entrada (transio - )
o autmato consome o carcter de entrada,
escreve 0 na pilha e mantm-se em q0.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

321

Grafo do PDA
A etiqueta de cada aresta da forma (notao de Linz e
do JFLAP):
Pilha

a, 1 ; 01
q0

q1

0
1

Estando o autmato no estado q0, se l a e se a pilha estiver


com 1 no topo,
p , o autmato
passa ao estado q1,
faz o pop da pilha (apaga 1)
e depois o push e 01 ( esceve o 1 seguido do zero,
topo esquerda, 0)
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

322

Grafo do PDA
A etiqueta de cada aresta da forma (notao de Taylor
e do Deus Ex Mquina):
Pilha

a, 1 ; 01
q0

q1

1
0

Estando o autmato no estado q0, se l a e se a pilha estiver


com 1 no topo,
topo o autmato
passa ao estado q1,
faz o pop da pilha (apaga 1)
e depois o push
push de 0 e 1 (escreve 0 seguido de 1,
topo direita, 1)
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

323

Grafo do PDA
b, # ; 1#

a, # ; 0#

a,, # ; # 0
2

b, # ; # 1

( a verde notao JFLAP)

3
a, 0 ; 0 0

, # ; #

q0

qf

b, 0;

7
6

b, 1 ; 1 1

(Taylor, p.538)
( a azul notao DEM)

a, 1 ;
1. (q0, , #) = {(qf, #)}

5. (q0, b, 0) = {(q0, )}

2. (q0, a, #) = {(q0, 0#)}

6 (q0, a,
6.
a 1) = {(q0, )}

3. (q0, b, #) = {(q0, 1#)}

7. (q0, b, 1) = {(q0, 11)}

4 (q0, a,
4.
a 0) = {(q0, 00)}
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

324

aabbabba
produz as seguintes movidas:

(q0, aabbabba, #) | (q0, abbabba, 0#) | (q0, bbabba, 00#)


| (q0, babba,
|
babba 0#)|
0#)| (q0, abba,
abba #) |
| (q0, bba,
bba 0#)
| (q0, ba, #) | (q0, a, 1#) | (q0, , #) | (qf, #)
e portanto aceite.
Este exemplo vem implementado no Deus Ex Mquina , directoria de exemplos de PDA,
Example10 3 1 Ver tambm em Taylor,
Example10.3.1.
Taylor pp 540.
540
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

325

Exemplo 4
Desenhar o grafo do NPDA da linguagem (Taylor, 541).

L = {{a n b m : 0 n < m , m 2 }
b,, 0 ;

a,, 0 ; 0 0

a, #;
# #0

b, # ; #
q0

b, 0 ;

q1

b,, # ; #
b #;#
b,

qf

Este problema est implementado no Deus Ex Mquina


ficheiro Example 10.3.2
10 3 2 na directoria Pushdown
Pushdown Automata
Automata.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

326

7 2 Autmatos
7.2.
A
d
de pilha
ilh e li
linguagens
livres de contexto
Para toda a linguagem livre de contexto existe um NPDA que a
aceita. mais fcil de demonstrar para gramticas na forma
normalizada da Greibach , em que todas as produes so da
forma
A ax,
ax a T,
T x V*.
V*

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

327

7.2.1. NPDAs para gramticas livres de contexto

o NPDA implementa a derivao pela extrema-esquerda de


qualquer cadeia.

as variveis da parte direita da forma sentencial colocam-se na


pilha.

a parte esquerda da forma sentencial, composta pelos smbolos


terminais,, idntica entrada lida.

comea-se colocando o smbolo inicial na pilha.

para simular A a x (forma normal de Greibach)


- coloca-se A no topo da pilha
- introduz-se
introduz se a como smbolo de entrada
- a varivel na pilha removida e substituda por x

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

328

A
#

x
#

A ax

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

329

E
Exemplo
l 5
Projectar
ojec um
u NPDA
N
que aceite
ce e a linguagem
gu ge gerada
ge d pela
pe gramtica
g
c
S aSbb | a
transformar a ggramtica na forma de Greibach
S aSA | a
A bB
Bb
O autmato correspondente ter 3 estados {q0, q1, q2} sendo q2=qf.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

330

1 colocar o smbolo inicial S na pilha:

(q0, , #) = { (q1, S#)}.


S
#

2 simular a produo S aSA,


remove S da pilha e colocando l SA lendo a entrada
simular a produo S a,
substituindo
b tit i d na pilha
ilh S por

(q1, a, S) = { (q1, SA), (q1, )}

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

S
A
#

#
331

3 simular a produo A bB

b b

(q1, b, A) = { (q1, B)}


4 simular a produo B b

A
#

(q1, b, B) = { (q1, )}

B
#
#

5 completar a derivao quando aparece # no topo da pilha

(q1, , #) = { (qf, #)}.


ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

332

S aSA | a
A bB,
B b.

S aSbb | a

a, S ;

q0

, # ; S#

(Notao JFLAP)

a, S ; SA

q1

b, A ; B

, # ; #

qf

b, B ;
2(n-1)
1) : n 1 }
L (G) = { a n b 2(n
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

333

Exemplo 6
Seja a CFG em forma normal de Greibach

S aA | aB

1.1-1.2.

A aAB | aBB

2.1.-2.2

Bb

3.1

L (G) = { a n b n : n 1 }

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

334

d i pela
derivao
l extrema
t
esquerda
d de
d aaaabbbb
bbbb

S aA
aaAB
aaaABB
aaaaBBBB
aaaabBBB
aaaabbBB
aaaabbbB
aaaabbbb

( 1.1))
(de
(de 2.1)
(de 2.1)
(d 2.2)
(de
2 2)
(de 3.1)
(de 3.1)
3 1)
(de 3.1)
((de 3.1))

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

335

Produo

Movida

Grafo

Carregar S

(q0, , #) = { (q1, S#)}

q0

S aA

(q1, a, S) = { (q1, A)}

q1

S aB

A aAB

(q1, a, S) = { (q1, B)}


(q1, a, A) = { (q1, AB)}

q1

, # ; S#

q1

a, S ; A

a, S ; B

q1
a, A ; AB

A aBB

(q1, a, A) = { (q1, BB)}

Bb

(q1, b, B) = { (q1, )}

aceitar a cadeia

(q1, , #) = { (qf, #)}

Notao
JFAP

Notao
JFLAP

q1
a, A ; BB
q1

q1

b, B ;

, # ; # q
f

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

336

S aA | aB
A aAB | aBB
Bb
a,, S ; A

q0

, # ; S#

(Notao JFLAP)

a, S ; B

q1

a, B ;

, # ; #

qf

a, A ; BB
a, A ; AB

3 estados para
qualquer gramtica
de Greibach

L (G)
( ) = { a nb n : n 1 }
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

337

Teorema 7.1
Para qu
qualquer
que linguagem
gu ge L livre
v e de contexto,
co e o, existe
e s e um
u NPDA
N
M
que a aceita, i.e, existe um M tal que
L = L (M)
se L uma CFL sem , ento existe uma CFG na forma
normal de Greibach para L.
contri-se uma NPDA para simular as derivaes pela
extrema-esquerda dessa gramtica.
A forma de Greibach apenas para facilitar o desenvolvimento.
O teorema aplica
aplica-se
se a toda a CFG.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

338

Qual o nmero mnimo de estados de um NPDA, para uma


linguagem definida por uma gramtica de Greibach ?
- no exemplo obtiveram-se trs ;
- o estado q0 pode ser eliminado (fica no-determinstico);
- passa a ser aceite
a, S ; A

, # ; S#

a, S ; B

q1

, # ; #

qf

a, A ; BB

a, B ;
a, A ; AB

Este
E
t resultado
lt d
geral: para
qualquer CFL
com ,existe um
NPDA com dois
estados sem ,
estados,
trs estados.

(Notao JFLAP)

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC
339

Se qquisermos evitar a introduo


do , ppode-se utilizar um
smbolo especial na pilha, $, para inicializar a gramtica:

(q0, ,, #)) = { (q0,,S$)}


)}
E agora comea-se com a gramtica de Greibach.
a, S ; A

, # ; S$

a, S ; B
Finalmente:

q1

, $ ; #

qf

para qualquer CFL


sem existe um
NPDA com dois
estados,

a, A ; BB

a, B ;
a A ; AB
a,

(N t JFLAP)
(Notao
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC
340

7 2 2 Gramticas livres de contexto para NPDAs


7.2.2.
NPDA s
O inverso
ve so do teorema
eo e anterior
e o tambm
b verdadeiro:
ve d de o: dado
d do um
u
NPDA, existe para ele uma CFG.
Para o provar baste reverter o processo construtivo
construtivo, de modo
que a gramtica simule as movidas do NPDA.
Teorema 7.2.
Se uma linguagem L aceite por algum NPDA M, ento L
uma linguagem
g g livre de contexto
Dem: Linz ,189
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

341

77.3.
3 Autmatos
A
d
de pilha
ilh d
determinsticos
i i
e
linguagens livres de contexto determinsticas

Um autmato de pilha determinstico DPDA


Deterministic PushDown Accepter nunca tem escolha
possvel nas suas movidas.

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

342

Definio 7.4. DPDA


Um PDA M= (Q, , ,, q0, z0, F ) diz-se determinstico se for um
PDA que obedece s seguintes restries
para todo o q Q, a {},

b :

1. Dado um smbolo de entrada e um smbolo no topo da pilha, s


possvel uma movida, no mximo.
(q,
( a, b) contm
no mximo
i
um elemento
l
(uma
(
s movida
id possvel)
l)

2. Q
Quanto ppossvel uma transio ppara alguma
g
configurao,
g , no
existe nenhuma alternativa que consuma caracteres de
entrada para essa mesma configurao.
se (q, , b) no vazia, ento (q, c, b) deve ser vazia para todo o c

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

343

Diferenas entre DFA e DPDA

DFA

DPDA

no admite transies

admite transies

uma funo total

no necessariamente
uma funo total

h equivalncia entre os
determinsticos e os no
determinsticos

no h equivalncia entre
os determinsticos e os no
determinsticos

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

344

Semelhanas entre DFA e DPDA

RE r = a*b

DFA

q0

a
q1

qf
b

a, # ; #

b ,# ;#
a, # ; #

b, # ; #

DPDA

q0

qf

q1
b, #;#
a, # ; #

( pilha
(a
ilh no
usada)
d )
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

345

D fi i 7.5.
Definio
7 5 Linguagem
Li
CFL determinstica
d
i i

Uma linguagem L diz


diz-se
se livre de contexto determinstica
(DCFL) se e s se existir um autmato de pilha
determinstico DPDA M que a aceite ,

L = L(M)

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

346

Exemplo
CFL :

L = { an bn : n 1 }

DPDA M = ({q0, q1, q2 },


} {a,
{a b},
b} {#,1},
{# 1} , q0, #,
# {qf})

(q0, a, # ) = {(q1, 1#)},


(q1, a, 1 ) = {(q1, 11)},
(q
( 1, b,
b 1 ) = {(q
{( 2, )},
)}
(q2, b, 1 ) = {(q2, )},
(q2, , # ) = {(qf, )}

(inicia a contagem dos as)


(conta os as )
(detecta o primeiro b)
(conta os bs)
( aceita se nn aass = nn bbs).
s).

aceita L. Logo
g L CFL determinstica.
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

347

L = { a n b n : n 1 }
b ,1 ;

a, 1 ; 11

q0

a, # ; 1#

q1

b, 1 ;

q2

, # ;

qf

(notao JFLAP)

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

348

L = { a n b n : n 0 }
b ,1 ;

a, 1 ; 11

q0

a, # ; 1#

q1

b, 1 ;

q2

, # ;

qf

(notao
JFLAP))
ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

349

L = { a n b n : n 0 }
b ,1 ;

a, 1 ; 11

qf

a, # ; 1#

q1

b 1;
b,

q2

, # ;

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

350

7.4. Gramticas para linguagens livres de


contexto determinsticas
pode-se fazer o seu parsing facilmente (gramticas-s,
mas no s)
gramticas LL (Left scan, Leftmost derivations)
gramticas LR (Left scan, Rightmost derivations)
em Compiladores (3 ano)
ver a implementao
i l
t no JFLAP

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

351

Bibliografia
An Introduction to Formal Languages and Automata, Peter Linz, 3rd
Ed., Jones and Bartelett Computer Science, 2001
M d l off Computation
Models
C
i andd Formal
F
l Languages,
L
R.
R Gregory
G
Taylor,
T l
Oxford University Press, 1998.
Introduction to Automata Theory,
Theory Languages and Computation,
Computation 2nd
Ed., John Hopcroft, Rajeev Motwani, Jeffrey Ullman,
Addison Wesley, 2001.
Elements for the Theory of Computation, Harry Lewis and Christos
Papadimitriou, 2nd Ed., Prentice Hall, 1998.
Introduction th the Theory of Computation, Michael Sipser, PWS
Publishing Co, 1997.

ADC/TC/Cap.7/2009-10/LEI/DEIFCTUC

352

Potrebbero piacerti anche