下推自动机

背景知识

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

图8.(2)

补充题

Question:
PDA $\to$ CFG 绘制此PDA状态转移图,按照定理7-4所述的文法构造方法进行转换。并对所得到的文法进行化简。

Answer:

根据 $(4)$ 式,可以判断这是一个空栈接受的 PDA。

设 PDA $M = (Q, \Sigma, \Gamma, \delta, q_0, Z, \Phi)$

公式化构造 CFG。

首先


下推自动机
http://example.com/2025/05/28/下推自动机/
作者
ddccffq
发布于
2025年5月28日
许可协议