【編譯原理】文法及文法的類型(0型、1型、2型、3型文法)

一、文法

文法: 描述語言的語法結構的形式規則

學習文法主要是認識終結符和非終結符:其實這個特別簡單,示例:
S->Ap
S->Bq
A->a
A->cA
B->b
B->dB
其中大寫字母爲非終結符,小寫字母爲終結符。兩者組合可以構成一個式子。
 

二、文法的類型

文法定義的形式-四元組(Vn,Vt,P,S): Vn爲非終結符集,Vt 爲終結符集,P爲規則集,S爲識別符|開始符,至少要在一個規則中作爲左部出現,Vn ∩ Vt = ∅。根據對文法施加不同的限制,分成4種類型。

0型或短語文法:

  • 產生式形如:α->β
  • 其中:α、β屬於字符串的閉包區間內且α至少包含有一個非終結符;
  • 解釋:左邊有非終結符,右邊有終結符。
  • 舉例:A->ab, A->Cb, A->b
  • 0型文法是這幾個文法中,限制最少的一個,一般見到的文法都可看做0型文法。0型文法的能力相當於圖靈機(Turing)。

1型文法:又稱爲上下文有關文法:

  • 產生式形如:α->β
  • 其中:α->β均滿足|α|<=|β|, 除了S->ε外;
  • 解釋:式子左邊可以有多個字符,但必須有一個終結符;式子右邊可以有多個字符,可以是終結符,也可以是非終結符,但必須是有限個字符
  • 舉例:A->B,A->Bba  ,Bb->A,

2型文法:又稱爲上下文無關文法:

  • 產生式形如:   A ->β
  • 解釋:式子左邊必須是非終結符,然而一個終結符一個非終結符的組合不是一個非終結符,如Ab不是一個非終結符,但是兩個非終結符的組合就是一個非終結符了,如AB就是行了;式子右邊可以有多個字符,可以是終結符,也可以是非終結符,但必須是有限個字符
  • 舉例:AB->abc,B->ab

3型文法:又稱爲正規文法(正規文法又包括左線性文法和右線性文法):

右線性文法:

  • 產生式形如: A  ->αB 或 A  ->α
  • 解釋:式子左邊只能有一個字符,而且必須是非終結符;式子右邊最多有二個字符。如果有二個字符必須是(終結符+非終結符)的格式,如果是一個字符,那麼必須是終結符。
  • 舉例:B->aB

左線性文法:

  • 產生式形如: A  ->Bα 或 A  ->α
  • 解釋:式子左邊只能有一個字符,而且必須是非終結符;式子右邊最多有二個字符。如果有二個字符必須是(非終結符+終結符)的格式,如果是一個字符,那麼必須是終結符。
  • 舉例:B->Ba

注意:式子右邊的格式一定要一致。也就是說如果有一個是(終結符+非終結符)那麼所有的式子都必須是(終結符+非終結符), 如果有一個是(非終結符+終結符),那麼所有的式子都必須是(非終結符+終結符)

四種類型文法描述能力比較:0型>1型>2型>3型文法

                       A->\varepsilon |aB   

舉例:判斷     B->Ab|a   屬於那種文法。

1、我們分開來寫,應該是:A->e   A->aB   B->Ab  B->a
2、我們先來判斷是否符合0型文法:0型文法規定左邊必須有非終結符,那麼這些都是符合的。
3、我們再來看是否符合1型文法:1型文法規定從小推到大。也符合。
4、我們再來看是否符合2型文法:2型文法規定左邊必須是非終結符,也滿足。
5、我們繼續看是否符合3型文法:規定只能符合右線性或者左線性,那麼前面一個應該是符合右線性的,後面一個是符合左線性的。所以綜合起來就不符合3型文法了。
得出結論:那麼這個題目屬於2型文法。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章