**:首先明確一下參考書, 我們使用的是《編譯原理》(第三版)陳意雲 張昱 著 高教出版社.
從第乙個 c 語言試驗 "hello world" 我們就已經明白了如何寫**和執行**. 我們開啟編譯器, 可能是亙古不變的 vc 6.0, 亦或是簡潔友好的 dev c++. 不管怎樣, 我們都明白這樣的流程, 寫**->除錯執行. 而我們又知道, 不管你的計算機是什麼架構, 都不能直接執行 c 的**. 在面向硬體的機器碼和高階語言之間起到紐帶作用的便是編譯器.
我們學習編譯原理的目的就是要明白編譯器是怎樣將乙個高階語言轉變成 0/1 串的機器語言的. 整個流程如下圖所示:
需要注意的是, 這個流程僅用來說明大致的工作內容與順序,並不嚴謹. 其中前面三項往往被稱為編譯器的前端, 優化被稱作中段, 而生成目標**叫做編譯器的後端.
簡單的解釋一下這個流程圖. 首先是詞法分析, 詞法分析的工作在於區分**中的單詞與符號. 比如在 c 語言中, 識別符號可以由空格斷開區分. 如: "int var = 3;", 詞法分析的任務便是識別出各個單詞. 我們希望當詞法分析器讀入這一串字串後可以告訴我們這個串中有幾個"單詞", "int", "var", "=" 以及 "3". 且他們分別是"型別名", "變數名", "操作符" 以及"數字". 往往這些資訊以記號的形式存在, 即 "".
拿到這些資訊, 下一步便是語法分析. 語法分析檢查拿到的記號流是否滿足語法要求. 一般語法分析後,我們會得到語法樹. 如"var_a = var_b * (var_c + var_d)", 根據語法分析我們得到這樣的樹:
然後便是語義分析, 這一步裡編譯器就會考慮型別匹配, 轉換等問題.
優化過程中, 編譯器會適當地對**進行一些調整. 比如資料對齊, 減少依賴甚至是並行化. 最後一步生成目標**, 就是編譯器用前面準備好的資訊生成最後的目標**(機器碼). 後兩部分可能不是我們重點考慮的內容. 編譯器的基本原理主要還是集中在前三個部分。
建立於 2017.9.12osinovsy
編譯原理 第1章
1.編譯程式是一種翻譯程式,它的源語言是高階語言,目標語言是機器語言或組合語言,編譯程式是翻譯程式中運用最廣泛的。所以編譯是翻譯的一種。首先思考一段英文翻譯為中文時的步驟 步驟 識別句子中的乙個個單詞 詞法分析 分析句子的語法結構 語法分析 分析句子的含義 語義分析 進行初步翻譯 中間 生成 對譯文...
編譯原理課程總結 第3章
詞法分析器 詞法分析器的功能和輸出形式 關鍵字,識別符號,常數,運算子,界符 單詞符號的識別 超前搜尋 在單詞識別的過程中,通過向前多讀幾個符號的形式,準確的進行單詞的識別。一旦確定識別到的單詞之後,需要進行掃瞄指標的回退,保證單詞識別工作的順利進行 直接分析法 根據讀來的第乙個字元的種類分別轉到各...
《編譯原理 龍書》練習第3章
3.1.1 float limitedsquare x intyywrap a輸入a以後為 b a輸入b以後為 c 2 圖2 29 開始狀態a a a輸入a以後為 b b a輸入b以後為 a b b a c c b b c c a c c b d d d a d d b 3 略3.7.2 1 aab...