第2章 文法理论
文法分类
文法
文法是一个四元组: G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S) ,其中:
- V V V 是非终结符(或称变元)的有限集
- T T T 是终结符的有限集
- P P P 是生成式的有限集,其中每个生成式都形如 α → β \alpha\to\beta α→β ,其中 α , β ∈ ( V ∪ T ) ∗ \alpha,\beta{\,}{\in}{\,}(V{\cup}T)^{\ast} α,β∈(V∪T)∗
- S ∈ V S{\,}{\in}{\,}V S∈V ,称为文法 G G G 的开始符号
文法分类
① 0 型文法 / 短语结构文法(Phrase Structure Grammar),简记为 PSG
② 1 型文法 / 上下文有关文法(Context Sensitive Grammar),简记为 CSG,要求每个生成式
α → β \alpha\to\beta α→β 都满足条件 ∣ α ∣ ≤ ∣ β ∣ |\alpha|{\leq}|{\beta}| ∣α∣≤∣β∣
③ 2 型文法 / 上下文无关语法(Context Free Grammar),简记为 CFG,要求每个生成式都具有如下形式:
A
→
β
,
β
∈
(
V
∪
T
)
∗
,
A
∈
V
A\to\beta{\,},{\,}{\beta}{\,}{\in}{\,}(V{\cup}T)^{\ast}{\,},{\,}A{\,}{\in}{\,}V
A→β,β∈(V∪T)∗,A∈V
④ 3 型文法 / 正则文法(Regular Grammar),简记为 RG,要求每个生成式都具有如下形式:
A
→
a
o
r
A
→
a
B
,
a
∈
T
∪
{
ε
}
,
A
,
B
∈
V
A\to a\quad or\quad A\to aB{\,},{\,}a{\,}{\in}{\,}T{\cup}\{\varepsilon\},{\,}A,B{\,}{\in}{\,}V
A→aorA→aB,a∈T∪{ε},A,B∈V
1 型文法和 1’ 型文法的等价性
1’ 型文法
1’ 型文法,要求每个生成式都具有如下形式:
α
1
A
α
2
→
α
1
β
α
2
{\alpha_1}A{\alpha_2}\to{\alpha_1}\beta{\alpha_2}
α1Aα2→α1βα2
这里
A
∈
V
A{\,}{\in}{\,}V
A∈V ,
α
1
\alpha_1
α1 、
α
2
\alpha_2
α2
∈
\in
∈
(
V
∪
T
)
∗
(V{\cup}T)^{\ast}
(V∪T)∗ ,
β
\beta
β
∈
\in
∈
(
V
∪
T
)
+
(V{\cup}T)^+
(V∪T)+
(显然,1’ 型文法更对得起 “上下文有关文法” 这个名字 \doge)
1 型文法和 1’ 型文法的转化
显然,1’ 型文法是 1 型文法的特例(因为 ∣ α 1 A α 2 ∣ ≤ ∣ α 1 β α 2 ∣ |{\alpha_1}A{\alpha_2}|\leq|{\alpha_1}\beta{\alpha_2}| ∣α1Aα2∣≤∣α1βα2∣ ),因此要证明二者的等价性,只需证明对任意 1 型文法 G G G ,一定存在一个 1’ 型文法 G ′ G' G′ 使得 L ( G ) = L ( G ′ ) L(G)=L(G') L(G)=L(G′)
① 首先将 G G G 变成 G ′ ′ = ( V ′ ′ , T , P ′ ′ , S ) G''=(V'',T,P'',S) G′′=(V′′,T,P′′,S) ,其中:
- V ′ ′ = V ∪ M V''=V{\cup}M V′′=V∪M , M = { [ a ] ∣ a ∈ T } M=\{[a]|a\,{\in}{\,}T\} M={[a]∣a∈T}
- P ′ ′ = P ‾ ∪ { [ a ] → a } P''=\overline{P}{\cup}\{[a]\to a\} P′′=P∪{[a]→a} , 其中 P ‾ \overline{P} P 是 P P P 中将所有 a ( a ∈ T ) a(a\,\in\, T) a(a∈T) 替换成 [ a ] [a] [a] 而得来
此时 G ′ ′ G'' G′′ 中只有两种文法的形式:
-
A → β A\to\beta A→β ( A ∈ V ′ ′ A\in V'' A∈V′′)已经满足 1’ 型文法的要求,其中 α 1 \alpha_1 α1 、 α 2 \alpha_2 α2 都是 ε \varepsilon ε
-
A 1 A 2 . . . A n → B 1 B 2 . . . B m A_1A_2...A_n\to B_1B_2...B_m A1A2...An→B1B2...Bm ( m ≥ n ≥ 2 m{\geq}n{\geq}2 m≥n≥2 )
② 第二个还不满足,所以要拆成:
A 1 A 2 . . . A n → C 1 A 2 . . . A n A_1A_2...A_n\to C_1A_2...A_n A1A2...An→C1A2...An
C 1 A 2 . . . A n → C 1 C 2 . . . A n C_1A_2...A_n\to C_1C_2...A_n C1A2...An→C1C2...An
. . . ... ...
C 1 C 2 . . . A n → C 1 C 2 . . . C n C_1C_2...A_n\to C_1C_2...C_n C1C2...An→C1C2...Cn
C 1 C 2 . . . C n → B 1 C 2 . . . C n C_1C_2...C_n\to B_1C_2...C_n C1C2...Cn→B1C2...Cn
. . . ... ...
B 1 B 2 . . . B n − 1 C n → B 1 B 2 . . . B m B_1B_2...B_{n-1}C_n\to B_1B_2...B_m B1B2...Bn−1Cn→B1B2...Bm (最后一步直接扩展出了 B n B n − 1 . . . B m B_nB_{n-1}...B_m BnBn−1...Bm )
例
给出 1 型文法 G 如下:
- S → B C ∣ C B C S\to BC|CBC S→BC∣CBC
- B C → C B BC\to CB BC→CB
- c C → b c cC\to bc cC→bc
- C → c C\to c C→c
- B → b B\to b B→b
这里只有 2 和 3 不满足 1’ 型文法的要求,因此:
-
: B C → D 1 C BC\to D_1C BC→D1C ; D 1 C → D 1 D 2 D_1C\to D_1D_2 D1C→D1D2 ; D 1 D 2 → C D 1 D_1D_2\to CD_1 D1D2→CD1 ; C D 1 → C B CD_1\to CB CD1→CB ;
-
: [ c ] C → E 1 C [c]C\to E_1C [c]C→E1C ; E 1 C → E 1 E 2 E_1C\to E_1E_2 E1C→E1E2 ; E 1 E 2 → [ b ] E 2 E_1E_2\to [b]E_2 E1E2→[b]E2 ; [ b ] E 2 → [ b ] [ c ] [b]E_2\to [b][c] [b]E2→[b][c] ;
以及 [ b ] → b [b]\to b [b]→b 和 [ c ] → c [c]\to c [c]→c
事实上, D i D_i Di 和 E i E_i Ei 只有一种派生方式能够被消除,所以转化前后是等价的
派生树
就是按照文法的派生过程写成树状