Le Graal à portée de main: écrire un interpréteur

Magazine
Marque
GNU/Linux Magazine
Numéro
193
Mois de parution
mai 2016
Spécialité(s)


Résumé

Dans le précédent article, notre héros, le Lisp, a fait l’objet d’un rappel de ses innombrables qualités. Inspirés par ce modèle,  nous avons présenté rapidement le caractère modulaire que nous souhaitions donner à notre langage, puis décrit la structure de données contenant le code parsé, et enfin écrit un parseur récursif descendant. Tout ça n’est pas très utile. Nous allons remédier à ça en ajoutant un interpréteur à notre langage.


 

Dans ce second article, nous allons donner vie à notre langage en lui offrant un interpréteur, et un premier ensemble de fonctions arithmétiques, tout en revenant en détail sur la gestion de nos modules.

A l’issue de notre premier article, nous avions réussi à mettre au point un premier code nous permettant de transformer une chaîne de caractères en une représentation syntaxique de notre langage.

Très simplement, avec ce premier outil, nous sommes en mesure de transformer (+ 1 2 (* 3 5)) en un vecteur C++ de Sexpexpr contenant :

expr[0] // SymbolAtom +

expr[1] // RealAtom 1.0

expr[2] // RealAtom 2.0

expr[3] // Sexp contenant :  SymbolAtom *, RealAtom 3, RealAtom 4

Ce que nous aimerions faire à présent, c’est parcourir cette expression expr pour l’exécuter et obtenir le résultat suivant :

15 ;;; =(+ 1 2 (* 3 4))

C’est ce que va faire notre interpréteur.

1. Tout est dans l’interprétation

Si...

Cet article est réservé aux abonnés. Il vous reste 96% à découvrir.
S'abonner à Connect
  • Accédez à tous les contenus de Connect en illimité
  • Découvrez des listes de lecture et des contenus Premium
  • Consultez les nouveaux articles en avant-première
Je m'abonne


Article rédigé par

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous