19 septembre 2007cours de compilation 1 - intranet1 marc gengler [email protected] cours...
TRANSCRIPT
19 septembre 2007 Cours de compilation 1 - Intranet 1
Marc GenglerMarc Gengler
[email protected]@esil.univmed.fr
Cours de compilationCours de compilation
18h de cours18h de coursavec un peu de avec un peu de
TDTDun projet de 32hun projet de 32h
. . . et un . . . et un examenexamen
19 septembre 2007 Cours de compilation 1 - Intranet 2
Marc GenglerMarc Gengler
[email protected]@esil.univ-mrs.fr
Cours de compilationCours de compilation
18h de cours18h de coursavec un peu de avec un peu de
TDTDun projet de 32hun projet de 32h
. . . et un . . . et un examenexamen
19 septembre 2007 Cours de compilation 1 - Intranet 3
Les grandes lignes du coursLes grandes lignes du cours
•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
19 septembre 2007 Cours de compilation 1 - Intranet 4
BibliographieBibliographie
•Tout ce qui contientTout ce qui contient– compilation, compilateur, compiler.compilation, compilateur, compiler.
•InternetInternet– souvent, c’est trop simplifié ou trop dense,souvent, c’est trop simplifié ou trop dense,
– et pas toujours correct.et pas toujours correct.
•Mes choixMes choix– Principles of Compiler Design, Aho & Ullman.Principles of Compiler Design, Aho & Ullman.
« The green dragon book » (1977)« The green dragon book » (1977)
– Compilers: Principles, Techniques, and Tools,Compilers: Principles, Techniques, and Tools,
Aho, Sethi & Ullman.Aho, Sethi & Ullman.
« The red dragon book » (1986)« The red dragon book » (1986)
– Lex & Yacc, Levine.Lex & Yacc, Levine.
19 septembre 2007 Cours de compilation 1 - Intranet 5
Les grandes lignes du coursLes grandes lignes du cours
•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantes etTechniques d’analyse descendantes et ascendantesascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
19 septembre 2007 Cours de compilation 1 - Intranet 6
I N T R O D U C T I O NI N T R O D U C T I O N
19 septembre 2007 Cours de compilation 1 - Intranet 7
Définition de baseDéfinition de base----------------------------------------------------------------------------------------------------------------------------
----• Un compilateur est un TRADUCTEURUn compilateur est un TRADUCTEUR
d’un « texte » écrit en langage source Ld’un « texte » écrit en langage source L
vers le « même texte » écrit en langage vers le « même texte » écrit en langage cible C.cible C.
19 septembre 2007 Cours de compilation 1 - Intranet 8
Définition de baseDéfinition de base----------------------------------------------------------------------------------------------------------------------------
----• Un compilateur est un TRADUCTEURUn compilateur est un TRADUCTEUR
d’un « texte » écrit en langage source Ld’un « texte » écrit en langage source L
vers le « même texte » écrit en langage vers le « même texte » écrit en langage cible C.cible C.
CompilateurCompilateurCC ASMASM
19 septembre 2007 Cours de compilation 1 - Intranet 9
Définition de baseDéfinition de base----------------------------------------------------------------------------------------------------------------------------
----• Un compilateur est un TRADUCTEURUn compilateur est un TRADUCTEUR
d’un « texte » écrit en langage source Ld’un « texte » écrit en langage source L
vers le « même texte » écrit en langage vers le « même texte » écrit en langage cible C.cible C.
CompilateurCompilateurCC ASMASM
void main ()void main () {int x;{int x; if …if …
load A , #13load A , #13add A , B , Cadd A , B , C……
19 septembre 2007 Cours de compilation 1 - Intranet 10
Définition de baseDéfinition de base----------------------------------------------------------------------------------------------------------------------------
----• Un compilateur est un TRADUCTEURUn compilateur est un TRADUCTEUR
d’un « texte » écrit en langage source Ld’un « texte » écrit en langage source L
vers le « même texte » écrit en langage vers le « même texte » écrit en langage cible C.cible C.
CompilateurCompilateurCC ASMASM
CompilateurCompilateur ’’PascalPascal CC
19 septembre 2007 Cours de compilation 1 - Intranet 11
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– lit tout le texte source,lit tout le texte source,
19 septembre 2007 Cours de compilation 1 - Intranet 12
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– lit tout le texte source,lit tout le texte source,– le comprend (vérifie)le comprend (vérifie)
19 septembre 2007 Cours de compilation 1 - Intranet 13
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– lit tout le texte source,lit tout le texte source,– le comprend (vérifie)le comprend (vérifie)– et le traduit en un texte équivalent.et le traduit en un texte équivalent.
19 septembre 2007 Cours de compilation 1 - Intranet 14
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– lit tout le texte source,lit tout le texte source,– le comprend (vérifie)le comprend (vérifie)– et le traduit en un texte équivalent.et le traduit en un texte équivalent.
Il n’exécute pas le programme !Il n’exécute pas le programme !
19 septembre 2007 Cours de compilation 1 - Intranet 15
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un interprèteUn interprète
– lit une instruction source,lit une instruction source,
19 septembre 2007 Cours de compilation 1 - Intranet 16
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un interprèteUn interprète
– lit une instruction source,lit une instruction source,– la comprend (vérifie),la comprend (vérifie),
19 septembre 2007 Cours de compilation 1 - Intranet 17
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un interprèteUn interprète
– lit une instruction source,lit une instruction source,– la comprend (vérifie),la comprend (vérifie),– l’exécutel’exécute
19 septembre 2007 Cours de compilation 1 - Intranet 18
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un interprèteUn interprète
– lit une instruction source,lit une instruction source,– la comprend (vérifie),la comprend (vérifie),– l’exécutel’exécute– et passe à l’instruction suivante.et passe à l’instruction suivante.
19 septembre 2007 Cours de compilation 1 - Intranet 19
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un interprèteUn interprète
– lit une instruction source,lit une instruction source,– la comprend (vérifie),la comprend (vérifie),– l’exécutel’exécute– et passe à l’instruction suivante.et passe à l’instruction suivante.
Il exécute le programme !Il exécute le programme !
19 septembre 2007 Cours de compilation 1 - Intranet 20
Compilation >< InterprétationCompilation >< Interprétation----------------------------------------------------------------------------------------------------------------------------
----
• Un interprèteUn interprète
– lit une instruction source,lit une instruction source,– la comprend (vérifie),la comprend (vérifie),– l’exécutel’exécute– et passe à l’instruction suivante.et passe à l’instruction suivante.
Il exécute le programme !Il exécute le programme !
Un processeur est un interprète de son byte-code !Un processeur est un interprète de son byte-code !
19 septembre 2007 Cours de compilation 1 - Intranet 21
C H A I N A G EC H A I N A G E
D ED E
C O M P I L A T E U R SC O M P I L A T E U R S
19 septembre 2007 Cours de compilation 1 - Intranet 22
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1
19 septembre 2007 Cours de compilation 1 - Intranet 23
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
19 septembre 2007 Cours de compilation 1 - Intranet 24
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
Ils peuvent être vus comme un seul compilateur !Ils peuvent être vus comme un seul compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 25
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
En termes de langages :En termes de langages :
C1C1 C2C2SourceSource CibleCibleIntermédiaireIntermédiaire
19 septembre 2007 Cours de compilation 1 - Intranet 26
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
En termes de langages :En termes de langages :
C1C1 C2C2SourceSource CibleCibleIntermédiaireIntermédiaire
Fréquent dans la pratique :Fréquent dans la pratique :
C1C1 C2C2SourceSource ASM optimiséASM optimiséASMASMcorrectcorrect
19 septembre 2007 Cours de compilation 1 - Intranet 27
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
Nous pouvons partager un FRONT-END :Nous pouvons partager un FRONT-END :
C1C1
C2C2
SourceSource
ASM X86ASM X86
ASM virtuelASM virtuel
C3C3 ASM MipsASM Mips
19 septembre 2007 Cours de compilation 1 - Intranet 28
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
Nous pouvons partager un BACK-END :Nous pouvons partager un BACK-END :
C3C3
C1C1
ASMASM
PascalPascal
IntermédiaireIntermédiaire
C2C2ModulaModula
19 septembre 2007 Cours de compilation 1 - Intranet 29
Chaînage de compilateursChaînage de compilateurs----------------------------------------------------------------------------------------------------------------------------
----
C1C1 C2C2
Et nous combinons (gcc et g++ par exemple) :Et nous combinons (gcc et g++ par exemple) :
C1C1CC
IntermédiaireIntermédiaire
C++C++
C3C3 ASM X86ASM X86
C4C4 ASM MipsASM MipsC2C2
19 septembre 2007 Cours de compilation 1 - Intranet 30
L E SL E S
L A N G A G E SL A N G A G E S
D A N S U ND A N S U N
C O M P I L A T E U RC O M P I L A T E U R
19 septembre 2007 Cours de compilation 1 - Intranet 31
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– traduit du langage S vers le langage C,traduit du langage S vers le langage C,
– est lui-même écrit en un langage I.est lui-même écrit en un langage I.
19 septembre 2007 Cours de compilation 1 - Intranet 32
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– traduit du langage S vers le langage C,traduit du langage S vers le langage C,
– est lui-même écrit en un langage I.est lui-même écrit en un langage I.
CompCompS S --> C> C
II
19 septembre 2007 Cours de compilation 1 - Intranet 33
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Un compilateurUn compilateur
– traduit du langage S vers le langage C,traduit du langage S vers le langage C,
– est lui-même écrit en un langage I.est lui-même écrit en un langage I.
CompComp
ou encore, par le « diagramme en T » :ou encore, par le « diagramme en T » :
S CS C
S S --> C> C
II
IIS CS C
II
19 septembre 2007 Cours de compilation 1 - Intranet 34
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Appelons une « M-machine » ou « M-Appelons une « M-machine » ou « M-interprète » une machine dont le processeur interprète » une machine dont le processeur interprète M !interprète M !
19 septembre 2007 Cours de compilation 1 - Intranet 35
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Appelons une « M-machine » ou « M-Appelons une « M-machine » ou « M-interprète » une machine dont le processeur interprète » une machine dont le processeur interprète M !interprète M !
• Un compilateur de L , autonome sur la M-Un compilateur de L , autonome sur la M-machine, est :machine, est :
L ML M
MM
19 septembre 2007 Cours de compilation 1 - Intranet 36
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Appelons une « M-machine » ou « M-Appelons une « M-machine » ou « M-interprète » une machine dont le processeur interprète » une machine dont le processeur interprète M !interprète M !
• Un compilateur de L , autonome sur la M-Un compilateur de L , autonome sur la M-machine, est :machine, est :
L ML M
MM
SourceSourceLL
19 septembre 2007 Cours de compilation 1 - Intranet 37
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Appelons une « M-machine » ou « M-Appelons une « M-machine » ou « M-interprète » une machine dont le processeur interprète » une machine dont le processeur interprète M !interprète M !
• Un compilateur de L , autonome sur la M-Un compilateur de L , autonome sur la M-machine, est :machine, est :
L ML M
MM
SourceSourceLL CibleCible
MM
19 septembre 2007 Cours de compilation 1 - Intranet 38
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----
• Appelons une « M-machine » ou « M-Appelons une « M-machine » ou « M-interprète » une machine dont le processeur interprète » une machine dont le processeur interprète M !interprète M !
• Un compilateur de L , autonome sur la M-Un compilateur de L , autonome sur la M-machine, est :machine, est :
L ML M
MM
SourceSourceLL CibleCible
MM
M-machineM-machineLe supportLe supportd’exécutiond’exécution
M-machineM-machine
19 septembre 2007 Cours de compilation 1 - Intranet 39
Un compilateur et sa réalisationUn compilateur et sa réalisation----------------------------------------------------------------------------------------------------------------------------
----• Appelons une « M-machine » ou « M-interprète » une Appelons une « M-machine » ou « M-interprète » une
machine dont le processeur interprète M !machine dont le processeur interprète M !
• Un compilateur de L , autonome sur la M-machine, est :Un compilateur de L , autonome sur la M-machine, est :
• La compilation et l’exécution du code compilé peuvent La compilation et l’exécution du code compilé peuvent se faire sur la M-machine ! ! !se faire sur la M-machine ! ! !
L ML M
MM
SourceSourceLL CibleCible
MM
M-machineM-machineLe supportLe supportd’exécutiond’exécution
M-machineM-machine
19 septembre 2007 Cours de compilation 1 - Intranet 40
G E N E R A T I O NG E N E R A T I O N
D ED E
N O U V E A U XN O U V E A U X
C O M P I L A T E U R SC O M P I L A T E U R S
19 septembre 2007 Cours de compilation 1 - Intranet 41
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous disposons d’un compilateur de L , autonome Nous disposons d’un compilateur de L , autonome
sur M !sur M !L ML M
MM
19 septembre 2007 Cours de compilation 1 - Intranet 42
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous disposons d’un compilateur de L , autonome Nous disposons d’un compilateur de L , autonome
sur M !sur M !
• Nous voulons un compilateur de Nous voulons un compilateur de XX , autonome sur M , autonome sur M !!
L ML M
MM
XX M M
MM
19 septembre 2007 Cours de compilation 1 - Intranet 43
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous disposons d’un compilateur de L , autonome sur Nous disposons d’un compilateur de L , autonome sur
M !M !
• Nous voulons un compilateur de Nous voulons un compilateur de XX , autonome sur M ! , autonome sur M !
• Nous voulons un compilateur de L , autonome sur Nous voulons un compilateur de L , autonome sur NN ! !
L ML M
MM
XX M M
MM
L L NN
NN
19 septembre 2007 Cours de compilation 1 - Intranet 44
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous disposons d’un compilateur de L , autonome sur Nous disposons d’un compilateur de L , autonome sur
M !M !
• Nous voulons un compilateur de Nous voulons un compilateur de XX , autonome sur M ! , autonome sur M !
• Nous voulons un compilateur de L , autonome sur Nous voulons un compilateur de L , autonome sur NN ! !
L ML M
MM
XX M M
MM
L L NN
NN
19 septembre 2007 Cours de compilation 1 - Intranet 45
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
19 septembre 2007 Cours de compilation 1 - Intranet 46
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
19 septembre 2007 Cours de compilation 1 - Intranet 47
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
• Indiquons l’inefficacité par * ! ! !Indiquons l’inefficacité par * ! ! !
19 septembre 2007 Cours de compilation 1 - Intranet 48
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
• Indiquons l’inefficacité par * ! ! !Indiquons l’inefficacité par * ! ! !
L M*L M*MM
Ce compilateur est rapide, mais le code produit n’est pas bon !Ce compilateur est rapide, mais le code produit n’est pas bon !
19 septembre 2007 Cours de compilation 1 - Intranet 49
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
• Indiquons l’inefficacité par * ! ! !Indiquons l’inefficacité par * ! ! !
L M*L M*MM
L ML MM*M*
L M*L M*M*M*
L ML MMM
19 septembre 2007 Cours de compilation 1 - Intranet 50
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
• Indiquons l’inefficacité par * ! ! !Indiquons l’inefficacité par * ! ! !
L M*L M*MM
L ML MM*M*
L M*L M*M*M*
L ML MMM
Il est lent, mais produit un bon résultat !Il est lent, mais produit un bon résultat !
19 septembre 2007 Cours de compilation 1 - Intranet 51
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
• Indiquons l’inefficacité par * ! ! !Indiquons l’inefficacité par * ! ! !
L M*L M*MM
L ML MM*M*
L M*L M*M*M*
L ML MMM
Il est lent et mauvais !Il est lent et mauvais !
19 septembre 2007 Cours de compilation 1 - Intranet 52
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Un bon compilateur travaille Un bon compilateur travaille vitevite et et bienbien ! !
– La compilation est rapide !La compilation est rapide !
– Le code compilé est rapide, efficace en Le code compilé est rapide, efficace en mémoire, . . . !mémoire, . . . !
• Indiquons l’inefficacité par * ! ! !Indiquons l’inefficacité par * ! ! !
L M*L M*MM
L ML MM*M*
L M*L M*M*M*
L ML MMM
Il est bon !Il est bon !
19 septembre 2007 Cours de compilation 1 - Intranet 53
C H A N G E RC H A N G E R
D ED E
L A N G A G EL A N G A G E
19 septembre 2007 Cours de compilation 1 - Intranet 54
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Sur la M-machine, construisons un bon Sur la M-machine, construisons un bon
compilateur pour le nouveau langage X !compilateur pour le nouveau langage X !
19 septembre 2007 Cours de compilation 1 - Intranet 55
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Sur la M-machine, construisons un bon Sur la M-machine, construisons un bon
compilateur pour le nouveau langage X !compilateur pour le nouveau langage X !
• Ecrire directement est très Ecrire directement est très difficile !difficile !
X X M M
MM
19 septembre 2007 Cours de compilation 1 - Intranet 56
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Sur la M-machine, construisons un bon Sur la M-machine, construisons un bon
compilateur pour le nouveau langage X !compilateur pour le nouveau langage X !
• Ecrire directement est très Ecrire directement est très difficile !difficile !
– Faire une bonne traduction de X vers M est Faire une bonne traduction de X vers M est difficile !difficile !
– La réaliser de surcroît en M ne facilite rien ! ! !La réaliser de surcroît en M ne facilite rien ! ! !
X X M M
MM
19 septembre 2007 Cours de compilation 1 - Intranet 57
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Sur la M-machine, construisons un bon Sur la M-machine, construisons un bon
compilateur pour le nouveau langage X !compilateur pour le nouveau langage X !
• Ecrire directement est très Ecrire directement est très difficile !difficile !
– Faire une bonne traduction de X vers M est Faire une bonne traduction de X vers M est difficile !difficile !
– La réaliser de surcroît en M ne facilite rien ! ! !La réaliser de surcroît en M ne facilite rien ! ! !
X X M M
MM
19 septembre 2007 Cours de compilation 1 - Intranet 58
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous allons devoir combiner des Nous allons devoir combiner des
compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 59
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous allons devoir combiner des Nous allons devoir combiner des
compilateurs !compilateurs !
• Ecrire est très facile !Ecrire est très facile !X X L L
LL
19 septembre 2007 Cours de compilation 1 - Intranet 60
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous allons devoir combiner des Nous allons devoir combiner des
compilateurs !compilateurs !
• Ecrire est très facile !Ecrire est très facile !
– La traduction entre les langages évolués X et L La traduction entre les langages évolués X et L est très facile.est très facile.
– La réaliser de surcroît en L rend la chose La réaliser de surcroît en L rend la chose aisée ! ! !aisée ! ! !
X X L L
LL
19 septembre 2007 Cours de compilation 1 - Intranet 61
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous allons devoir combiner des Nous allons devoir combiner des
compilateurs !compilateurs !
• Ecrire est très facile !Ecrire est très facile !
– La traduction entre les langages évolués X et L La traduction entre les langages évolués X et L est très facile.est très facile.
– La réaliser de surcroît en L rend la chose La réaliser de surcroît en L rend la chose aisée ! ! !aisée ! ! !
X X L L
LL
19 septembre 2007 Cours de compilation 1 - Intranet 62
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• D’abord nous compilons le nouveau compilateur D’abord nous compilons le nouveau compilateur
!!
19 septembre 2007 Cours de compilation 1 - Intranet 63
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• D’abord nous compilons le nouveau compilateur D’abord nous compilons le nouveau compilateur
!!
L ML M
MM
M-machineM-machine
19 septembre 2007 Cours de compilation 1 - Intranet 64
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• D’abord nous compilons le nouveau compilateur D’abord nous compilons le nouveau compilateur
!!
L ML M
MM
M-machineM-machine
X LX LLL
19 septembre 2007 Cours de compilation 1 - Intranet 65
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• D’abord nous compilons le nouveau compilateur D’abord nous compilons le nouveau compilateur
!!
L ML M
MM
M-machineM-machine
X LX LLL
X LX LMM
Nous gardons un compilateur de X vers L !Nous gardons un compilateur de X vers L !Mais, il est maintenant écrit en M !Mais, il est maintenant écrit en M !
19 septembre 2007 Cours de compilation 1 - Intranet 66
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• D’abord nous compilons le nouveau compilateur D’abord nous compilons le nouveau compilateur
!!
L ML M
MM
M-machineM-machine
En diagramme T !En diagramme T !
X LX L
LL
X LX L
MM
19 septembre 2007 Cours de compilation 1 - Intranet 67
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• D’abord nous compilons le nouveau compilateur D’abord nous compilons le nouveau compilateur
!!
L ML M
MM
M-machineM-machine
En diagramme T !En diagramme T !
X LX L
LL
X LX L
MM
Nous l’avons rendu exécutable sur la M-machine ! ! !Nous l’avons rendu exécutable sur la M-machine ! ! !
19 septembre 2007 Cours de compilation 1 - Intranet 68
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux
compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 69
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
X LX L
MM
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 70
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
X LX L
MM
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 71
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
X LX L
MM
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 72
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
X LX L
MM
M-machineM-machine
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 73
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
X LX L
MM
M-machineM-machine
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 74
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
X LX L
MM
M-machineM-machine
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 75
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
X LX L
MM
M-machineM-machine
X M*X M*
MM
• Maintenant, nous chaînons les deux Maintenant, nous chaînons les deux compilateurs !compilateurs !
19 septembre 2007 Cours de compilation 1 - Intranet 76
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• La meilleure solution est la suivante !La meilleure solution est la suivante !
19 septembre 2007 Cours de compilation 1 - Intranet 77
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• La meilleure solution est la suivante !La meilleure solution est la suivante !
• Ecrire est d’une difficulté Ecrire est d’une difficulté raisonnable !raisonnable !
X X MM
LL
19 septembre 2007 Cours de compilation 1 - Intranet 78
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• La meilleure solution est la suivante !La meilleure solution est la suivante !
• Ecrire est d’une difficulté Ecrire est d’une difficulté raisonnable !raisonnable !
– La traduction de X vers M est difficile, sans plus.La traduction de X vers M est difficile, sans plus.
– La réaliser dans le langage L est raisonnable ! ! !La réaliser dans le langage L est raisonnable ! ! !
X X MM
LL
19 septembre 2007 Cours de compilation 1 - Intranet 79
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• La meilleure solution est la suivante !La meilleure solution est la suivante !
• Ecrire est d’une difficulté Ecrire est d’une difficulté raisonnable !raisonnable !
– La traduction de X vers M est difficile, sans plus.La traduction de X vers M est difficile, sans plus.
– La réaliser dans le langage L est raisonnable ! ! !La réaliser dans le langage L est raisonnable ! ! !
X X MM
LL
19 septembre 2007 Cours de compilation 1 - Intranet 80
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Il suffit de compiler le nouveau compilateur !Il suffit de compiler le nouveau compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 81
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
M-machineM-machine
• Il suffit de compiler le nouveau compilateur !Il suffit de compiler le nouveau compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 82
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
M-machineM-machine
X X MM
LL
• Il suffit de compiler le nouveau compilateur !Il suffit de compiler le nouveau compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 83
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----
L ML M
MM
M-machineM-machine
X X MM
LL
X X MM
MM
• Il suffit de compiler le nouveau compilateur !Il suffit de compiler le nouveau compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 84
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Il suffit de compiler le nouveau compilateur !Il suffit de compiler le nouveau compilateur !
L ML M
MM
M-machineM-machine
X X MM
LL
X X MM
MM
Ce compilateur est bon !Ce compilateur est bon !
19 septembre 2007 Cours de compilation 1 - Intranet 85
C H A N G E RC H A N G E R
D ED E
M A C H I N EM A C H I N E
19 septembre 2007 Cours de compilation 1 - Intranet 86
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Pour le langage L , autonome sur M , nous Pour le langage L , autonome sur M , nous
voulons construire un bon compilateur sur voulons construire un bon compilateur sur une nouvelle machine N !une nouvelle machine N !
19 septembre 2007 Cours de compilation 1 - Intranet 87
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Pour le langage L , autonome sur M , nous Pour le langage L , autonome sur M , nous
voulons construire un bon compilateur sur voulons construire un bon compilateur sur une nouvelle machine N !une nouvelle machine N !
• Ecrire directement est très Ecrire directement est très difficile !difficile !
L L N N
NN
19 septembre 2007 Cours de compilation 1 - Intranet 88
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Pour le langage L , autonome sur M , nous Pour le langage L , autonome sur M , nous
voulons construire un bon compilateur sur voulons construire un bon compilateur sur une nouvelle machine N !une nouvelle machine N !
• Ecrire directement est très Ecrire directement est très difficile !difficile !
• Ecrire est d’une difficulté Ecrire est d’une difficulté raisonnable !raisonnable !
L L N N
NN
L L N N
LL
19 septembre 2007 Cours de compilation 1 - Intranet 89
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 90
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
L ML M
MM
M-machineM-machine
19 septembre 2007 Cours de compilation 1 - Intranet 91
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
L ML M
MM
M-machineM-machine
L L N N
LL
19 septembre 2007 Cours de compilation 1 - Intranet 92
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 93
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
• Nous obtenons un « cross-compilateur » :Nous obtenons un « cross-compilateur » :
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 94
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
• Nous obtenons un « cross-compilateur » :Nous obtenons un « cross-compilateur » :
– qui s’exécute sur l’ancienne machine Mqui s’exécute sur l’ancienne machine M
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 95
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous compilons le nouveau compilateur !Nous compilons le nouveau compilateur !
• Nous obtenons un « cross-compilateur » :Nous obtenons un « cross-compilateur » :
– qui s’exécute sur l’ancienne machine Mqui s’exécute sur l’ancienne machine M
– et produit du code pour la nouvelle machine N .et produit du code pour la nouvelle machine N .
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 96
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous recompilons le nouveau compilateur, à Nous recompilons le nouveau compilateur, à
l’aide du cross-compilateur !l’aide du cross-compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 97
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous recompilons le nouveau compilateur, à Nous recompilons le nouveau compilateur, à
l’aide du cross-compilateur !l’aide du cross-compilateur !
M-machineM-machine
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 98
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous recompilons le nouveau compilateur, à Nous recompilons le nouveau compilateur, à
l’aide du cross-compilateur !l’aide du cross-compilateur !
M-machineM-machine
L L N N
MM
L L N N
LL
19 septembre 2007 Cours de compilation 1 - Intranet 99
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous recompilons le nouveau compilateur, à l’aide du Nous recompilons le nouveau compilateur, à l’aide du
cross-compilateur !cross-compilateur !
• Nous obtenons un bon compilateur pour L et Nous obtenons un bon compilateur pour L et autonome sur la machine N !autonome sur la machine N !
M-machineM-machine
L L N N
MM
L L N N
LL
L L N N
NN
19 septembre 2007 Cours de compilation 1 - Intranet 100
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Nous recompilons le nouveau compilateur, à l’aide du Nous recompilons le nouveau compilateur, à l’aide du
cross-compilateur !cross-compilateur !
• Nous obtenons un bon compilateur pour L et Nous obtenons un bon compilateur pour L et autonome sur la machine N !autonome sur la machine N !
M-machineM-machine
L L N N
MM
L L N N
LL
L L N N
NN
19 septembre 2007 Cours de compilation 1 - Intranet 101
L EL E
T A B L E A UT A B L E A U
C O M P L E TC O M P L E T
19 septembre 2007 Cours de compilation 1 - Intranet 102
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
19 septembre 2007 Cours de compilation 1 - Intranet 103
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L ML M
MM
M-machineM-machine
Le matérielLe matérielLe compilateur initialLe compilateur initial
19 septembre 2007 Cours de compilation 1 - Intranet 104
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL L ML M
MM
M-machineM-machine
Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier source
19 septembre 2007 Cours de compilation 1 - Intranet 105
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
MM
L L N N
LL L ML M
MM
M-machineM-machine
Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
19 septembre 2007 Cours de compilation 1 - Intranet 106
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL L ML M
MM
M-machineM-machine
L L N N
LL
Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le mêmeLe mêmefichier !fichier !
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 107
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL L ML M
MM
M-machineM-machine
L L N N
LL
Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
L L N N
NN
Le mêmeLe mêmefichier !fichier !
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 108
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL
L L N N
NN
L ML M
MM
M-machineM-machine
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
Le mêmeLe mêmefichier !fichier !
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 109
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL
L L N N
NN
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
Le mêmeLe mêmefichier !fichier !
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 110
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL
L L N N
NN
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
Le mêmeLe mêmefichier !fichier ! L L N N
NN
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 111
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
LL
L L N N
NN
L ML M
MM
M-machineM-machine
L L N N
LL
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
Le mêmeLe mêmefichier !fichier ! L L N N
NN
Le test de régression :Le test de régression :
Le mêmeLe mêmeexécutable !exécutable !
L L N N
MM
19 septembre 2007 Cours de compilation 1 - Intranet 112
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
NN
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
L L N N
NN
Le test de régression :Le test de régression :
Le mêmeLe mêmeexécutable !exécutable !
19 septembre 2007 Cours de compilation 1 - Intranet 113
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
NN
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
L L N N
NN
Le test de régression :Le test de régression :
Le mêmeLe mêmeexécutable !exécutable !
Nous avons :Nous avons :
un compilateur opérationnel,un compilateur opérationnel,
19 septembre 2007 Cours de compilation 1 - Intranet 114
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
NN
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
L L N N
NN
Le test de régression :Le test de régression :
Le mêmeLe mêmeexécutable !exécutable !
Nous avons :Nous avons :
un compilateur opérationnel,un compilateur opérationnel,
son fichier source,son fichier source,
19 septembre 2007 Cours de compilation 1 - Intranet 115
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
NN
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
L L N N
NN
Le test de régression :Le test de régression :
Le mêmeLe mêmeexécutable !exécutable !
Nous avons :Nous avons :
un compilateur opérationnel,un compilateur opérationnel,
son fichier source,son fichier source,
nous savons regénérer l’exécutablenous savons regénérer l’exécutable..
19 septembre 2007 Cours de compilation 1 - Intranet 116
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Le tableau complet !Le tableau complet !
L L N N
NN
L L N N
LL
N-machineN-machine Le matérielLe matérielLe compilateur initialLe compilateur initial
Le fichier sourceLe fichier sourceLe cross-compilateur crééLe cross-compilateur créé
Le compilateur de L sur NLe compilateur de L sur N
L L N N
NN
Le test de régression :Le test de régression :
Le mêmeLe mêmeexécutable !exécutable !
Nous avons :Nous avons :
un compilateur opérationnel,un compilateur opérationnel,
son fichier source,son fichier source,
nous savons regénérer l’exécutable.nous savons regénérer l’exécutable.
19 septembre 2007 Cours de compilation 1 - Intranet 117
E NE N
R E S U M ER E S U M E
19 septembre 2007 Cours de compilation 1 - Intranet 118
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Construire un nouveau compilateur revient, Construire un nouveau compilateur revient,
dans la pratique, à écrire :dans la pratique, à écrire :
X X M M
LL
19 septembre 2007 Cours de compilation 1 - Intranet 119
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Construire un nouveau compilateur revient, Construire un nouveau compilateur revient,
dans la pratique, à écrire :dans la pratique, à écrire :
• Nous sommes obligés de décrire la Nous sommes obligés de décrire la traduction du langage évolué X vers le traduction du langage évolué X vers le langage de bas niveau M !langage de bas niveau M !
X X M M
LL
19 septembre 2007 Cours de compilation 1 - Intranet 120
Génération de nouveaux compilateursGénération de nouveaux compilateurs----------------------------------------------------------------------------------------------------------------------------
----• Construire un nouveau compilateur revient, dans la Construire un nouveau compilateur revient, dans la
pratique, à écrire :pratique, à écrire :
• Nous sommes obligés de décrire la traduction du Nous sommes obligés de décrire la traduction du langage évolué X vers le langage de bas niveau langage évolué X vers le langage de bas niveau M !M !
• Cette traduction peut être décrite à l’aide du Cette traduction peut être décrite à l’aide du langage de haut niveau L !langage de haut niveau L !
X X M M
LL
19 septembre 2007 Cours de compilation 1 - Intranet 121
L ‘ E N V I R O N N E M E N TL ‘ E N V I R O N N E M E N T
D ED E
C O M P I L A T I O NC O M P I L A T I O N
19 septembre 2007 Cours de compilation 1 - Intranet 122
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----
CompilationCompilation gccgcc
19 septembre 2007 Cours de compilation 1 - Intranet 123
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----
CompilationCompilation gccgcc
PréprocessingPréprocessing cppcpp
Nous nous occupons duNous nous occupons dusucre syntaxique :sucre syntaxique :
#include#include
#define#define
#ifdef#ifdef
. . .. . .
Nous réduisons ainsi la complexité du compilateur !Nous réduisons ainsi la complexité du compilateur !
19 septembre 2007 Cours de compilation 1 - Intranet 124
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----
CompilationCompilation gccgcc
PréprocessingPréprocessing
EditionEdition
cppcpp
emacsemacs
Les éditeurs comprennent déjà le langage et nousLes éditeurs comprennent déjà le langage et nousaident à éviter les fautes les plus grossières !aident à éviter les fautes les plus grossières !
19 septembre 2007 Cours de compilation 1 - Intranet 125
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----
CompilationCompilation gccgcc
PréprocessingPréprocessing
EditionEdition
cppcpp
emacsemacs
AssemblageAssemblage asmasm
Traduction d’un langage assembleur symbolique versTraduction d’un langage assembleur symbolique versle byte-code, insertion des bibliothèques statiques, . . . !le byte-code, insertion des bibliothèques statiques, . . . !
19 septembre 2007 Cours de compilation 1 - Intranet 126
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----
CompilationCompilation gccgcc
PréprocessingPréprocessing
EditionEdition
cppcpp
emacsemacs
AssemblageAssemblage
ChargementChargement
asmasm
ldld
Installation en mémoire, allocation des zones mémoire,Installation en mémoire, allocation des zones mémoire,édition des liens et bibliothèques dynamiques, . . . !édition des liens et bibliothèques dynamiques, . . . !
19 septembre 2007 Cours de compilation 1 - Intranet 127
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----
CompilationCompilation gccgcc
PréprocessingPréprocessing
EditionEdition
cppcpp
emacsemacs
AssemblageAssemblage
ChargementChargement
asmasm
ldld
SuccessionSuccessionchronologique !chronologique !
19 septembre 2007 Cours de compilation 1 - Intranet 128
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----• En plus :En plus :
19 septembre 2007 Cours de compilation 1 - Intranet 129
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----• En plus :En plus :
– Des vérificateurs de syntaxe comme « lint » !Des vérificateurs de syntaxe comme « lint » !
• Plus exigeants que le compilateur (cast risqués, Plus exigeants que le compilateur (cast risqués, portabilité douteuse, code pas propre, . . . ) !portabilité douteuse, code pas propre, . . . ) !
19 septembre 2007 Cours de compilation 1 - Intranet 130
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----• En plus :En plus :
– Des vérificateurs de syntaxe comme « lint » !Des vérificateurs de syntaxe comme « lint » !
• Plus exigeants que le compilateur (cast risqués, Plus exigeants que le compilateur (cast risqués, portabilité douteuse, code pas propre, . . . ) !portabilité douteuse, code pas propre, . . . ) !
– Des gestionnaires de versions comme « rcs » ou « cvs » Des gestionnaires de versions comme « rcs » ou « cvs » !!
• Ils gèrent les versions des sources et l’accès Ils gèrent les versions des sources et l’accès concurrent !concurrent !
19 septembre 2007 Cours de compilation 1 - Intranet 131
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----• En plus :En plus :
– Des vérificateurs de syntaxe comme « lint » !Des vérificateurs de syntaxe comme « lint » !
• Plus exigeants que le compilateur (cast risqués, Plus exigeants que le compilateur (cast risqués, portabilité douteuse, code pas propre, . . . ) !portabilité douteuse, code pas propre, . . . ) !
– Des gestionnaires de versions comme « rcs » ou « cvs » !Des gestionnaires de versions comme « rcs » ou « cvs » !
• Ils gèrent les versions des sources et l’accès concurrent !Ils gèrent les versions des sources et l’accès concurrent !
– Des outils comme « make » ou « imake » !Des outils comme « make » ou « imake » !
• Ils automatisent les compilations séparées et partielles !Ils automatisent les compilations séparées et partielles !
19 septembre 2007 Cours de compilation 1 - Intranet 132
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----• En plus :En plus :
– Des vérificateurs de syntaxe comme « lint » !Des vérificateurs de syntaxe comme « lint » !
• Plus exigeants que le compilateur (cast risqués, portabilité Plus exigeants que le compilateur (cast risqués, portabilité douteuse, code pas propre, . . . ) !douteuse, code pas propre, . . . ) !
– Des gestionnaires de versions comme « rcs » ou « cvs » !Des gestionnaires de versions comme « rcs » ou « cvs » !
• Ils gèrent les versions des sources et l’accès concurrent !Ils gèrent les versions des sources et l’accès concurrent !
– Des outils comme « make » ou « imake » !Des outils comme « make » ou « imake » !
• Ils automatisent les compilations séparées et partielles !Ils automatisent les compilations séparées et partielles !
– Des debuggers comme « gdb » !Des debuggers comme « gdb » !
• Ils contrôlent l’exécution, l’arrêt sur erreur, . . . !Ils contrôlent l’exécution, l’arrêt sur erreur, . . . !
19 septembre 2007 Cours de compilation 1 - Intranet 133
L’environnement de compilationL’environnement de compilation----------------------------------------------------------------------------------------------------------------------------
----• En plus :En plus :
– Des vérificateurs de syntaxe comme « lint » !Des vérificateurs de syntaxe comme « lint » !
• Plus exigeants que le compilateur (cast risqués, portabilité Plus exigeants que le compilateur (cast risqués, portabilité douteuse, code pas propre, . . . ) !douteuse, code pas propre, . . . ) !
– Des gestionnaires de versions comme « rcs » ou « cvs » !Des gestionnaires de versions comme « rcs » ou « cvs » !
• Ils gèrent les versions des sources et l’accès concurrent !Ils gèrent les versions des sources et l’accès concurrent !
– Des outils comme « make » ou « imake » !Des outils comme « make » ou « imake » !
• Ils automatisent les compilations séparées et partielles !Ils automatisent les compilations séparées et partielles !
– Des debuggers comme « gdb » !Des debuggers comme « gdb » !
• Ils contrôlent l’exécution, l’arrêt sur erreur, . . . !Ils contrôlent l’exécution, l’arrêt sur erreur, . . . !
19 septembre 2007 Cours de compilation 1 - Intranet 134
RésuméRésumé----------------------------------------------------------------------------------------------------------------------------
----
•Définitions de baseDéfinitions de base
•Composition de compilateursComposition de compilateurs
•L’environnement d’un compilateurL’environnement d’un compilateur
19 septembre 2007 Cours de compilation 1 - Intranet 135
C ’ e S t L a F i N ! C ’ e S t L a F i N ! ! !! !
b O n N eb O n N eJ o U r N é E ! ! !J o U r N é E ! ! !