一個簡單的語法制導編譯器:前端
該部分的重點是編譯器的前端,特別是詞法分析、語法分析和中間代碼生成。從小事作起,首先創建一個可以將中綴表達式轉換爲後綴表達式的語法制導翻譯器,而後再將其擴展,使之能將某些程序片斷轉換爲三地址碼,如圖所示:後端
![](http://static.javashuo.com/static/loading.gif)
編譯器再分析階段(前端)把一個源程序劃分紅各個組成部分,並生成源程序的內部表示形式。這種內部表示稱爲中間代碼,而後編譯器在綜合階段(後端)將這個中間代碼翻譯成目標程序。spa
一個編譯器前端的模型:翻譯
![](http://static.javashuo.com/static/loading.gif)
-
- 詞法分析:使編譯器能夠處理多個字符組成的構造(好比標識符)和表達式。
- 標識符:標識符由多個字符組成,其在語法分析階段被稱爲詞法單元。
- 表達式:由數值、標識符和「空白字符」(空格、製表符和換行符)等組成。
- 詞素:源代碼中的一個字符串序列。
- 詞法:詞素的正確形式(正則文法)
- 語法分析(語法掃描):把詞法記號流依照語言的語法結構按層次分組,以造成語法短句
- 上下文無關文法:不只能夠描述一個語言的語法,還能夠指導程序的翻譯過程。
- 語法:程序設計語言的語法描述了該語言的程序的正確形式,常使用上下文無關文法或BNF(Backus-Naur範式)的表示方法來描述語法。
- 語法制導翻譯:面向文法的編譯技術。
- 語義:該語言的語義定義了程序的含義,結合非形式化描述和啓發性的示例來描述語言的語義。
- 中間代碼的生成:
- 語法樹(抽象語法樹):源程序的層次化語法結構。
- 三地址碼(三地址指令序列):x = y op z,其中op是一個二目運算符,y和z是運算份量的地址,x是運算結果的存放地址。最多隻執行一個運算,一般是計算、比較或者分支跳轉運算。
![](http://static.javashuo.com/static/loading.gif)
參考-《編譯原理(第二版)》 設計