本系列文章
- 有穷自动机
- 正则表达式
- 上下文无关文法和下推自动机
- 图灵机
上下文无关文法 (Context-Free Grammars):CFG是一个四元组,如: G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P),其中
派生:由产生式生成字符串的过程。
最左派生:每次选取派生式的最左的变元派生替换。
最右派生:每次选取派生式的最右变元派生替换。
例如: L = { a 2 n b m ∣ n ≥ 0 , m ≥ 0 } L=\{a^{2n}b^m | n \ge 0, m \ge 0 \} L={a2nbm∣n≥0,m≥0} 的产生式为: S → A B , A → ε ∣ a a A , B → ε ∣ B b S\rightarrow AB,\, A\rightarrow \varepsilon | aaA,\, B\rightarrow \varepsilon | Bb S→AB,A→ε∣aaA,B→ε∣Bb
对于字符串 w = a a b b w=aabb w=aabb 来说,派生式如下:
S ⇒ A B ⇒ a a A B ⇒ a a A B b ⇒ a a B b ⇒ a a B b b ⇒ a a b b S\Rightarrow AB \Rightarrow aaAB \Rightarrow aaABb \Rightarrow aaBb \Rightarrow aaBbb \Rightarrow aabb S⇒AB⇒aaAB⇒aaABb⇒aaBb⇒aaBbb⇒aabb
最左派生: S ⇒ A B ⇒ a a A B ⇒ a a B ⇒ a a B b ⇒ a a B b b ⇒ a a b b S\Rightarrow AB\Rightarrow aaAB\Rightarrow aaB\Rightarrow aaBb\Rightarrow aaBbb \Rightarrow aabb S⇒AB⇒aaAB⇒aaB⇒aaBb⇒aaBbb⇒aabb
最右派生: S ⇒ A B ⇒ A B b ⇒ A B b b ⇒ A b b ⇒ a a A b b ⇒ a a b b S\Rightarrow AB\Rightarrow ABb\Rightarrow ABbb\Rightarrow Abb\Rightarrow aaAbb\Rightarrow aabb S⇒AB⇒ABb⇒ABbb⇒Abb⇒aaAbb⇒aabb
上下文无关语言 (CFL): G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P) 是一个CFG,则 L ( G ) = { w ∣ w ∈ T ∗ a n d S ⟹ ∗ w } L(G)=\{w\;|\;w\in T^*\; and\; S \stackrel{*}{\Longrightarrow} w\} L(G)={w∣w∈T∗andS⟹∗w}
语法分析树: G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P) 是一个CFG,一个G的语法分析树如下:
例: L = { w ∣ w ∈ { 0 , 1 } ∗ a n d w = w R } L=\{ w\; |\; w\in \{0,1\}^*\; and\; w = w^R \} L={w∣w∈{0,1}∗andw=wR} 产生式为 S → ε ∣ 0 ∣ 1 ∣ 0 S 0 ∣ 1 S 1 S \rightarrow \varepsilon\, |\, 0\, |\, 1\, |\, 0S0\, |\, 1S1 S→ε∣0∣1∣0S0∣1S1 两个语法分析树如下:
对于一个CFG: G = ( { E , I } , { a , b , ( , ) , + , ∗ } , E , P ) G=(\{E,I\}, \{a, b, (, ), +, *\}, E, P) G=({E,I},{a,b,(,),+,∗},E,P),产生式为 E → I ∣ E + E ∣ E ∗ E ∣ ( E ) , I → a ∣ b E\rightarrow I\; |\; E+E |\;E*E\;|\;(E), I\rightarrow a\;|\;b E→I∣E+E∣E∗E∣(E),I→a∣b
对于字符串 w = a + a ∗ a w=a+a*a w=a+a∗a 的两种最左派生如下:
E ⇒ E ∗ E ⇒ E + E ∗ E ⇒ I + E ∗ E ⇒ a + E ∗ E ⇒ a + a ∗ a E ⇒ E + E ⇒ I + E ⇒ a + E ⇒ a + E ∗ E ⇒ a + a ∗ a E\Rightarrow E*E\Rightarrow E+E*E\Rightarrow I+E*E\Rightarrow a+E*E\Rightarrow a+a*a\\ E\Rightarrow E+E\Rightarrow I+E\Rightarrow a+E\Rightarrow a+E*E\Rightarrow a+a*a E⇒E∗E⇒E+E∗E⇒I+E∗E⇒a+E∗E⇒a+a∗aE⇒E+E⇒I+E⇒a+E⇒a+E∗E⇒a+a∗a
对应的语法分析树如下,发现一个先算的是加法,一个先算的是乘法,出现了歧义。
重新构造产生式以消除歧义:
先算乘法的: E → I ∣ E + E ∣ E ∗ E ∣ ( E ) , I → a ∣ b E\rightarrow I\; |\; E+E\; |\; E*E\; |\; (E),\; I\rightarrow a\; |\; b E→I∣E+E∣E∗E∣(E),I→a∣b
先算加法的: E → T ∣ E + T , T → F ∣ T ∗ F , F → I ∣ ( E ) , I → a ∣ b ∣ I a ∣ I b E\rightarrow T\; |\; E+T,\; T\rightarrow F\; |\; T*F,\; F\rightarrow I\; |\;(E),\; I\rightarrow a\;|\;b\;|\;Ia\;|\;Ib E→T∣E+T,T→F∣T∗F,F→I∣(E),I→a∣b∣Ia∣Ib
定义同样的语言可以有多个文法,如果一个CFL的所有文法都是歧义的,那么它是固有二义性的
乔姆斯基范式(Chomsky Normal Form):一个CFG的所有的产生式都有如下两种形式之一:
CFG可以转换为CNF的形式,如下例子。
例:将 S → A B a , A → a a b , B → A c S\rightarrow ABa , A\rightarrow aab , B \rightarrow Ac S→ABa,A→aab,B→Ac 转化为CNF的形式
解: S → A C , A → D E , B → A F , C → B D , D → a , F → c , E → D G , G → b S\rightarrow AC,A\rightarrow DE,B\rightarrow AF,C\rightarrow BD,D\rightarrow a,F\rightarrow c,E\rightarrow DG,G\rightarrow b S→AC,A→DE,B→AF,C→BD,D→a,F→c,E→DG,G→b
由于FA有局限性,可以识别 M = { 0 n 1 m ∣ n ≥ 0 , m ≥ 0 } M=\{0^n1^m | n \ge 0, m \ge 0 \} M={0n1m∣n≥0,m≥0},但不能识别 L = { 0 n 1 n ∣ n ≥ 0 } L=\{ 0^n1^n | n \ge 0 \} L={0n1n∣n≥0},所以有了PDA
下推自动机(Pushdown Automata):PDA是一个七元组 P = ( Q , Σ , Γ , δ , q 0 , z 0 , F ) P=(Q,\,\Sigma,\,\Gamma,\,\delta,\,q_0,\,z_0,\,F) P=(Q,Σ,Γ,δ,q0,z0,F),其中,
例:构造PDA识别 L = { w w R ∣ w ∈ { 0 , 1 } ∗ } L=\{ww^R|w\in\{0,1\}^*\} L={wwR∣w∈{0,1}∗}
解:第一步,把 w w w 入栈
δ ( q , 0 , z 0 ) = ( q , 0 z 0 ) , δ ( q , 1 , z 0 ) = ( q , 1 z 0 ) δ ( q , 0 , 0 ) = ( q , 00 ) , δ ( q , 1 , 0 ) = ( q , 10 ) δ ( q , 0 , 1 ) = ( q , 01 ) , δ ( q , 1 , 1 ) = ( q , 11 ) \delta(q,0,z_0)=(q,0z_0),\quad \delta(q,1,z_0)=(q,1z_0)\\ \delta(q,0,0)=(q,00),\quad \delta(q,1,0)=(q,10)\\ \delta(q,0,1)=(q,01),\quad \delta(q,1,1)=(q,11) δ(q,0,z0)=(q,0z0),δ(q,1,z0)=(q,1z0)δ(q,0,0)=(q,00),δ(q,1,0)=(q,10)δ(q,0,1)=(q,01),δ(q,1,1)=(q,11)
第二步,从栈中弹出 w R w^R wR
δ ( q , 1 , 1 ) = ( p , ε ) , δ ( q , 0 , 0 ) = ( q , ε ) δ ( p , 1 , 1 ) = ( p , ε ) , δ ( p , 0 , 0 ) = ( q , ε ) \delta(q,1,1)=(p,\varepsilon),\quad \delta(q,0,0)=(q,\varepsilon)\\ \delta(p,1,1)=(p,\varepsilon),\quad \delta(p,0,0)=(q,\varepsilon) δ(q,1,1)=(p,ε),δ(q,0,0)=(q,ε)δ(p,1,1)=(p,ε),δ(p,0,0)=(q,ε)
第三步,转移到终结状态 δ ( p , ε , z 0 ) = ( r , z 0 ) \delta(p,\varepsilon, z_0)=(r,z_0) δ(p,ε,z0)=(r,z0)
如果一个PDA P = ( Q , Σ , Γ , δ , q 0 , z 0 , F ) P=(Q,\,\Sigma,\,\Gamma,\,\delta,\,q_0,\,z_0,\,F) P=(Q,Σ,Γ,δ,q0,z0,F) 是确定的,那么它满足下面的条件:
例:构造确定的PDA识别 L = { 0 n 1 n ∣ n > 0 } L = \{ 0^n1^n | n > 0 \} L={0n1n∣n>0}
用一个三元组 ( q , w , α ) (q,w,\alpha) (q,w,α) 来描述一个PDA在某一时刻的格局,其中,
例:用格局序列描述2中构造的 L = { 0 n 1 n ∣ n > 0 } L = \{ 0^n1^n | n > 0 \} L={0n1n∣n>0} 的PDA接受 w = 0011 w=0011 w=0011 的过程。
解: ( q , 0011 , z 0 ) ┝ ( q , 011 , 0 z 0 ) ┝ ( q , 11 , 00 z 0 ) ┝ ( p , 1 , 0 z 0 ) ┝ ( p , ε , z 0 ) ┝ ( r , ε , z 0 ) (q,0011,z_0)┝(q,011,0z_0)┝(q,11,00z_0)┝(p,1,0z_0)┝(p,\varepsilon,z_0)┝(r,\varepsilon,z_0) (q,0011,z0)┝(q,011,0z0)┝(q,11,00z0)┝(p,1,0z0)┝(p,ε,z0)┝(r,ε,z0)
简记为 ( q , 0011 , z 0 ) ┝ ∗ ( r , ε , z 0 ) (q,0011,z_0)┝^* (r,\varepsilon,z_0) (q,0011,z0)┝∗(r,ε,z0)
PDA可以用两种方式描述接受语言:
例如2中构造的 L = { 0 n 1 n ∣ n > 0 } L = \{ 0^n1^n | n > 0 \} L={0n1n∣n>0} 的PDA就是用终结状态接受的,也可用空栈状态来描述,如下
但是并不是所有的PDA都可以用两种方式构造 (针对DPDA),当 L L L 可以被终结状态的DPDA接受并且 L L L 有前缀性的时候, L L L 才能被空栈状态的DPDA接受。
语言的前缀性:该语言中没有两个不同的字符串x和y,使得x是y的前缀。
如:语言 0* 就没有前缀性,因为0是00的前缀。
对于一个给定的上下文无关语言 L L L,存在一个CFG生成 L L L,且存在一个PDA识别 L L L。
把CFG G = ( V , T , S , P ) G=(V,T,S,P) G=(V,T,S,P) 转化为PDA,则对应的PDA为 B = ( { q } , T , V ∪ T , δ , q , S , { } ) B=(\{q\},T,V\cup T,\delta,q,S,\{\,\}) B=({q},T,V∪T,δ,q,S,{}),其中,
例:将CFG G = ( { S } , { 0 , 1 } , { S → 0 S 1 , S → S S , S → ε } , S ) G=(\{S\},\{0,1\}, \{S\rightarrow 0S1, S\rightarrow SS, S\rightarrow \varepsilon \}, S) G=({S},{0,1},{S→0S1,S→SS,S→ε},S) 转化为PDA。
解:PDA为 P = ( { q } , { 0 , 1 } , { 0 , 1 , S } , δ , q , S , { } ) P=(\{q\}, \{0,1\}, \{0,1,S\}, \delta, q, S, \{\,\}) P=({q},{0,1},{0,1,S},δ,q,S,{}),其中 δ \delta δ 定义如下:
该PDA识别字符串 w = 0011 w=0011 w=0011 的过程:
( q , 0011 , S ) ┝ ( q , 0011 , 0 S 1 ) ┝ ( q , 011 , S 1 ) ┝ ( q , 011 , 0 S 11 ) ┝ ( q , 11 , S 11 ) ┝ ( q , 11 , 11 ) ┝ ( q , 1 , 1 ) ┝ ( q , ε , ε ) (q,0011,S)┝(q,0011,0S1)┝(q,011,S1)┝(q,011,0S11) ┝(q,11,S11)┝(q,11,11)┝(q,1,1)┝(q,\varepsilon,\varepsilon) (q,0011,S)┝(q,0011,0S1)┝(q,011,S1)┝(q,011,0S11)┝(q,11,S11)┝(q,11,11)┝(q,1,1)┝(q,ε,ε)
对应的CFG派生序列: S ⇒ 0 S 1 ⇒ 00 S 11 ⇒ 0011 S \Rightarrow 0S1 \Rightarrow 00S11 \Rightarrow 0011 S⇒0S1⇒00S11⇒0011
转化出的PDA实际上是在模拟CFG的派生过程,所以PDA一定能就识别CFG生成的字符串
把PDA P = ( Q , Σ , Γ , δ , q 0 , z 0 , F ) P=(Q,\,\Sigma,\,\Gamma,\,\delta,\,q_0,\,z_0,\,F) P=(Q,Σ,Γ,δ,q0,z0,F) 转化为CFG,则对应的CFG为 G = ( V , Σ , S , R ) G=(V,\Sigma,S,R) G=(V,Σ,S,R),其中,
V V V :包括开始变元 S S S,这个变元和PDA没有关系,就是强行规定的;还有其他形如 [ q X p ] [qXp] [qXp] 的符号,其中 ∀ q , p ∈ Q , X ∈ Γ \forall q,p \in Q, X\in \Gamma ∀q,p∈Q,X∈Γ
R R R :包括 ∀ p ∈ Q \forall p\in Q ∀p∈Q, S → [ q 0 z 0 p ] S\rightarrow [q_0z_0p] S→[q0z0p];还有 [ q X r k ] → a [ r Y 1 r 1 ] [ r 1 Y 2 r 2 ] . . . [ r k − 1 Y k r k ] [q X r_k]\rightarrow a[rY_1r_1][r_1Y_2r_2]... [r_{k-1}Y_kr_k] [qXrk]→a[rY1r1][r1Y2r2]...[rk−1Ykrk],对于 ( r , Y 1 Y 2 . . . Y k ) ∈ δ ( q , a , X ) (r, Y_1Y_2...Y_k)\in \delta (q,a,X) (r,Y1Y2...Yk)∈δ(q,a,X)
解: P = ( Q , Σ , Γ , δ , q 0 , z 0 , F ) ⇒ G = ( V , Σ , S , R ) P=(Q,\,\Sigma,\,\Gamma,\,\delta,\,q_0,\,z_0,\,F)\Rightarrow G=(V,\Sigma,S,R) P=(Q,Σ,Γ,δ,q0,z0,F)⇒G=(V,Σ,S,R),其中 V = { S , [ q z 0 q ] , [ q z 0 p ] , [ q 0 q ] , [ q 0 p ] , [ q 1 q ] , [ q 1 p ] , [ p z 0 q ] , [ p z 0 p ] , [ p 0 q ] , [ p 0 p ] , [ p 1 q ] , [ p 1 p ] } V=\{S,[qz_0q], [qz_0p], [q0q], [q0p], [q1q], [q1p],[pz_0q], [pz_0p], [p0q], [p0p], [p1q], [p1p] \} V={S,[qz0q],[qz0p],[q0q],[q0p],[q1q],[q1p],[pz0q],[pz0p],[p0q],[p0p],[p1q],[p1p]}
然后根据转移函数导出产生式 R R R
把得到的产生式整合在一起得到 R R R
R = { S → [ q z 0 q ] ∣ [ q z 0 p ] , [ q z 0 q ] → 0 [ q 0 q ] [ q z 0 q ] ∣ 0 [ q 0 p ] [ p z 0 q ] , [ q z 0 p ] → 0 [ q 0 q ] [ q z 0 p ] ∣ 0 [ q 0 p ] [ p z 0 p ] , [ q 0 q ] → 0 [ q 0 q ] [ q 0 q ] ∣ 0 [ q 0 p ] [ p 0 q ] , [ q 0 p ] → 0 [ q 0 q ] [ q 0 p ] ∣ 0 [ q 0 p ] [ p 0 p ] , [ q z 0 q ] → [ p z 0 q ] , [ q z 0 p ] → [ p z 0 p ] , [ q 0 p ] → 1 , [ p 0 p ] → 1 , [ p z 0 p ] → ε } R = \{\quad S \rightarrow [qz_0q]\,\, |\,\, [qz_0p],\\ [qz_0q] \rightarrow 0[q0q][qz_0q] \,\,|\,\, 0[q0p][pz_0q],\\ [qz_0p] \rightarrow 0[q0q][qz_0p] \,\,|\,\, 0[q0p][pz_0p],\\ [q0q] \rightarrow 0[q0q][q0q] \,\,|\,\, 0[q0p][p0q],\\ [q0p] \rightarrow 0[q0q][q0p] \,\,|\,\, 0[q0p][p0p],\\ [qz_0q] \rightarrow [pz_0q],\;[qz_0p] \rightarrow[pz_0p],\\ [q0p] \rightarrow 1,\; [p0p] \rightarrow 1,\; [pz_0p] \rightarrow \varepsilon \quad\} R={S→[qz0q]∣[qz0p],[qz0q]→0[q0q][qz0q]∣0[q0p][pz0q],[qz0p]→0[q0q][qz0p]∣0[q0p][pz0p],[q0q]→0[q0q][q0q]∣0[q0p][p0q],[q0p]→0[q0q][q0p]∣0[q0p][p0p],[qz0q]→[pz0q],[qz0p]→[pz0p],[q0p]→1,[p0p]→1,[pz0p]→ε}
最后把 R R R 按如下规则化简一下:
最终得到
R = { S → [ q z 0 p ] , [ q z 0 p ] → 0 [ q 0 p ] [ p z 0 p ] , [ q 0 p ] → 0 [ q 0 p ] [ p 0 p ] , [ q z 0 p ] → [ p z 0 p ] , [ q 0 p ] → 1 , [ p 0 p ] → 1 , [ p z 0 p ] → ε } R = \{\quad S \rightarrow [qz_0p],\;[qz_0p] \rightarrow 0[q0p][pz_0p],\\ [q0p] \rightarrow 0[q0p][p0p],\; [qz_0p] \rightarrow[pz_0p],\\ [q0p] \rightarrow 1,\; [p0p] \rightarrow 1,\; [pz_0p] \rightarrow \varepsilon \quad\} R={S→[qz0p],[qz0p]→0[q0p][pz0p],[q0p]→0[q0p][p0p],[qz0p]→[pz0p],[q0p]→1,[p0p]→1,[pz0p]→ε}
看起来不太方便,于是令 A = [ q z 0 p ] , B = [ q 0 p ] , C = [ p 0 p ] , D = [ p z 0 p ] A=[qz_0p], B=[q0p], C=[p0p], D=[pz_0p] A=[qz0p],B=[q0p],C=[p0p],D=[pz0p],得到
R = { S → A , A → 0 B D ∣ D , B → 1 ∣ 0 B C , C → 1 , D → ε } R = \{ S \rightarrow A,\; A\rightarrow 0BD|D,\; B\rightarrow1|0BC,\; C\rightarrow1,\; D\rightarrow \varepsilon \} R={S→A,A→0BD∣D,B→1∣0BC,C→1,D→ε}
再次化简得到: R = { S → 0 B ∣ ε , B → 1 ∣ 0 B C , C → 1 } R = \{ S\rightarrow 0B|\varepsilon,\; B\rightarrow 1| 0BC,\; C\rightarrow1 \} R={S→0B∣ε,B→1∣0BC,C→1}
上下文无关语言的泵引理: L L L 是一个CFL,则 ∃ n \exist n ∃n,对 ∀ w ∈ L \forall w\in L ∀w∈L,若 ∣ w ∣ ≥ n |w|\ge n ∣w∣≥n,则 w w w 可以划分为 w = u v x y z w=uvxyz w=uvxyz,其中
∣ v x y ∣ ≤ n |vxy| \le n ∣vxy∣≤n
∣ v y ∣ ≥ 1 |vy| \ge 1 ∣vy∣≥1,(要是vy同时为空就出现 A → A A\rightarrow A A→A 这种没有意义的产生式了)
u v i x y i z ∈ L , ∀ i = 0 , 1 , 2 , . . . uv^ixy^iz\in L,\;\,\forall i=0,1,2,... uvixyiz∈L,∀i=0,1,2,...
n的取法:令 m = ∣ V ∣ m=|V| m=∣V∣, k = m a x { ∣ α ∣ ∀ A → α } k=max\{ |\alpha| \forall A\rightarrow \alpha \} k=max{∣α∣∀A→α},则 n = k m n=k^m n=km
派生过程: S ⇒ ∗ u A z ⇒ ∗ u v A y z ⇒ ∗ w S\stackrel*\Rightarrow uAz \stackrel*\Rightarrow uvAyz\stackrel*\Rightarrow w S⇒∗uAz⇒∗uvAyz⇒∗w,语法解析树如下,对于重复出现的 A 来说,则可用子树的A代替父节点,此时失去的就是一对vy节点。
例:证明 L = { w w ∣ w ∈ { 0 , 1 } ∗ } L=\{ww|w\in \{0,1\}^*\} L={ww∣w∈{0,1}∗} 不是CFL。
解:假设L是CFL。则由泵引理可知,存在一个常数n,对于L中长度不小于n的字符串w就可以划分为五个部分, w = u v x y z w=uvxyz w=uvxyz,其中 ∣ v x y ∣ ≤ n |vxy| \le n ∣vxy∣≤n, v y ≠ ε vy \ne \varepsilon vy=ε, u v k x y k z ∈ L uv^kxy^kz\in L uvkxykz∈L。
取 w = 0 n 1 n 0 n 1 n ∈ L w=0^n1^n0^n1^n\in L w=0n1n0n1n∈L,则 u v x y z = 0 n 1 n 0 n 1 n uvxyz=0^n1^n0^n1^n uvxyz=0n1n0n1n(如果要推出矛盾,就需要推出 u x z ∉ L uxz\notin L uxz∈/L)。v和y不能同时为空串且 ∣ v x y ∣ ≤ n |vxy| \le n ∣vxy∣≤n,所以它们的取值情况可以分为7种情况,这七种情况又可以分为两类:
所有的情况都推出了矛盾,所以假设错误,即 L 不是CFL。
CFL在并、连接、星、反转、交、同态、逆同态运算下是封闭的,而在交、补运算下不是封闭的。
对于两个CFL L 1 L_1 L1 和 L 2 L_2 L2,令 G ( L 1 ) = ( V 1 , T 1 , R 1 , S 1 ) , G ( L 2 ) = ( V 2 , T 2 , R 2 , S 2 ) G(L_1)=(V_1,T_1,R_1,S_1), G(L_2)=(V_2,T_2,R_2,S_2) G(L1)=(V1,T1,R1,S1),G(L2)=(V2,T2,R2,S2)
- 并: G ( L 1 ∪ L 2 ) = ( V 1 ∪ V 2 ∪ { S } , T 1 ∪ T 2 , R , S ) G(L_1 \cup L_2 ) = (V_1\cup V_2\cup \{S\},T_1\cup T_2, R,S) G(L1∪L2)=(V1∪V2∪{S},T1∪T2,R,S), R = { S → S 1 ∣ S 2 } ∪ R 1 ∪ R 2 R= \{S\rightarrow S_1 | S_2\} \cup R_1\cup R_2 R={S→S1∣S2}∪R1∪R2
- 连接: G ( L 1 ∪ L 2 ) = ( V 1 ∪ V 2 ∪ { S } , T 1 ∪ T 2 , R , S ) G(L_1 \cup L_2 ) = (V_1\cup V_2\cup \{S\},T_1\cup T_2, R,S) G(L1∪L2)=(V1∪V2∪{S},T1∪T2,R,S), R = { S → S 1 S 2 } ∪ R 1 ∪ R 2 R= \{S\rightarrow S_1 S_2\} \cup R_1\cup R_2 R={S→S1S2}∪R1∪R2
- 星: G ( L 1 ∗ ) = ( V 1 , T 1 , { S 1 → S 1 S 1 ∣ ε } ∪ R 1 , S 1 ) G(L_1^*) = (V_1,T_1, \{S_1\rightarrow S_1S_1|\varepsilon\}\cup R_1,S_1) G(L1∗)=(V1,T1,{S1→S1S1∣ε}∪R1,S1)
- 反转: G ( L 1 R ) = ( V 1 , T 1 , { A → α R ∣ A → α R 1 } , S 1 ) G(L_1^R)=(V_1,T_1, \{A\rightarrow \alpha^R|A\rightarrow \alpha R_1\},S_1) G(L1R)=(V1,T1,{A→αR∣A→αR1},S1)
交运算不封闭,例如: L 1 = { a n b n c m ∣ n ≥ 0 , m ≥ 0 } , L 2 = { a n b m c m ∣ n ≥ 0 , m ≥ 0 } L_1 =\{a^nb^nc^m | n\ge 0, m\ge 0\},\;L_2 =\{a^nb^mc^m | n\ge 0, m\ge 0\} L1={anbncm∣n≥0,m≥0},L2={anbmcm∣n≥0,m≥0} 是两个CFL,它们的交就是 L 1 ∪ L 2 = { a n b n c n ∣ n ≥ 0 } L_1 \cup L_2 =\{ a^nb^nc^n | n\ge 0\} L1∪L2={anbncn∣n≥0},这不是CFL,可以按照上面的方式用泵引理证明。
但是一个CFL和一个RL做交运算之后得到的还是CFL,这个条件下它是封闭的。