Langages et compilateurs
Si vous cherchez le tutoriel sur la conception de compilateurs en python avec PLY, allez voir directement ci-dessous.
Le cours Langages et Compilateurs se compose de deux parties relativement indépendantes: la première concerne des techniques de programmation avancée et la seconde se concentre sur les techniques de compilation. Toutes deux se reposent sur l'utilisation du langage python.
Ce cours se donne sur 16 semaines à trois heures de théorie et trois heures de pratique par semaine.
- Introduction du cours
Techniques avancées de programmation (en python)
- Cours
- Travaux pratiques et exercices
Compilateurs
Cours
- Théorie des langages et des automates (pas de support de cours)
- Exercices
Tutoriel et projet: conception d'un compilateur en python avec PLY
Pour appliquer les notions théoriques vues au cours, les étudiants sont appelés à suivre un tutoriel assez détaillé sur la conception d'un compilateur en python avec le package 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.
- 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:
- 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...):
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)
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.
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.
