Transcript Document

Cours de Compilation
Séance d’introduction
Pr ZEGOUR DJAMEL EDDINE
Ecole 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érale
Motivation
Structure d‘un compilateur
Grammaires
Arbres Syntaxiques et Ambiguïté
Classification de Chomsky
Introduction(Plan/Cours théorique)
T2 : Analyse lexicale
Taches d‘un scanner
Grammaires Régulières et Automates finis
Implémentation des scanners
Introduction(Plan/Cours théorique)
T3 : Analyse syntaxique
Grammaires contexte-libre et Automates à pile(PDA)
Analyse descendante récursive
Propriétés LL(1)
Traitement des erreurs
Introduction(Plan/Cours théorique)
T4 : Traitement de la sémantique et les grammaires d‘attribut
Traitement sémantique
Grammaires d’attributs (ATG)
Transformations des ATG en un analyseur
Exemples d’applications
Introduction(Plan/Cours théorique)
T5 : Table des symboles
Vue générale
Symboles
Portée
Types
Introduction(Plan/Cours théorique)
T6 : Génération Code
Vue générale
Le code à générer
Organisation de la mémoire
Expressions
Affectations
Structures de contrôle
Mé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 LR
Traitement de la sémantique
Traitement des erreurs LR
Variantes de LR
Introduction(Plan/Cours théorique)
T8 : Générateurs de compilateurs
Vue générale
Yacc
Lex
Coco/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 syntaxique
Organisation 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 Turing
Les listes linéaires chaînées
Les 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
1
T1
P1
P2
T
T2
2
P3
P
3
T3
4
Cours
spécifique
P4
Travaux dirigés
P5
Ordre de
présentation du
cours
Introduction
T4
Cours théorique
général
P6
5
6
Dot Net et C#
T5
P7
P8
P9
7
P10
PAUSE : Terminer la réalisation du compilateur du langage Z minimal
8
COMPIL Z
T6
P11
P12
P13
P16
P17
P18
11
T7
12
T8
P19
P20
FIN : Terminer la réalisation du compilateur du langage Z
9
P14
10
P15
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. AddisonWesley 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