Langages de programmation et compilation 2020-2021
Jean-Christophe Filliâtre
Cours donné aux élèves de première année à
l'École Normale Supérieure.
- Cours le vendredi de 8:30 à 10:30 en salle
E. Noether (ex U ou V)
Dans la limite de 22 places, et donc en alternance
(voir moodle)
- TDs le jeudi ou le vendredi, de 10h45 à 12h15 en salles INFO 3 et 4 NIR
avec Basile Clément
- Évaluation : un examen + un projet
Cours
Séances :
- Cours 1 (25 septembre 2020): mise à niveau OCaml
- Cours 2 (2 octobre 2020): aperçu de la compilation / assembleur x86-64
- Cours 3 (9 octobre 2020): syntaxe abstraite / sémantique / interprètes
- Cours 4 (16 octobre 2020): analyse lexicale
- Cours 5 (23 octobre 2020): analyse syntaxique 1/2
- pas de cours le vendredi 30 octobre
(vacances Toussaint)
- Cours 6 (6 novembre 2020): analyse syntaxique 2/2
- Cours 7 (13 novembre 2020): typage
- Cours 8 (20 novembre 2020): mode de passage des paramètres
- Cours 9 (27 novembre 2020): compilation des langages fonctionnels
- Cours 10 (4 décembre 2019): compilation des langages objets
- Cours 11 (11 décembre 2020): compilateur optimisant, partie 1
- Cours 12 (18 décembre 2020): compilateur optimisant, partie 2
- Cours 13 (8 janvier 2021): allocation mémoire
TD
Il y a deux groupes de TD (en alternance avec les TD d'algo) :
- groupe 1 le vendredi 10h45 - 12h15
- groupe 2 le jeudi (de la semaine suivante) 10h45 - 12h15
Séances :
Projet
Cette année, on compile un sous-ensemble du
langage Julia.
Sujet (version 2 - 19 octobre 2020)
Quelques tests sont fournis
(les télécharger
: tests-19-oct.tar.gz).
Ce script shell peut être utilisé pour
automatiser les tests, avec la syntaxe ./test -n
binaire-compilo où n vaut 1 (tests parseur), 2
(tests typage) ou 3 (tests production de code).
Un module OCaml est fourni pour construire du code x86-64 :
x86_64.ml
/ x86_64.mli /
documentation /
télécharger.
Libre à vous de le compléter si besoin.
Le projet est à rendre en deux fois :
- partie 1 (analyse syntaxique et typage uniquement) pour le
dimanche 6 décembre 18:00 ;
- partie 2 (projet complet, avec production de code) pour le
dimanche 17 janvier 18:00.
Il est conseillé de procéder construction par construction (que ce
soit pour le typage ou pour la production de code), dans cet ordre :
affichage, arithmétique, variables globales, instructions
(if, for, while), fonctions, structures.
Le rapport rendu avec le projet doit notamment aider à la
compréhension du code du projet.
Il n'y a pas de soutenance de projet.
Examen
La date de l'examen n'est pas encore fixée.
Les notes de cours manuscrites ou reprographiées sont les seuls
documents autorisés.
Archives :
janvier 2020
(corrigé) /
janvier 2019
(corrigé) /
janvier 2018
(corrigé) /
janvier 2017
(corrigé) /
janvier 2016
(corrigé) /
janvier 2015
(corrigé) /
janvier 2014
(corrigé) /
janvier 2013
(corrigé) /
janvier 2012
(corrigé) /
janvier 2011
(corrigé) /
janvier 2010
(corrigé) /
janvier 2009
(corrigé)
Liens / Bibliographie
Outils
Cartes de référence
Ouvrages en rapport avec le cours
Ces trois ouvrages sont disponibles à la bibliothèque.
Le cours ci-dessus ne suit pas vraiment ces ouvrages.
Néanmoins, ce sont de très bons ouvrages, conseillés pour aller plus loin.
For foreign students not yet fluent in French
- A tiny French-English dictionary
- a rough correspondence between the lectures and chapters from the
books above (which are in English):
| Lecture | Chapters
|
2 | Assembly | Bryant & O'Hallaron 3
|
3 | Semantics | Pierce 3-4-5
|
4 | Typing | Pierce 8-9-10 et 22
|
5 | Lexical analysis | Dragon 3
|
6-7 | Syntactic analysis | Dragon 4
|
11 | Memory allocation
| Bryant & O'Hallaron 9
|
Remerciements : merci à Christine Paulin, François Pottier et
Xavier Leroy pour leur aide dans la préparation de ce cours