·1#第一章 編譯程序概論
學習目標
- 編譯的各個階段
- 編譯程序的概念
- 解釋器,編譯程序的結構和組合
編譯程序的概念
將高級語言翻譯為低級語言(匯編或者機器),這種翻譯叫做編譯原理
編譯的階段
詞法分析>語法分析>語義分析>中間代碼生成>代碼優化>目標代碼生成
中間會有出錯處理
編譯階段的組合
- 分析階段:詞法,語法,語義,只是對程序進行識別和檢查
- 綜合階段:中間代碼生成,代碼優化,目標代碼生成,對源代碼進行翻譯,生成目標代碼
解釋器和編譯器
- 共同點:都是語言的一個實現系統
- 不同點: 解釋器是源程序的一個執行系統,結果是執行結果。編譯器是源程序的轉換系統,結果是目標語言。
tips
- js,python直接使用解釋器,運行過程中可以動態改變。
- 解釋器沒次執行都要解釋一遍,所以程序運行慢。編譯器編譯完成后,以機器語言存儲,所以執行快。
第二章 文法和語言
學習目標
- 掌握:自上而下與自下而上的分析方法
- 理解:文法的形式定義,推導,歸約,句型,句子,語言,上下文無關文法,規范句型,語法樹,短語,句柄
- 了解:文法的類型,文法使用的限制,文法的二義性
直觀概念
語言是一個記號系統
程序設計語言包括:語法和語義
語法:一組規則,用它可以形成和產生一個和合適的程序
-
語義:
- 靜態語義:一系列的規則,確定哪些合乎語法的程序是合適的
- 動態語義:表明程序要做什么
文法:語言語法的描述工具,用有窮的規則吧無窮的句子集描述出來
符號和符號串
- 字母表:元素的非空有窮集合
- 符號串:由字母表的符號組成的任何有窮序列(是有順序的)
不含任何符號的符號串為空串。 - 其他概念:P21
文法
- 規則,產生式,生成式:a::=b a定義b
- 四元組:Vn=非終結符, Vt=終結符 P=規則集合 S=識別符或者開始符號
- 具體應用:P22
- 推導和規約 P22-23
句型,句子,語言
- 句型:字符串X是從開始符推導出來的,則x是文法G的句型。
- 文法:如果一個句型僅有終結符組成,那就是句子。
- 語言:L(G),是文法G的一切句子的集合。
上下文無關文法及其語法樹
- 規范推導和規范句型:每一次推導都是替換a中,都是替換最左和最右的非終結符,則稱為推導為最左(右)推導。
- 最右推導被稱為規范推導
- 由規范推導得到的句型為規范句型
- 語法樹:P27
- 如果一個文法存在每個句子對應兩課不同的語法樹,則這個文法是二義性的。
- 分析方法:自上而下和自下而上的分析方法 P30
詞法分析
- 正規文法:文法中的P,即規則,都有以下形式:A->aB或A->a
- 正規式和正規集
- 正規文法和正規式的等價,相互轉換(P46)
- 有窮自動機:DFA(確定的有窮自動機),NFA(不確定的有窮自動機)
- DFA:P48 DFA狀態圖和矩陣表示
- NFA: P49
- 把NFA用子集法轉換為DFA,用DFA轉換
語法分析
- 自頂向下分析
- 自底向上分析