編譯原理: 文法

前言

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

文法的定義

文法 G 定義爲一個四元組(VN, VT, P, S)博客

  • VN :非終結符的非空有窮集
  • VT :終結符的非空有窮集,VN∩VT
  • P :產生式的非空有窮集
  • S :S∈VN,爲文法 G 的開始符號

文法的分類

喬姆斯基(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

0型文法

例:A→a, Aa→aA, AA→a, AA→Aaclass

左邊至少有一個非終結符,否則的話也就不用推導了編譯原理

1型文法

例:A→a, Ab→Abc, AB→Bc基礎

在0型文法的基礎上限制右邊長度不能短於左邊,因此 AA→a 不是1型文法。(α→ε除外)原理

2型文法

例:A→a, A→aB, B→a, B→abim

在1型文法的基礎上限制左邊不能有終結符,因此 Ab→Abc 不是2型文法。img

3型文法

例:A→a, A→aB, B→a, B→cB

在2型文法的基礎上限制右邊只能有一個終結符,並且左線性和右線性不能同時出現,因此 A→aa 或者 B→cB 和 B→Bc 同時出現的都不是3型文法。

相關文章
相關標籤/搜索