上下文无关文法
下推自动机
从上下文无关文法构造下推自动机
设 CFG G=(V,T,P,S),构造 PDA E=({q},T,V∪T,δ,q,S),
其中
- 对每一个 A∈V,δ(q,ϵ,A)={(q,β)∣A→β∈P}
- 对每一个 a∈T,δ(q,a,a)={(q,ϵ)}
则 N(E)=L(G)
即证 w∈L(G)⇔w∈N(E)
⇒:
先证若 Alm⇒∗w 则 (q,w,A)⊢∗(q,ϵ,ϵ)
- 基础:推导步数为 1,则 A→w 必为产生式,(q,w,A)⊢(q,w,w)⊢∗(q,ϵ,ϵ)
- 归纳:(q,w,A)⊢(q,w1w2…wn,X1X2…Xn)⊢∗(q,w2…wn,X2…Xn)⊢∗⋯⊢∗(q,ϵ,ϵ)
因此 w∈L(G)⇒w∈N(E)
⇐:
先证若 (q,w,A)⊢∗(q,ϵ,ϵ),则 Alm⇒∗w
- 基础:步数为 1,则 w=ϵ,A→ϵ 为产生式,则 Alm⇒w
- 归纳:设第一步使用产生式 A→X1X2…Xm,将 w 分为 w1w2…wm,(q,wi,Xi)⊢∗(q,ϵ,ϵ) ,无论 Xi 为终结符还是非终结符都有 Xilm⇒∗wi,因此 Alm⇒X1X2…Xmlm⇒∗w1w2…wm=w
因此 w∈N(E)⇒w∈L(G)
从下推自动机构造等价的上下文无关文法
设 PDA E=(Q,Σ,Γ,δ,q0,Z0),L=N(E),构造 CFG G=(V,Σ,P,S),其中
V={S}∪{[pXq]∣p,q∈Q∧X∈Γ}
产生式 P 定义如下:
对任意 p∈Q,P 包含 S→[q0Z0p]
若 (q,X1X2…Xk)∈δ(p,a,X),则 P 包含 [pXpk]→a[qX1p1][p1X2p2]…[pk−1Xkpk]
变元 [pXq] 可以理解为当前状态在 p,栈顶为 X,通过输入,可以将栈顶恰好消去并到达 q
可以证明,此时 N(E)=L(G)
即证存在 p∈Q,(q0,w,Z0)⊢∗(p,ϵ,ϵ)⇔S⇒∗w
⇐:由 G 的构造过程,存在 p 满足 [q0Z0p]⇒∗w ,从而 (q0,w,Z0)⊢∗(p,ϵ,ϵ)
⇒:先证明对 p,q∈Q,(q,w,X)⊢∗(p,ϵ,ϵ)⇔[qXp]⇒∗w
- 基础:步数为 1,则 w 为 ϵ 或单个符号,(p,ϵ)∈δ(q,w,X) ,而 [qXp]→w 是一个产生式。
- 归纳:设第一步推导为 (q,w,X)⊢(p0,X1X2…Xk),其中 w=ax,a 为 ϵ 或单个符号,(p0,X1X2…Xk)∈δ(q,a,X),存在 p1,p2,…,pk−1,满足 (pi−1,xi,Xi)⊢∗(pi,ϵ,ϵ),由构造有 [qXp]→a[p0X1p1]…[pk−1Xkp] 为产生式,因此 [qXp]⇒∗w
