2011-05-29 9 views
10

No estoy seguro de que esté redactando este derecho, pero estoy bastante seguro de que estoy buscando un intérprete LISP que pueda poner en mi programa C++.Lisp Intérprete en un programa en C++

La situación ideal que imagino es una función o algo a lo que puedo pasar una cadena, archivo o nombre de archivo que contiene el código LISP y luego uso el resultado del código LISP en otras partes.

Para ponerlo en términos de (print (eval (read))), quiero que read sea algo que ingrese para ser lo que se lee, y una cadena o algo que pueda analizarse desde la impresión.

Respuesta

10

También hay ECL ("Common Lisp insertable"). Tiene la ventaja de que proporciona el estándar Common Lisp completo. Desafortunadamente, el documentation with respect to embedding es ... bueno ... un poco escaso.

Nunca lo usé yo mismo, así que realmente no puedo decir si esto sería realmente algo fácil de incorporar a tu aplicación. En mi humilde opinión, el intérprete Guile sería una elección razonable.

Otro Lisp incrustable es Rep, que es, por ejemplo, el lenguaje de extensión utilizado por el administrador de ventana Sawfish. Comenzó como el clon de ceceo de Emacs, pero se convirtió en algo diferente con el tiempo, y hoy en día está más cerca de Scheme.

+0

En cuanto a los ejemplos que usan ECL, hay un ejemplo usando gcc https://gist.github.com/vwood/662109 y lo porté a VS2012 https://github.com/fabriceleal/ecl-win-vs11-example – fableal

1

Puede usar GNU Guile, que es un intérprete de Scheme específicamente diseñado para integrarse fácilmente en programas C/C++.

3

No es Lisp, pero Guile es el lenguaje de scripting multiplataforma de GNU, y es un intérprete/compilador para Scheme, que está muy cerca de Lisp.

0

Para algo aún más incrustable que Guile, también hay Chibi.

(I < 3 Guile Por cierto, por lo que esta respuesta no está tratando de tomar distancia de ese --- simplemente ofrece otra opción.)

7

Si está interesado en Common Lisp, está ECL.

Desde el FAQ:

2,1 ¿Qué significa esto "incrustar" cosas?

ECL es una implementación de plena fidelidad del lenguaje Common-Lisp . Sin embargo, debido a la forma en que se implementa , la implementación puede usarse como un lenguaje de extensibilidad para su propia aplicación, al igual que Guile funciona para el lenguaje Scheme. Específico Idioma.

Y:

2,2 ¿Cómo puedo incrustar ECL en mi aplicación? El programa ecl-config le proporcionará con los indicadores que debe pasar al compilador C/C++ y al enlazador, usando ecl-config --cflags o ecl-config --ldflags, respectivamente. En cuanto a su programa, además de enlazando con la biblioteca ECL, usted tiene que llamar a la inicialización correcta rutina, cl_boot(), para que ECL configure las estructuras internas apropiadas. Después de llamar a esta rutina, se le ser capaz de ejecutar código Lisp y crear o manipular los datos de Lisp

.

Cuestiones relacionadas