Download - Cours de Compilation
Cours de Compilation
Séance d’introduction
Pr ZEGOUR DJAMEL EDDINEEcole Supérieure d’Informatique (ESI)www.zegour.uuuq.com email: [email protected]
Introduction (Définition)
Compilation : Étude des techniques permettant de traduire un programme source en un programme objet
Programme source : écrit dans un langage de programmation
Programme objet : dépend de la machine
Introduction(Pré-requis)
Compilation : Algorithmes et structures de données (Piles, arbres, graphes,… )
Programme source : Théorie des langages
Programme objet : Structure des machines
Autres : programmation procédurale, programmation objet, quelques langages de programmation
Introduction(Structures de données)
Algorithmes
Structures de données (Pile, arbre, graphe,… )
Pile
Arbre
Graphe
…
Introduction(Théorie des langages)
Relation entre les mathématiques et les langages
Notion de grammaires et langages
Classification (Chomsky)
Les langages réguliers et les automates
Les langages algébriques (contexte libre) et les automates à pile
…
Introduction(Structure des machines)
Algèbre de Boole
Représentation et codage de l’information
Techniques d’adressage
Exécution d’une instruction
Les langages d’assemblage et les assembleurs
…
Introduction(Organisation du cours)
Cours théorique accompagné de code C# (T1, T2, …, T8) (DotNet + Introduction C#)
Cours spécifique : Réalisation du compilateur (Langage Z) (P1, P2,…. ,P20)
Introduction(Plan/Cours théorique)
T1 : Vue générale T2 : Analyse lexicale T3 : Analyse syntaxique T4 : Traitement sémantique et grammaires d’attribut T5 : Table des symboles T6 : Génération de code T7 : Les analyseurs Bottom-up T8 : Générateurs de compilateurs
Introduction(Plan/Cours théorique)
T1: Vue généraleMotivationStructure d‘un compilateurGrammairesArbres Syntaxiques et AmbiguïtéClassification de Chomsky
Introduction(Plan/Cours théorique)
T2 : Analyse lexicaleTaches d‘un scannerGrammaires Régulières et Automates finisImplémentation des scanners
Introduction(Plan/Cours théorique)
T3 : Analyse syntaxiqueGrammaires contexte-libre et Automates à pile(PDA)Analyse descendante récursivePropriétés LL(1) Traitement des erreurs
Introduction(Plan/Cours théorique)
T4 : Traitement de la sémantique et les grammaires d‘attributTraitement sémantiqueGrammaires d’attributs (ATG)Transformations des ATG en un analyseurExemples d’applications
Introduction(Plan/Cours théorique)
T5 : Table des symbolesVue généraleSymbolesPortéeTypes
Introduction(Plan/Cours théorique)
T6 : Génération Code
Vue généraleLe code à générer
Organisation de la mémoireExpressionsAffectationsStructures de contrôleMéthodes
Introduction(Plan/Cours théorique)
T7 : Les analyseurs Bottom-up Comment fonctionne un analyseur Bottom-up Grammaires LR
Génération de la table LRTraitement de la sémantiqueTraitement des erreurs LR
Variantes de LR
Introduction(Plan/Cours théorique)
T8 : Générateurs de compilateursVue généraleYaccLexCoco/R
Introduction(Plan/Cours spécifique)
Langage Z (P1) et langage Z minimal (P2) Réalisation d’un compilateur très simplifié pour le langage minimal (P3 P10) Extension du langage minimal par
Expressions logiques (P11)et chaînes de caractères (P12) Les structures simples et tableaux (P13) Les structures de contrôle (P14) Les procédures et fonctions (P15) Les structures complexes (P16) Les machines abstraites (P17 P19) Les fonctions standards (P20)
Introduction(Plan/Cours spécifique)
Réalisation du compilateur pour le langage Z minimal
Réalisation analyse lexicale Réalisation analyse syntaxiqueOrganisation simple de la mémoire et attribution des adresses Sémantique des déclarations, instructions et expressions Interprétation du langage
Introduction(Plan/Cours spécifique)
Les machines abstraites Z
Machines de TuringLes listes linéaires chaînéesLes fichiers
Introduction(Plan/Réalisation)
Démarche
Définir un langage minimal de Z et réalisez le compilateur en entier
Enrichir progressivement la grammaire
A chaque étape, redémarrer toutes les étapes : lexique, syntaxe, sémantique, génération de code
S‘arrêter quand le langage entier est traité.
Organisation du cours
T2
T1
T8
T7
T6
T3
T4
T5
P1 P2
P3
P4
P5 P6
P8P7 P9 P10
P11 P12 P13 P14 P15
P16 P17 P18
P19 P20
Introduction
Dot Net et C#
1
2
3 4
6
8 10
11
12
5
9
7
T
P
Cours théorique général
Cours spécifique
Travaux dirigés
Ordre de présentation du cours
PAUSE : Terminer la réalisation du compilateur du langage Z minimal
FIN : Terminer la réalisation du compilateur du langage Z
COMPIL Z
Introduction(Extensions)
Formalisation de la sémantique des langages de programmation : Spécifications relationnelles, axiomatiques, algébriques, ...
Compilateurs/Interpréteurs pour langages non procéduraux - Langages fonctionnels (LISP) - Langages logiques (PROLOG) (Syntaxe identique mais Sémantique totalement différente)
Introduction(Outils standards)
Langage de programmation : pour l‘écriture du compilateur/interpréteur (C++, Delphi,... )
Langage d‘assemblage : pour la génération de code (Processeur Intel)
Langage pivot (Machine Virtuelle) : pour la génération de code
( P-code de PASCAL, JVM, La machine virtuelle de .NET : Common Language Runtime (CLR) )
Introduction(Outil spécifique)
Khawarizm niveau 1 : environnement pour le développement des algorithmes en langage Z (conçu pour l‘apprentissage de la programmation)
Compil-Z : dévoiler le fonctionnement interne des compilateurs
Introduction(Références)
Compiler Construction for digital computers. David Gries. Addison-Wesley Edition. 1975
Principles of Compiler Design. A.V. Aho, J.D Ullman. Addison-Wesley Edition. 1977
Compilers : Principles, Techniques and Tools. Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman. Addison-Wesley Edition. 2003