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
    • TP
      (110mn)
      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)
    • 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)
    • Arbre de Syntaxe Abstraite
    • Interprétation sur arbre : évaluation, boucles
    • Arbre de Syntaxe et typage objet
    • Patron de conception Visiteur et parcours d'arbre

  • Bonus
    Bonus
    Bonus en hors présentiel
    • 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
    • Analyse lexicale et Syntaxique
    • Arbre de Syntaxe Abstraite
  • Sémantique 2
    Analyse Sémantique (1/2)
    • Phases de Compilation
    • Analyse sémantique
      • Principes
      • Arbres décorés, attributs 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)
      Étape 3
    • Des fonctions sémantiques
    • Contrôle de type
  • Sémantique 4
    Forme Intermédiaire
    • Partie avant et arrière d'un compilateur
    • Linéarisation, Canonisation
    • Code à 3 adresses
  • Sémantique 5
    Génération MIPS (1/2)
    • Allocation mémoire, registre
    • Cadre et Convention d'appel
    • Sélection d'instruction
  • Sémantique 6
    Génération MIPS (2/2)
    • TP
      (180mn)
      Étapes 6—8
    • Finalisation et Test du compilateur
    • Ajouter le type Tableaux d'entiers
    • Revoir l'ensemble des phases de compilation
  • Sémantique 7
    Finalisation de MiniJAVA
    • Rendu Moodle
    • Finalisation et Test du compilateur
    • Ajouter le type Tableaux d'entiers
    • Revoir l'ensemble des phases de compilation

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