本課程主要介紹程序設計語言編譯程序構造的基本原理和基本實現方法。講授形式語言、有限自動機、自上而下和自下而上的語法分析、LR分析方法、屬性文法和語法制導翻譯、語義分析的代碼產生、存儲器的動態分配與管理、符號表的組織與管理、優化問題、代碼生成等內容。通過本課程學習,使學生對編譯的基本概念、原理和方法有完整的和清楚的理解,并能正確地、熟練地運用。
[編譯原理]
本科課程教學大綱(理工醫類/電氣學院)
課程信息 | |||
開課單位 | 電氣與計算機工程學院 | 開課學年學期 | 2020-2021學年第1學期 |
授課年級 | 18級 | 授課對象專業 | 計算機專業 |
課程學分 | 3 | 課程學時 | 54 |
課程性質 | ¨專業必修 t專業選修 ¨公共必修 ¨公共選修 ¨成長必修 ¨專業限選 ¨公共限選 | ||
先修課程要求 | |||
教師信息 | |||
授課教師 | 張鑒新 | 聯系電話 | 13926195522 |
答疑地點 | 2教104 | 答疑時間 | 周三14:30-15:30 |
電子郵件 | 13273606@qq.com |
課程負責人:張鑒新 主 審:
一、課程描述及課程目標
(一)課程描述
本課程主要講述高級語言翻譯為計算機能執行的代碼的原理、過程、方法和技術,核心是介紹高級語言到匯編語言的翻譯。讓學生理解編譯和高級語言程序之間的關系,掌握詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成等各個階段的原理、方法和實現技術,真正認識計算機信息處理的實質、訓練抽象思維能力、體驗系統軟件的開發過程,進一步提升計算機科學與技術的專業素養。
(二)課程目標
1. 掌握形式語言和自動機的基本概念,理解高級語言編譯的基本原理,并能夠將這些原理應用于高級語言的設計之中;核心能力1
2. 理解編譯程序的結構及各個模塊的功能,利用軟件工程方法分析和設計某語言的編譯程序的各個模塊,并能夠選擇合適的方法實現。核心能力2
3. 能夠理解現有某高級語言的編譯系統中各模塊的功能和實現方法,能夠對不同方法的優劣進行對比和分析;核心能力3
4.能夠主動做好課前預習和課后實踐,養成自主學習的意識和提高不斷學習的能力,核心能力6。
主要知識點:
1.1 什么叫編譯原理
1.2 編譯原理概述
1.3 符號表管理
1.4 編譯各階段的分組
1.5 編譯技術的應用
2.1 文法預備知識
2.2 文法非形式的討論
教學要求:通過本次課程的學習,使學生了解編譯原理的基本概念,掌握編譯原理的全過程,清楚各階段的工作內容及編譯技術的應用。
重點:編譯原理概述。
難點:編譯原理概述。
采用的教學方法:案例法--列舉英文翻譯中文的過程來描述編譯原理各階段.
講授學時:3學時
(二)第2講 第二章 文法和語言
主要知識點:
2.3 文法和語言的形式定義
2.4 語法樹和二義性文法
2.5 句子的分析
2.6 有關文法的實用限制
教學要求:通過本次課程的學習,使學生了解文法的基礎知識,掌握文法的定義,最左推導和最右推導,語法樹的畫法以及文法是否具有二義性的判斷方法。
重點:文法和語言的形式定義、語法樹和二義性文法。
難點:文法和語言的形式定義。
采用的教學方法:案例法--列舉了中文和英文句子的推導過程,從而讓學生明白文法和語言的定義.
講授學時:3學時
(三)第3講 第三章 詞法分析
主要知識點:
3.1 詞法分析程序的功能及實現方案
3.2 單詞的種類及詞法分析程序的輸出形式
3.3 正則文法和狀態圖
3.4 詞法分析程序的設計與實現
教學要求:通過本次課程的學習,使學生了解詞法分析的主要任務,掌握詞法分析程序的設計思路,正則文法和狀態圖相互轉換的方法。
重點:正則文法和狀態圖。
難點:正則文法和狀態圖。
采用的教學方法:案例法。
講授學時:3學時
(四)第4講 第三章 詞法分析
主要知識點:
3.5 正則表達式與有窮自動機
教學要求:通過本次課程的學習,使學生掌握正則表達式與有窮自動的轉換方法。
重點:正則表達式與有窮自動機。
難點:正則表達式與有窮自動機。
采用的教學方法:案例法。
講授學時:3學時
(五)第5講 第三章 詞法分析
主要知識點:
3.6 正則文法、正則表達式與有窮自動機相互轉換
教學要求:通過本次課程的學習,使學生掌握正則表達式與有窮自動的轉換方法。
重點:正則表達式與有窮自動機。
難點:正則表達式與有窮自動機。
采用的教學方法:案例法。
講授學時:3學時
(六)第6講 第四章 自頂向下語法分析
主要知識點:
4.1 自頂向下語法分析的思想
4.2 左遞歸和回溯問題
4.3 遞歸子程序法
教學要求:通過本次課程的學習,使學生了解自頂向下的語法分析方法,對左遞歸和回溯的問題應該如何解決,掌握遞歸子程序法。
重點:左遞歸和回溯問題、遞歸子程序法。
難點:左遞歸和回溯問題。
采用的教學方法:案例法。
講授學時:3學時
(七)第7講 第四章 自頂向下語法分析
主要知識點:
4.4 LL(1)分析法
教學要求:通過本次課程的學習,使學生掌握LL(1)分析法的總控算法的基本思想,會計算FIRST、FOLLOW集合。
重點:計算FIRST、FOLLOW集合。
難點:計算FIRST、FOLLOW集合。
采用的教學方法:案例法。
講授學時:3學時
(八)第8講 第四章 自頂向下語法分析
主要知識點:
4.4 LL(1)分析法
教學要求:通過本次課程的學習,使學生掌握LL(1)分析法的總控算法的基本思想,會計算SELECT集合及構造分析表。
重點:計算SELECT集合及構造分析表。
難點:計算SELECT集合及構造分析表。
采用的教學方法:案例法。
講授學時:3學時
(九)第9講 第五章 自底向上語法分析
主要知識點:
5.1 移進-歸約分析
5.2 簡單優先分析法
5.3 算符優先分析法
教學要求:通過本次課程的學習,使學生了解自底向上的語法分析思想,掌握簡單優先和算符優先分析法。
重點:簡單優先分析法、算符優先分析法。
難點:算符優先分析法。
采用的教學方法:案例法。
講授學時:3學時
(十)第10講 第五章 自底向上語法分析
主要知識點:
5.4 優先函數
5.5 LR分析法
教學要求:通過本次課程的學習,使學生掌握優先函數和算符優先分析法。
重點:LR分析法。
難點:LR分析法。
采用的教學方法:案例法。
講授學時:3學時
(十一)第11講 第五章 自底向上語法分析
主要知識點:
5.6 SLR(1)分析法
5.5 LR(1)、LALR分析法
教學要求:通過本次課程的學習,使學生掌握SLR(1)分析法、LR(1)和LALR分析法。
重點:SLR(1)分析法、LR(1)分析法。
難點:SLR(1)分析法。
采用的教學方法:案例法。
講授學時:3學時
(十二)第12講 第六章 語法制導翻譯及中間代碼生成
主要知識點:
6.1 屬性文法
6.2 語法制導翻譯概述
6.3 中間代碼生成
6.4 簡單賦值語句翻譯
教學要求:通過本次課程的學習,使學生了解屬性文法和語法制導翻譯概述,中間代碼生成的形式,理解簡單賦值語句翻譯的過程。
重點:中間代碼生成、簡單賦值語句翻譯。
難點:簡單賦值語句翻譯。
采用的教學方法:案例法。
講授學時:3學時
(十三)第13講 第六章 語法制導翻譯及中間代碼生成
主要知識點:
6.5 布爾表達式翻譯
6.6 條件語句翻譯
6.7 說明語句翻譯
6.8 數組和結構翻譯
教學要求:通過本次課程的學習,使學生理解布爾表達式、條件語句、說明語句和數組及結構翻譯的過程。
重點:布爾表達式翻譯。
難點:布爾表達式翻譯。
采用的教學方法:案例法。
講授學時:3學時
(十四)第14講 第七章 符號表管理技術&第八章 錯誤處理
主要知識點:
7.1 符號表概述
7.2 符號表組織與內容
7.3 非分程序結構語言的符號表組織
7.4 分程序結構語言的符號表組織
8.1 錯誤分類
8.2 錯誤診察和報告
8.3 錯誤處理技術
教學要求:通過本次課程的學習,使學生了解符號表管理和錯誤處理技術,能夠區分非分程序結構語言的符號表組織和分程序結構語言的符號表組織。
重點:分程序結構語言的符號表組織、非分程序結構語言的符號表組織。
難點:分程序結構語言的符號表組織、非分程序結構語言的符號表組織。
采用的教學方法:案例法。
講授學時:3學時
(十五)第15講 第九章 目標程序運行時的存儲組織
主要知識點:
9.1 數據空間三種不同使用方法和管理方法
9.2 棧式存儲分配
9.3 參數傳遞
教學要求:通過本次課程的學習,使學生了解目標程序運行時的存儲組織,掌握數據空間三種不同使用方法和管理方法和棧式存儲分配。
重點:數據空間三種不同使用方法和管理方法、棧式存儲分配。
難點:數據空間三種不同使用方法和管理方法、棧式存儲分配。
采用的教學方法:案例法。
講授學時:3學時
(十六)第16講 第十章 代碼優化
主要知識點:
10.1 優化的例子
10.2 基本塊優化
10.3 循環優化
教學要求:通過本次課程的學習,使學生了解代碼優化的過程,掌握簡單優化的方法。
重點:基本塊優化、循環優化。
難點:基本塊優化、循環優化。
采用的教學方法:案例法。
講授學時:3學時
(十七)第17講 第十一章 編譯程序生成方法和工具
主要知識點:
11.1 編譯程序的書寫語言
11.2 自編譯性
11.3 自展
11.4 編譯程序的移植
11.5 編譯程序的自動生成
教學要求:通過本次課程的學習,使學生了解編譯程序的書寫語言、自編譯性,對編譯程序如何移植及自動生成有一定了解。
重點:自編譯性、編譯程序的移植、編譯程序的自動生成。
難點:編譯程序的移植。
采用的教學方法:案例法。
講授學時:3學時
三、課程的預期學習成果
在本門課程結束時,學生應該能夠:
1、正確理解什么是編譯程序;了解編譯程序工作的基本過程及其各階段的基本任務。
2、正確理解上下文無關文法基本概念,包括:文法的定義、編寫、句型、句子、語言、語法樹、二義性等;理解三種參數傳遞方式:傳值、傳地址、傳名的含義。
3、理解詞法分析器功能及形式;熟練掌握詞法分析器設計的原理,掌握運用狀態轉換圖進行詞法分析器設計。
4、正確理解自上而下分析的基本思想;熟練掌握遞歸下降分析基本方法:消除左遞歸,消除回溯,構造遞歸下降子程序;掌握預測分析程序的基本原理和預測分析表構造;理解LL(1)方法的定義。正確理解自下而上語法分析的基本思想,以及歸約、短語、句柄、分析樹等概念;掌握算符優先分析基本方法:算符優先表和和算符優先函數構造技術。
5、正確理解語法制導翻譯基本原理;掌握基于屬性文法的處理方法,了解自上而下分析制導翻譯基本思想和實現方法。熟悉常見的幾種中間語言:四元式、三元式、逆波蘭表示;掌握各種語句到四元式的翻譯方法,包括:簡單算術表達式,布爾表達式,控制語句,數組引用,過程調用等。
6、理解符號表的作用及符號表組織和使用方法,了解名字的作用范圍,了解符號表中一般應包含的內容。
7、正確理解目標程序運行進存儲空間的使用和組織管理方式;理解靜態分配和動態存儲分配基本思想;掌握存儲分配的處理方式;掌握棧式動態分配中活動記錄的作用、組織、內容及使用;了解嵌套過程語言程序運行時整個運行棧的內容的組織。
8、正確理解代碼優化的定義和各種可能的優化概念;掌握用DAG表示進行局部優化的方法。
9、正確理解代碼生成過程的基本問題,理解待用信息、寄存器描述和地址描述等概念;掌握簡單代碼生成算法、寄存器分配策略。
四、 課程要求
(一)出勤
學生應積極參與課堂教學并完成相關的作業、實驗內容。
(二)閱讀資料
學生應認真進行課前預習,閱讀教材和指定參考書及重要的參考文獻。
(三)課堂展示
根據時間及課堂班人數,在可能的情況下安排小組實驗課程討論與效果演示。
(四)課外實踐
本課程是理論性質的課程,不安排項目實踐作為課程內容。
(五)小考與期末考
課程中隨機問答,期末考試。
(六)課程論文
以平時作業為主。
(七)學術誠信
按中山大學南方學院相關規定執行。
(八)剽竊的定義以及相應的懲罰
剽竊是嚴重違反學校規章制度的行為。一經發現,將上報相關部門,并受到包 括開除學籍在內的嚴厲處罰。
五、課程資料
(一)教科書-必讀
黃賢英編著.《編譯原理及實踐教程》(第二版).清華大學出版社.2019年
(二)教科書-強烈推薦
張素琴,呂映芝,蔣維杜,戴桂蘭. 編譯原理[M]. 清華大學出版社, 2015.6.
勞頓. 編譯原理及實踐[M]. 機械工業出版社, 2000.
Alfred V. Aho ,Monica S.Lam. 編譯原理. 機械工業出版社, 2009.
陳意云,張昱.編譯原理(第2版)高等教育出版社,2008
(三)文章-必讀
周靜?, 張敏?, 崔艷利,一種基于c語言詞法分析器的設計,《中國水運:學術版》?, 2007 , 7 (5) :124-125
(四)文章-強烈推薦
胡榮貴、陳意云、郭帆、張昱,基于類型注解的認證編譯器的設計與實現,計算機研 究與發展,41(1),pp.28-33,2004.1.
(五)其他參考資料
http://staff.ustc.edu.cn/~yiyun/#《編譯原理》教學資源
六、教學活動以及對于預期學習成果的評估
1、個人預習
2、課堂講授
3、課堂問答
4、課后作業
5、課后答疑
6、期末考試
預期學習成果 | 教學活動 | 學習成果考察內容:作業/課程實驗 |
第一章 引論 第二章 文法和語言 | 1、2、3、5、6 | 作業:文法左右推導和語法樹 |
第三章 詞法分析 | 1、2、3、4、5、6 | 作業:有機自動機、正則表達式與正狀方法相互轉換 設計:詞法分析器 |
第四章 自頂向下語法分析 | 1、2、3、4、5、6 | 作業:LL(1)文法 |
第五章 自底向上語法分析 | 1、2、3、4、5、6 | 作業:優先函數 |
第六章語法制導翻譯和中間代碼生成 | 1、2、3、4、5、6 | 作業:LR(0)、SLR(1)、LR(1) |
第七章 符號表管理技術 | 1、2、3、4、5、6 | 作業:語義計算 |
第八章 錯誤處理 | 1、2、3、4、5、6 | 設計:詞法分析器 |
第九章 運行時的存儲組織及管理 | 1、2、3、4、5、6 | 設計:詞法分析器 |
第十章 代碼優化 | 1、2、3、4、5、6 | 設計:詞法分析器 |
第十一章 編譯程序生成方法和工具 | 1、2、3、4、5、6 | 設計:詞法分析器 |
七、評估的程序和方法
1、出勤率: 10 %
2、課后作業: 40 %
3、期末考試: 50 %
(二)考試內容及要求
考試包含以下內容:
理論部分
1. 掌握形式語言和自動機的基本概念,理解高級語言編譯的基本原理,并能夠將這些原理應用于高級語言的設計之中(核心能力1)。
2. 理解編譯程序的結構及各個模塊的功能,利用軟件工程方法分析和設計某語言的編譯程序的各個模塊,并能夠選擇合適的方法實現(核心能力2)。
3. 能夠理解現有某高級語言的編譯系統中各模塊的功能和實現方法,能夠對不同方法的優劣進行對比和分析(核心能力3)。
綜合實踐部分
1.根據實際問題的需求,按照任務要求,設計并完成綜合實驗(核心能力2、3)。
2.能夠按照綜合實驗要求,按時完成綜合實驗,了解業界在新方法與新技術,并培養良好的職業習慣(核心能力6)。
八、教學進度計劃表
周次 | 課程要點 | 理論學時 | 實驗學時 | 習題學時 |
1 | 第一章 引論 第二章 文法和語言 | 3 | ||
2 | 第二章 文法和語言
| 3 | ||
3 | 第三章 詞法分析 | 3 | ||
4 | 第三章 詞法分析 | 3 | ||
5 | 第三章 詞法分析 | 3 | ||
6 | 第四章 自頂向下語法分析 | 3 | ||
7 | 第四章 自頂向下語法分析 | 3 | ||
8 | 第四章 自頂向下語法分析 | 3 | ||
9 | 第五章 自底向上語法分析 | 3 | ||
10 | 第五章 自底向上語法分析 | 3 | ||
11 | 第五章 自底向上語法分析 | 3 | ||
12 | 第六章語法制導翻譯和中間代碼生成 | 3 | ||
13 | 第六章語法制導翻譯和中間代碼生成 | 3 | ||
14 | 第七章 符號表管理技術 第八章 錯誤處理 | 3 | ||
15 | 第九章 運行時的存儲組織及管理 | 3 | ||
16 | 第十章 代碼優化 | 3 | ||
17 |
第十一章 編譯程序生成方法和工具 | 3 | ||
18 | 總結、答疑 | 3 | ||
19 | ||||
20 | ||||
總學時 | 54 |
注:此表一式三份,于開學兩周內填好,一份送教務與科研部,一份開課單位留存,一份自留。