編譯原理2019年期末複習提綱
製作:紀元 - 劉李明
本提綱遵循CC-BY-NC-SA協議
(署名-非商業性-相同方式共享)參考PPT:中國大學MOOC-武漢理工大學-編譯原理(SPOC課程)
第一章
知識回顧
編譯程序與解釋程序
編譯程序會生成目標代碼,解釋程序不會生成目標代碼(邊解釋邊分析,解釋一句執行一句)
五個階段:(注重功能+輸入輸出)
- 詞法分析
- 語法分析
- 語義分析+中間代碼生成
- 代碼優化
- 目標代碼生成
前三個階段屬於前段,不依賴目標機
後三個階段屬於後端,依賴目標機
重點學習中間代碼優化,一部分屬於前段,一部分屬於後端
第二章 - 文法與語言
知識回顧
文法的形式化定義
- 第二章 知識點3 PPT24
遵循體系:喬姆斯基形式化定義體系
四元組:(vn-非終結符集,vt-終結符集,p-產生式集,s-文法開始符號)
文法的分類
具體分類:0,1,2,3型文法
-
2型文法:上下文無關文法,主要用於程序設計中的語法分析
-
型文法:正規文法,主要用於單詞的分析(用於識別單詞)
文法等價
如果兩個文法定義、描述的語言相同,那麼認爲文法等價。
-
給語言寫文法,得到的結果不一定唯一(角度不同結果不同)
-
文法寫出的語言相同,那麼一定等價
建立在文法形式化上的推導
- 第二章 知識點4 PPT2-3
主要用於語法分析階段,特別是自頂向下語法分析中,指用產生式右部替換右部。
最左推導,最右,一般
- 第二章 知識點4 PPT5
最左推導:堅持在當前推導步驟中,替換最左邊那個非終結符。
最右推導:堅持在當前推導步驟中,替換最右邊那個非終結符。
一般推導:在推導過程中無特定要求
推導符號表示
直接推導:雙箭頭
一步或多步推導:箭頭上包括正閉包符號(加號)
零步或多步推導:箭頭上包括閉包符號(星號)
句型、句子、語言
- 第二章 知識點4 PPT2-4,7
給定一個文法機,如果從文法開始符號s出發,經過0步或多步推導得到一個串a
- 如果a屬於Vn、Vt的閉包,那麼這個a就是句型。
- 如果a屬於Vt的閉包,那麼這個a就是句子。(句子是僅包含終結符的句型)
- 給定一個文法機,其所描述的語言就是句子的集合。(語言是屬於句子的a的集合)
語法樹(推導樹)與二義性
- 第二章 知識點4 PPT10、16
文法二義性:對於一個文法機,如果一個句子/型,能找到兩個不同的最左/右推導(推導樹),那麼就有二義性
沒有程序能判斷一個文法機的二義性
習題
- 文法-語言(給語言寫文法必考):P34:2,3,8,12,13,16
- 推導、語法樹、文法的二義性:P34:4,6,7,8,9,11
短語、直接短語:P34:10,11
第三章-詞法分析
知識回顧
詞法分析任務、單詞的輸出
- 第三章 知識點5 PPT22、17
編譯的第一個階段,對源代碼程序進行掃描(自左向右自上而下)依據相應的規則識別出單詞,並把單詞轉化爲機內的統一形式token(二元組)
單詞的分類
- 第三章 知識點5 PPT1 6
單詞的描述工具
- 第三章 知識點5 PPT2 3-43
- 正規文法
- 正規式
- 有窮自動機
- 確定有窮自動機(DFA)
- 不確定有窮自動機(NFA)
NFA畫法
- 第三章 知識點6 PPT1 3-6
初態:雙箭頭
終態:雙圈
詞法分析程序的構造過程
- 第三章 知識點8 PPT 3-25
由正規式,正規文法轉化成NFA,然後確定化爲DFA,最後化簡DFA
習題
P64 1、2、3、4、7
正規文法轉化爲NFA
第四章-自頂向下語法分析
知識回顧
自頂向下語法分析思路
- 第四章(1) 知識點10 PPT1 3
(必須是LL(1)型文法)以文法開始符號爲樹根,採用自左推導的方法,自上而下爲待識別符號串構建一棵語法樹
LL(1)文法的定義及判別方法(FIRST、FOLLOW)
- 第四章(1) 知識點10 PPT2 19,21-39
當且僅當同一終結符不同可選集兩兩不相交。
確定的自頂向下分析方法
- 第四章(2) 知識點12 PPT 3-12 知識點13 PPT 1-18
遞歸下降法
預測分析法
預測分析表(LL(1)分析表)的構造
- 第四章(2) 知識點13 PPT 2-4
對文法G的每個產生式A->a執行如下:
- 對每個a屬於Select(A->a),將A->a加入M[A,a]
- 把所有無定義的M[A,a]標上“出錯標誌"
第五章-自底向上分析法
知識回顧
自底向上語法的基本思想
- 第五章(1) 知識點15 PPT 2
實現自底向上分析最常用的技術是:移進-歸約(shift-reduce)分析技術。
- 從所要分析的輸入串開始進行分析
- 從左向右掃描輸入串,一邊將輸入符移進分析棧內,一邊檢查位於棧頂的一串符號是否與某個產生式的右部相同,若發現相同,就替換爲相應產生式的左部的非終結符(歸約);若不相同,則繼續移進輸入符。
- 重複上一步驟,直到歸約至文法開始符號。
其關鍵性問題是:如何識別句柄。
第六章語法制導翻譯與中間代碼的生成
知識回顧
屬性文法
- 第六章(1) 知識點26 屬性文法PPT 2-4
在上下文無關文法基礎上對文法增加了屬性和規則,形成了屬性文法。
語法制導翻譯技術
在語法制導的同時進行翻譯。
中間代碼形式
- 第六章(2) 知識點28 中間代碼形式的PPT 4-12
常用:三地址碼(TAC)、四元式、逆波蘭式、數代法(?)