Je me trouve attaché à un projet de integerate un interprète dans une application existante. La langue d'interprétation est un dérivé de Lisp, à des applications spécifiques, les builtins. Personne des "programmes" sera exécuté par lots de style dans l'application.
Je suis surpris de voir qu'au fil des années, j'ai écrit un couple de compilateurs, et plusieurs de données de traducteurs en langues/analyseurs, mais je n'ai jamais écrit un interprète avant. Le prototype est assez loin le long, mis en œuvre comme un arbre de syntaxe walker, en C++. Je peux probablement l'influence de l'architecture au-delà du prototype, mais pas la mise en œuvre du langage (C++). Ainsi, les contraintes:
- la mise en œuvre sera en C++
- l'analyse sera probablement traitée avec un yacc/bison de la grammaire (c'est maintenant)
- suggestions de plein VM/Interprète écologies comme NekoVM et LLVM sont probablement pas pratique pour ce projet. Autonomes est mieux, même si cela sonne comme le NIH.
Ce que je suis à la recherche de matériel de lecture sur les principes fondamentaux de la mise en œuvre des interprètes. J'ai fait un peu de navigation de la SORTE, et un autre site appelé Lambda Ultime, même s'ils sont plus orientés vers la programmation de la théorie des langages.
Certains des friandises j'ai réuni ce jour:
Lisp en Petits Morceaux, par Christian Queinnec. La personne qui recommande, il a déclaré qu'il "va de la simple interprète à des techniques plus avancées et des finitions de la présentation de "bytecode" et "Régime de C compilateurs"."
NekoVM. Comme je l'ai mentionné ci-dessus, je doute que nous serions autorisés à intégrer un ensemble de VM cadre à l'appui de ce projet.
La Structure et l'Interprétation des Programmes d'Ordinateur. À l'origine, j'ai suggéré que ce serait peut-être exagéré, mais, ayant travaillé une bonne partie, je suis d'accord avec @JBF. Très instructif, et l'esprit en expansion.
Sur Lisp par Paul Graham. J'ai lu cela, et alors qu'il est une introduction utile à Lisp principes, n'est pas suffisant pour relancer la construction d'un interprète.
Parrot Mise En Œuvre. Cela semble être un plaisir à lire. Pas sûr que ça va me fournir les principes de base.
Régime à partir de Zéro. Pierre Michaux est d'attaquer les différentes implémentations de Système, à partir d'un rapide et sale interpréteur Scheme écrit en C (pour une utilisation en tant que bootstrap dans des projets ultérieurs) compilé Régime de code. Très intéressant jusqu'à présent.
La langue mise en Œuvre des Schémas: Créer Votre Propre nom de Domaine Spécifique et Générale des Langages de Programmation, recommandé dans le fil de commentaires de Livres Sur la Création de Langages Interprétés. Le livre contient deux chapitres consacrés à la pratique de la construction des interprètes, je suis donc de l'ajouter à ma lecture de la file d'attente.
- Nouveau (et encore Vieux, c'est à dire de 1979): l'Écriture Interactive Compilateurs et Interprètes par P. J. Brown. C'est épuisées depuis longtemps, mais il est intéressant de fournir un aperçu des différentes tâches associées à la mise en œuvre d'un interpréteur Basic. J'ai vu des critiques mitigées pour celui-ci, mais comme il est pas cher (je l'ai sur ordonnance utilisé pour autour de $3.50) je vais lui donner un spin.
Alors, comment à ce sujet? Est-il un bon livre qui prend le néophyte par la main et montre comment construire un interprète en C/C++ pour un Lisp comme langue? Avez-vous une préférence pour la syntaxe de l'arbre-les marcheurs ou bytecode interprètes?
Pour répondre à @JBF:
le prototype actuel est un interprète, et il fait sens pour moi que nous sommes en acceptant un chemin d'accès à un code arbitraire de fichier et de l'exécuter dans notre environnement d'application. Les objets internes sont utilisés pour affecter notre en mémoire de représentation des données.
il ne devrait pas être affreusement lent. L'arborescence actuelle walker semble tout à fait acceptable.
La langue est basée sur le langage Lisp, mais n'est pas Lisp, donc pas de respect des normes requises.
- Comme mentionné ci-dessus, il est peu probable que nous serons autorisés à ajouter un externe VM/interprète projet visant à résoudre ce problème.
Pour les autres affiches, je vais vérifier vos citations ainsi. Merci à tous!