編譯器,是將便於人編寫,閱讀,維護的高階計算機語言翻譯為計算機能識別,執行的低階機器語言的程式。編譯器將源程式(source program)作為輸入,翻譯產生使用目標語言(target language)的等價程式。源程式一般為高階語言(high-level language),而目標語言則是組合語言或目標機器的目標**(object code),有時也稱作機器**(machine code)。
乙個現代編譯器的主要工作流程如下:
源**(sourcecode)→預處理器(preprocessor)→編譯器(compiler)→匯程式設計序(assembler)→目標**(objectcode)→聯結器(linker)→可執行程式(executables)
編譯器可以生成與編譯器本身所在的計算機和作業系統相同的環境下執行的目標**,這種編譯器又叫做「本地」編譯器。另外,編譯器也可以生成其它平台上執行的目標**,這種編譯器又叫做交叉編譯器
預處理器:預處理器(preprocessor)作用是通過代入預定義等程式段將源程式補充完整。
編譯器前端:編譯器前端(frontend),前端主要負責解析(parse)輸入的源程式,由詞法分析器和語法分析器協同工作。詞法分析器負責把源程式中的『單詞』(token)找出來,語法分析器把這些分散的單詞按預先定義好的語法組裝成有意義的表示式,語句 ,函式等等。 例如「a = b + c;」前端詞法分析器看到的是「a = b ; + c;」,語法分析器按定義的語法,先把他們組裝成表示式「b + c」,再組裝成「a = b + c」的語句。 前端還負責語義(semantic checking)的檢查,例如檢測參與運算的變數是否是同一型別的,簡單的錯誤處理。最終的結果常常是乙個抽象的語法樹(abstract syntax tree,或 ast),這樣後端可以在此基礎上進一步優化,處理。
編譯器後端:編譯器後端(backend)編譯器後端主要負責分析,優化中間**(intermediate representation)以及生成機器**(code generation)。
SVN 學習筆記一(概述)
svn概述 svn是subversion的簡稱,如今她已經是apache家族的一員。作為主流的版本管理軟體,她取代了cvs,並不斷完善。如今已經是大多數軟體開發專案使用的必不可少的工具。svn到底是什麼呢?svn 是乙個時光機,我們用他可以找回過去的一些東西 當然你不可能用他來穿越 在svn中,我們...
VIO學習筆記(一) 概述
學習資料是深藍學院的 從零開始手寫vio 課程,對課程做一些記錄,方便自己以後查詢,如有錯誤還請斧正。由於習慣性心算公式,所以為了加深理解,文章公式採用手寫的形式。imu 與視覺定位方案優勢與劣勢對比 融合方案 預備數學知識 以視覺與 imu 融合實現里程計 以影象形式記錄資料,頻率較低 15 60...
MYSQL學習筆記(一)概述
1.關係型資料庫的管理系統 比如當前有兩張表 學生資訊表 學號,姓名,性別,身份證號,學院,專業,入學時間 學生成績表 學號,科目,成績 我們可以根據乙個學生的學號查詢到他的某一學科的成績,即兩張表通過學號聯絡起來,這就是關係型資料庫管理系統。本階段主要學習的是 mysql 2.mysql的優勢 免...