1.下推自动机(PushDown Autumata)定义
不同于有限自动机,PDA能够“记住”输入串中的一部分字符,具备存储功能。
相对应的模块称为栈或下推存储器,只允许读写顶部的符号。

Elements of the Theory of Computation
接下来给出形式化的定义:
定义 3.3.1 下推自动机是一个六元组M=(K,Σ,Γ,Δ,s,F),其中\
K是有穷的状态集合
Σ是所有输入符号的字母表
Γ是所有栈符号的字母表
s∈K是初始状态
F⊆K是终结状体的集合
Δ是转移关系,它是(K×(Σ∪{e})×Γ∗)×(K×Γ∗)的有穷子集
对于M的一个转移((p,a,β),(q,γ))∈Δ,可以解释为:
当M处于状态p、栈顶为β时,它可以从输入带读入a,在栈顶用γ替换β,然后进入状态q。
推入:把一个符号加到栈顶上
如:((p,u,e),(q,a))推入a
托出:把一个符号从栈顶移去
如:((p,u,a),(q,e))托出a
下面定义PDA的格局为K×Σ∗×Γ∗的成员
第一个分量为机器的状态
第二个分量是尚未读过的输入部分
第三个分量是存储器中的内容,自顶向下
2.一些例子
例 3.3.1 让我们来设计一个PDA接受语言L={wcwR:w∈{a,b}∗}
令M=(K,Σ,Γ,Δ,s,F),其中K={s,f},Σ={a,b,c},Γ={a,b},F={f},而Δ包含下述五个转移:
(1)((s,a,e),(s,a))
(2)((s,b,e),(s,b))
(3)((s,c,e),(f,e))
(4)((f,a,a),(f,e))
(5)((f,b,b),(f,e))
其中转移(1)和转移(2)的作用是将w部分的字符记录在栈中,
转移(3)的作用是对应识别c,并且状态转移到f中,
转移(4)(5)的作用是检验wR,检验当前读取字符与栈顶元素是否相同,并且从栈顶托出。
例 3.3.3 接着设计一个PDA接受语言L={w∈{a,b}∗:a,b个数相同}
令M=(K,Σ,Γ,Δ,s,F),其中K={s,q,f},Σ={a,b},Γ={a,b,c},F={f},而Δ包含下述转移:
(1)((s,e,e),(q,c))
(2)((q,a,c),(q,ac))
(3)((q,a,a),(q,aa))
(4)((q,a,b),(q,e))
(5)((q,b,c),(q,bc))
(6)((q,b,b),(q,bb))
(7)((q,b,a),(q,e))
(8)((q,e,c),(f,e))
其中转移(1)的作用是在起始状态下往栈底填入c以标识栈底位置,转移(2)(3)(5)(6)均为读取相应字符并且填入栈顶。转移(4)(7)则是消去当前与栈顶元素不同的元素。转移(8)是到达栈底进入终止状态。