什麼是文法
語言是由文法描述的,文法使用有限的規則將無限的語言描述出來,語言是文法所描述的所有句子的集合。簡單來說,就是指怎麼由一堆符號組成一個有含義的句子的規則,它是產生中間代碼或目標代碼的依據。
文法包含詞法規則和語法規則。
- 詞法規則:符號(單詞)是由字符組成的有限串,是具有獨立含義的最小語法單位。詞法規則規定了什麼樣的字符串可以構成語言的有效符號,如標識符、無符號常數、界限符等。
- 語法規則:規定了如何從單詞符號形成更大的結構(語法單位)。語法單位包括表達式、語句、函數、過程等。
終結符與非終結符
- 終結符:不能被分解成更小的單位。也就是說終結符不能再進行推導,不能單獨出現在推導式左邊。在程序語言中,基本字、標識符、常數、運算符號等都算做終結符號。當然,逗號、括號也都爲終結符
- 非終結符:指的是可以被拆分的字符或串,它採取遞歸定義:一個非終結符是由終結符和至少一個非終結符組成的串
終結符和非終結符是兩個不相交的集合。一般把非終結符用大寫字母表示,終結符用小寫字母表示。
例如有如下推導式:
- S->Ax
- S->By
- A->a
- A->cA
- B->b
- B->Bd
則表示:S 爲開始符,S,A,B 爲非終結符,而x,y,a,b,c,d 爲終結符。
文法的定義
文法通過一個四元組定義。文法G是一個四元組(四元組的順序不固定),可表示爲
- :終結符號集,是一個非空有限集,其每個元素稱爲一個終結符
- :非終結符號集,是一個非空有限集,其每個元素稱爲一個非終結符
- P:產生式的有限集合。每個產生式是類似 α -> β的規則
- S:文法開始符,是一個特殊的非終結符號
文法分類
- 0型文法(短語文法)
- 1型文法(上下文有關文法)
- 2型文法(上下文無關文法)
- 3型文法(正規文法或線性文法)
四類文法的區別在於對產生式施加不同的限制。可以用下圖說明它們之間的關係。