Vous voulez créer un compilateur ? Il suffit de lire ces deux articles (2008)
(prog21.dadgum.com)- La plupart des manuels sur les compilateurs sont vastes et très centrés sur la théorie, ce qui rend difficile pour un débutant d’implémenter un compilateur réellement fonctionnel
- Comme ressource pratique pour surmonter cela, la série « Let’s Build a Compiler! » de Jack Crenshaw est présentée ; elle traite d’un compilateur Pascal concis à passage unique
- Ce tutoriel favorise un apprentissage expérimental grâce à la combinaison de l’analyse syntaxique et de la génération de code, à un minimum d’optimisation, ainsi qu’à des versions en C et en Forth
- Le deuxième document, l’article « A Nanopass Framework for Compiler Education », présente une architecture de compilateur modulaire composée de nombreux passes simples
- Après avoir acquis une expérience concrète d’implémentation avec ces deux ressources, on peut, si nécessaire, approfondir avec des manuels traditionnels (Dragon Book)
La réalité de l’apprentissage des compilateurs et deux articles essentiels
- Les ouvrages existants sur les compilateurs sont jugés trop volumineux et difficiles, au point qu’il est compliqué pour un débutant d’écrire un compilateur réellement opérationnel
- La plupart des livres couvrent de très nombreux sujets, comme la transformation des expressions régulières ou la théorie des grammaires, sans offrir de point de départ vraiment pratique
- Cela contribue à créer des idées reçues et des mythes selon lesquels « les compilateurs sont difficiles »
- La série « Let’s Build a Compiler! » de Jack Crenshaw est présentée comme une ressource emblématique pour casser cette perception
- Ce tutoriel, lancé en 1988, traite d’un compilateur à passage unique de niveau Turbo Pascal
- Sa structure combine l’analyse syntaxique et la génération de code, avec seulement un minimum d’optimisation
- Il a été écrit à l’origine en Pascal, et il existe ensuite une version C ainsi qu’une traduction en Forth
- La version Forth facilite l’expérimentation et la compréhension grâce aux caractéristiques interactives du langage
- La limite de la série de Crenshaw est l’absence de représentation interne du programme (arbre de syntaxe abstraite, AST)
- En Pascal, la manipulation d’arbres était complexe et a donc été omise, mais elle peut être mise en œuvre facilement dans des langages de haut niveau comme Python, Ruby, Erlang, Haskell, Lisp
- Ces langages ont précisément été conçus pour manipuler des données sous forme d’arbres
- La deuxième ressource recommandée est l’article de Sarkar, Waddell, Dybvig
« A Nanopass Framework for Compiler Education »
- L’idée centrale est qu’« un compilateur est une série de processus qui transforment progressivement la représentation interne d’un programme »
- Il propose une structure composée de dizaines à centaines de transformations (passes) simples
- Chaque transformation est maintenue aussi simple que possible, en évitant le couplage entre les transformations
- Le framework définit explicitement les entrées et les sorties de chaque passe
- Le langage d’implémentation est Scheme, avec une validation à l’exécution basée sur le typage dynamique
- Après avoir écrit un vrai compilateur grâce à ces deux ressources, on peut, si nécessaire, poursuivre avec des manuels traditionnels comme le Dragon Book
- Mais ces deux ressources suffisent déjà à acquérir une expérience pratique de création de compilateurs
Aucun commentaire pour le moment.