Logo EPFL
LAMP
Ecole Polytechnique Fédérale de Lausanne
Compilation 2005/2006
French only
Cours: lundi 10:15-12:00, salle INM 202
Exercices: mardi 08:15-10:00, salles INF 3 et INM 202
TP: jeudi 13:15-15:00, salles INF 3 et INN 118

[22 février 2006]
  • La liste des notes est affichée devant le bureau INR 319.
[8 février 2006]
[5 février 2006]
[3 février 2006]

Ce cours est un cours de construction de compilateurs. Il aborde les aspects fondamentaux de l'analyse des langages de programmation et de leur traduction en une forme exétutable. à la fin du cours, l'étudiant devrait :

  • pouvoir définir la syntaxe formelle d'un langage de programmation,
  • pouvoir définir la sémantique d'un langage avec un interpréteur,
  • connaître les structures internes et l'architecture des compilateurs,
  • érre capable d'écrire un compilateur qui traduit un langage simple en un code exécutable,
  • connaître les structures et les motifs de constructions (design patterns) utilisées dans la construction d'un compilateur,
  • connaître la représentation en mémoire à l'exécution des principales constructions d'un langage de programmation.

Quelques buts moins tangibles mais tout aussi importants sont :

  • Amériorer la compréhension des langages de programmation,
  • comprendre les compromis entre pouvoir d'expression, simplicitér et performance d'un langage de programmation,
  • participer à la conception et à la réalisation d'un logiciel o la théorie est essentielle pour la réussite.

Bibliographie

Partie 1 (24 octobre):
Survol et fondements (slides; pour impression: 2 par page, 4 par page).
Partie 2 (25 et 31 octobre, 1er novembre):
Analyse lexicale (slides; pour impression: 2 par page, 4 par page; matériel de support).
Partie 3 (7, 14 et 15 novembre):
Analyse syntaxique (slides; pour impression: 2 par page, 4 par page; matériel de support).
Grammaires LL(2) (slides; pour impression: 2 par page, 4 par page).
Partie 4 (21 et 28 novembre):
Syntaxe abstraite (slides; pour impression: 2 par page, 4 par page; matériel de support).
Syntaxe abstraite de Zwei (slides; pour impression: 2 par page, 4 par page).
Analyse syntaxique par combinateur (slides; pour impression: 2 par page, 4 par page, matériel de support).
Article: Scalable Component Abstractions.
Partie 5 (5 et 6 décembre):
Analyse des noms (slides; pour impression: 2 par page, 4 par page.
Partie 6 (12 et 13 décembre):
Analyse des types (slides; pour impression: 2 par page, 4 par page.
Partie 7 (19 décembre):
Grammaires attribuées (slides; pour impression: 2 par page, 4 par page.
Partie 8 (9 janvier):
Gérération de code, expressions arithmétiques (slides; pour impression: 2 par page, 4 par page.
Partie 9 (16 et 17 janvier):
Production de code et gestion de la mémoire (slides; pour impression: 2 par page, 4 par page.
Partie 10 (23 janvier):
Production de code, fonctions et classes (slides; pour impression: 2 par page, 4 par page.
Partie 11 (30 janvier):
Production de code, langages à héritage multiple (slides; pour impression: 2 par page, 4 par page.
Partie 12 (6 février):
Introduction aux optimisations (slides; pour impression: 2 par page, 4 par page.
Gestion dynamique de la mémoire (slides; pour impression: 2 par page, 4 par page.

Les exercices sont notés et sont pris en compte dans l'évaluation de l'étudiant pour ce cours. Contrairement au projet, chaque étudiant doit rendre une copie individuelle et personnalisée.

Série 1 (1er novembre):
Analyse lexicale (pdf) ou (ps). A rendre jusqu'au 8 novembre 2005.
Série 2 (15 novembre):
Analyse syntaxique (pdf) ou (ps). A rendre jusqu'au 22 novembre 2005.
  Projet
Survol

Le but de ce projet est d'écrire un petit compilateur pour le langage de programmation Zwei. Les documents suivants fournissent les détails concernant Zwei :

Organisation

Le projet s'effectue par groupes de deux étudiants.

Les salles suivantes sont disponibles pour travailler sur le projet:

  • La salle INF 3 est équipée de postes de travail tournant sous Solaris 10.
  • Le salles INM 202 (mardi) et INN 118 (jeudi) sont prévues pour les étudiants travaillant sur leur ordinateur portable.

Vous trouverez quelques indications utiles pour configurer votre environnement sous Unix et Windows ici.

Etapes

Nous utilisons le langage Scala pour l'implémentation du compilateur zweic. Un canevas (framework) est fourni pour chaque étape du projet.

Mesures contre la copie

La note de ce cours est en partie dérerminér par un projet que vous aller réaliser par groupes de 2 érudiants. Il est parfaitement autorisé (et méme recommandér que les membres d'un groupe échangent leur code ou lisent le code des autres. Par contre, il est strictement interdit de copier du code d'autres groupes ou de projets des années précédentes (qui sont de toute façon différents du projet de cette année).

Comme par le passér tous les érudiants devront soumettre leur projet par voie érectronique. Nous testerons chaque programme avec un logiciel de dérection de copies. Si nous dérectons deux soumissions trér semblables, nous interrogerons les groupes concernér. Si nous parvenons érdérerminer qui a copiérsur qui, le groupe qui a copiér recevra 0 points pour cette partie de l'exercice. Si nous ne parvenons pas érdéterminer qui a copié sur qui, alors tous les groupes concernés recevront 0 points. Pour cette raison, il est très important que vous protégiez le code que vous écrivez.

Pour terminer, un groupe qui copie à plusieurs reprises échouera l'ensemble du projet.

Le cours est géré par Sygeco2. Sygeco2 est un service web qui vous permet de vous inscrire au cours, de former des groupes pour le projet et de consulter vos notes durant le semestre.

Sygeco2 utilise votre numéro et votre mot de passe Camipro pour vous authentifier. L'accés à Sygeco2 est restreint à l'EPFL. Si vous voulez y accérer depuis l'extérieur, vous devez utiliser un VPN.

Si vous avez besoin d'aide pour Sygeco2, n'hésitez pas à contacter un des assistants. Il y a aussi un manuel qui n'est plus très à jour (certaines parties ne s'appliquent plus à la version courante).

Le cours a maintenant son forum de discussion : epfl.ic.cours.compilation.

N'hésitez pas à y exprimer vos interrogations, vos problèmes. D'autres étudiants pourront peut-étre vous aider et les assistants s'engagent értraiter réguliérement les nouveaux messages. C'est aussi par ce biais que nous vous communiquerons des annonces générales concernant le cours.

Le plus simple pour accérer au forum est de le faire :

Enfin, si vous avez des questions générales concernant l'utilisation des forums de discussion é l'EPFL vous trouverez tout sur le site : Usenet News

  Notes

Votre note finale se calcule en fonction du nombre de points obtenus. Vous obtenez des points pour les exercices, les TPs et l'examen final. Voici une liste du nombre de points maximum que vous pouvez obtenir dans chaque cas:

Activité Points maximums
Série 1 30
Série 2 30
Total pour séries d'exercices 60
Scanner, partie 1 50
Parser, partie 2 70
Printer, partie 3 70
Analyzer, partie 4 100
Generator, partie 5 150
Total pour projet Zwei 440
Examen final 500
Maximum des points possibles 1000

La date de l'examen final est fixér au jeudi 9 février 2006. Merci d'être prérents au plus tard à 13h10 dans la salle correspondant à votre nom (1 érudiant par table):

Etudiants Salles #tables
A-L INN 118 42
M-Z BC 01 30
BC 03 20

Professeur

Assistants

Assistants érudiants