所以我现在有一个用haskell编写的相当完整的LISP(方案)解释器。只是为了好玩,我想尝试将它编译成LLVM。大多数代码生成看起来都非常简单,但是我对如何为lambda
表达式生成代码感到茫然(在lisp中有点重要;))以及当我遇到一个代码时如何管理堆define
表达。
我如何为这些表达式生成代码?
注意:我可以为lambda表达式的主体生成代码。令我困惑的是如何在某处“放置”该代码并使其可调用。
答案 0 :(得分:10)
请参阅Lennart的博文:http://augustss.blogspot.com/2009/06/more-llvm-recently-someone-asked-me-on.html
查看compileFunction
函数。特别是,LLVM核心中的newFunction
:http://hackage.haskell.org/packages/archive/llvm/0.9.1.2/doc/html/LLVM-Core.html#g:23