1 概論
1.1 程序語言的分類
- 命令式語言(Imperative Language)
- 通過指明一系列可執行的運算及運算的次序來描述計算過程的語言
- 程序的層次性和抽象性不高
- 聲明式語言(Declarative Language)
- 著重描述要處理什么,而非如何處理的非命令式語言
- 函數(應用)式語言(Functional Language)
- 基本運算單位是函數
- 邏輯式(基于規則)語言(Logical Language)
- 基本運算單位是謂詞
- SQL
- 面向對象語言(Object-Oriented Language)
- 以對象為核心
- 具有識認性(對象)、類別性(類)、多態性和繼承性
1.2 程序翻譯的方式有哪幾種?有何不同?
1.3 編譯程序包含有多少個階段,各階段的功能任務分別是什么?
詞法分析 ==> 語法分析 ==> 語義分析 ==> 中間代碼生成 ==> 代碼優化 ==> 目標代碼生成
2 詞法分析
2.1 DFA、NFA的基本概念
- DFA、NFA是由哪幾部分構造的?
- 構造一個正則表達式描述語言L={anbm|n>m},然后畫出DFA
2.2 正則表達式 → NFA → DFA → DFA最小化
- 給出一個問題,用正則表達式寫出解,然后進行轉換。
- e.g. 寫出以a開始,b結束,不包含aabb的正則表達式,然后轉化成DFA
2.3 詞法分析器的基本構造。
- 要求會用偽代碼寫出簡單的詞法分析器(直接用條件語句實現DFA)。
- e.g. 識別C語言中浮點數的詞法分析器片段。
- 要求掌握DFA圖的存儲方式以及基于DFA圖實現詞法分析的算法。
3 上下文無關文法及分析
3.1 文法、語言?
- e.g. 描述一個文法所定義的語言
3.2* 文法的分類是怎么樣的?它們之間有何關系?
喬姆斯基文法系統(Chomsky Grammar Sys-terns)
- 0型文法 短語結構文法(Phrase Structure Grammar)
- 1型文法 上下文有關文法(Context-Sensitive Grammar)
- 2型文法 上下文無關文法(Context-Free Grammar)
- 3型文法 正則文法(Ragular Grammar)
3.2 推導、規約、語法樹、文法的二義性?
3.3 如何畫語法樹?
- e.g. 給出一個文法以及一個句子,畫出推導的語法樹
3.4* 文法二義性的消除方法有多少種?
4 自頂向下分析!!!
4.1 自頂向下分析法的問題分析
- e.g. 給出某個文法(例如正則表達式,四則運算表達式,匹配注釋,匹配括號,二叉樹等)的描述,要求寫出對應的上下文無關文法。
4.2 遞歸下降語法分析方法
- e.g. 給出一個上下文無關文法,寫出遞歸下降分解程序。
4.3 LL(1)分析方法
- e.g. 描述各個步驟的算法,例如如何消除左遞歸,如何求First與follow集合。
4.4* First與Follow集合
5 自底向上分析
5.1 SLR(1), LR(1)中各個字母/數字的含義是什么?
5.2 如何畫出LR(0) DFA和LR(1) DFA圖?
- e.g. 給出一個文法,要求畫出LR(0) DFA圖
5.3 LR(0)文法和SLR(1)文法的判斷
- e.g. 給出一個文法,判斷該文法是否是LR(0),SLR(1)
6 語義分析&代碼生成
6.1 語法制導翻譯的應用
- e.g. 實現常見的C語言控制語句的文法和翻譯的語義動作(if、while、switch)。