下推自动机
背景知识
PDA形式化描述
- $Q$:状态集合
- $\Sigma$:字母表
- $\Gamma$:栈符号表
- $\delta$:状态转移函数
- $q_0$:开始状态
- $Z_0$:栈底符号
- $F$:终态集合
其中状态转移函数为
即时描述
- 当前状态是 $q$
- 未处理的输入字符串是 $w$
- 栈中符号串是 $\gamma$
接受语言
有两种方式描述:
构造PDA
graph LR
A["Get Grammar"] --> B["CFG"]
B["CFG"] --> C["GNF"]
C["GNF"] --"finial states"--> D["PDA"]
C["GNF"] --"empty stack"--> D["PDA"]
PDA转换
终态换为空栈
已知终态接受的 PDA $M_1$,公式化构造空战接受的 PDA $M_2$,具体过程如下:
We construct PDA $M_2$ to simulates PDA $M_1’s$ function. And first step, we need to get in PDA $M_1$.
PDA $M_2$ simulates each none $\epsilon$ step of PDA $M_1$.
PDA $M_2$ completely simulates PDA $M_1$ transition function in none finial states.
In $M_1’s$ finial states, not only should $M_2$ simulates $M_1’s$ $\epsilon$ moves, but also simulates accepting moves.
$M_1’s$ stacks having been empty and in finial states, $M_2$ begins to cleat stack.
Empty Stack to Finial State
已知空栈接受的 PDA $M_1$,要构造一个与之等价终态接受的 PDA $M_2$,核心思路在于只要 $M_2$ 发现 $M_1$ 在运行过程中将栈弹空,就可以进入终止状态。
公式化构造
设 PDA $M_1$ 为
公式化构造 PDA $M_2$
其中状态转移函数 $\delta_2$ 为
CFG to Empty Stack
先考虑 $L$ 为不含 $\epsilon$ 的 CFL。$G$ 是该语言对应的 GNF 文法,考虑用 PDA 模拟 GNF 的最左派生。
公式化构造
设 GNF $G = (V, T, P, S)$。
取 PDA $M = (\{q\}, T, V, \delta, q, S, \Phi)$
$\forall A \in V, \quad a \in T, \quad \gamma \in V^{\ast}$ 我们有 $\delta(q, a, A) = \{(q, \gamma) \mid A \to a\gamma \in P\}$
补充 $\{\epsilon\}$
在 $M$ 的基础上,构造 $M_1$,具体是
对于状态转移函数 $\delta_1$,定义如下:
Empty Stack to CFG
公式化构造
设 PDA $M = (Q, \Sigma, \Gamma, \delta, q_0, Z_0, \Phi)$,取 CFG $G = (V, \Sigma, P, S)$,其中:
课后习题解答
8.(2) 构造空栈接受的 PDA
.png)
补充题
Question:
PDA $\to$ CFG 绘制此PDA状态转移图,按照定理7-4所述的文法构造方法进行转换。并对所得到的文法进行化简。
Answer:
根据 $(4)$ 式,可以判断这是一个空栈接受的 PDA。
设 PDA $M = (Q, \Sigma, \Gamma, \delta, q_0, Z, \Phi)$
公式化构造 CFG。
首先