Lisp Интерпретатор в программе на С++
Я не уверен, что формулирую это право, но я уверен, что ищу переводчик LISP, который я могу поместить в свою программу на С++.
Идеальная ситуация, которую я представляю, - это функция или что-то, к чему я могу передать либо строку, файл, либо имя файла, содержащую код LISP, а затем использовать вывод из кода LISP в других частях.
Чтобы выразить это в терминах (print (eval (read)))
, я хочу, чтобы read
был чем-то, что я вводил, чтобы читать то, и строку или что-то, что я могу проанализировать из печати.
Ответы
Ответ 1
Существует также ECL ( "Embeddable Common Lisp" ). Преимущество состоит в том, что он обеспечивает полный общий стандарт Lisp. К сожалению, документация в отношении внедрения - это... ну... немного скуднее.
Я никогда не использовал его сам, поэтому я не могу сказать, действительно ли это будет легко встраивать в ваше приложение. ИМХО, переводчик Guile был бы разумным выбором.
Другой встраиваемый Lisp - Rep, который, например, является языком расширения, используемым диспетчером окон Sawfish. Он начинался как с Emacs Lisp, но со временем становился чем-то другим, и теперь он ближе к Схеме.
Ответ 2
Если вас интересует 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/С++ и компоновщику, используя либо ecl-config -cflags, либо ecl-config --ldflags, соответственно. Что касается вашей программы, кроме связывая с библиотекой ECL, вы должны вызвать правильную инициализацию, cl_boot(), так что ECL устанавливает вверх по соответствующим внутренним структурам. После вызова этой процедуры вы иметь возможность запускать код lisp и создавать или манипулировать данными lisp
.
Ответ 3
Это не Lisp, но Guile - это язык сценариев перекрестной платформы GNU и является интерпретатором/компилятором для Scheme, который довольно близко к Lisp.
Ответ 4
Вы можете использовать GNU Guile, который является интерпретатором Схемы, специально разработанным для простой встраивания в программы на C/С++.
Ответ 5
Попробуйте все, что появляется под этим поиском: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=embedded+lisp
Оказывается, многие люди хотели это сделать.
Ответ 6
Для чего-то еще более вложимого, чем Guile, там также Chibi.
(I < 3 Guile BTW, поэтому этот ответ не пытается отнять у него --- он просто предлагает другой вариант.)