Comment écrire un interprète?
J'ai décidé d'écrire un petit interprète comme mon prochain projet, en Ruby. Quelles sont les connaissances/compétences ai-je besoin d'avoir à être couronnée de succès?
Je n'ai pas décidé sur la langue pour interpréter pour l'instant, mais je suis à la recherche de quelque chose qui n'est pas un jouet langue, mais il serait relativement facile d'écrire un interprète.
Merci à l'avance.
source d'informationauteur bennybdbc
Vous devez vous connecter pour publier un commentaire.
Vous aurez à apprendre au moins:
Une excellente introduction à certaines de ces questions peuvent être trouvées dans le texte d'introduction La Structure et l'Interprétation des Programmes d'Ordinateur. Le langage utilisé dans ce livre est Régime, qui est un robuste, le bien-langue spécifiée qui est idéalement adapté pour votre premier interprète de la mise en œuvre. Fortement recommandé.
Essayer quelques dialecte de Lisp comme Régime ou Clojure. (Maintenant, il ya une idée: Clojure-en-Ruby, qui s'intègre avec Ruby ainsi que Clojure fait avec Java.)
Avec Lisp, il n'y a pas besoin de s'embêter avec les particularités de la syntaxe, comme Lisp de la syntaxe est beaucoup plus proche de l'arbre de syntaxe abstraite.
Ce chapitre SICP montre comment écrire un interpréteur Lisp en Lisp (un metacircular évaluateur). À mon avis c'est le meilleur endroit pour commencer. Vous pouvez ensuite passer à Lisp en Petits Morceaux apprendre à écrire des avancées interpréteurs et compilateurs pour Lisp. L'avantage de la mise en œuvre d'un langage comme Lisp (en Lisp lui-même!) est que vous obtenez de l'analyseur lexical, analyseur, de l'AST, de données/programme de représentation et de REPL gratuitement. Vous pouvez vous concentrer sur la tâche de l'obtention de votre grand travail de langue!
Il est sommet de l'Arbre de projet qui peut être utile pour vous http://treetop.rubyforge.org/
Vous pouvez payer Rubis Projet de Spécification http://ruby-std.netlab.jp/
J'ai eu une idée similaire il y a quelques jours. LISP est de loin la plus facile à mettre en oeuvre car la syntaxe est très simple, et les structures de données que le langage manipule sont les mêmes structures que le code est écrit. Par conséquent, vous avez seulement besoin d'une implémentation minimale, qui peut définir le reste en fonction de lui-même.
Toutefois, si vous essayez d'apprendre à propos de l'analyse, vous voudrez peut-être faire un langage plus complexe avec l'arbre de Syntaxe Abstraite, etc.
Si vous voulez vérifier mes (littéralement deux jours), l'implémentation Java de lisp, découvrez mylisp.googlecode.com. Je travaille toujours sur elle, mais c'est incroyable le peu de temps qu'il a fallu pour obtenir le contenu existant de travail.
Ce n'est pas tellement difficile. voici un L'interpréteur LISP en ruby et la source est si petit que vous êtes censé de le copier/coller. mais tu vas apprendre LISP maintenant? hehe.
Si vous êtes en train de faire cela pour le plaisir, faites-vous votre propre, un langage simple et il suffit de l'essayer. Ma recommandation serait quelque chose de vraiment comme un simple et classique de BASE (pas de visual basic ou orienté objet). Avec des numéros de ligne, GOTO, l'ENTRÉE et l'IMPRESSION, et c'est tout. Vous avez les bases, et vous obtenez une meilleure compréhension de la façon dont les choses fonctionnent.
La connaissance que vous aurez besoin?
Et pour ce dernier, vous aurez également besoin d'un moyen de garder autour de variables. Habituellement, vous venais de mettre en œuvre une "pile", un énorme bloc de données où vous pouvez délimiter une zone à la fin.
Ce n'est pas mis en œuvre en Lisp, mais j'ai trouvé Écrire Vous-même Un Régime de 48 Heures être un document très utile alors que j'ai commencé avec Haskell (si je n'ai pas n'importe où près de la finition après 48 heures; YMMV). Il vous donne également un aperçu de beaucoup de en des interprètes en général.
Je recommande ce livre. Il traite de modèles pour l'écriture d'analyseurs et d'interprètes et de plus:
http://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=language+implementation+patterns&x=0&y=0