概述
在 編譯原理 - 文法(一) 一文中,講了文法分爲四類。該分類標準由喬姆斯基於1956年提出,所以又將其稱爲喬姆斯基層次結構。
這個分類譜系把所有的文法分成四種類型:0型文法、1型文法、2型文法和3型文法。這四種文法類型依次擁有越來越嚴格的產生式規則,所能表達的語言也越來越少。
儘管表達能力比0型文法和1型文法要弱,但由於可以高效率的實現,2型文法和3型文法成爲四類文法中最重要的兩種文法類型。
前置知識
文法分類中涉及的幾個基本概念
- 字母表 Σ:字母表是字符的非空有窮集合。例如,由26個英文字母組成的集合是一個字母表,字母表中的元素稱爲符號。
- 字符串的方冪:把字符串 α 自身連接 n 次得到的串,稱爲字符串 α 的 n 次方冪。規定 。
設A、B代表字母表Σ上的兩個字符串集合,基本運算如下:
- 或(合併):
- 積(連接):
- 克林閉包*:
- 正則閉包+:又稱正閉包,是由克林閉包衍生出的概念。,
例如,
0型文法(短語文法)
若對於四元組的每個產生式 α->β,
- α 至少含有一個非終結符
則稱G是0型文法。
0型文法的功能相當於圖靈機。任何0型語言都是遞歸可枚舉的;遞歸可枚舉集也必定是一個0型語言。遞歸可枚舉的意思就是,你可以用類似窮舉的算法在有限時間內判定一個元素屬於該集合;對於不屬於該集合的元素,則很可能無法驗證。
一般的文法至少都是0型文法。0型文法的限制最少,所以也稱0型文法爲無限制文法。。
1型文法(上下文有關文法)
在0型文法的基礎上,滿足
- 對於每一個產生式 α→β(α→ε除外),都有(|α| 表示 α 的長度)。
1型文法等價於線性有界自動機。
2型文法(上下文無關文法)
在1型文法的基礎上,滿足
- 對於每一個產生式 α→β,都有
簡單的說就是規則左邊只能是非終結符,且只有一個字符。
例如,對於產生式 符合1型文法的要求,但不符合2型文法的要求,因爲α=Aa,而Ab包含終結符,且包含兩個字符。
2型文法等價於下推自動機。
3型文法(正規文法或線性文法)
在2型文法的基礎上,滿足
- A→α|αB(右線性)或A→α|Bα(左線性)
3型文法分爲左線性文法和右線性文法。
- 左線性文法:式子右邊的產生是(非終結符 + 終結符)
- 右線性文法:式子右邊的產生是(終結符 + 非終結符)
注意,左線性文法和右線性文法不能混用,即所有產生式的格式保持一致。
例如,對於如下產生式:
- A→a
- A→aB
- B→a
- B→cB
則符合3型文法的要求,且屬於右線性文法。
對於如下產生式:
- A→a
- A→aB
- B→a
- B→Bc
則不符合三型文法的要求。因爲產生式 B→Bc 屬於右線性文法,其它產生式屬於左線性文法。兩種文法不能同時出現在一種語法中。
3型文法等價於有限狀態自動機。