編譯原理概述

2021-07-03 12:38:40 字數 1127 閱讀 5907

計算機不能直接理解 高階語言 ,只能直接理解 機器語言 ,所以必須要把高階語言「翻譯」成機器語言,計算機才能執行高階語言編寫的程式。

我們可以粗略地把程式語言分為兩類: 編譯型語言 和解釋型語言(常用的c/c++,pascal和最近流行的go語言都是編譯型語言,而python、ruby等則是解釋型語言,解釋型語言也被稱作

」指令碼語言「

) 。對於它們的「翻譯」,則分別稱之為「編譯」和「解釋」。

解釋:解釋型語言在程式執行時有乙個專門的直譯器,將**翻譯為機器語言,一邊翻譯一邊執行。

編譯:而編譯型語言寫的程式,在執行之前都必須有乙個「編譯」的過程,將原始碼編譯為機器語言的檔案(比如windows下的exe檔案),執行的時候直接執行編譯後的檔案。

編譯是個相當複雜的過程,我們可以大概將編譯過程分為兩部分:源**的分析和目標程式的生產。而為了方便理解編譯過程,我們可以按照編譯的邏輯過程,一步一步來看:

編譯器將原始碼看作乙個很長的字串,首先對它進行從左到右的掃瞄,然後對其做初步分析,識別出**中的單詞(稱作token),分為基本字、識別符號、常數、運算子和界符等,方便編譯的後續步驟。

在該過程中如果發現不符合詞法規則的token,將做出錯處理。

語法分析是對詞法分析得到的單詞流,按語法規則做進一步的分析,識別出語法單位,如表示式、短語、子句、句子和程式等,從而形成一顆「語法樹」。

在該過程中如果發現不符合語法規則的單詞流,將做出錯處理。

經過詞法分析和語法分析,程式如果沒有錯誤,就可以按照語義要求對其進行「翻譯」,形成被稱為「四元式」的中間**。

語義分析生成的中間**不依賴於實際的硬體,便於優化和移植,針對實際狀況做一些等效變換,使程式占用記憶體更小,執行更快。

根據優化後的中間**,可生成有效的目標**。而通常編譯器將其翻譯為彙編**,此時還需要將彙編**經彙編器彙編為目標機器的機器語言。

編譯的各個階段都有可能發現原始碼中的錯誤,尤其是語法分析階段可能會發現大量的錯誤,因此編譯器需要做出錯處理,報告錯誤型別及錯誤位置等資訊。

編譯原理概述

一 編譯過程分析 編譯軟體讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並按照作業系統對可執行檔案格式的要求鏈結生成可執行程式.二 編譯流程表 c源程式 c檔案 編輯器 預處理過程 c檔案 編譯 優化過程 s或.asm檔案 編譯器 ...

編譯原理概述

編譯程式的工作過程 編譯程式的結構 編譯器的自舉和移植 高階語言轉換為可執行語言的過程 以gcc編譯器為例 原始檔為hello.c 步驟一 預處理。將原始檔hello.c預處理成hello.i。該步是將 include中包含的標頭檔案匯入到原始檔中。命令是gcc e hello.c 步驟二 編譯。將...

編譯原理 編譯過程概述

編譯程式即是將高階語言書寫的源程式翻譯成與之等價的目標程式 組合語言或機器語言 其工作可分為六個階段,見下圖 對於編譯的各個階段,邏輯上可以劃分為前端和後端兩部分。前端包括詞法分析到中間 生成中各個階段的工作,後端則是優化及目標 生成的階段。以中間 為分水嶺的原因是把編譯過程分解為與機器有關和無關兩...