Compilation et Analyse de Programmes

Compilation et Analyse de Programmes

Cours du M1 2015-2016, premier semestre.

Présentation du cours :

Ce cours de premier semestre du M1 Spécialité « Informatique Fondamentale » présente des
concepts et des outils pour la manipulation des programmes. Un rôle central est joué par la notion
de compilation, processus de traduction permettant de passer d’un langage de programmation à un
autre. Le cours présente les diverses composantes d’un compilateur, et les concepts mis en jeu pour
implémenter les étapes successives de la compilation. En parallèle, un compilateur sera développé
en TP, à partir de briques de base fournies dans le cadre de l’enseignement. Ce développement se
focalisera sur la compilation d’un langage impératif relativement simple. Des notions en lien avec la
compilation des langages fonctionnels (d’ordre supérieur) seront également présentées (clôtures,
continuations).
Le cours présentera également un certain nombre de méthodes pour l’analyse de
programmes. Ces approches peuvent être utiles pour aider à la compilation, ou aussi pour garantir
des propriétés portant sur l’exécution des programmes. On se focalisera sur des analyses statiques
(ayant lieu avant l’exécution du programme) : interprétation abstraite, typage, logique de Floyd-
Hoare. On fera également le lien avec la sémantique dénotationnelle d’un petit langage impératif,
notamment pour justifier la correction et la complétude de la logique de Hoare.
Ce cours de 2h hebdomadaires est accompagné de 2h de travaux pratiques ou travaux
dirigés.
Les prérequis du cours sont une connaissance de notions de base en lien avec l’architecture
des ordinateurs, la programmation impérative, la programmation fonctionnelle, et la sémantique
(raisonnements par induction).

Objectifs du cours :

  1. Connaître la structure générale d’un compilateur, et les diverses étapes à l’œuvre dans le
    processus de compilation.
  2. Connaître les concepts nécessaires pour les étapes successives de la compilation : la
    traduction dirigée par la syntaxe, la représentation intermédiaire, la sélection, l’allocation,
    l’ordonnancement.
  3. Écrire un compilateur de bout en bout, à partir d’éléments de base fournis dans le cadre de
    l’enseignement.
  4. Connaître des notions en lien avec la compilation des langages fonctionnels (clôtures,
    continuations).
  5. Connaître diverses méthodes pour l’analyse statique des programmes : interprétation
    abstraite, logique de Hoare (et liens avec la sémantique dénotationnelle d’un petit langage
    impératif), systèmes de types.

Voir cette page pour une partie du cours (ainsi que des liens vers les TDs/TPs).