Upload
internet
View
109
Download
3
Embed Size (px)
Citation preview
1
Automato de Pilha
2
AgendaAutômato de Pilha Pilhas e recursão Definição Formal
Para a próxima aula Ler Cap 2.2
17
De CFG’s para Máquinas de Pilha
CFG’s definem procedimentos recursivos:
boolean derives(strings x, y)
1. if (x==y) return true
2. for(all uy) if derives(x,u) return true
3. return false
EX: S # | aSa | bSb
18
De CFG’s para Máquinas de Pilha
Por princípios gerais, qualquer computação recursiva pode ser executada usando-se uma pilha. Isso pode ser feito em uma versão simplificada de máquina com pilha de registro de ativação, chamada Autômato de Pilha (“Pushdown Automaton”– PDA)
Q: Qual é a linguagem gerada por S # | aSa | bSb ?
19
De CFG’s para Máquinas de Pilha
R: Palíndromos em {a,b,#}* contendo exatamente um símbolo #.
Q: Usando uma pilha, como podemos reconhecer tais strings?
20
De CFG’s para Máquinas de Pilha
A: Usamos um processo com três fases:1. modo Push : Antes de ler “#”, emplihe
qualquer símbolo lido.2. Ao ler “#” troque de modo de operação.3. modo Pop : Leia os símbolos restantes
garantindo que cada novo símbolo lido é idêntico ao símbolo desempilhado.
Aceite se for capaz de concluir com a pilha vazia. Caso contrário, rejeite; e rejeite se não for possível desempilhar em algum caso.
21
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read ==a ou b ?
Push it
ACCEPT
(2)read == # ?
(ignore stack)
read == top ?Pop
else: CRASH!
empty stack?
22
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
Input:aaab#baa
23
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
aInput:aaab#baa
24
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
a aInput:aaab#baa
25
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
a a aInput:aaab#baa
26
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
b a a aInput:aaab#baa
27
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
b a a aInput:aaab#baa
28
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
a a aInput:aaab#baa
29
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
a aInput:aaab#baa
30
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
aInput:aaab#baa
REJECT (nonempty stack)
31
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
a aInput:aaab#baaa
32
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
aInput:aaab#baaa
33
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
Input:aaab#baaa
Pause input
34
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
Input:aaab#baaa
ACCEPT
35
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
a aInput:aaab#baaaa
36
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
aInput:aaab#baaaa
37
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
Input:aaab#baaaa
Pause input
38
De CFG’s para Máquinas de Pilha
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?(ignore stack)
read == peek ?
PopElse: CRASH!
empty stack?
Input:aaab#baaaa
CRASH
39
PDA’s à la Sipser
Para facilitar a análise, máquinas de pilha teóricas têm um conjunto restrito de operações. Cada livro-author tem sua própria versão. PDAs descritos em Sipser são assim: Push/Pop agrupados em única operação: substituir o símbolo no topo da pilha Nenehum texte intrínsico de pilha vazia Epsilon é usado para aumentar a funcionalidade: máquinas não deterministas.
40
Versão Sipser’s
Torna-se:
(1)PUSH
(3)POP
read a or b ?Push it
ACCEPT
(2)read # ?
(ignore stack)
read == peek ?Pop
Else: CRASH!
empty stack?
$
aabb
#
$
aabb
41
Versão Sipser’s
Significado da convenção do rótulo:Se está no estado p e o próximo símbolo é x
e o topo da pilha é y,então vá para q e substitua y por z na pilha.
x = : ignore a entrada, não leia
y = : ignore o topo da pilha e empilhe z
z = : desempilhe y
p qx, y z
42
Versão Sipser’s
$
aabb
#
$
aabb
push $ para
detectar pilha vazia
43
Versão Sipser’s
$
aabb
#
$
aabb
Input:aaab#baaa
44
Versão Sipser’s
$
aabb
#
$
aabb
$Input:aaab#baaa
45
Versão Sipser’s
$
aabb
#
$
aabb
a $Input:aaab#baaa
46
Versão Sipser’s
$
aabb
#
$
aabb
a a $Input:aaab#baaa
47
Versão Sipser’s
$
aabb
#
$
aabb
a a a $Input:aaab#baaa
48
Versão Sipser’s
$
aabb
#
$
aabb
b a a a $Input:aaab#baaa
49
Versão Sipser’s
$
aabb
#
$
aabb
b a a a $Input:aaab#baaa
50
Versão Sipser’s
$
aabb
#
$
aabb
a a a $Input:aaab#baaa
51
Versão Sipser’s
$
aabb
#
$
aabb
a a $Input:aaab#baaa
52
Versão Sipser’s
$
aabb
#
$
aabb
a $Input:aaab#baaa
53
Versão Sipser’s
$
aabb
#
$
aabb
$Input:aaab#baaa
54
Versão Sipser’s
$
aabb
#
$
aabb
Input:aaab#baaa
ACCEPT!
55
PDA Definição Formal
DEF: Um autômato de pilha (PDA) é uma 6-tupla M = (Q, , , , q0, F ) onde Q, e q0, são como para um FA. é o alpfabeto da pilha. é uma função:
Portanto, dado um estado p, uma símbolo lido x e um símbolo de pilha y, p,x,yretorna todo (q,z) tal que q é um estado alvo e z é um símbolo que deve substituir y.
)(Σ:δ εεε QPQ
56
PDA Definição Formal
Q: O que é p,x,y em cada caso?1. 0,a,b2. 0,,3. 1,a,4. 3,,
0 1 2$
3
aabb
b$
$
aabb
a
57
PDA Definição Formal
R: 1. 0,a,b2. 0,,= {(1,$)}3. 1,a,= {(0,),(1,a)}4. 3,,=
0 1 2$
3
aabb
b$
$
aabb
a
58
PDA: Exercício
(Sipser 2.6.a) Desenhe um PDA que aceite a linguagem
L = { x {a,b}* | na(x) = 2nb(x) }
NOTA: O string vazio está em L.
61
PDA Exemplo.Sem bolhas
$
a$ $aAA
$
Aaa
b$ $ba a
a
a
bAA
$$