編譯原理這種課一聽就知道確定特別晦澀難懂,上課沒聽懂,今天花了一天時間來學文法,看了一天也是是有些眉目,書上講的並非特別清楚,卻是從各大博客中汲取到很多知識。雖然感受還只是停留在理論階段,但也要記錄一下吧,否則到時候理論都想不起來。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型文法。