編譯器是具有高度模組化的一種結構,說白了就是編譯的任務被劃分為乙個個小的子任務,交付給不同的小模組來執行。這些小模組的序列(順序)執行,對應的就是小任務的序列實現,最終就實現了編譯這個總任務。
所以說編譯器也可以看成由多個階段構成的流水線結構
如圖所示,一種簡單的"流水線「式的編譯器結構
這個是具有優化的編譯器結構以及流程圖,注意語法單位就是上面說的抽象語法樹,四元式就是中間**,可以經過優化,提高後面生成的目標**的執行效率
更詳細的框圖,中間每個階段處理都可能出錯,自然需要差錯處理
被我們編譯的源語言:加法表示式sum,他的語言只有兩種形式①直接就是整型數,比如 3 ②兩個整數的加法形式 比如 3+4
目標機器,也就是編譯器所在的那個機器:它為棧式計算機,它上面主要有兩條指令①push n,也就是將運算元壓棧②add;他負責將棧頂元素和次棧頂元素彈出並相加,然後將相加後的結果再壓入棧中(是的,你就當這條指令完成了這麼多複雜的功能就行了)
我們的任務:編譯1+2+3這個源語言寫成的**到我們的目標機器(棧式計算機)上
一:將1+2+3這個字串行送到詞法分析部件(說是部件,其實就是乙個軟體模組)中,生成記號序列。然後將記號序列送至語法分析部件,生成抽象語法樹(一種資料結構)。如下圖所示
二:然後語義分析(這裡面簡化就不寫了),最後再**生成,我們**生成的方法是後序遍歷這棵抽象語法樹,當遍歷到整數n時,生成push n的**(我們這裡說的**是組合語言**),當遍歷到+時,生成add**,所以我們最後生成的目標**為
push 1
push 2
addpush 3
add這樣我們乙個簡單的從源語言到機器**的編譯過程就完成了
編譯器結構
一 乙個編譯器的結構 我們可以吧編譯器看作是乙個黑盒子,它可以把源程式對映為在語義上等價的目標程式。這個對映過程我們我們可以先分為兩個部分 分析部分和綜合部分。1 分析部分 把源程式分解為多個組成要素,並在這些要素之上加上語法結構。然後,使用這個語法結構來建立乙個中間表示。而且,分析部分會收集有關源...
編譯原理 編譯器的編譯基本過程
原文出處 崤嶙的部落格 編譯器最基本的功能就是把高階語言 例如c fortran 編寫的 轉化為機器指令 就是01串 從這個角度來說它本質上是個轉換過程。經典的編譯過程主要包括 1 詞法分析 lexical analysis 2 語法分析 語法分析的輸入是一連串的token 詞法分析的輸出 根據語言...
Saipan編譯器結構
我開發中的編譯器名字暫時叫 saipan 就是塞班島的意思,那是個美麗的地方.目前它分為已下幾個模組 預處理 詞法分析 語法分析 語義分析 位元組碼生成 以及 符號管理,型別系統,屬性管理,錯誤處理 等幾個部分,並在語法分析和語義分析中完成一些屬性的計算.各個模組大概功能如下 預處理 目前只是簡單的...