2011-06-15 108 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