====== Compilation ====== ===== Synoptique ===== ^ Prof ^ Site ^ Cours ^ TP ^ TD ^ ECTS ^ | Eric VIOLARD | [[http://icps.u-strasbg.fr/~violard/]] | 28h | 12h | 20h | 6 | ^ Contenu ^^^^^^ | [[compil_1|Structure d'un compilateur]]. |||||| | Analyse lexicale. [[compilation_resume_as|Analyse syntaxique]] [[compil_ll|descendante]] et ascendante. |||||| | Analyseurs [[compil_ll_2 | LL(1)]], [[compil_4|SLR (1)]], LR (1) et LALR (1). |||||| | Grammaires attribuées et notion d'actions sémantiques. |||||| | Traitement des erreurs. |||||| | IV. [[compil_7|Production de code intermédiaire]]. |||||| | V. [[compil_8|Gestion de la table des symboles]]. |||||| | VI. [[compil_9|Optimisation de code]]. |||||| | Génération de code objet. |||||| ^ Pre-requis ^^^^^^ | Bonnes connaissances en théorie des langages, des notions de grammaires et d'automates. |||||| ===== Bibliographie ===== - "Compilateurs: Principes, techniques et outils," A. Aho, R. Sethi, T. Ullman (2000), ou la 2e édition (2007) EUR 65 (923 pages!) - "Lex et Yacc", J. R. Levine, T. Mason, D. Brown (1992) [actuellement indisponible] - "Modern Compiler Design", D. Grune, H. E. Bal, C. J. H. Jacobs, K. G. Langendoern (2000) [Eur 40 chez Amazon fr] ===== Remarques ===== Objectif de ce cours: comprendre et maîtriser la construction d'un compilateur. Cette construction s'appuie sur des résultats de la théorie des langages: * Expressions rationnelles et automates (analyse lexicale) * Grammaire algébrique et automate à pile (analyse syntaxique) * Grammaire attribuée (génération de code intermédiaire) Il existe des outils pour construire des compilateurs: * LEX : générateur d'analyseur lexical * YACC : générateur d'analyseur syntaxique * LLVM : infrastructure complète de compilateur (low level virtual machine?) ===== Cours ===== * [[compil_1 | 14 Sep 2009 ]] -- I. Introduction * [[compil_2 | 21 Sep 2009 ]] -- II. Analyse Syntaxique * [[compil_3 | 28 Sep 2009 ]] -- * [[compil_4 | 5 Oct 2009 ]] -- * [[compil_iii_2 | 5-12 Oct 2009 ]] -- III. Traduction dirigée par la syntaxe ===== TDs et TPs ===== ^ Lien ^ Date ^ Hrs. TD ^ Hrs. TP ^ | [[compil_td_1 | Analyse lexicale ]] | 23/09/2009 | 2 | 0 | | [[compil_td_2a | Analyse Syntaxique Descendante]] | 30/09/2009 | 2 | 0 | | [[compil_tp_1 | Analyse lexicale ]] -- exercices (f)lex | 7/10/2009 | 0 | 2 | | [[compil_td_2b | Analyse Syntaxique Descendante]] -- suite | 14/10/2009 | 2 | 0 | | [[compil_td_3a | Analyse SLR(1)]] | 21/10/2009? | 2 | 0 | | [[compil_tp_2 | Analyse Syntaxique ]] | 28/10/2009 | 0 | 2 | | [[compil_td_3b | Analyse SLR(1)]] | 18/11/2009? | 2 | 0 | | [[compil_td_4 | Examen passé ]] | 26/11/2009 | 2 | 0 | | [[compil_tp_3 | Génération de code assembleur MIPS]] | 27/11/2009 | 0 | 2 | | [[compil_td_5 | Optimisation de Code]] | 2/12/2009 | 2 | 0 | | [[compil_td_6 | Code Assembleur MIPS]] | 3/12/2009 | 2 | 0 | | [[compil_tp_4 | Mise au point projets]] | 9/12/2009 | 0 | 2 | ===== TP ===== * [[calis:plan| Conseils pour le projet]] d'après le projet liacs.nl/home/coco * [[calis:grammaire| Etude de la grammaire]] et les problèmes qu'elle pose pour l'analyse syntaxique * [[calis:appels| Appels Fonction]] -- "CALL", comment préparer (passage d'arguments et //activation record//), passer le contrôle puis reprendre après retour. * [[calis:ast| AST]] : [[calis:ast_const|construction]], [[calis:ast_annot|annotation]], [[calis:ast_trad|traduction]] * [[calis:array| Tableaux]]