我正在看書Structure and Interpretation of Computer Programs,我想逐漸編寫一個方案解釋器。我想實現一個方案解釋器來學習SICP
你知道該計劃的實施最容易閱讀(和簡短)嗎? 我會讓一個JavaScript在C.
我正在看書Structure and Interpretation of Computer Programs,我想逐漸編寫一個方案解釋器。我想實現一個方案解釋器來學習SICP
你知道該計劃的實施最容易閱讀(和簡短)嗎? 我會讓一個JavaScript在C.
SICP本身有幾個部分詳細介紹瞭如何建立一個元圓形的解釋,但我建議你看看下面的兩本書更好的資源在方案解釋:Programming Languages: Application and Interpretation和Essentials of Programming Languages。它們都很容易閱讀,並逐漸引導您建立口譯員。
Christian Queinnec的書Lisp In Small Pieces is superb。 EoPL更現代。涵蓋了Lisp和Scheme,並詳細介紹了大多數書籍忽略的血腥低級內容。
它也不是很適合初學者。 – leppie
我會推薦閱讀Kent Dybvig的論文「Three Implementation Models for Scheme」。不是整篇論文,但是第一部分(到第3章)他討論基於堆的模型非常適合簡單實現Scheme。
另一個很好的資源(如果我正確地理解它並且你想用C實現它)是Nils Holm's "Scheme 9 from Empty Space"。這個鏈接到Nils的頁面,底部有一個鏈接,指向舊版本的公有領域,以及更新,更易於閱讀的商業版本。閱讀並愛他們。
我會推薦博客系列Scheme from scratch其逐步建立起來C.
方案的解釋,我可以給你我的翻譯是如何工作的概述,也許它可以給你的東西一般的想法。 雖然答案很晚,但我希望這可以幫助別人,誰已經來到這個線程,並希望有一個大致的想法。
一個)Define_Evaluator:用於定義語句
b)中Funcall_Evaluator:用於處理其它用戶定義的函數
c)Read_Evaluator:用於讀取表達式並將其轉換爲方案對象
d)Print_Evaluator:根據對象的類型打印對象。 e)Eval_Evaluator:處理表達式的實際處理。
3 .->首先使用Read Evaluator讀取每個表達式,該讀取評估器將從表達式中創建一個方案對象。遞歸計算嵌套表達式,直到表達式完成。
- >接下來,觸發Eval_Evaluator,它處理在第一步中形成的方案表達式對象。 發生這種情況如此
a)如果要評估的表達式是一個符號。返回它的值。因此變量blk將返回該塊的對象。 b)如果要評估的表達式是列表。打印列表。
c)如果要評估的表達式是函數。查找將使用Funcall_Evaluator返回評估的函數的定義。
- >最後打印評估器被打開以打印結果,此打印將取決於輸出表達式的類型。
免責聲明: 這是我的翻譯是如何工作的,不必須是這樣的。
我一直在一個類似的使命,但幾年後,建議:從頭
我仍然在尋找關於創建一個lisp/scheme虛擬機的好博客帖子,它可以與JIT(對於任何競爭性JS實現都很重要:)相結合。
閱讀SICP後,在我看來,您會更喜歡在Scheme中(或其他Lisp方言 - 我喜歡Clojure)編寫解釋程序,並且執行一些練習,而不是編寫解釋程序在C. – mwd
你到SICP有多遠?在閱讀第4章和第5章的過程中,你會寫一個Scheme解釋器(實際上是一個以上的)和一個編譯器。如果你完成了這本書,你將找到你所尋求的:元語翻譯(Scheme in Scheme)非常漂亮短。 – spacemanaki