2009-10-21 34 views
11

假設我想實現一個功能語言的解釋器。我想了解這樣做所涉及的問題以及可用的合適文獻。這是一種處於早期設計階段的新語言,因此這個問題的範圍很廣。設計功能語言解釋器的主要問題是什麼?

爲了討論的目的,我們可以假定語言的目的並不重要,如果它在編寫解釋程序的難易程度上有顯着差異,它的功能特徵可以被改變(甚至是大幅度)。

麻省理工學院網站在線複製了Structure and Interpretation of Computer Programs以及videos的MIT 6.001使用Scheme的講稿,並於1986年在惠普錄製。這些對語言設計形成了很好的介紹。

+2

我只是輕輕地建議您,如果每個人都有合適的問題,您可能會想要回顧過去的問題並接受答案。 – BobbyShaftoe 2009-10-21 23:02:49

+2

這應該確實是一個社區wiki。 – 2009-10-21 23:03:40

+0

@Bobby - 我已經做到了。 @David - 我如何使這個社區維基?如果你能做到這一點,請繼續。我不是特別有興趣成爲圖書管理員或獲得聲望點的政治方面等。 – 2009-10-22 00:23:44

回答

3

我強烈推薦Structure and Interpretation of Computer Programs (SICP)作爲出發點。本書將介紹編寫解釋器(和編譯器)意味着什麼的概念,並且對於任何設計語言的人來說通常都是必讀內容。

實現一個功能語言的解釋器不可能與實現任何其他通用語言的解釋器有太大的不同。有詞法分析,解析,AST構造,語義分析,加上執行(用於純粹的解釋器)或代碼生成和優化(對於編譯器,甚至編譯成像Java/Perl/Python的字節碼)。 SICP將介紹「適用順序」和「正常順序」評估之間的區別,這對於您在純功能環境中可能很重要。

+0

太好了。這本書和演講視頻都在線,並形成了功能性編程和語言設計的精彩介紹。 – 2009-11-01 19:50:28

0

主要問題是您正在執行的語言具有語義 - 因此,實現變得非常簡單。否則,這個問題非常廣泛,很難回答。

+0

我不需要一個完整的「答案」。我正在尋找關於潛在問題的問題和建議的討論。 – 2009-10-22 00:41:39

1

對於幾乎任何語言的解釋器或編譯器,我認爲主要問題是相同的。

您需要確定語言的某些基本特徵(語義,而不是語法),並且大部分的設計都來自於此。

  • 例如,您的語言是否有 類型系統?如果是這樣,它有什麼種類的 ?是否將會是 靜態類型,動態類型, 鴨子類型?

  • 你計劃支持什麼樣的表達方式 ?你需要 定義操作的順序嗎?請問 你甚至有運營商?

  • 您將使用什麼作爲程序的運行時間 表示?將 將文本轉換爲源文本的字符碼 表示形式或AST或 標記形式?

有可以幫助採取一些單調乏味的文本之間進行實際的解析(ANTLR和野牛,僅舉二)的工具包,但我不知道的東西與實際解釋部分幫助的任務。我敢肯定有人會提出一些建議。

0

我建議編程語言的要點是一個很好的補充SICP,特別是如果你有興趣翻譯:官方網站EOPL。您可能想查看third edition - 該網站尚未更新。

編輯:垃圾郵件預防讓我選擇鏈接,所以官方網頁現在不加熱。儘管如此,Google很容易實現。