Sous le prétexte d'étudier les compilateurs, nous allons déconstruire de nombreux mécanismes de programmation caractéristiques des langages de haut niveau et nous intéresser aux langages de programmation eux-mêmes. L'objectif est de faire de vous des programmeurs avertis, conscients du fonctionnement de vos outils.
Au passage, vous allez aussi écrire vous-même un compilateur, et voir comment des notions vues dans de multiples autres cours de votre cursus sans liens évidents entre eux peuvent être convoquées ensemble dans la construction d'un unique programme.

Documents

Cours et TD

Ressources

Ouvrages

De bonnes références, trouvables en bibliothèque.

Outils

TP : Construction d'un compilateur

La construction de votre compilateur sera incrémentale : dès la fin du premier module vous aurez un compilateur simple mais complet pour un langage rudimentaire. Chaque nouveau module enrichira le langage et/ou améliorera le compilateur lui-même.

Sujets

Module 1 : génération de code

Réaliser la partie arrière d'un compilateur pour le langage Imp présenté dans le cours d'ouverture. Cette partie travaille à partir de l'arbre de syntaxe abstraite et a pour rôle de générer un code assembleur correspondant.

À rendre pour le 26 septembre via Dokeos.

Module 2 : analyse syntaxique

Refactoriser la partie avant du compilateur. Cette partie travaille à partir du texte source du programme et a pour rôle de produire son arbre de syntaxe abstraite, en signalant à l'utilisateur d'éventuels problèmes détectés dans le code.

Module 3 : structures de données

Enrichir le langage avec la possibilité de manipuler des structures de données allouées sur le tas, natives comme les tableaux ou définies par l'utilisateur. En bonus : gestion de la mémoire.

Module 4 : fonctions

Ajouter au langage la possibilité de définir et utiliser des fonctions de premier ordre, pouvant être récursives ou mutuellement récursives, et de déclarer des variables locales à ces fonctions.

Module 5 : extensions

Ajouter plus de constructions de haut niveau, ou analyser le programme pour améliorer la qualité du code généré.

Modalités

L'ensemble des travaux pratiques sera noté et comptera pour 40% de votre note finale (note conservée en deuxième session). Rappel des principes :