PDA 和上下文无关语法

如果语法 G 是上下文无关的,我们可以构建一个等效的非确定性 PDA,它接受由上下文无关语法 G 生成的语言。可以为语法 G 构建解析器。

此外,如果 P 是下推自动机,则可以构建等效的上下文无关语法 G,其中

L(G) = L(P)

在接下来的两个主题中,我们将讨论如何从 PDA 转换为 CFG 以及反之亦然。

用于查找与给定 CFG 对应的 PDA 的算法

输入 − CFG,G = (V, T, P, S)

输出 − 等效 PDA,P = (Q, ∑, S, δ, q0, I, F)

步骤 1 − 将 CFG 的产生式转换为 GNF。

步骤 2 − PDA 将只有一个状态 {q}。

步骤 3 − CFG 的起始符号将是 PDA 中的起始符号。

步骤 4 − CFG 的所有非终端将是 PDA 的堆栈符号,CFG 的所有终端将是 PDA 的输入符号。

步骤 5 −对于形式为 A → aX 的每个产生式(其中 a 是终端,而 A, X 是终端和非终端的组合),进行转换 δ (q, a, A)

问题

根据以下 CFG 构造 PDA。

G = ({S, X}, {a, b}, P, S)

其中产生式为 −

S → XS | ε , A → aXb | Ab | ab

解决方案

让等效 PDA,

P = ({q}, {a, b}, {a, b, X, S}, δ, q, S)

其中 δ −

δ(q, ε , S) = {(q, XS), (q, ε )>

δ(q, ε , X) = {(q, aXb), (q, Xb), (q, ab)>

δ(q, a, a) = {(q, ε )>

δ(q, 1, 1) = {(q, ε )>

用于查找与给定 PDA 对应的 CFG 的算法

输入 − CFG,G = (V, T, P, S)

输出 − 等效 PDA,P = (Q, ∑, S, δ, q0, I, F),这样语法 G 的非终端将是 {Xwx | w,x ∈ Q},起始状态将是 Aq0,F

步骤 1 − 对于每个 w、x、y、z ∈ Q、m ∈ S 和 a、b ∈ ∑,如果 δ (w, a, ε) 包含 (y, m) 且 (z, b, m) 包含 (x, ε),则添加生成规则 Xwx → a Xyzb 在语法 G 中。

步骤 2 − 对于每个 w、x、y、z ∈ Q,在语法 G 中添加生成规则 Xwx → XwyXyx

步骤 3 − 对于 w ∈ Q,在语法 G 中添加生成规则 Xww → ε。