上下文无关语言&非上下文无关语言

423 阅读2分钟

1.封闭性质

定理 3.5.1 上下文无关语言在连接Kleene星号下是封闭的。

证明: 均可以通过已有的上下文无关文法构建出一个对应的新文法来证明。
假设两个上下文无关文法G1=(V1,Σ1,R1,S1)G_1 = (V_1,\Sigma_1,R_1,S_1)G2=(V2,Σ2,R2,S2)G_2 = (V_2,\Sigma_2,R_2,S_2),并做一个假设,它们的非终结符不相交,即V1Σ1    V2Σ2=V_1 - \Sigma_1 \; \cap \; V_2 - \Sigma_2 = \varnothing

: 构造下述文法,新增一个起始符SS

G={V1V2{S},Σ1Σ2,R,S}G = \{V_1 \cup V_2 \cup \{S\},\Sigma_1 \cup \Sigma_2 , R ,S\}

其中R=R1R2{SS1,SS2}R = R_1 \cup R_2 \cup \{S \rightarrow S_1,S \rightarrow S_2\}

连接: 构造如下

G={V1V2{S},Σ1Σ2,R,S}G = \{V_1 \cup V_2 \cup \{S\},\Sigma_1 \cup \Sigma_2 , R ,S\}

与并不同的是R=R1R2{SS1S2}R = R_1 \cup R_2 \cup \{S \rightarrow S_1S_2\}

Kleen星号: 构造L(G1)L(G_1)^*对应的文法

G={V1{S},Σ1,R1{Se,SSS1},S} G = \{V_1 \cup \{S\},\Sigma_1 , R_1 \cup \{S \rightarrow e,S \rightarrow SS_1\} ,S\}

注意,与正则语言不同的是,上下文无关语言类在交和补下并不封闭!!!



定理 3.5.2 一个上下文无关语言与一个正则语言的交是一个上下文无关语言

可以用一台下推自动机PDA以及一台确定型有穷自动机DFA构造一台PDA来证明
假设PDA为M1=(K1,Σ,Γ1,Δ1,s1,F1)M_1 = (K_1,\Sigma,\Gamma_1,\Delta_1,s_1,F_1),而NFA为M2=(K2,Σ,δ,s2,F2)M_2 = (K_2,\Sigma,\delta,s_2,F_2) 联合形成的PDA为M=(K,Σ,Γ,Δ,s,F)M = (K,\Sigma,\Gamma,\Delta,s,F),其中

K=K1×K2Γ=Γ1s=(s1,s2)F=F1×F2\begin{aligned} K &= K_1 \times K_2 \\ \Gamma &= \Gamma_1 \\ s &= (s_1,s_2) \\ F &= F_1 \times F_2 \end{aligned}

而对于状态转移的规定如下,对于M1M_1中的每一个转移((q1,a,β),(p1,γ))δ1((q_1,a,\beta),(p_1,\gamma))\in \delta_1M2M_2中的每一个状态q2K2q_2 \in K_2创建一个转移为(((q1,q2),a,β),((p1,δ(q2,a)),γ))(((q_1,q_2),a,\beta),((p_1,\delta(q_2,a)),\gamma))加入到Δ\Delta中去。

采用笛卡尔积坐标的方式同时保留两对信息。

2.泵定理

上下文无关文法GG扇出是其规则右边的最大符号数,记作ϕ(G)\phi(G)

引理 3.5.1 GG的任意一颗高度为hh的语法分析树的结果的长度不超过ϕ(G)h\phi(G)^h

可以通过归纳法来证明。

定理 3.5.3G=(V,Σ,R,S)G = (V,\Sigma,R,S)是一个上下文无关文法。那么,L(G)L(G)中任一长度大于ϕ(G)VΣ\phi(G)^{V-\Sigma}的字符串ww可以写成w=uvxyzw= uvxyz使得vvyy不是空串,并且对每一个n0n\ge 0uvnxynzL(G)uv^nxy^nz \in L(G)


来看一个例子

例 3.5.2 L={anbncn:n0}L = \{ a^nb^nc^n:n\ge 0 \}不是上下文无关的。

可以令n>13ϕ(G)VΣn > \frac{1}{3}\phi(G)^{|V-\Sigma|},于是字符串长度满足要求。
w=anbncnw = a^nb^nc^n可以表达成w=uvxyzw = uvxyz且vy不为空串,分如下两种情况讨论:

  • 假设vy中a、b、c三个符号都出现,则v,y中必有一个含有至少两种符号,那么uv2xy2zuv^2xy^2z中字符的排列顺序就不满足语言的要求了,因为会有不同字符交替出现的子串。
  • 假设vy中只出现了三种符号中的一种或者两种,那么uv2xy2zuv^2xy^2z中的a、b、c三种符号的个数又不相同,同样产生矛盾。


定理 3.5.4 上下文无关语言在下不是封闭的。