將元循環(huán)求值器轉(zhuǎn)換為寄存器機器語言底燎,這樣的求值器就是 顯示控制求值器(explicit-control evaluator)。它能夠清楚地向我們展示求值器中的存儲管理有巧、參數(shù)傳遞和控制機制。
在顯示控制求值器中同樣通過類似元循環(huán)求值器的 eval
程式的指令序列進行表達式類型判別,然后對不同類型的表達式進行不同的計算過程述呐。其中需要注意的是為避免其他表達式計算過程中將當前表達式計算需要的數(shù)據(jù)清除,可以將相應(yīng)的寄存器內(nèi)容存入堆棧蕉毯,所以在表達式的計算過程中需要仔細甄別需要推入堆棧的內(nèi)容乓搬。
表達式的計算結(jié)果將存儲于寄存器 val
中,exp
寄存器存儲當前需要計算的表達式代虾,env
記錄當前表達式的計算環(huán)境进肯,continue
記錄表達式計算后返回的節(jié)點。除此之外 proc
棉磨、argl
和 unev
會用于計算復(fù)合表達式時的中間值存儲江掩。
另外顯示控制求值器需要注意在程式調(diào)用時對尾遞歸的實現(xiàn)。如果不采用尾遞歸的方式會導(dǎo)致迭代過程的最后一個表達式計算的相應(yīng)寄存器數(shù)據(jù)會留存在堆棧中乘瓤,不斷累積环形,最終導(dǎo)致堆棧溢出。也就是說可能導(dǎo)致無限循環(huán)程式的實現(xiàn)需要其他控制機制的參與衙傀。
通過模擬的方式運行寄存器機器不僅是觀察它的運行結(jié)果抬吟,同時還要觀察它的執(zhí)行效率,其中標志性的數(shù)據(jù)來自堆棧的調(diào)用次數(shù)分析统抬。