Lisp口译员在C ++程序中

时间:2011-05-29 18:50:39

标签: c++ lisp

我不确定我是否正确,但我很确定我正在寻找一个可以放入我的C ++程序的LISP解释器。

我想象的理想情况是一个函数或者其他东西,我可以传递包含LISP代码的字符串,文件或文件名,然后在其他部分使用LISP代码的输出。

按照(print (eval (read)))的说法,我希望read是我输入的内容,以及我可以从打印中解析的字符串。

6 个答案:

答案 0 :(得分:10)

还有ECL(“Embeddable Common Lisp”)。它的优点是它提供了完整的Common Lisp标准。不幸的是,documentation with respect to embedding是......好吧......有点稀缺。

我自己从未使用它,所以我无法确切地说,这实际上是否很容易嵌入到您的应用程序中。恕我直言,Guile翻译将是一个合理的选择。

另一个可嵌入的Lisp是Rep,例如,Sawfish窗口管理器使用的扩展语言。它始于Emacs lisp克隆,但随着时间的推移变得不同,现在更接近于Scheme。

答案 1 :(得分:7)

如果您对Common Lisp感兴趣,那就是ECL

来自FAQ

  

2.1这种“嵌入”的东西是什么意思?

     

ECL是一个完整的承诺   Common-Lisp的实现   语言。但是,由于它的方式   实施后,实施即可   用作可扩展性语言   对于你自己的应用程序,很像   Guile适用于Scheme语言。   通过一组相当简单的函数,   你可以解析,编译和执行   Common-Lisp表单,并使用   外部函数接口(FFI),你   可以为Common-Lisp添加新功能   适合您的特定领域   语言。

  

2.2如何将ECL嵌入我的应用程序?

     

您必须使用ECL库   被称为libecl.so,libecl.dyld或   ecl.dll,取决于您的操作   系统(Unix,Mac OSX或Windows)。该   程序ecl-config将为您提供   你必须把旗帜传递给   C / C ++编译器和链接器,   使用ecl-config --cflags或   ecl-config --ldflags,分别。   关于你的节目,除了   链接到ECL库,你   必须调用正确的初始化   例程,cl_boot(),以便ECL设置   适当的内部结构。   在调用此例程后,您将   能够运行lisp代码并创建或   操纵lisp数据

答案 2 :(得分:3)

它不是Lisp,但是Guile是GNU跨平台脚本语言,并且是Scheme的解释器/编译器,它与Lisp非常接近。

答案 3 :(得分:1)

您可以使用GNU Guile,这是一个专门设计为可在C / C ++程序中轻松嵌入的Scheme解释器。

答案 4 :(得分:0)

尝试在此搜索下出现的任何内容:http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=embedded+lisp

事实证明很多人都想这样做。

答案 5 :(得分:0)

对于比Guile更可嵌入的东西,还有Chibi

(我< 3 Guile BTW,所以这个答案并没有试图消除它 - 它只是提供另一个选择。)