19 septembre 2007Cours de compilation 1 - Intranet1 Marc Gengler Marc.Gengler@esil.univmed.fr Cours...

Preview:

Citation preview

19 septembre 2007 Cours de compilation 1 - Intranet 1

Marc GenglerMarc Gengler

Marc.Gengler@esil.univmed.frMarc.Gengler@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

Marc.Gengler@esil.univ-mrs.frMarc.Gengler@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 ! ! !