Présentation
Module CSC4251_4252 — Compilation : du langage de haut niveau à l'assembleur.Cours M1, école d'ingénieur deuxième année, module d'ouverture.
À travers la réalisation d'un compilateur d'un sous-ensemble de JAVA vers l'assembleur MIPS, les objectifs du cours se déclinent sur trois directions :
- étudier l'architecture des processeurs et l'écriture de code assembleur ;
- introduire la théorie des langages et en maîtriser les applications pratiques en informatique, et en particulier, les outils de génération de compilateur (compiler-compiler) ;
-
approfondir la maîtrise de la programmation dans un langage
évolué :
- par la pratique dans l'écriture d'un compilateur,
- par la compréhension de la façon dont les idiomes et les patrons de conception sont mis en œuvre pour leurs exécutions.
Séquencement
Les séances dites « Archi » peuvent être entrelacées avec les séances « Syntaxe » ou « Sémantique ».Les séances « Syntaxe » sont prérequises pour les séances « Sémantique » et « Bonus ».
-
SéancesSujetsSupportsNotions clés
-
Syntaxe 1Analyse lexicale (1/2)Prolégomènes
Analyse Lexicale (1/2)-
Introduction du cours
- compilation / interpretation / traduction
- phases de la compilation
-
Analyse lexicale versus syntaxique
- Hiérarchie de Chomsky, catégorie lexicale, grammaire
-
Premiers pas d'analyse lexicale
- Expression régulière
- Outil JFlex
-
Introduction du cours
-
Syntaxe 2Analyse Lexicale (2/2)
- Cours
- Cours Pratique
- Retours sur la pratique de Maven
- TP
- Théorie des langages
- Automate fini et langage régulier
- Expressions régulières non triviales
- Outillage de code avec JFlex
-
Syntaxe 3Analyse Syntaxique (1/4)
-
Grammaire Algébrique
- définition et exemples
- ambiguïté
- syntaxe BNF
-
Premiers pas CUP
- couplage avec JFlex, Tokens
- écriture de grammaires
-
Grammaire Algébrique
-
Syntaxe 4Analyse Syntaxique (2/4)
- Analyse Syntaxique LL et LR
- Déterminisme, Ambiguïté et Conflit
- Valeur sémantique des symboles
- Analyse complète d'un langage
-
Syntaxe 5Analyse Syntaxique (3/4)
- Cours Pratique
- TP
-
Devoir Maison qui remplace le TP noté 1
Énoncé (readme.md) et squelette
- « Calculatrice »
- Interprétation à la volée
- Priorité (LR)
- Traitement d'erreur (LR)
-
Syntaxe 6Analyse Syntaxique (4/4)
- Arbre de Syntaxe Abstraite
- Interprétation sur arbre : évaluation, boucles
- Arbre de Syntaxe et typage objet
- Patron de conception Visiteur et parcours d'arbre
-
ExtrasExtrasHors présentiel d'extra
- Bootstrap : TP Brainfuck
- TD langages
- En vrac : Exercices JFlex/CUP
-
Paradoxe du bootstrap,
compiler un compilateur Brainfuck écrit en Brainfuck ?!?,
comparaison performances compilation versus interprétation - Exercices de TD sur la théorie des langages
- Exercices supplémentaires de TP JFlex et CUP en vrac
-
TP noté 1TP noté (1/2)
- Analyse lexicale et analyse syntaxique (90mn)
-
Archi1Archi (1/2)
- Instruction, Registre
- Assembleur et outil MARS
- Structures algorithmiques : if, for, etc.
- Appel de fonction, variables locales
-
Archi2Archi (2/2)
-
Sémantique 1MiniJAVA
- Langage MiniJAVA, structure du compilateur
- Démarrage avec les analyses lexicale et syntaxique de MiniJAVA
- Arbre de Syntaxe Abstraite de MiniJAVA
-
Sémantique 2Analyse Sémantique (1/2)
- Phases de Compilation
-
Analyse sémantique
- Principes
- Arbres décorés, attributs sémantiques
- Des fonctions sémantiques
- Table de symboles : liaison et visibilité des identificateurs
-
Sémantique 3Analyse sémantique (2/2)
- Contrôle de type
-
Sémantique 4Finalisation de l'analyse sémantique
- Revoir l'ensemble des visiteurs de l'analyse sémantique
- Enchaînement des visiteurs dans le compilateur
-
Sémantique 5Forme Intermédiaire
- Partie avant et arrière d'un compilateur
- Linéarisation, Canonisation
- Code à 3 adresses
-
Sémantique 6Génération MIPS
- Allocation mémoire, registre
- Cadre et Convention d'appel
- Sélection d'instruction
-
Sémantique 7Finalisation de MiniJAVA
- TP
- Rendu Moodle
- Finalisation et Test du compilateur
- Revoir l'ensemble des phases de compilation
-
TP noté 2TP noté (2/2)
- Analyse sémantique, principalement (90mn)