緒論概念&文法與語言
以老師PPT為標准,借鑒部分教材內容,AlvinZH學習筆記。
緒論基本概念
1. 低級語言:字位碼、機器語言、匯編語言。與特定的機器有關,功效高,但使用復雜、繁瑣、費時、易出錯。
高級語言:Fortran、Pascal、C語言等。不依賴具體機器,移植性好,對用戶要求低,易使用,易維護等。
2. 把高級程序設計語言翻譯成匯編語言后機器語言的工作稱為編譯,完成翻譯工作的軟件系統稱為編譯程序或編譯器。
3. 源程序:程序語言處理系統的輸入程序,用匯編語言或高級語言編寫的程序。編寫輸入程序的語言稱為源語言。
程序語言處理系統的輸出程序稱為目標程序(目標代碼),相應的語言稱為目標語言。目標語言可以是機器語言或匯編語言,也可以是介於低級語言和高級語言之間的中間語言。
能對編譯得到的中間語言進行解釋執行的程序稱為解釋程序。常見中間語言:四元式、三元式、逆波蘭表示。優點:便於做優化處理;便於編譯程序的移植。
4. 通常將某種語言程序(源程序)變換為與之等價的語言程序的程序(目標程序)通稱為翻譯程序或變換程序;匯編程序、編譯程序以及各種變換程序的總稱。
源語言為匯編語言、目標語言為機器原因的翻譯程序稱為匯編程序,其翻譯過程稱為匯編。
5. 編譯過程五個基本階段:詞法分析;語法分析;語義分析、生成中間代碼;代碼優化;生成目標程序。
編譯程序的七個邏輯部分:語法分析程序;詞法分析程序;語義分析、生成中間代碼;代碼優化;生成目標程序;符號表管理;錯誤處理。
6. 遍:對源程序或源程序的中間形式從頭到尾掃描一遍,並作有關的加工處理,生成新的與源程序的中間形式或目標程序。一遍掃描的編譯程序以語法分析程序為核心。分遍將編譯程序前端和后端分開,為編譯程序的移植創造條件;主要缺點是增加了不少的重復性工作。
7. 前端和后端
前端:通常將與源程序有關的編譯部分稱為前端。包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化-------分析部分。特點:與源語言有關。
后端:與目標機有關的部分稱為后端。目標程序生成(與目標機有關的優化)-------綜合部分。特點:與目標機有關。
文法與語言
1. 符號串知識
- 符號串集合冪運算: \(A^0={ε}\), \(A^1=A\), \(A^2=AA\), ...
- 符號串集合閉包運算。正閉包: \(A^+=A^1∪A^2∪A^3∪...\)。閉包: \(A^*=A^0∪A^+\)。
2. 文法:文法是對語言結構的定義與描述。即從形式上用於描述和規定語言結構的稱為"文法"(或稱為"語法")。
文法定義四元組:\(G=(Vn,Vt,P,Z)\)。\(V_n\)為非終結符號集,\(V_t\)為終結符號集,二者統稱字匯表(V);P為產生式(規則)集合;Z為開始符號(識別符號)。
3. 推導:\(==>\)。一步或多步推導:\(=+=>\)。零步或多步推導:\(=*=>\)。規范推導:\(=|=>\)。
最右推導:若符號串中有兩個以上的非終結符,先推右邊的。最左推導類似定義。最右推導也稱規范推導,由規范推導的句型稱為規范句型。
規約是推導的逆過程。最左規約與最右推導互逆,最左規約也稱規范規約。對句型中最左簡單短語(句柄)進行的規約稱為規范規約。
語法樹中,語法成分在形式語言中又稱為“非終結符”,單詞符號在形式語言中又稱為“終結符號”。
4. 語言形式定義:
- 句型:Z => x,且x ∈ V。直觀理解,語法樹從左至右的一個序列。
- 句子:Z =+> x,且x ∈ Vt*。直觀理解,語法樹從左至右終結符序列,是句型的一個特例。
- 語言:由文法G[Z]產生的所有句子的集合,記為L(G[Z])。
文法與語言的關系:多對一。
5. 遞歸規則:左遞歸、右遞歸、自嵌入遞歸。遞歸文法的優點:可用有窮條規則,定義無窮語言。
左遞歸文法不能用自頂向下的方法來進行語法分析,會造成死循環。
6. 句型的短語、簡單短語和句柄
已知文法G[Z],\(w::=xuy ∈V^+\) 為該文法的句型。
- 短語:\(Z =*> xUy\),且U =+> u, 則u是句型w相對於非終結符U的短語。直觀理解,短語是句型中的某個非終結符所能推出的符號串。
- 簡單短語:Z =*> xUy,且U => u。
- 句柄:最左的簡單短語。
利用句型對應的語法樹,某子樹的末端結點按自左向右順序為句型中的符號串,該符號串為該句型的相對於該子樹根的短語。
7. 二義性文法----不可判定
- 文法所定義的某個句子存在兩棵不同的語法樹。
- 文法中存在某個句子,它有兩個不同的規范(最右)推導。
- 文法中存在某個句子,它有兩個不同的規范(最左)規約,即在規約中某些規范句型的句柄不唯一。
8. 文法實用限制
- 有害規則:U => U。引起二義性。
- 多余規則:推導過程中始終用不到或者一旦使用無法推出任何終結符號串。
8. 文法的其他表示
- 擴充的BNF表示
- 語法圖
9. 文法和語言分類:0型,1型,2型,3型。區別在於對產生式施加不同的限制。
- 0型:規則中存在 \(u::=v\),其中u∈V+且至少包含一個Vn,v∈V*。短語結構文法,左部為至少包含一個Vn的符號串,右部為符號串(可為空)。由圖靈機接受。
- 1型:規則中存在 \(xUy ::= xuy\),其中U∈Vn,x、y、u∈V*。上下文敏感(上下文有關)文法,只有在上下文x...y中才可重寫。由一種線性界限的圖靈機接受。
- 2型:規則中存在 \(U ::= u\),其中U∈Vn,u∈V*。上下文無關文法,與BNF表示等價。由下推自動機接受。
- 3型:規則中存在 \(U ::= t\) 或 \(U ::= Wt\)(左線性)【\(T::>tW\)(右線性)】 ,U、W∈Vn,t∈Vt。正則文法。由有窮自動機接受。(左線性和右線性不能同時出現)
- L0>L1>L2>L3,即4類文法從0型到3型是逐漸增加限制的。
四種文法類型的關系及判斷方法
四種文法區別在於規定產生式的左邊和右邊的字符的組成規則不同。明確四種文法從0型到3型,其規則和約定越來越多,限制條件也越來越多,所以,我們判斷時可以從最復雜的3型進行判斷,3->2->1->0依次向下判斷。
快速判斷3型文法
- 左邊必須只有一個字符,且必須是非終結符(∈Vn)。(與2型文法的第一點相同)
- 右邊最多只能有兩個字符,且當有兩個字符時必須有一個為終結符而另一個為非終結符。當右邊只有一個字符時,此字符必須為終結符。
- 左線性和右線性不能同時出現。對於所有右邊有兩個字符的產生式,終結符和非終結符的相對位置一定要固定,要么全為 非終結符+終結符,要么全為 終結符+非終結符。
3型文法實在2型文法的基礎上滿足:A→α|αB(右線性)或A→α|Bα(左線性)。
快速判斷2型文法
- 左邊必須有且僅有一個非終結符。
- 右邊含有若干個終結符和非終結符(只要是有限的就行,沒有個數限制)。 (與1型文法的第二點相同)
2型文法是在1型文法的基礎上,再滿足:每一個α→β中都有α是非終結符(條件1)。
快速判斷1型文法
- 左邊可以含有一個、兩個或兩個以上的字符,但其中必須至少有一個非終結符。
- 右邊含有若干個終結符和非終結符(只要是有限的就行,沒有個數限制)。
1型文法是在0型文法的基礎上滿足:每一個α→β,都有|β|>=|α|。有一特例:α→ε也滿足1型文法。
快速判斷0型文法
不用判斷,只要能描述出來,都屬於0型文法。
參考鏈接:http://www.360doc.com/content/17/0626/11/37475013_666625064.shtml
引用說明
- 邵老師課堂PDF
- 《編譯原理級編譯程序構造》