
58
|
第 2 章
應用
完成所有這些工作之後,這個指稱語意完成了什麼?它主要的目的是示範如何將
SIMPLE 轉譯成 Ruby,使用後者作為解釋各種語言結構意義的工具。這剛好給了我們
執行 SIMPLE 程序的方式(因為我們在可執行的 Ruby 撰寫了指稱語意規則,而且因為
規則的輸出就是可執行的 Ruby 本身),但那只是偶然,因為我們能以簡單易懂的英語
提供規則,並且使用一些數學語言作為指稱。重要的部分是,我們採用了我們自己設計
的任意語言,並將它轉換成某人或別的東西可以理解的語言。
為了給這些轉譯一些解釋能力,讓語言意義的某些部分浮出水面(而非讓它們繼續沈
默)會很有幫助。舉例來說,這種語意將環境顯示成具體的 Ruby 物件(傳進和傳出
proc 的雜湊)而讓環境變得明確,而不是將變數表示成真正的 Ruby 變數,也不是依賴
Ruby 自己難以理解的範圍規則來指定變數存取工作。語意在這方面不僅將所有的解釋
工作都推給 Ruby;它以 Ruby 作為簡單的基礎,卻在頂端做了一些額外的工作,藉以
精準的示範如何以不同的程式建構物來使用和改變環境。
我們在前面看到,操作語意是藉由設計語言的直釋器來解釋語言的意義。相較之下,操
作語意語言對語言的翻譯就像
編譯器
(
compiler
):在這種情況,我們
#to_ruby
的實作
物會很有效率的將 SIMPLE 編譯成 Ruby。這些語意風格無一必能說明如何
有效
實作語
言的直釋器或編譯器,但是它們提供了官方基準,可以判斷任何有效率的實作物的正確
性。
這些指稱定義也出現在現實生活 ...