编译原理:四种文法的比较
0型文法-短语文法
表示方法:四元式 ( V T , V N , S , P ) (V_T,V_N,S,P) (VT,VN,S,P)
- (终结符集合,非终结符集合,开始符号,产生式集合)
这四个文法都是采用的四元式,有区别的地方在于产生式 α → β \alpha\rightarrow\beta α→β
对于0型文法 α → β \alpha\rightarrow\beta α→β
-
α ∈ ( V T ∪ V N ) ∗ \alpha\in(V_T \cup V_N)^* α∈(VT∪VN)∗且 α \alpha α必含有至少一个非终结符
-
β ∈ ( V T ∪ V N ) ∗ \beta\in(V_T \cup V_N)^* β∈(VT∪VN)∗
1型文法-上下文有关文法
对于1型文法 α → β \alpha\rightarrow\beta α→β
-
α ∈ ( V T ∪ V N ) ∗ \alpha\in(V_T \cup V_N)^* α∈(VT∪VN)∗且 α \alpha α必含有至少一个非终结符
-
β ∈ ( V T ∪ V N ) ∗ \beta\in(V_T \cup V_N)^* β∈(VT∪VN)∗
-
∣ α ∣ < ∣ β ∣ |\alpha|<|\beta| ∣α∣<∣β∣
- 绝对值代表长度
- S → ε S\rightarrow\varepsilon S→ε除外
2型文法-上下文无关文法
对于2型文法 A → β A\rightarrow\beta A→β
-
A ∈ V N A\in V_N A∈VN
-
β ∈ ( V T ∪ V N ) ∗ \beta\in(V_T \cup V_N)^* β∈(VT∪VN)∗
-
∣ α ∣ < ∣ β ∣ |\alpha|<|\beta| ∣α∣<∣β∣
- 绝对值代表长度
- S → ε S\rightarrow\varepsilon S→ε除外
最左推导
任何一步 α ⇒ β \alpha\Rightarrow\beta α⇒β都是对 α \alpha α中的最左非终结符进行替换
最右推导
任何一步 α ⇒ β \alpha\Rightarrow\beta α⇒β都是对 α \alpha α中的最右非终结符进行替换
3型文法-正规文法
对于3型文法
-
左线性文法$A\rightarrow B \alpha 或 或 或A\rightarrow\alpha$
-
右线性文法 A → α B A\rightarrow \alpha B A→αB或 A → α A\rightarrow\alpha A→α
-
α ∈ ( V T ) ∗ \alpha\in (V_T)^* α∈(VT)∗
-
A , B ∈ V N A,B\in V_N A,B∈VN
对四种文法的总结
0型文法限制最少,只要产生式左边存在非终结符即可。
1型文法在0型文法的基础上要求产生式左边的长度小于右边的长度。
2型文法在1型文法的基础上要求产生式左边全是非终结符
3型文法的限制最多,在2型文法的基础上对产生式右边也进行了限制,要求右边是一个终结符或者一个终结符+一个非终结符这样子的形式