Compilateurs

Vous trouverez ci-dessous les ressources liées au cours de conception de compilateurs que j'ai donné à la Haute École Arc de 2004 à 2010. Il est à noter que ce cours a également fait l'objet d'une communication à PyCon 2010.

La contribution la plus originale de cours consiste en une série de tutoriaux sur la conception d'un compilateur avec le package python PLY. Ce tutoriel peut probablement être utile hors du cadre de ces cours, puisqu'il s'agit de l'une des rares sources d'information en français sur l'utilisation de PLY. Je commence donc par ça:

Tutoriel et projet: conception d'un compilateur en python avec PLY

NB: Avant de commencer la série de tutoriaux, téléchargez l'archive contenant les ressources nécessaires à sa réalisation.

  • La première partie propose une Prise en main de PLY avec ce qui constitue en quelques sorte le Hello World des compilateurs: un interpréteur d'expressions arithmétiques.
  • La deuxième partie, Perfectionnement de PLY, va un peu plus loin en introduisant la gestion des variables et la construction d'un arbre syntaxique abstrait (AST). L'utilisation d'un petit package maison permet d'obtenir (via Graphviz et PyDot) une représentation graphique de l'arbre:

    AST

  • La troisième partie est consacrée à l'Analyse sémantique. Après avoir ajouté une instruction print et une boucle while à notre langage, on s'attaque à la couture de l'arbre syntaxique; là aussi, une représentation graphique permet de mieux voir ce que l'on fait (jusqu'à un certain point...):

    Threaded AST

    Remarque: pour éviter de trop imbriquer le code des différentes étapes de compilation, une forme élémentaire de programmation orientée aspects est utilisée (à l'aide d'un "décorateur" python); ceci permet d'enrichir les fonctionnalités des classes développées tout en gardant le nouveau code dans un fichier séparé.

  • La quatrième et dernière partie est consacrée à la Partie arrière. Elle aborde l'interprétation récursive, l'interprétation itérative, puis la compilation (vers du bytecode pour svm, une machine virtuelle simpliste à but pédagogique disponibles dans les ressources que vous avez téléchargées).

Les étudiants sont ensuite appelés à réaliser leur propre compilateur (Donnée). Par exemple:

  • En 2009, David Jacot et Anthony Mougin ont réalisé VSL Compiler, qui constitue un bel exemple de compilateur complet avec machine virtuelle, le tout réalisé en python avec l'aide de PLY.
  • En 2008, Fabienne Roth et Yann Voumard ont mis au point Trucky, un interpréteur (inspiré de NetLogo) permettant de décrire collectivement le comportement de nombreux agents (des voitures et des camions) et de visualiser leurs interactions dans un backend en PyGame.

Cours et exercices

Et le background théorique pour tout ce qui précède...

Creative Commons License

Tout le matériel pédagogique présent sur ce site est mis à disposition selon les termes de la licence Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 2.5 Suisse.

En gros, cela signifie que vous avez le droit de redistribuer ce matériel, modifié ou non, dans un cadre non-commercial, à condition que l'auteur original (Matthieu Amiguet) soit cité et que la distribution se fasse sous les mêmes conditions. Tous les détails sur le site de Creative Commons.