Переводчик Lisp в программе на C ++ - PullRequest
10 голосов
/ 29 мая 2011

Я не уверен, что формулирую это правильно, но я почти уверен, что ищу интерпретатора LISP, который я мог бы вставить в свою программу на C ++.

Идеальная ситуация, которую я себе представляюявляется функцией или чем-то, к чему я могу передать строку, файл или имя файла, содержащие код LISP, а затем использовать вывод кода LISP в других частях.

Чтобы выразить это в терминах (print (eval (read))), я хочу, чтобы read было чем-то, что я ввожу в качестве прочитанного, и строкой или чем-то, что я могу проанализировать из печати. ​​

Ответы [ 6 ]

10 голосов
/ 29 мая 2011

Существует также ECL ("Embeddable Common Lisp"). Преимущество в том, что он обеспечивает полный стандарт Common Lisp. К сожалению, документация относительно встраивания ... ну ... немного скудна.

Я никогда не использовал его сам, поэтому не могу точно сказать, будет ли это легко внедрить в ваше приложение. ИМХО, переводчик Guile был бы разумным выбором.

Другой встраиваемый Lisp - это Rep , например, язык расширения, используемый оконным менеджером Sawfish. Он начался как клон Eiscs lisp, но со временем стал чем-то другим, и в настоящее время ближе к Схеме.

7 голосов
/ 29 мая 2011

Если вы заинтересованы в 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

.

3 голосов
/ 29 мая 2011

Это не Lisp, но Guile - это кроссплатформенный язык сценариев GNU и интерпретатор / компилятор для Scheme, который довольно близок к Lisp.

1 голос
/ 29 мая 2011

Вы можете использовать GNU Guile , интерпретатор Scheme, специально разработанный для легкого встраивания в программы на C / C ++.

0 голосов
/ 29 мая 2011

Для чего-то еще более встраиваемого, чем Guile, есть также Chibi .

(Я <3 Guile Кстати, так что этот ответ не пытается отнять - он просто предлагает другой вариант.) </p>

0 голосов
/ 29 мая 2011

Попробуйте все, что подходит под этот поиск: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=embedded+lisp

Оказывается, многие люди хотели это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...