12
votes

Où puis-je trouver un lecteur LISP en C?

J'ai un lecteur LISP écrit en Java que je pense à traduire en C. (ou peut-être C ++.) C'est un piratage assez complet et utile. Le problème principal est donc en train de faire l'allocation de stockage dynamique dans une langue sans collecte des ordures. Si quelqu'un a déjà pensé cela à travers je préférerais emprunter leur code que de comprendre moi-même. (C n'est pas ma langue préférée.)

Bien sûr, avoir un lecteur LISP n'a aucun sens à moins que vous prévoyez de faire quelque chose avec les choses que vous avez lues, alors j'aurais peut-être dû formuler la question, où puis-je trouver un simple noyau LISP écrit en C?, mais Dans mon expérience, la partie la plus difficile inévitable de l'écriture d'un LISP (un peu surprenante) est le lecteur. De plus, je ne veux pas avoir un collecteur d'ordures; Je prévois une application dans laquelle les structures de liste seront libérées plus ou moins à la main.


0 commentaires

5 Réponses :


1
votes

Il y a beaucoup de mises en œuvre par schéma intégrables, au sommet de ma tête: Siod , Guile , Chickenscheme , SCHEMENT48 ....


1 commentaires

Je sais que je pourrais attraper un certain code de sources comme celles, mais elles sont un peu trop lourdes pour ce que je cherche. Beaucoup de leur conception sont motivés par des facteurs globaux (en particulier le GC) qui ne s'appliquent pas ici. Je veux quelque chose de assez léger --- Structures de données de base de LISP, quelque chose à lire, et conventions pour les libérer.



4
votes

interprétation de LISP est très agréable. Vous pouvez également essayer d'autres personnes, comme Jim Mayfield's Zézayer. Il y a probablement beaucoup de petits lisps là-bas ...

Vous avez mentionné que vous n'aimez pas C. Peut-être que vous aimeriez Haskell - dans quel cas vous pourriez essayer " Ecrivez-vous un schéma dans 48 heures ", un tutoriel intéressant (vous obtenez d'écrire un interprète de schéma à Haskell). P>

MISE À JOUR: STRUT> Je sais qu'un lisper se sentirait à l'aise à l'aise avec Haskell, mais hey, c'est beaucoup plus confortable que c (du moins pour moi)! En plus de cela, Haskell a un bon FFI, il devrait donc être facile d'utiliser le lecteur LISP fabriqué HASKELL en tant que bibliothèque compatible C C compatible C. P>

update 2: strong> Si vous voulez Pour utiliser XLISP, comme suggéré par un autre utilisateur, vous aurez probablement besoin de src / xlread.c (863 lignes) et d'inclure / xlisp.h (1379 lignes) - mais je pourrais me tromper ... p>

MISE À JOUR 3: STROND> Si vous utilisez le LISP de Gary Knott (un seul fichier C avec 942 lignes), la signature de fonction est INT32 SREAD (NOID). Ce serait mon Choie si je n'avais pas besoin de quelque chose de fantaisie (comme des macros de lecture) ou très optimisés (il existe un document PDF qui décrit comment le code est mis en œuvre, vous n'aurez donc pas à trouver votre chemin dans un labyrinthe). La documentation de la fonction est la suivante: p>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <setjmp.h>


1 commentaires

Merci; Je vais regarder dans la chose de Knott. Sur Haskell: rien contre Haskell, mais si je voulais le faire dans un bel environnement fonctionnel, je le ferais juste dans Lisp :)



2
votes

LISPREADER est un analyseur de fichiers LISP simple fait dans plaine c.

Si vous voulez C ++, vous pouvez creuser dans le SuperTeux Code source , il contient un analyseur de fichiers LISP écrit en C ++.

Lorsque vous souhaitez une implémentation réelle de LISP au lieu d'un analyseur, vous pourriez consulter Abus , qui contient un petit comme la langue de script de jeux.


1 commentaires

Maintenant, pourquoi cela me fait-il penser à la dixième règle de GreensPun? :)



3
votes

2
votes

MIT Professor Rivest a publié un ensemble de petits lecteurs pour S-Expressions de retour en 1997 http: //people.csail.mit.edu/rivest/sexp.html Dans le cadre de sa DARPA soutenu des recherches sur la cryptographie publique. Le code ne fait que lire et imprimer et est bien décrit dans un document écrit dans le style d'une RFC Internet.


0 commentaires