編譯原理 - 文法(一)

什麼是文法

語言是由文法描述的,文法使用有限的規則將無限的語言描述出來,語言是文法所描述的所有句子的集合。簡單來說,就是指怎麼由一堆符號組成一個有含義的句子的規則,它是產生中間代碼或目標代碼的依據。

文法包含詞法規則和語法規則。

  • 詞法規則:符號(單詞)是由字符組成的有限串,是具有獨立含義的最小語法單位。詞法規則規定了什麼樣的字符串可以構成語言的有效符號,如標識符、無符號常數、界限符等。
  • 語法規則:規定了如何從單詞符號形成更大的結構(語法單位)。語法單位包括表達式、語句、函數、過程等。

終結符與非終結符

  • 終結符:不能被分解成更小的單位。也就是說終結符不能再進行推導,不能單獨出現在推導式左邊。在程序語言中,基本字、標識符、常數、運算符號等都算做終結符號。當然,逗號、括號也都爲終結符
  • 非終結符:指的是可以被拆分的字符或串,它採取遞歸定義:一個非終結符是由終結符和至少一個非終結符組成的串

終結符和非終結符是兩個不相交的集合。一般把非終結符用大寫字母表示,終結符用小寫字母表示。

例如有如下推導式:

  • S->Ax
  • S->By
  • A->a
  • A->cA
  • B->b
  • B->Bd

則表示:S 爲開始符,S,A,B 爲非終結符,而x,y,a,b,c,d 爲終結符。

文法的定義

文法通過一個四元組定義。文法G是一個四元組(四元組的順序不固定),可表示爲

G=(VT,VN,P,S)G = (V_T, V_N, P, S)

  • VTV_T:終結符號集,是一個非空有限集,其每個元素稱爲一個終結符
  • VNV_N:非終結符號集,是一個非空有限集,其每個元素稱爲一個非終結符
  • P:產生式的有限集合。每個產生式是類似 α -> β的規則
  • S:文法開始符,是一個特殊的非終結符號

文法分類

  • 0型文法(短語文法)
  • 1型文法(上下文有關文法)
  • 2型文法(上下文無關文法)
  • 3型文法(正規文法或線性文法)

四類文法的區別在於對產生式施加不同的限制。可以用下圖說明它們之間的關係。
四種文法類型

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