Cours de compilation - Master 1 IF, ENS Lyon
Le but de ce cours est de donner aux étudiants une vision globale du
fonctionnement d'un compilateur pour un langage impératif. Un
compilateur pour un sous-ensemble de C vers la
machine DigMIPS est construit étape par
étape en TP.
Cours
J'ai choisi de dispenser ce cours au tableau, à l'ancienne... Vous ne
trouverez donc que quelques slides sur la partie back-end.
- Analyse lexicale.
Expressions régulières, automates, descriptions lexicales, interprétation
- Analyse syntaxique.
Grammaires, analyse prédictive LL(k), analyse ascendante LR(k)
- Grammaires attribuées.
Attributs, actions, grammaires S-attribuées, schémas de traduction, grammaires attribuées générales
- Types.
Types statiques, types dynamiques, typage fort, typage faible, polymorphisme
- Organisation des données.
Pile, enregistrements d'activation, tas, organisation des tableaux et des structures, construction, traduction des fonctions
- Traduction dirigée par la syntaxe.
Schémas de traductions (expressions arithmétiques, conditions, contrôle)
- Représentations intermédiaires.
Code intermédiaire, graphe de flot de contrôle, flot de données (DAG), flot de données (SSA), simplifications ("optimisations")
- Sélection des instructions. slides
Pavage d'arbres (programmation dynamique), pavage de DAG (ILP, Koes-Goldstein), complexité
- Ordonnancement. slides
Sur les arbres (Sethi-Ullman) et les DAG (décomposition en arbre + Sethi-Ullman, randomisation)
- Allocation des registres. slides
Interférences, affinités, coloriage biaisé (Chaitin), iterated register coalescing (Appel et George), linear scan (Sarkar), allocation de la pile
- Analyse statique (introduction à l').
Sémantique concrète/abstraite, interpétation abstraite, élargissement. Application: invariants simples (intervalles).
TD/TP
- Architecture cible: DigMIPS. TP TP_en
Mise à niveau en C++. TP TP_en
- Analyse lexicale. TP
TP_en
Fichiers: [src0_automaton.tgz]
[src0_flex.tgz]
[src1_lexer.tgz]
Corrigé: [flex_corrige.tgz]
[lexer_corrige.tgz]
- Analyse syntaxique. TP TP_en
Fichiers: [LL.tar.gz]
[src0_if.tar.gz]
[src1_stmt.tar.gz]
[src2_parser.tar.gz]
[src3_ETF.tar.gz]
Corrigé: [LL_correction.tar.gz]
[src0_if_correction.tar.gz]
[src0_stmt.tar.gz]
[src0_parser.tar.gz])
- Types. TP TP_en TD_en
Fichier: [dcc_types.tgz]
Corrigé: [dcc_types_corrige.tgz]
- Organisation des données. TD TP TP_en
Fichier:
[tp4_src.tgz]
Corrigé:
[tp4_src_correction.tgz])
- Traduction dirigée par la syntaxe. TD TP TP_en
Fichier: [tp5_src.tgz]
Corrigé: [tp5_src_corrige.tgz]
- Représentations intermédiaires. TP TP_en TD TD_en
Fichier: [src_tp6.tar.gz]
Corrigé: [ri_corrige.tar.gz]
- Génération de code. TP
TP_en TD_en [td_corrigé]
Fichier: [digcc.tgz]
- Analyse statique. TP_en
Fichiers: [apron.c] [code.c] [gcd.c]
Partiels/examens passés
Références
- Modern compiler implementation in C. Andrew Appel. Cambridge press.
- Modern compiler design. Dick Grune, Henri Bal, Ceriel Jacobs et Koen Langendoen. Wiley editions.
- Engineering a compiler. Keith Cooper et Linda Torczon. Morgan Kauffman editions.
- Compilers: principles, techniques and tools. Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey Ullman. Interéditions.