Вы находитесь на странице: 1из 90

Pushdown Automata

PDAs

1
Pushdown Automaton -- PDA
Input String

Stack

States

2
Initial Stack Symbol

Stack Stack

stack
$ z top
head

bottom special symbol


Appears at time 0
3
The States

Input Pop Push


symbol symbol symbol

q1 a, b  c q2

4
a, b  c
q1 q2

input
 a   a 

stack
b top c
h Replace h
e e
$ $
5
a,   c
q1 q2

input
 a   a 

stack c
b top b
h Push h
e e
$ $
6
a, b  
q1 q2

input
 a   a 

stack
b top
h Pop h
e e
$ $
7
a,   
q1 q2

input
 a   a 

stack
b top b
h No Change h
e e
$ $
8
Empty Stack

a, $  
q1 q2
input
 a   a 

stack empty
$ top Pop

The automaton HALTS


No possible transition after q2
9
A Possible Transition

a, $  b
q1 q2
input
 a   a 

stack
$ top Pop b

10
Non-Determinism
PDAs are non-deterministic
Allowed non-deterministic transitions

q2
a, b  c
, b  c
q1 q1 q2

a, b  c
  transition
q3
11
Example PDA

PDA M
L( M )  {a b : n  0}
n n

a,   a b, a  

q0 ,    q b, a   q  , $  $ q
1 2 3
12
L( M )  {a b : n  0}
n n

Basic Idea:

1. Push the a’s 2. Match the b’s on input


on the stack with a’s on stack

3. Match
a,   a b, a   found

q0 ,    q b, a   q  , $  $ q
1 2 3
13
Execution Example: Time 0
Input
a a a b b b
$
Stack

current a,   a b, a  
state

q0  ,    q b, a   q  , $  $ q
1 2 3
14
Time 1
Input
a a a b b b
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
15
Time 2
Input
a a a b b b a
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
16
Time 3
Input a
a a a b b b a
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
17
Time 4
a
Input
a
a a a b b b a
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
18
Time 5
a
Input
a
a a a b b b a
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
19
Time 6
Input a
a a a b b b a
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
20
Time 7
Input
a a a b b b a
$
Stack

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
21
Time 8
Input
a a a b b b
$
Stack

a,   a b, a  
accept
q0  ,    q1 b, a   q2  , $  $ q3
22
A string is accepted if there is
a computation such that:

All the input is consumed


AND
The last state is an accepting state

At the end of the computation,


we do not care about the stack contents
(the stack can be empty at the last state)
23
The input string aaabbb
is accepted by the PDA:

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
24
In general,

L  {a b : n  0}
n n

is the language accepted by the PDA:

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
25
Rejection Example: Time 0
Input
a a b
$
Stack

current a,   a b, a  
state

q0  ,    q b, a   q  , $  $ q
1 2 3
26
Rejection Example: Time 1
Input
a a b
$
Stack

current a,   a b, a  
state

q0  ,    q1 b, a   q2  , $  $ q3
27
Rejection Example: Time 2
Input
a a b a
$
Stack

current a,   a b, a  
state

q0  ,    q1 b, a   q2  , $  $ q3
28
Rejection Example: Time 3
Input a
a a b a
$
Stack

current a,   a b, a  
state

q0  ,    q1 b, a   q2  , $  $ q3
29
Rejection Example: Time 4
Input a
a a b a
$
Stack

current a,   a b, a  
state

q0  ,    q1 b, a   q2  , $  $ q3
30
Rejection Example: Time 4
Input a
a a b a
$
Stack
reject
current a,   a b, a  
state

q0  ,    q1 b, a   q2  , $  $ q3
31
The input string aab
is rejected by the PDA:

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
32
A string is rejected if there is
no computation such that:

All the input is consumed


AND
The last state is an accept state

At the end of the computation,


we do not care about the stack contents
33
Another PDA example


L(M )  {vv : v {a, b} }
R

PDA M

a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
34

Basic Idea: L(M )  {vv : v {a, b} }
R

1. Push v 3. Match v R on input


2. Guess
on stack with v on stack
middle
of input
a,   a a, a   4. Match
b,   b b, b   found

q0 ,    q1 , $  $ q2
35
Execution Example: Time 0
Input
a b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
36
Time 1
Input
a b b a a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
37
Time 2
Input
b
a b b a a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
38
Time 3
Input
b
a b b a
Guess the middle a
of string $
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
39
Time 4
Input
b
a b b a a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
40
Time 5
Input
a b b a a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    , $  $ q2
q1
41
Time 6
Input
a b b a
$
Stack
a,   a a, a  
b,   b b, b  
accept
q0 ,    q1 , $  $ q2
42
Rejection Example: Time 0
Input
a b b b
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
43
Time 1
Input
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
44
Time 2
Input
b
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
45
Time 3
Input
b
a b b b
Guess the middle a
of string $
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
46
Time 4
Input
b
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
47
Time 5
Input There is no possible transition.

a b b b Input is not a
consumed
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    , $  $ q2
q1
48
Another computation on same string:
Input Time 0
a b b b
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
49
Time 1
Input
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
50
Time 2
Input
b
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
51
Time 3
Input b
b
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
52
Time 4 b
Input b
b
a b b b a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
53
Time 5 b
Input b
No final state b
a b b b is reached a
$
Stack
a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
54
There is no computation
that accepts string abbb

abbb  L(M )

a,   a a, a  
b,   b b, b  

q0 ,    q1 , $  $ q2
55
Another PDA example

L( M )  {w {a, b} :
*

in every prefix v, na (v)  nb (v)  1}


a,   a
b, a  
b, $  
PDA M
q0
56
Execution Example: Time 0
Input
a a b

a,   a $
b, a   Stack
b, $  

q0
57
Time 1
Input
a a b a
a,   a $
b, a   Stack
b, $  

q0
58
Time 2
Input
a
a a b a
a,   a $
b, a   Stack
b, $  

q0
59
Time 3
Input
a a b a
a,   a $
b, a   Stack
b, $  

accept
q0
60
Rejection example: Time 0
Input
a b b b
$
Stack

q0
61
Time 1
Input
a b b b a
a,   a $
b, a   Stack
b, $  

q0
62
Time 2
Input
a b b b

a,   a $
b, a   Stack
b, $  

q0
63
Time 3
Input
a b b b

a,   a
b, a   Stack
b, $  

q0
64
Time 4
Input
a b b b

a,   a
b, a   Stack
b, $  

Halt and Reject


q0
65
Pushing Strings

Input Pop Push


symbol symbol string

q1 a, b  w q2

66
Example:
a, b  cdf
q1 q2

input
a a

c pushed
stack d
top string
b f
h Push h
e e
$ $
67
Another PDA example
L( M )  {w {a, b} : na ( w)  nb ( w)}
*

PDA M

a, $  0$ b, $  1$
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
68
Execution Example: Time 0
Input
a b b b a a

$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  
current
state , $  $
q1 q2
69
Time 1
Input
a b b b a a
0
$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
70
Time 3
Input
a b b b a a
0
$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
71
Time 4
Input
a b b b a a
1
$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
72
Time 5
Input
a b b b a a 1
1
$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
73
Time 6
Input
a b b b a a 1
1
$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
74
Time 7
Input
a b b b a a
1
$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  

q1
, $  $ q2
75
Time 8
Input
a b b b a a

$
a, $  0$ b, $  1$
Stack
a, 0  00 b, 1 11
a, 1   b, 0  
accept
q1
, $  $ q2
76
Formalities for PDAs

77
q1 a, b  w q2

Transition function:

 (q1, a, b)  {( q2 , w)}

78
a, b  w
q2

q1

a, b  w q3

Transition function:

 (q1, a, b)  {( q2 , w), (q3 , w)}


79
Formal Definition
Pushdown Automaton (PDA)

M  (Q, Σ, Γ, δ, q0 , z , F ) Final
States states

Input Stack
alphabet Transition Initial start
Stack
function state symbol
alphabet
80
Instantaneous Description

( q, u , s )

Current Current
Remaining
state stack
input
contents

81
Example: Instantaneous Description
(q1, bbb, aaa$)
a
Time 4: Input a
a a a b b b a
$
Stack
a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
82
Example: Instantaneous Description
(q2 , bb, aa$)
a
Time 5: Input a
a a a b b b a
$
Stack
a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
83
We write:

(q1, bbb, aaa$)  (q2 , bb, aa$)


Time 4 Time 5

84
A computation:

(q0 , aaabbb,$)  (q1, aaabbb,$) 


(q1, aabbb, a$)  (q1, abbb, aa$)  (q1, bbb, aaa$) 
(q2 , bb, aa$)  (q2 , b, a$)  (q2 ,  ,$)  (q3 ,  ,$)

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
85
(q0 , aaabbb,$)  (q1, aaabbb,$) 
(q1, aabbb, a$)  (q1, abbb, aa$)  (q1, bbb, aaa$) 
(q2 , bb, aa$)  (q2 , b, a$)  (q2 ,  ,$)  (q3 ,  ,$)

For convenience we write:


(q0 , aaabbb,$)  (q3 ,  ,$)

86
Formal Definition

Language L(M ) of PDA M :


L( M )  {w : (q0 , w, s )  (q f ,  , s ' )}

Initial state Final state

87
Example: 
(q0 , aaabbb,$)  (q3 ,  ,$)

aaabbb L(M )

PDA M :

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
88

(q0 , a b ,$)  (q3 ,  ,$)
n n

a b  L(M )
n n

PDA M :

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
89
Therefore: L( M )  {a b : n  0}
n n

PDA M :

a,   a b, a  

q0  ,    q1 b, a   q2  , $  $ q3
90

Вам также может понравиться