這學(xué)期在《編譯原理》這門課的實(shí)驗(yàn)中收獲了很多。最重要的是學(xué)習(xí)了一種系統(tǒng)設(shè)計(jì)的思想,一種對(duì)全局把握的能力。系統(tǒng)是一個(gè)很龐大的工程,它里面包含很多模塊,模塊之間相互聯(lián)系,雖然盡量使用“高內(nèi)聚,低耦合”的設(shè)計(jì)思想,但系統(tǒng)越大,不可避免地會(huì)提高模塊之間的耦合程度,這時(shí)就需要設(shè)計(jì)者既有一種縱觀全局的開(kāi)闊眼界,又有對(duì)每一個(gè)細(xì)節(jié)的精準(zhǔn)把握。在編寫這個(gè)編譯器的過(guò)程中我的體會(huì)是:代碼越多,調(diào)試越困難。因?yàn)榇a越多,程序一旦編寫錯(cuò)了,定位出錯(cuò)位置就比較難了。比如我在編寫語(yǔ)法分析器的過(guò)程中發(fā)現(xiàn)有一個(gè)錯(cuò)誤如何調(diào)試都不對(duì),后來(lái)發(fā)現(xiàn)不是語(yǔ)法分析的代碼有錯(cuò),而是之前編寫的詞法分析器有一個(gè)隱性的錯(cuò)誤當(dāng)時(shí)測(cè)試時(shí)沒(méi)有發(fā)現(xiàn),這讓我感到其實(shí)程序測(cè)試也是很重要的一項(xiàng)的工作,尤其是在比較大型的系統(tǒng)編寫過(guò)程中,需要對(duì)之前編寫的代碼進(jìn)行充分的測(cè)試,保證在開(kāi)始新工作之前以前的代碼都是正確的。另一個(gè)讓我印象深刻的錯(cuò)誤是在編寫符號(hào)表的過(guò)程中,是一個(gè)很低級(jí)的錯(cuò)誤,但卻花費(fèi)了我好幾天也沒(méi)調(diào)試出來(lái),就是聲明一個(gè)指針int *pint;那么在訪問(wèn)過(guò)程中如pint+1,這個(gè)1的單位不是字節(jié),而是這個(gè)pint類型的size,在這里相當(dāng)于加了4個(gè)字節(jié)。這個(gè)錯(cuò)誤在于我對(duì)C語(yǔ)言的掌握不夠,以前的知識(shí)模糊。調(diào)試這個(gè)錯(cuò)誤的過(guò)程中IDE提示的出錯(cuò)位置不是在這,而是在另一個(gè)malloc申請(qǐng)內(nèi)存的語(yǔ)句處,這是因?yàn)橐郧板e(cuò)誤對(duì)不該訪問(wèn)的地址訪問(wèn)、賦值,導(dǎo)致程序在申請(qǐng)堆上空間時(shí)出錯(cuò)。
本課程共計(jì)20講。
第1講 緒論
第2講 程序設(shè)計(jì)語(yǔ)言及其文法
第3講 詞法分析
第4講 語(yǔ)法分析_1
第5講 語(yǔ)法分析_2
第6講 語(yǔ)法分析_3
第7講 語(yǔ)法分析_4
第8講 語(yǔ)法制導(dǎo)翻譯_1
第9講 語(yǔ)法制導(dǎo)翻譯_2
第10講 語(yǔ)法制導(dǎo)翻譯_3
第11講 中間代碼生成_1
第12講 中間代碼生成_2
第13講 中間代碼生成_3
第14講 中間代碼生成_4
第15講 運(yùn)行存儲(chǔ)分配
第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 語(yǔ)法分析概述
1-5 語(yǔ)義分析概述
1-6 中間代碼生成及編譯器后端概述
本講模擬練習(xí)題(不計(jì)分)
本講課程講義(PDF文檔)
【討論1-1】編譯過(guò)程與人工翻譯過(guò)程之間的關(guān)系
【討論1-2】符號(hào)表中NAME字段的設(shè)計(jì)
第1講 測(cè)驗(yàn)(計(jì)分)
本講課程講義(PPT文檔)
第2講 程序設(shè)計(jì)語(yǔ)言及其文法
2-1 基本概念
2-2 文法的定義
2-3 語(yǔ)言的定義
2-4 文法的分類
2-5 CFG的分析樹(shù)
本講模擬練習(xí)題(不計(jì)分)
本講課程講義(PDF文檔)
【討論2-1】計(jì)算機(jī)中是如何表示語(yǔ)言的?
【討論2-2】每一類單詞可否看成一種語(yǔ)言?
第2講測(cè)驗(yàn)(計(jì)分)
本講課程講義(PPT文檔)
第3講 詞法分析
3-1 正則表達(dá)式
3-2 正則定義
3-3 有窮自動(dòng)機(jī)
3-4 有窮自動(dòng)機(jī)的分類
3-5 從正則表達(dá)式到有窮自動(dòng)機(jī)
3-6 從NFA到DFA的轉(zhuǎn)換
3-7 識(shí)別單詞的DFA
本講模擬練習(xí)題(不計(jì)分)
本講課程講義(PDF文檔)
第3講測(cè)驗(yàn)(計(jì)分)
本講課程講義(PPT文檔)
第4講 語(yǔ)法分析_1
4-1 自頂向下分析概述
4-2 文法轉(zhuǎn)換
4-3 LL(1)文法
本講模擬練習(xí)題(不計(jì)分)
本講課程講義(PDF文檔)
4-4 FIRST集和FOLLOW集的計(jì)算
本講課程講義(PPT文檔)
第4講測(cè)驗(yàn)(計(jì)分)
第5講 語(yǔ)法分析_2
4-5 遞歸的預(yù)測(cè)分析法
4-6 非遞歸的預(yù)測(cè)分析法
4-7 預(yù)測(cè)分析中的錯(cuò)誤處理
本講模擬練習(xí)題(不計(jì)分)
本講課程講義(PDF文檔)
第5講測(cè)驗(yàn)(計(jì)分)
本講課程講義(PPT文檔)
第6講 語(yǔ)法分析_3
本講課程講義(PPT文檔)
4-8 自底向上分析概述
4-9 LR分析法概述
4-10 LR(0)分析
4-11 LR(0)分析表構(gòu)造算法
本講模擬練習(xí)題(不計(jì)分)
本講課程講義(PDF文檔)
【討論6-1】下推自動(dòng)機(jī)與有窮自動(dòng)機(jī)之間的關(guān)系
【討論6-2】LR語(yǔ)法分析棧中狀態(tài)信息與文法符號(hào)信息之間的關(guān)系
第6講測(cè)驗(yàn)(計(jì)分)