Lisp口译员在C++程序中

Luc*_*cas 10 c++ lisp

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

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

换句话说(print (eval (read))),我想read成为我所输入的内容,以及我可以从打印中解析的字符串.

Dir*_*irk 10

还有ECL("Embeddable Common Lisp").它的优点是它提供了完整的Common Lisp标准.不幸的是,关于嵌入文档是......好吧......有点稀缺.

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

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


dan*_*lei 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将分别使用ecl-config --cflags或ecl-config --ldflags为您提供必须传递给C/C++编译器和链接器的标志.关于您的程序,除了链接到ECL库之外,您还必须调用正确的初始化例程cl_boot(),以便ECL设置适当的内部结构.调用此例程后,您将能够运行lisp代码并创建或操作lisp数据

.