天天看點

【編譯原理】概述總結(一)

         編譯原理看起來很抽象很難,其實理清楚之後也還好。編譯的整體過程如下圖:

【編譯原理】概述總結(一)

          通過把源程式轉換成一種友善處理和分析的資料結構,這個過程就是詞法分析和文法分析來完成的。

【詞法分析】

        它的主要任務是,按構詞規則識别源程式的字元流、識别辨別符、整體、界限符等單詞,并報告發現的詞法錯誤。這裡引進了正規表達式和有窮自動機分别作為單詞的描述工具和識别機制。

        說白了,就是從左到右一個字元一個字元地掃描源程式。

【文法分析】

          文法分析是在詞法分析的基礎上将單詞串進一步分解,如語句、表達式等。根據特定的文法規則,檢查單詞串是否符合既定規則。

【語義分析】

         語義分析的任務是審查源程式有無語義錯誤。就好像一句話的每個字都寫對了,但是連起來意思對不對呢?

【中間代碼生成】

        有的編譯程式将源程式變成一種内部表示形式,即中間代碼。有些編譯程式并不要中間代碼,不存在中間代碼生成階段。有些編譯程式也不進行優化。

【代碼優化】

         代碼優化是在不改變代碼的功能前提下對中間代碼對代碼做一些等價變換,通過删除無用代碼、減少備援等手段,使得最後生成的目标代碼更為高效。

【目标代碼生成】

        編譯的最後一個階段就是目标代碼生成了。任務是把中間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或彙編指令代碼。這部分工作很複雜,涉及到硬體系統結構和機器指令等。

【符号表管理】

        編譯過程中源程式的名字和收集到的每個名字的各種屬性資訊,諸如類型、作用域、配置設定存儲資訊等各種資訊被保留在種種不同的符号表中,編譯各階段的工作都涉及到構造、查找或更新有關的表格。

【出錯處理】

         若編譯過程中發現源程式有錯誤,編譯程式應報告錯誤的性質和錯誤發生的地點,并且将錯誤所造成的影響限制在盡可能小的範圍内,使得源程式的其餘部分能繼續被編譯下去。出錯處理主要任務是檢查錯誤、報告出錯資訊、排錯、恢複編譯工作。

【小結】

         就像我們要翻譯外國文檔一樣,首先讀文章(詞法分析),然後查單詞(文法分析),單詞連起來分析句子(語義分析),初步翻譯(中間代碼生成),對句子進行潤色(代碼優化),翻譯出來形成文檔(目标代碼)。