天天看點

自己動手構造編譯系統:編譯、彙編與連結2.1.5 代碼生成

<b>2.1.5  代碼生成</b>

  

         代碼生成是編譯器的最後一個處理階段,它根據識别的文法子產品翻譯出目标機器的指令,比如彙編語言,這一步稱為使用基于文法制導的方式進行代碼生成。見圖2-8。

  為了便于了解,本書采用常見的intel格式彙編語言程式作為編譯器的輸出。繼續引用指派語句“var2=var1+100;”作為例子,若将之翻譯為彙編代碼,其内容可能是:

mov eax,[var1]

mov ebx,100

add eax,ebx

mov [tmp],eax

mov eax,[tmp]

mov [var2],eax

  參考圖2-5中的兩個非葉子節點,它們分别對應了表達式文法子產品和指派語句文法子產品。上面彙編代碼的前4行表示将var1與100的和存儲在臨時變量tmp中,是對表達式翻譯的結果。最後兩行表示将臨時變量tmp複制到var2變量中,是對指派語句的翻譯結果。根據自定義語言的文法,需要對如下文法子產品進行翻譯:

  1)表達式的翻譯。

  2)複合語句的翻譯。

  3)函數定義與調用的翻譯。

  4)資料段資訊的翻譯。