CSC4251_4252 — Compilation : du langage de haut niveau à l'assembleur

Portail informatique

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.
Plus de détails dans la fiche programme (aussi en vidéo interne).

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éances
    Sujets
    Supports
    Notions clés
  • Syntaxe 1
    Analyse 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
  • Syntaxe 2
    Analyse Lexicale (2/2)
    • Cours
      (50mn)
      Chapitre 2
    • Cours Pratique
      (20mn)
      Memento JFlex : 5 à 7
    • Retours sur la pratique de Maven
      (10mn)
    • TP
      (100mn)
      Exos JFlex : 4 (, 5), 6|7 (, 8)
    • Théorie des langages
    • Automate fini et langage régulier
    • Expressions régulières non triviales
    • Outillage de code avec JFlex
  • Syntaxe 3
    Analyse Syntaxique (1/4)
    • Grammaire Algébrique
      • définition et exemples
      • ambiguïté
      • syntaxe BNF
    • Premiers pas CUP
      • couplage avec JFlex, Tokens
      • écriture de grammaires
  • Syntaxe 4
    Analyse Syntaxique (2/4)
    • Cours
      (50mn)
      Chapitre 4
    • Cours Pratique
      (20mn)
      Memento CUP : 5 à 7
    • TP
      (110mn)
      Exos CUP : 2, (3,) 4 (, 5)
    • Analyse Syntaxique LL et LR
    • Déterminisme, Ambiguïté et Conflit
    • Valeur sémantique des symboles
    • Analyse complète d'un langage
  • Syntaxe 5
    Analyse Syntaxique (3/4)
    • « Calculatrice »
    • Interprétation à la volée
    • Priorité (LR)
    • Traitement d'erreur (LR)
  • Syntaxe 6
    Analyse Syntaxique (4/4)
    • Cours
      (30mn)
      Chapitre 6
    • Cours Pratique
      (30mn)
      Patron de conception Visiteur
    • TP
      (120mn)
      Exos CUP : 8, 9 (, 10)
    • Arbre de Syntaxe Abstraite
    • Interprétation sur arbre : évaluation, boucles
    • Arbre de Syntaxe et typage objet
    • Patron de conception Visiteur et parcours d'arbre

  • Extras
    Extras
    Hors présentiel d'extra
    • 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é 1
    TP noté (1/2)
    • Analyse lexicale et analyse syntaxique (90mn)

  • Archi1
    Archi (1/2)
    • Instruction, Registre
    • Assembleur et outil MARS
    • Structures algorithmiques : if, for, etc.
    • Appel de fonction, variables locales
  • Archi2
    Archi (2/2)
    • TP
      (180mn)

  • Sémantique 1
    MiniJAVA
    • Langage MiniJAVA, structure du compilateur
    • Démarrage avec les analyses lexicale et syntaxique de MiniJAVA
    • Arbre de Syntaxe Abstraite de MiniJAVA
  • Sémantique 2
    Analyse 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 3
    Analyse sémantique (2/2)
    • Cours
      (20mn)
      Chapitre 7 (fin)
    • TP
      (160mn)
      Phase 3
    • Contrôle de type
  • Sémantique 4
    Finalisation de l'analyse sémantique
    • TP
      (180mn)
    • Revoir l'ensemble des visiteurs de l'analyse sémantique
    • Enchaînement des visiteurs dans le compilateur
  • Sémantique 5
    Forme Intermédiaire
    • Partie avant et arrière d'un compilateur
    • Linéarisation, Canonisation
    • Code à 3 adresses
  • Sémantique 6
    Génération MIPS
    • Allocation mémoire, registre
    • Cadre et Convention d'appel
    • Sélection d'instruction
  • Sémantique 7
    Finalisation de MiniJAVA
    • TP
      (180mn)
    • Rendu Moodle
    • Finalisation et Test du compilateur
    • Revoir l'ensemble des phases de compilation

  • TP noté 2
    TP noté (2/2)
    • Analyse sémantique, principalement (90mn)