0%

Automata Week 4 笔记

Equivalence of PDAs and CFGs

  • 使用 PDA 可以更为容易的发现 regular language 的性质
  • 使用 PDA 来描述 language 更为简单,例如之前提到的合法括号序列

CFG to PDA

从L = L(G) 开始,由此来构建 N(P) = L,使得接受时为空栈
P有:

  • 一个状态 q
  • 输入的 symbols 是 G 的 terminal
  • 栈中的 symbols 是 G 的所有 symbols 和 variables
  • P 和 G 的开始状态相同

转换规则如下:

  1. 对于 A => a, 有(q, $\epsilon$, A) $\mapsto$ (q, a), 即将 a 压入栈中
  2. 对于 symbol a 有(q, a, a) $\mapsto$ (q, $\epsilon$), 即将栈顶的 a 弹出

PDA to CFG

构建 G 使得 G 与 P 等价,G 的 variable 都是形如[pXq], 指弹出栈顶 symbol X,会使得状态 p 转换为状态 q,这同时也说明了栈不会到 X 以下,如图

  1. 如果 δ(p, a, X) 包含 (q, ε),则 [pXq] -> a,,因为只有读取到 a 才能从 p 到 q 且弹出 X
  2. 如果 δ(p, a, X) 包含 (r, Y),则 [pXq] -> a[rYq],现在的问题已经从 p 到 q 转化为从 r 到 q,且弹出栈顶元素 Y

根据上边两条,我们可以把 δ(p, a, X) 包含 (r, Y1,…Yk),转化为 [pXq] -> a[rY1s1][s1Y2s2]…[sk-2Yk-1sk-1][sk-1Ykq]

参考

Converting a CFG to a PDA
CSCI3130: Formal Languages and Automata Theory