下推自动机
下推自动机(Pushdown Automaton, PDA)是一种带有栈存储器组件的有限自动机;
它比有限自动机更强大,因为栈提供了无限存储能力;
构造PDA可识别一类CFL,CFG和PDA对CFL的表达上是等价的;二者可以互相转化;
形式定义
一个PDA可由六元组定义
其中:
- 有限状态集: 全体状态构成的集合
- 输入字母表: 所有可能的输入字母;
- 栈字母表: 所有可能进栈的输入字母;
- 转移函数
- 初始状态: 状态机的初始状态;
- 终态集: 为状态机最终接受的状态;
工作原理
- PDA假设从初始状态开始,开始符为, 栈底符,输入指针指向输入串的第一个符号;
- 任意时刻,假设下推栈的栈顶符号,当前的输入符号为,PDA可以:
- 读取输入符号
- 查看栈顶符号
- 改变状态
- 修改栈(压入或弹出符号)
转移函数
称自动机接受单词流 若存在状态序列和字符串序列,满足
接受一个单词流意味着序列中每个状态转移都是合法的;
转移函数的形式为:
对于一个自动机内部的合法的状态转移(transition),可被描述为根据当前状态读取(read)输入后,决定弹出(pop)栈的元素,并选择进栈(push-in)的元素,进入下一个状态的过程,简记为a,b->t
;
- 当前状态
- 输入符号
a
(可以是) - 栈顶符号
b
- 新状态
- 要压入栈的符号串
c
PDA有两种接受方式:
- 终态接受:当输入串读完且PDA处于终态时接受
- 空栈接受:当输入串读完且栈为空时接受
确定性PDA
如果PDA的转移函数满足:
- 对于每个状态、输入符号和栈顶符号,最多有一个转移
- 对于每个状态和栈顶符号,如果有转移,则不能有其他转移
则称该PDA为确定性的(DPDA)。
示例
识别语言的PDA:
- 状态集:
- 输入字母表:
- 栈字母表:
- 初始状态:
- 初始栈符号:
- 终态集:
转移函数: