编译原理这种课一听就知道确定特别晦涩难懂,上课没听懂,今天花了一天时间来学文法,看了一天也是是有些眉目,书上讲的并非特别清楚,却是从各大博客中汲取到很多知识。虽然感受还只是停留在理论阶段,但也要记录一下吧,否则到时候理论都想不起来。blog
文法 G 定义为一个四元组(VN, VT, P, S)博客
乔姆斯基(Chomsky)根据对产生式的要求不一样,将文法分为四类,即:0型文法、1型文法、2型文法和3型文法,这四类文法一般称为 Chomsky 体系。编译
文法 G | 产生式结构 | 语言 L(G) |
---|---|---|
0型文法(短语结构文法) | ∀α→β∈P,其中α、β∈(VT∪VN)* ,∣α∣≠0 | 0型语言(短语结构语言) |
1型文法(上下文有关文法) | ∀α→β∈P,其中α、β∈(VT∪VN)* ,∣α∣≤∣β∣ | 1型语言(上下文有关语言) |
2型文法(上下文无关文法) | ∀A→β∈P,其中A∈VN,β∈(VT∪VN)* | 2型语言(上下文无关语言) |
3型文法(正则文法) | ∀A→α∣αB∈P(右线性)或∀A→α∣Bα∈P(左线性),其中,A,B∈VN,α∈VT∪{ε} | 3型语言(正则语言) |
下面的例子中,A、B∈VN, a、b∈VT, 即大写字母表示非终结符,小写字母表示终结符。table
例:A→a, Aa→aA, AA→a, AA→Aaclass
左边至少有一个非终结符,否则的话也就不用推导了编译原理
例:A→a, Ab→Abc, AB→Bc基础
在0型文法的基础上限制右边长度不能短于左边,因此 AA→a 不是1型文法。(α→ε除外)原理
例:A→a, A→aB, B→a, B→abim
在1型文法的基础上限制左边不能有终结符,因此 Ab→Abc 不是2型文法。img
例:A→a, A→aB, B→a, B→cB
在2型文法的基础上限制右边只能有一个终结符,并且左线性和右线性不能同时出现,因此 A→aa 或者 B→cB 和 B→Bc 同时出现的都不是3型文法。