1. 程式人生 > >5.4顯式控制的直譯器

5.4顯式控制的直譯器

5.4顯式控制的直譯器
在5.1部分中,我們已經看到如何把簡單的SCHEME程式轉換成暫存器機器的描述。
我們將在更復雜的程式中執行這種轉換,4.1.1~4.1.4部分的元迴圈直譯器展示出
用程式eval和apply如何描述出SCHEME直譯器的行為。我們在這部分中開發的顯式
控制的直譯器展示出用暫存器和棧上的操作來描述在解釋執行的過程中,
程式呼叫和實際引數傳遞的機制是如何被使用的。此外,顯示控制的直譯器能夠
作為一個SCHEME直譯器的實現,在一種與傳統的計算機的本身的機器語言很類似的
語言寫成。直譯器能用5.2部分中的暫存器機器的模擬器上執行。還有,它能作為構建
SCHEME語言的直譯器的機器語言的實現的起點,或者是執行SCHEME表示式的特定
目的的機器。圖5.16 顯示這樣的一個硬體實現:一個矽晶片作為一個SCHEME的直譯器。
晶片的設計者為了製造與本部分中描述的直譯器相類似的暫存器機器,工作開始於
資料路徑和控制器的規範,並且使用設計自動化的程式設計工具來組裝積體電路的佈局圖。

*暫存器與操作
為了設計一個顯式控制的直譯器,我們必須指定在我們的暫存器機器中使用到的操作.
我們描述了元迴圈的直譯器,使用抽象語法,使用程式例如quoted? 和 make-procedure
為了實現暫存器機器,我們能擴充套件這些程式到元素級的列表結構的記憶體操作的序列,在
我們的暫存器機器中實現這些操作。然而,關注基本結構的細節部分,這會讓我們的
直譯器非常的長。為了分類表示形式,我們將包括在4.1.2部分中給出的語法程式作為暫存器機器
的原生操作。還包括表示環境的程式和在4.1.3部分,4.1.4部分中給出的其它的執行時資料。
為了完全地指定一個直譯器,這個直譯器能被在一種低階語言中程式設計或者在硬體中實現,
我們能替換這些操作為更元素級的操作,使用我們在5。3部分中,已經描述的列表結構的實現。

我們的scheme直譯器的暫存器機器包括一個棧和七個暫存器,它們分別是exp,env,val,continue,
proc,agrl,unev.譯成漢語分別是表示式,環境,值,繼續,程式,引數,未解釋。 Exp暫存器被用來儲存要被解釋的表示式,  env暫存器儲存要被執行的解釋過程中的環境。在一個解釋中結尾, val暫存器被用來儲存在特定的環境中,解釋表示式所得到的值。 continue暫存器用來實現遞迴,正如在5。1。4部分中的解釋。(直譯器需要遞迴地呼叫本身,因為解釋一個表示式需要解釋它的子表示式。) proc,argl unev被用在組合表示式的解釋中。

我們沒有提供一個數據路徑圖來顯示直譯器中的暫存器和操作是如何被連線的,也沒有提供機器
操作的完整列表。在直譯器的控制器中這些都是隱式的,它們能被顯示為細節部分。