2011-06-15 109 views
20

因此,我現在有一個相當完整的用Haskell編寫的LISP(方案)解釋器。爲了好玩,我想嘗試將它編譯爲LLVM。大多數代碼生成看起來非常簡單,但我不知道如何生成lambda表達式(在lisp中很重要)的代碼,以及在遇到define表達式時如何管理堆。爲'lambda','define'生成LLVM代碼

我該如何爲這些表達式生成代碼?

注意:我可以爲lambda表達式的主體生成代碼,什麼讓我感到困惑的是如何將代碼「放」在某處並使其可調用。

+2

您可能希望在代碼生成之前實施顯式拉姆達升級過程(因爲它是Scheme,因此您可能會在此之前進行CPS轉換) 。它只會給你留下全球職能和明確的關閉環境分配。 – 2011-06-16 16:20:55

回答

10
+0

在博客文章中編譯的語言是第一順序,根本不處理閉包。我不明白這對編譯lambda表達式有什麼幫助。 – sepp2k 2011-06-15 19:17:10

+1

@ sepp2k您需要首先進行閉包轉換,因爲他正在閱讀SICP,所以我認爲John正在這樣做。 – 2011-06-15 19:22:54

+0

我可能是錯的,但我不記得在SICP中包含關閉轉換。 – spacemanaki 2011-06-15 20:14:02