1
A
回答
2
首先,請注意,有沒有這樣的事,作爲一個「規範」對三地址代碼。它通常用於指代具有一些共同屬性的中間表示族 - 最值得注意的是,缺少像((x + 5) * z - y)
這樣的複雜表達式。
因爲這樣,下面是一個示例,說明它可能以三地址代碼的形式顯示,我只是編寫了。
; ... preceding code ...
sum := 0
i := 1
goto loop_header
loop_header:
if i > n then loop_end else loop_body
loop_body:
sum := sum + i
i := i + 1
goto loop_header
loop_end:
; ... rest of function ...
的外賣是:
在三地址代碼,複雜的表達式必須被簡化爲一系列簡單的表達式,引入臨時變量根據需要握住中間結果。例如,我們可能轉化表達
x = ((x + 5) * z - y)
到:t0 := x + 5 t1 := t0 * z x := t1 - y
請注意,您的例子只包含簡單的表達式。
- 循環被標籤之間的簡單跳轉代替。這使得IR更接近它將最終轉換成的機器碼。
代碼的格式反映了一些我個人的喜好了低級別的IR:
- 有沒有隱含的下跌得來;所有的basic blocks都以標籤開始並以
goto
或if
(或return
,未示出)結束。 - 在分支點,
if
指令包含true和false目標,不需要以下goto
。它在指令選擇器上也更好。
相關問題
- 1. 三地址代碼(TAC/3AC)
- 2. 優化三個地址碼
- 3. YACC和lex代碼爲三個地址代碼語句
- 4. 如何使用ocamllex和ocamlyacc編寫三個地址代碼?
- 5. 翻譯正常代碼3AC - 三個地址碼
- 6. 從三個地址代碼到JVM字節碼的代碼生成
- 7. 編譯器中是否生成三個地址代碼?
- 8. 需要幫助用lex和yacc生成三個地址代碼
- 9. 如何將三個地址代碼轉換爲MIPS彙編語言?
- 10. 基地網址代碼點
- 11. 從內存地址代碼
- 12. EXC_BAD_ACCESS(代碼= 2,地址= 0x3)
- 13. EXEC_BAD_ACCESS(代碼= 1,地址= 0x0)
- 14. 如何從Net代碼的IP地址
- 15. 國家代碼如何與IP地址?
- 16. 我如何解決這個EXC_BAD_ACCESS(代碼= 1個地址= 0x0bbadbeef)
- 17. 谷歌地圖地址代碼從地址
- 18. 編譯c語言的三個地址碼程序
- 19. 麻煩,例如谷歌地圖代碼
- 20. 如何獲得一個Windows IP地址,通過代碼
- 21. 如何從Firefox擴展代碼獲取本地IP地址
- 22. 如何使用Google地圖將地址代碼爲lat/long
- 23. 地理編碼地址 - 獲取某個地址(谷歌API)
- 24. 的iOS:EXC_BAD_ACCESS(代碼= 2,地址=的0x42)
- 25. 獲取IP地址的C代碼
- 26. 線程1:EXC_BAD_ACCESS(代碼= 1,地址= 0x38)
- 27. SQL IP地址到國家代碼
- 28. 線程1:EXC_BAD_ACCESS(代碼= 1,地址= 0x7fff00000001)
- 29. 錯誤EXC_BAD_ACCESS(代碼1,地址= 0xcc)
- 30. 共享代碼的邏輯地址
非常感謝! –
如果這回答了您的問題,請將其標記爲已接受。否則,現在是時候提出後續問題了。 :-) –