編譯原理——中間代碼的生成

1、選擇中間表示:通常來說,中間表示是圖形符號和三地址代碼的組合。在語法樹中,圖形符號中的節(jié)點表示一個結構;節(jié)點的子代表它的子結構。三地址的名稱來自x - y op z格式指令,并且每個指令最多有一個運算符。
2、翻譯表達式:通過把動作加到E - > E \ op E2格式的每個產(chǎn)生式中,具有創(chuàng)建操作功能的表達式可以解除單個操作的順序。該操作或者為E創(chuàng)建一個節(jié)點,節(jié)點為E \和E2作為子節(jié)點,或者生成一個三地址指令,將操作應用于E \和E2的地址,并將結果放入一個新的臨時名稱,這將成為E.的地址
3、檢查類型:表達式E \ op E2的類型由op和E \和E2的類型決定。強制是隱式類型轉換,例如從整數(shù)到浮點數(shù)。中間代碼包含特殊類型轉換,以確保操作數(shù)類型與操作預期類型之間的精確匹配。
4、使用符號表來實現(xiàn)聲明:一個聲明指定一個名稱的類型。類型的寬度是該類型名稱需要的存儲量。使用寬度,在運行時,名稱的相對地址可以計算為從數(shù)據(jù)區(qū)域開始的偏移量。名稱的類型和相對地址通過聲明被放入符號表中,因此當名稱出現(xiàn)在表達式中時,翻譯器可以隨后獲取它們。
5、生成Bool表達式的跳轉代碼:在短路或跳轉代碼中,Bool表達式的值隱含在代碼所能運行到的位置。跳轉代碼是有用的,因為通常的情況下,Bool表達式B用于控制流程,如if(B)。布爾值可以通過跳轉到t = true或t = false來計算,其中t是臨時名稱。使用跳轉標簽,布爾表達式可以通過繼承與它的真和假出口相對應的標簽來轉換。常數(shù)true和false分別轉換成true和false的退出。
6、使用控制流實現(xiàn)語句:語句可以通過繼承下一個標簽進行轉換,其中下一個標記在這條語句的代碼之后的第一條指令??梢酝ㄟ^加一個標記Si代碼開頭的新標簽來轉換條件S - > if(B)Si,并分別傳遞新標簽和S.next的真假出口。
7、使用反向回傳:回傳是一種在一次遍歷中生成Bool表達式和語句代碼的技術。這個目的是維護不完整跳轉的列表,其中列表中的所有跳轉指令都具有相同的目標。當目標已知時,其列表上的所有指令都將通過填寫目標完成。
8、實現(xiàn)記錄:記錄或類中的字段名稱可以被看作一系列聲明。記錄類型對字段的類型和相對地址進行編碼。符號表就是實現(xiàn)這個功能的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容