<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)資料段資訊的翻譯。