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 → ε。