C++程序中的Lisp解释器

Lisp Interpreter in a C++ Program

本文关键字:Lisp 解释器 程序 C++      更新时间:2023-10-16

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

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

(print (eval (read)))的术语来说,我希望read是我输入的东西,是我读取的东西,也是一个字符串或我可以从打印中解析的东西。

还有ECL("可嵌入公共Lisp")。它的优点是提供了完整的Common Lisp标准。不幸的是,关于嵌入的文档…嗯。。。有点稀少。

我自己从来没有用过,所以我真的不知道这是否真的是一件容易嵌入到应用程序中的事情。IMHO,Guile口译员将是一个合理的选择。

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

如果您对Common Lisp感兴趣,那么有ECL。

来自常见问题解答:

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

ECL是一个成熟的公共Lisp的实现语言然而,由于它的方式实现时,该实现可以用作可扩展语言对于您自己的应用程序,很像Guile为Scheme语言工作。通过一组相当简单的函数,您可以解析、编译和执行常见的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数据

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

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

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

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

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

(我<3 Guile BTW,所以这个答案并没有试图从中吸取教训——它只是提供了另一个选择。)