【導(dǎo)讀】一個(gè)簡單的代碼生成算法。涉及存儲(chǔ)管理,指令選擇,寄存器分配??芍囟ㄎ荒繕?biāo)模塊。允許程序模塊分別編譯。免去編譯器重復(fù)匯編器的工作。從教學(xué)角度,增加可讀性。指令系統(tǒng)的一致性和完備性是重要的因素。若不考慮目標(biāo)程序的效率,指令的選擇是直截。MOVy,R0/*把y裝入寄存器R0*/. MOVR0,x/*把R0存入x中*/. 逐個(gè)語句地產(chǎn)生代碼,常常得到低質(zhì)量的代碼。某種計(jì)算次序可能會(huì)比其它次序需要較少的。選擇最佳次序是一個(gè)NP完全問題。四字節(jié)組成一個(gè)字,有n個(gè)通用寄存器。再用有向邊表示基本塊之間的控制流信息,首先確定所有的入口語句。能由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句轉(zhuǎn)到的語句。兩個(gè)基本塊計(jì)算一組同樣的表達(dá)式。這些表達(dá)式的值分別代表同樣的活躍名字的值。有很多等價(jià)變換可用于基本塊。公共子表達(dá)式刪除。所有結(jié)點(diǎn)是強(qiáng)連通的。內(nèi)循環(huán)不含其它循環(huán)。對(duì)每個(gè)基本塊從最后一個(gè)語句反向掃描到第。利用下次引用信息,可以壓縮臨時(shí)變量需要