- 1-1什么是編譯
- 1-2編譯系統(tǒng)的結(jié)構(gòu)
- 1-3詞法分析
- 1-4語法分析概述
- 1-5語義分析概述
- 1-6中間代碼生成和編譯器后端
- 2-1詞法語法分析基本概念
- 2-2文法定義
- 2-3語言的定義
- 2-4文法的分類
- 2-5CFG的分析樹
- 3-1正則表達(dá)式
- 3-2正則定義
- 3-3有求自動機
- 3-4有窮自動機的分類
- 3-5從正則表達(dá)式到有窮自動機
- 3-6從NFA到DFA的轉(zhuǎn)換
- 3-7識別單詞的DFA
- 4-1自頂向下分析概述
- 4-2文法轉(zhuǎn)換
- 4-3LL1文法
- 4-4FIRST集和FOLLOW集
- 4-5遞歸的預(yù)測分析法
- 4-6非遞歸的預(yù)測分析法
- 4-7預(yù)測分析法中的錯誤處理
- 4-8自底向上的分析概述
- 4-9LR分析法概述
- 4-10 LR0分析
- 4-11 LR0分析表構(gòu)造
- 4-12SLR
- 4-13LR1分析
- 4-14LALR分析法
- 4-15二義性文法的LR分析
- 4-16LR分析中的錯誤處理
- 5-1語法制導(dǎo)翻譯概述
- 5-2語法制導(dǎo)定義
- 5-3SSD的求值順序
- 5-4S屬性定義與L屬性定義
- 5-5語法制導(dǎo)翻譯方案
- 5-6在非遞歸的預(yù)測分析過程中進(jìn)行翻譯
- 5-7在遞歸預(yù)測過程中進(jìn)行翻譯
- 5-8L屬性定義的自底向上翻譯
- 6-1類型表達(dá)式
- 6-2聲明語句的翻譯
- 6-3簡單賦值語句的翻譯
- 6-4數(shù)組引用的翻譯
- 6-5控制流語句SDT
- 6-6布爾表達(dá)式SDT
- 6-7控制流的例子
- 6-8布爾表達(dá)式的回填
- 6-9控制流語句的回填
- 6-10SWITCH語句的翻譯
- 6-11過程調(diào)用語句的翻譯
- 7-1運行存儲分配概述
- 7-2靜態(tài)存儲分配
- 7-3棧式存儲分配
- 7-4調(diào)用序列和返回序列
- 7-5非局部數(shù)據(jù)的訪問
- 7-6符號表
- 7-7符號表建立
- 8-1流圖
- 8-2常用代碼優(yōu)化方法一
- 8-3常用代碼優(yōu)化方案二
- 8-4基本快的優(yōu)化
- 8-5數(shù)據(jù)流分析
- 8-6到達(dá)定值分析
- 8-7到達(dá)定值方程的計算
- 8-8活躍變量分析
- 8-9可用表達(dá)式分析
- 8-10支配結(jié)點和回邊
- 8-11自然循環(huán)及其識別
- 8-12刪除全局工工資表達(dá)式和賦值語句
- 8-13代碼移動
- 8-14作用于歸納變量的強度削弱
- 8-15歸納變量的刪除
- 9-1代碼生成器的主要任務(wù)
- 9-2一個簡單的目標(biāo)機模型
- 9-3指令選擇
- 9-4寄存器的選擇
- 9-5寄存器選擇函數(shù)getReg的設(shè)計
- 9-6窺孔優(yōu)化
這學(xué)期在《編譯原理》這門課的實驗中收獲了很多。最重要的是學(xué)習(xí)了一種系統(tǒng)設(shè)計的思想,一種對全局把握的能力。系統(tǒng)是一個很龐大的工程,它里面包含很多模塊,模塊之間相互聯(lián)系,雖然盡量使用“高內(nèi)聚,低耦合”的設(shè)計思想,但系統(tǒng)越大,不可避免地會提高模塊之間的耦合程度,這時就需要設(shè)計者既有一種縱觀全局的開闊眼界,又有對每一個細(xì)節(jié)的精準(zhǔn)把握。在編寫這個編譯器的過程中我的體會是:代碼越多,調(diào)試越困難。因為代碼越多,程序一旦編寫錯了,定位出錯位置就比較難了。比如我在編寫語法分析器的過程中發(fā)現(xiàn)有一個錯誤如何調(diào)試都不對,后來發(fā)現(xiàn)不是語法分析的代碼有錯,而是之前編寫的詞法分析器有一個隱性的錯誤當(dāng)時測試時沒有發(fā)現(xiàn),這讓我感到其實程序測試也是很重要的一項的工作,尤其是在比較大型的系統(tǒng)編寫過程中,需要對之前編寫的代碼進(jìn)行充分的測試,保證在開始新工作之前以前的代碼都是正確的。另一個讓我印象深刻的錯誤是在編寫符號表的過程中,是一個很低級的錯誤,但卻花費了我好幾天也沒調(diào)試出來,就是聲明一個指針int *pint;那么在訪問過程中如pint+1,這個1的單位不是字節(jié),而是這個pint類型的size,在這里相當(dāng)于加了4個字節(jié)。這個錯誤在于我對C語言的掌握不夠,以前的知識模糊。調(diào)試這個錯誤的過程中IDE提示的出錯位置不是在這,而是在另一個malloc申請內(nèi)存的語句處,這是因為以前錯誤對不該訪問的地址訪問、賦值,導(dǎo)致程序在申請堆上空間時出錯。
本課程共計20講。
第1講 緒論
第2講 程序設(shè)計語言及其文法
第3講 詞法分析
第4講 語法分析_1
第5講 語法分析_2
第6講 語法分析_3
第7講 語法分析_4
第8講 語法制導(dǎo)翻譯_1
第9講 語法制導(dǎo)翻譯_2
第10講 語法制導(dǎo)翻譯_3
第11講 中間代碼生成_1
第12講 中間代碼生成_2
第13講 中間代碼生成_3
第14講 中間代碼生成_4
第15講 運行存儲分配
第16講 代碼優(yōu)化_1
第17講 代碼優(yōu)化_2
第18講 代碼優(yōu)化_3
第19講 代碼優(yōu)化_4
第20講 代碼生成
課程大綱
第1講 緒論
1-1 什么是編譯
1-2 編譯系統(tǒng)的結(jié)構(gòu)
1-3 詞法分析概述
1-4 語法分析概述
1-5 語義分析概述
1-6 中間代碼生成及編譯器后端概述
本講模擬練習(xí)題(不計分)
本講課程講義(PDF文檔)
【討論1-1】編譯過程與人工翻譯過程之間的關(guān)系
【討論1-2】符號表中NAME字段的設(shè)計
第1講 測驗(計分)
本講課程講義(PPT文檔)
第2講 程序設(shè)計語言及其文法
2-1 基本概念
2-2 文法的定義
2-3 語言的定義
2-4 文法的分類
2-5 CFG的分析樹
本講模擬練習(xí)題(不計分)
本講課程講義(PDF文檔)
【討論2-1】計算機中是如何表示語言的?
【討論2-2】每一類單詞可否看成一種語言?
第2講測驗(計分)
本講課程講義(PPT文檔)
第3講 詞法分析
3-1 正則表達(dá)式
3-2 正則定義
3-3 有窮自動機
3-4 有窮自動機的分類
3-5 從正則表達(dá)式到有窮自動機
3-6 從NFA到DFA的轉(zhuǎn)換
3-7 識別單詞的DFA
本講模擬練習(xí)題(不計分)
本講課程講義(PDF文檔)
第3講測驗(計分)
本講課程講義(PPT文檔)
第4講 語法分析_1
4-1 自頂向下分析概述
4-2 文法轉(zhuǎn)換
4-3 LL(1)文法
本講模擬練習(xí)題(不計分)
本講課程講義(PDF文檔)
4-4 FIRST集和FOLLOW集的計算
本講課程講義(PPT文檔)
第4講測驗(計分)
第5講 語法分析_2
4-5 遞歸的預(yù)測分析法
4-6 非遞歸的預(yù)測分析法
4-7 預(yù)測分析中的錯誤處理
本講模擬練習(xí)題(不計分)
本講課程講義(PDF文檔)
第5講測驗(計分)
本講課程講義(PPT文檔)
第6講 語法分析_3
本講課程講義(PPT文檔)
4-8 自底向上分析概述
4-9 LR分析法概述
4-10 LR(0)分析
4-11 LR(0)分析表構(gòu)造算法
本講模擬練習(xí)題(不計分)
本講課程講義(PDF文檔)
【討論6-1】下推自動機與有窮自動機之間的關(guān)系
【討論6-2】LR語法分析棧中狀態(tài)信息與文法符號信息之間的關(guān)系
第6講測驗(計分)
