PDA 和上下文无关语法


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

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

L(G) = L(P)

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

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

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

输出- 等效 PDA,P = (Q, Σ, S, δ, q 0 , 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

解决方案

让等效的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 的算法

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

输出- 等效 PDA,P = (Q, Σ, S, δ, q 0 , I, F) 使得语法 G 的非终结符为 {X wx | w,x ∈ Q} 且起始状态将为 A q0,F

步骤 1 - 对于每个 w、x、y、z ∈ Q、m ∈ S 和 a、b ∈ Σ,如果 δ (w, a, ε) 包含 (y, m) 且 (z, b, m) 包含 ( x, ε),在文法 G 中添加产生式规则 X wx → a X yz b。

步骤 2 - 对于每个 w, x, y, z ∈ Q,在语法 G 中添加产生式规则 X wx → X wy X yx 。

步骤 3 - 对于 w ∈ Q,在语法 G 中添加产生式规则 X ww → ε。