主要分爲2個部分:分析(analysis)部分和綜合(synthesis)部分前端
綜合部分:根據中間表示和符號表構造目標程序。java
詞法分析器讀入字節流,將他們組成有意義的詞素(lexeme)序列,以詞法單元(token)的形式輸出:後端
<token-name,attribute-value>數組
例子:緩存
position = initial + rate * 60markdown
詞法分析後爲一個詞法單元序列編輯器
<id,1><=><id,2><+><id,3><*><60>函數
語法分線器使用詞法分析器生成的各個詞法單元 建立樹形的中間表示,累似一顆二叉樹表的中間表示。工具
使用語法樹和符號表中的信息檢查源程序是否和語言定義的語義一致。性能
完成語法分析和語義分析,編譯器生成一個類機器語言的中間表示。
意義:易於生成,容易被翻譯成目標機器上的語言
常見的有 三地址代碼(three-address code的中間表示。這種中間表示累死彙編語言的指令,每一個指令有三個運算份量,每一個運算份量像一個寄存器。
機器無關的代碼優化,能夠改進中間代碼,以便生成更好的目標代碼(更短更快)
//三地址代碼序列 t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 //優化後 t1= id3 * 60.0 id1 = id2 + t1
以源程序的中間表示做爲輸入,映射到目標語言(機器代碼)。需要爲程序中的變量選擇寄存器或內存位置。合理分配寄存器以存放變量的值相當重要。
如使用寄存器R1和R2,完成中間代碼翻譯的機器代碼:
LDF R2, id3 MULF R2, R2, #60.0 LDF R1, id2 ADDF R1, R1, R2 STF id1, R1
符號表爲每個變量名字建立了一個記錄條目,包括類型,做用域。對於過程名字,包括參數數量和類型,參數的傳遞方式,反回類型。
在特定的實現中,多個步驟的活動被組合成一趟(pass)。每趟讀入一個輸入文件併產生一個輸出文件。詞法語法,語義分析組成一個pass,代碼優化做爲一個可選的pass,爲特定目標機生成代碼爲一個pass。
經過把前端和不一樣的目標機後端結合,創建針對不一樣目標機的編譯器。
實現一個完整的軟件開發環境,包含語言編輯器,調試器,版本控制,程序秒暑期,測試管理等工具。
名詞解釋
幾乎全部的高性能計算系統都用到了兩種技術:並行(Parallelism)和內存層次結構(memory hierarchy)。