24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse...

Post on 03-Apr-2015

115 views 0 download

Transcript of 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse...

24 septembre 2007 Cours de compilation 3 - Intranet 1

Cours de compilationCours de compilation

Analyse lexicaleAnalyse lexicale

Analyse syntaxique (intro)Analyse syntaxique (intro)

24 septembre 2007 Cours de compilation 3 - Intranet 2

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

24 septembre 2007 Cours de compilation 3 - Intranet 3

L E SL E S

C O N S T I T U A N T SC O N S T I T U A N T S

D ‘ U ND ‘ U N

C O M P I L A T E U RC O M P I L A T E U R

24 septembre 2007 Cours de compilation 3 - Intranet 4

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

CCOOMMPPIILLAATTEEUURR

24 septembre 2007 Cours de compilation 3 - Intranet 5

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

24 septembre 2007 Cours de compilation 3 - Intranet 6

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

}}}}

Analyse du texte sourceAnalyse du texte source

Génération du texte de sortieGénération du texte de sortie

24 septembre 2007 Cours de compilation 3 - Intranet 7

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Découpage du fichier sourceDécoupage du fichier sourceen mots, séparateurs, . . .en mots, séparateurs, . . .

24 septembre 2007 Cours de compilation 3 - Intranet 8

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Reconnaissance de la structure duReconnaissance de la structure duprogramme : instructions, fonctions, . . .programme : instructions, fonctions, . . .

24 septembre 2007 Cours de compilation 3 - Intranet 9

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Vérification du sens des phrases.Vérification du sens des phrases.

24 septembre 2007 Cours de compilation 3 - Intranet 10

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

}}Ces phases sont réalisées en même temps :Ces phases sont réalisées en même temps : nous reconnaissons des mots,nous reconnaissons des mots, jusqu’à obtenir une phrase,jusqu’à obtenir une phrase, que nous vérifions pour le typageque nous vérifions pour le typage et nous passons à la suite.et nous passons à la suite.

24 septembre 2007 Cours de compilation 3 - Intranet 11

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Décision des adresses mémoireDécision des adresses mémoirepour certaines données.pour certaines données.

24 septembre 2007 Cours de compilation 3 - Intranet 12

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Création d’un programme de sortieCréation d’un programme de sortiecorrect, mais non optimisé.correct, mais non optimisé.

24 septembre 2007 Cours de compilation 3 - Intranet 13

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Optimisation du code de sortie, siOptimisation du code de sortie, sic’est du code assembleur.c’est du code assembleur.

24 septembre 2007 Cours de compilation 3 - Intranet 14

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Ces phases sont souventCes phases sont souventréalisées simultanément.réalisées simultanément.}}

C’est presqu’un compilateur à part.C’est presqu’un compilateur à part.

24 septembre 2007 Cours de compilation 3 - Intranet 15

Les constituants d’un compilateurLes constituants d’un compilateur----------------------------------------------------------------------------------------------------------------------------

----

AnalyseAnalyselexicalelexicale

AnalyseAnalysesyntaxiquesyntaxique

AnalyseAnalysesémantiquesémantique

AllocationAllocationmémoiremémoire

GénérationGénérationde codede code

OptimisationOptimisationde codede code

Les entêtes de chapitre seront . . .Les entêtes de chapitre seront . . .

24 septembre 2007 Cours de compilation 3 - Intranet 16

Principe de l’analyse lexicalePrincipe de l’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de traduire une suite de caractères en une Il s’agit de traduire une suite de caractères en une

suite de « lexèmes » (mots, token).suite de « lexèmes » (mots, token).

24 septembre 2007 Cours de compilation 3 - Intranet 17

Principe de l’analyse lexicalePrincipe de l’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de traduire une suite de caractères en une Il s’agit de traduire une suite de caractères en une

suite de « lexèmes » (mots, token).suite de « lexèmes » (mots, token).

• Nous devons donc reconnaître les séparateurs Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne, . . .) et explicites (espace, passage à la ligne, . . .) et implicites (rien) qui séparent les entités.implicites (rien) qui séparent les entités.

24 septembre 2007 Cours de compilation 3 - Intranet 18

Principe de l’analyse lexicalePrincipe de l’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de traduire une suite de caractères en une Il s’agit de traduire une suite de caractères en une

suite de « lexèmes » (mots, token).suite de « lexèmes » (mots, token).

• Nous devons donc reconnaître les séparateurs Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne, . . .) et explicites (espace, passage à la ligne, . . .) et implicites (rien) qui séparent les entités.implicites (rien) qui séparent les entités.

• Nous déterminons la catégorie d’appartenance (mot Nous déterminons la catégorie d’appartenance (mot réservé, nombre, opérateur, . . .) de chaque lexème.réservé, nombre, opérateur, . . .) de chaque lexème.

24 septembre 2007 Cours de compilation 3 - Intranet 19

Principe de l’analyse lexicalePrincipe de l’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de traduire une suite de caractères en une Il s’agit de traduire une suite de caractères en une

suite de « lexèmes » (mots, token).suite de « lexèmes » (mots, token).

• Nous devons donc reconnaître les séparateurs Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne, . . .) et explicites (espace, passage à la ligne, . . .) et implicites (rien) qui séparent les entités.implicites (rien) qui séparent les entités.

• Nous déterminons la catégorie d’appartenance (mot Nous déterminons la catégorie d’appartenance (mot réservé, nombre, opérateur, . . .) de chaque lexème.réservé, nombre, opérateur, . . .) de chaque lexème.

if A = 1 then . . . fiif A = 1 then . . . fi

24 septembre 2007 Cours de compilation 3 - Intranet 20

Principe de l’analyse lexicalePrincipe de l’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de traduire une suite de caractères en une Il s’agit de traduire une suite de caractères en une

suite de « lexèmes » (mots, token).suite de « lexèmes » (mots, token).

• Nous devons donc reconnaître les séparateurs Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne, . . .) et explicites (espace, passage à la ligne, . . .) et implicites (rien) qui séparent les entités.implicites (rien) qui séparent les entités.

• Nous déterminons la catégorie d’appartenance (mot Nous déterminons la catégorie d’appartenance (mot réservé, nombre, opérateur, . . .) de chaque lexème.réservé, nombre, opérateur, . . .) de chaque lexème.

if A = 1 then . . . fiif A = 1 then . . . fi

Mot_réservé_ifMot_réservé_ifVar ( A )Var ( A )Oprel ( = )Oprel ( = )Entier ( 1 )Entier ( 1 )Mot_réservé_thenMot_réservé_then. . .. . .Mot_réservé_fiMot_réservé_fi

24 septembre 2007 Cours de compilation 3 - Intranet 21

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

24 septembre 2007 Cours de compilation 3 - Intranet 22

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du (sous forme d’arbre de syntaxe abstraite) du programme.programme.

24 septembre 2007 Cours de compilation 3 - Intranet 23

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du (sous forme d’arbre de syntaxe abstraite) du programme.programme.

• Pour l’analyse, nous nous appuyons sur une grammaire Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.du langage à analyser.

24 septembre 2007 Cours de compilation 3 - Intranet 24

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.(sous forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.du langage à analyser.

if A = 1 then . . . if A = 1 then . . . fi fi

24 septembre 2007 Cours de compilation 3 - Intranet 25

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

if A = 1 then . . . if A = 1 then . . . fifi

24 septembre 2007 Cours de compilation 3 - Intranet 26

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

if A = 1 then . . . if A = 1 then . . . fifi

24 septembre 2007 Cours de compilation 3 - Intranet 27

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

24 septembre 2007 Cours de compilation 3 - Intranet 28

• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----

TestTest

24 septembre 2007 Cours de compilation 3 - Intranet 29

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----

TestTest BlocBloc

• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

24 septembre 2007 Cours de compilation 3 - Intranet 30

• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----

TestTest BlocBloc

Si_alorsSi_alors

24 septembre 2007 Cours de compilation 3 - Intranet 31

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----

TestTest BlocBloc

Si_alorsSi_alors

Arbre de syntaxeArbre de syntaxe

• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

24 septembre 2007 Cours de compilation 3 - Intranet 32

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then . . . MR_fiMR_fi

TestTest BlocBloc

Si_alorsSi_alors

Arbre de syntaxeArbre de syntaxeabstraiteabstraite

24 septembre 2007 Cours de compilation 3 - Intranet 33

Principe de l’analyse syntaxiquePrincipe de l’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il s’agit de reconnaître la structure du programme.Il s’agit de reconnaître la structure du programme.

• Nous allons construire une représentation structurée (sous Nous allons construire une représentation structurée (sous forme d’arbre de syntaxe abstraite) du programme.forme d’arbre de syntaxe abstraite) du programme.

• Pour l’analyse, nous nous appuyons sur une grammaire du Pour l’analyse, nous nous appuyons sur une grammaire du langage à analyser.langage à analyser.

Var( A ) Oprel( = ) Entier( 1 ) . . . Var( A ) Oprel( = ) Entier( 1 ) . . .

TestTest BlocBloc

Si_alorsSi_alors

Arbre de syntaxeArbre de syntaxeabstraiteabstraite

24 septembre 2007 Cours de compilation 3 - Intranet 34

Principe de l’analyse sémantiquePrincipe de l’analyse sémantique----------------------------------------------------------------------------------------------------------------------------

----• Nous devons maintenant vérifier le sens du Nous devons maintenant vérifier le sens du

programme.programme.

24 septembre 2007 Cours de compilation 3 - Intranet 35

Principe de l’analyse sémantiquePrincipe de l’analyse sémantique----------------------------------------------------------------------------------------------------------------------------

----• Nous devons maintenant vérifier le sens du Nous devons maintenant vérifier le sens du

programme.programme.

• Nous collectons les déclarations des variables et Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé assurons que tout est déclaré et utilisé conformément aux déclarations.conformément aux déclarations.

24 septembre 2007 Cours de compilation 3 - Intranet 36

Principe de l’analyse sémantiquePrincipe de l’analyse sémantique----------------------------------------------------------------------------------------------------------------------------

----• Nous devons maintenant vérifier le sens du Nous devons maintenant vérifier le sens du

programme.programme.

• Nous collectons les déclarations des variables et Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé assurons que tout est déclaré et utilisé conformément aux déclarations.conformément aux déclarations.

• Nous opérons peut-être des petites transformations Nous opérons peut-être des petites transformations et nous explicitons des conversions de types et nous explicitons des conversions de types implicites :implicites :

24 septembre 2007 Cours de compilation 3 - Intranet 37

Principe de l’analyse sémantiquePrincipe de l’analyse sémantique----------------------------------------------------------------------------------------------------------------------------

----• Nous devons maintenant vérifier le sens du Nous devons maintenant vérifier le sens du

programme.programme.

• Nous collectons les déclarations des variables et Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé assurons que tout est déclaré et utilisé conformément aux déclarations.conformément aux déclarations.

• Nous opérons peut-être des petites transformations Nous opérons peut-être des petites transformations et nous explicitons des conversions de types et nous explicitons des conversions de types implicites :implicites :

2 * A => A + A2 * A => A + A

24 septembre 2007 Cours de compilation 3 - Intranet 38

Principe de l’analyse sémantiquePrincipe de l’analyse sémantique----------------------------------------------------------------------------------------------------------------------------

----• Nous devons maintenant vérifier le sens du Nous devons maintenant vérifier le sens du

programme.programme.

• Nous collectons les déclarations des variables et Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé assurons que tout est déclaré et utilisé conformément aux déclarations.conformément aux déclarations.

• Nous opérons peut-être des petites transformations Nous opérons peut-être des petites transformations et nous explicitons des conversions de types et nous explicitons des conversions de types implicites :implicites :

2 * A => A + A2 * A => A + Aaddadd

int xint x

xx 1.51.5

add_floatadd_float

xx

1.51.5int_to_floatint_to_float

24 septembre 2007 Cours de compilation 3 - Intranet 39

L ‘ A N A L Y S EL ‘ A N A L Y S E

L E X I C A L EL E X I C A L E

24 septembre 2007 Cours de compilation 3 - Intranet 40

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

24 septembre 2007 Cours de compilation 3 - Intranet 41

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

24 septembre 2007 Cours de compilation 3 - Intranet 42

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

– Opérateurs : + == = . . .Opérateurs : + == = . . .

24 septembre 2007 Cours de compilation 3 - Intranet 43

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

– Opérateurs : + == = . . .Opérateurs : + == = . . .

– Nombres : 100 100.08 . . .Nombres : 100 100.08 . . .

24 septembre 2007 Cours de compilation 3 - Intranet 44

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

– Opérateurs : + == = . . .Opérateurs : + == = . . .

– Nombres : 100 100.08 . . .Nombres : 100 100.08 . . .

– Séparateurs : ; , «  » . . .Séparateurs : ; , «  » . . .

24 septembre 2007 Cours de compilation 3 - Intranet 45

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

– Opérateurs : + == = . . .Opérateurs : + == = . . .

– Nombres : 100 100.08 . . .Nombres : 100 100.08 . . .

– Séparateurs : ; , «  » . . .Séparateurs : ; , «  » . . .

– Variables : « les autres »Variables : « les autres »

24 septembre 2007 Cours de compilation 3 - Intranet 46

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

– Opérateurs : + == = . . .Opérateurs : + == = . . .

– Nombres : 100 100.08 . . .Nombres : 100 100.08 . . .

– Séparateurs : ; , «  » . . .Séparateurs : ; , «  » . . .

– Variables : « les autres »Variables : « les autres »

• Les lexèmes sont reconnus par la grammaire du Les lexèmes sont reconnus par la grammaire du langage. langage.

24 septembre 2007 Cours de compilation 3 - Intranet 47

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Nous découpons le programme en lexèmes. Nous Nous découpons le programme en lexèmes. Nous

déterminons leurs classes d’appartenance :déterminons leurs classes d’appartenance :

– Mots clefs : if while . . .Mots clefs : if while . . .

– Opérateurs : + == = . . .Opérateurs : + == = . . .

– Nombres : 100 100.08 . . .Nombres : 100 100.08 . . .

– Séparateurs : ; , «  » . . .Séparateurs : ; , «  » . . .

– Variables : « les autres »Variables : « les autres »

• Les lexèmes sont reconnus par la grammaire du Les lexèmes sont reconnus par la grammaire du langage. langage.

• Ce sont presque toujours des expressions régulières Ce sont presque toujours des expressions régulières qui peuvent donc être reconnues par un automate.qui peuvent donc être reconnues par un automate.

24 septembre 2007 Cours de compilation 3 - Intranet 48

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

24 septembre 2007 Cours de compilation 3 - Intranet 49

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

– Tout caractère isolé est régulier.Tout caractère isolé est régulier.

24 septembre 2007 Cours de compilation 3 - Intranet 50

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

– Tout caractère isolé est régulier.Tout caractère isolé est régulier.

– Toute séquence finie d’expressions régulières Toute séquence finie d’expressions régulières est régulière.est régulière.

24 septembre 2007 Cours de compilation 3 - Intranet 51

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

– Tout caractère isolé est régulier.Tout caractère isolé est régulier.

– Toute séquence finie d’expressions régulières Toute séquence finie d’expressions régulières est régulière.est régulière.

– Un choix fini entre expressions régulières est Un choix fini entre expressions régulières est régulier comme [ a-d | h-p ].régulier comme [ a-d | h-p ].

24 septembre 2007 Cours de compilation 3 - Intranet 52

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

– Tout caractère isolé est régulier.Tout caractère isolé est régulier.

– Toute séquence finie d’expressions régulières Toute séquence finie d’expressions régulières est régulière.est régulière.

– Un choix fini entre expressions régulières est Un choix fini entre expressions régulières est régulier comme [ a-d | h-p ].régulier comme [ a-d | h-p ].

– u*, c’est-à-dire la répétition du motif « u » n fois, u*, c’est-à-dire la répétition du motif « u » n fois, avec n >= 0, est régulier.avec n >= 0, est régulier.

24 septembre 2007 Cours de compilation 3 - Intranet 53

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

– Tout caractère isolé est régulier.Tout caractère isolé est régulier.

– Toute séquence finie d’expressions régulières Toute séquence finie d’expressions régulières est régulière.est régulière.

– Un choix fini entre expressions régulières est Un choix fini entre expressions régulières est régulier comme [ a-d | h-p ].régulier comme [ a-d | h-p ].

– u*, c’est-à-dire la répétition du motif « u » n fois, u*, c’est-à-dire la répétition du motif « u » n fois, avec n >= 0, est régulier.avec n >= 0, est régulier.

– u+, c’est-à-dire la répétition du motif « u » n fois, u+, c’est-à-dire la répétition du motif « u » n fois, avec n > 0, est régulier.avec n > 0, est régulier.

24 septembre 2007 Cours de compilation 3 - Intranet 54

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• L’automatisation de l’analyse lexicale :L’automatisation de l’analyse lexicale :

– « lex » ou « flex » prennent des fichiers « lex » ou « flex » prennent des fichiers d’expressions régulières et les actions associées d’expressions régulières et les actions associées et construisent l’automate d’analyse.et construisent l’automate d’analyse.

24 septembre 2007 Cours de compilation 3 - Intranet 55

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• L’automatisation de l’analyse lexicale :L’automatisation de l’analyse lexicale :

– « lex » ou « flex » prennent des fichiers « lex » ou « flex » prennent des fichiers d’expressions régulières et les actions associées d’expressions régulières et les actions associées et construisent l’automate d’analyse.et construisent l’automate d’analyse.

– Nous aurons donc les commandes :Nous aurons donc les commandes :

lex fichier_lexlex fichier_lex

cc -ll lex.y.cccc -ll lex.y.cc

a.out < fichier_sourcea.out < fichier_source

24 septembre 2007 Cours de compilation 3 - Intranet 56

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• L’automatisation de l’analyse lexicale :L’automatisation de l’analyse lexicale :

– « lex » ou « flex » prennent des fichiers « lex » ou « flex » prennent des fichiers d’expressions régulières et les actions associées et d’expressions régulières et les actions associées et construisent l’automate d’analyse.construisent l’automate d’analyse.

– Nous aurons donc les commandes :Nous aurons donc les commandes :

lex fichier_lexlex fichier_lex

cc -ll lex.y.cccc -ll lex.y.cc

a.out < fichier_sourcea.out < fichier_source

– Format d’un fichier lex :Format d’un fichier lex :

%%%%

mot_à_reconnaître action_en_Cmot_à_reconnaître action_en_C

. . .. . .

%%%%

24 septembre 2007 Cours de compilation 3 - Intranet 57

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• L’automatisation de l’analyse lexicale :L’automatisation de l’analyse lexicale :

– « lex » ou « flex » prennent des fichiers « lex » ou « flex » prennent des fichiers d’expressions régulières et les actions associées et d’expressions régulières et les actions associées et construisent l’automate d’analyse.construisent l’automate d’analyse.

– Nous aurons donc les commandes :Nous aurons donc les commandes :

lex fichier_lexlex fichier_lex

cc -ll lex.y.cccc -ll lex.y.cc

a.out < fichier_sourcea.out < fichier_source

– Format d’un fichier lex :Format d’un fichier lex :

%%%%

mot_à_reconnaître action_en_Cmot_à_reconnaître action_en_C

. . .. . .

%%%%

24 septembre 2007 Cours de compilation 3 - Intranet 58

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Attention aux cas ambigus :Attention aux cas ambigus :

: := =: := =

24 septembre 2007 Cours de compilation 3 - Intranet 59

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Attention aux cas ambigus :Attention aux cas ambigus :

: := =: := =

– L’ordre des lexèmes donne la priorité :L’ordre des lexèmes donne la priorité :

%%%%

. . .. . .

:=:=

::

==

24 septembre 2007 Cours de compilation 3 - Intranet 60

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Attention aux cas ambigus :Attention aux cas ambigus :

: := =: := =

– L’ordre des lexèmes donne la priorité :L’ordre des lexèmes donne la priorité :

%%%%

. . .. . .

:=:=

::

==

– De même, est-ce que « ifabc » signifie « ifabc » De même, est-ce que « ifabc » signifie « ifabc » ou bien « if » suivi de « abc » ?ou bien « if » suivi de « abc » ?

24 septembre 2007 Cours de compilation 3 - Intranet 61

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Attention aux cas ambigus :Attention aux cas ambigus :

: := =: := =

– L’ordre des lexèmes donne la priorité :L’ordre des lexèmes donne la priorité :

%%%%

. . .. . .

:=:=

::

==

– De même, est-ce que « ifabc » signifie « ifabc » ou De même, est-ce que « ifabc » signifie « ifabc » ou bien « if » suivi de « abc » ?bien « if » suivi de « abc » ?

– La règle veut que lex reconnaisse le mot le plus long !La règle veut que lex reconnaisse le mot le plus long !

24 septembre 2007 Cours de compilation 3 - Intranet 62

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

24 septembre 2007 Cours de compilation 3 - Intranet 63

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

Des mots etDes mots etopérateurs fixés !opérateurs fixés !

24 septembre 2007 Cours de compilation 3 - Intranet 64

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

Nous avonsNous avonsdifférentsdifférents

symboles desymboles derelation !relation !

24 septembre 2007 Cours de compilation 3 - Intranet 65

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

Les variables !Les variables !

24 septembre 2007 Cours de compilation 3 - Intranet 66

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

Les entiers !Les entiers !

24 septembre 2007 Cours de compilation 3 - Intranet 67

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

Nous supprimonsNous supprimonsles espaces et retoursles espaces et retoursà la ligne superflux !à la ligne superflux !

24 septembre 2007 Cours de compilation 3 - Intranet 68

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »);if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

24 septembre 2007 Cours de compilation 3 - Intranet 69

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

sisivar(ab56)var(ab56)rel(=)rel(=)ent(5)ent(5)alorsalorsvar(abc)var(abc)affectaffectent(113)ent(113)addaddalorsalorsaddaddent(12)ent(12)var(ab)var(ab)finsifinsi

24 septembre 2007 Cours de compilation 3 - Intranet 70

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

sisivar(ab56)var(ab56)rel(=)rel(=)ent(5)ent(5)alorsalorsvar(abc)var(abc)affectaffectent(113)ent(113)addaddalorsalorsaddaddent(12)ent(12)var(ab)var(ab)finsifinsi

24 septembre 2007 Cours de compilation 3 - Intranet 71

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

sisivar(ab56)var(ab56)rel(=)rel(=)ent(5)ent(5)alorsalorsvar(abc)var(abc)affectaffectent(113)ent(113)addaddalorsalorsaddaddent(12)ent(12)var(ab)var(ab)finsifinsi

24 septembre 2007 Cours de compilation 3 - Intranet 72

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

[a-z0-9]* printf(« ovni(%s)\n » , yytext);[a-z0-9]* printf(« ovni(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

Ici, nous récupéronsIci, nous récupéronsles mélanges de lettresles mélanges de lettres

et chiffres illégaux !et chiffres illégaux !

24 septembre 2007 Cours de compilation 3 - Intranet 73

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

[a-z0-9]* printf(« ovni(%s)\n » , yytext);[a-z0-9]* printf(« ovni(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

24 septembre 2007 Cours de compilation 3 - Intranet 74

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

[a-z0-9]* printf(« ovni(%s)\n » , yytext);[a-z0-9]* printf(« ovni(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

sisivar(ab56)var(ab56)rel(=)rel(=)ent(5)ent(5)alorsalorsvar(abc)var(abc)affectaffectent(113)ent(113)addaddalorsalorsaddaddovni(12ab)ovni(12ab)finsifinsi

24 septembre 2007 Cours de compilation 3 - Intranet 75

L’analyse lexicaleL’analyse lexicale----------------------------------------------------------------------------------------------------------------------------

----• Exemple :Exemple :%%%%

if printf(« si\n »); if printf(« si\n »);

then printf(« alors\n »);then printf(« alors\n »);

fi printf(« finsi\n »);fi printf(« finsi\n »);

= printf(« rel(%s)\n » , yytext);= printf(« rel(%s)\n » , yytext);

:= printf(« affect\n»);:= printf(« affect\n»);

+ printf(« add\n »);+ printf(« add\n »);

[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);[a-z][a-z0-9]* printf(« var(%s)\n » , yytext);

[0-9]* printf(« ent(%s)\n » , yytext);[0-9]* printf(« ent(%s)\n » , yytext);

[a-z0-9]* printf(« ovni(%s)\n » , yytext);[a-z0-9]* printf(« ovni(%s)\n » , yytext);

\ printf(«  »);\ printf(«  »);

\n printf(«  »);\n printf(«  »);

%%%%

if ab56 = 5 then abc := 113 + then + 12ab fiif ab56 = 5 then abc := 113 + then + 12ab fi

sisivar(ab56)var(ab56)rel(=)rel(=)ent(5)ent(5)alorsalorsvar(abc)var(abc)affectaffectent(113)ent(113)addaddalorsalorsaddaddovni(12ab)ovni(12ab)finsifinsi

24 septembre 2007 Cours de compilation 3 - Intranet 76

L ‘ A N A L Y S EL ‘ A N A L Y S E

S Y N T A X I Q U ES Y N T A X I Q U E

24 septembre 2007 Cours de compilation 3 - Intranet 77

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

24 septembre 2007 Cours de compilation 3 - Intranet 78

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

24 septembre 2007 Cours de compilation 3 - Intranet 79

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | | 11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 80

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– Les NON-TERMINAUX : C’est l’ensemble N des Les NON-TERMINAUX : C’est l’ensemble N des symboles qui apparaissent au membre gauche symboles qui apparaissent au membre gauche d’une règle au moins.d’une règle au moins.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 81

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– Les NON-TERMINAUX : C’est l’ensemble N des Les NON-TERMINAUX : C’est l’ensemble N des symboles qui apparaissent au membre gauche symboles qui apparaissent au membre gauche d’une règle au moins.d’une règle au moins.

– Nous utilisons des lettres latines majuscules.Nous utilisons des lettres latines majuscules.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 82

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– L’AXIOME : C’est un non-terminal distingué à L’AXIOME : C’est un non-terminal distingué à partir duquel nous allons démarrer. partir duquel nous allons démarrer.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 83

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– L’AXIOME : C’est un non-terminal distingué à L’AXIOME : C’est un non-terminal distingué à partir duquel nous allons démarrer. partir duquel nous allons démarrer.

– Nous utiliserons la lettre S (comme « start »).Nous utiliserons la lettre S (comme « start »).

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 84

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– Les TERMINAUX : C’est l’ensemble V des Les TERMINAUX : C’est l’ensemble V des symboles qui n’apparaissent qu’aux membres symboles qui n’apparaissent qu’aux membres droits des règles. droits des règles.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 85

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une des Une grammaire est une suite de règles de l’une des formes suivantes :formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– Les TERMINAUX : C’est l’ensemble V des symboles Les TERMINAUX : C’est l’ensemble V des symboles qui n’apparaissent qu’aux membres droits des qui n’apparaissent qu’aux membres droits des règles. règles.

– Nous utilisons des lettres latines minuscules, du Nous utilisons des lettres latines minuscules, du début de l’alphabet.début de l’alphabet.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 86

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– Une suite, éventuellement vide, de terminaux est Une suite, éventuellement vide, de terminaux est notée comme lettre latine minuscule de la fin de notée comme lettre latine minuscule de la fin de l’alphabet. l’alphabet.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 87

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une des Une grammaire est une suite de règles de l’une des formes suivantes :formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– Une suite, éventuellement vide, de terminaux est notée Une suite, éventuellement vide, de terminaux est notée comme lettre latine minuscule de la fin de l’alphabet. comme lettre latine minuscule de la fin de l’alphabet.

– Une suite, éventuellement vide, de non-terminaux et de Une suite, éventuellement vide, de non-terminaux et de terminaux est notée comme lettre grecque minuscule. terminaux est notée comme lettre grecque minuscule.

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 88

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Nous allons reconnaître le langage à l’aide d’une Nous allons reconnaître le langage à l’aide d’une

grammaire non ambiguë.grammaire non ambiguë.

• Rappels sur les grammaires :Rappels sur les grammaires :

Une grammaire est une suite de règles de l’une Une grammaire est une suite de règles de l’une des formes suivantes :des formes suivantes :

A ::= A ::=

A ::= A ::= | | | | | |

– a , b a , b V V– u , v u , v V* ( V* ( est le mot vide ) est le mot vide )– , , ( N v V )* ( N v V )*

11 22 nn

24 septembre 2007 Cours de compilation 3 - Intranet 89

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation est une suite d’application de règles Une dérivation est une suite d’application de règles

qui part de l’axiome S :qui part de l’axiome S :

24 septembre 2007 Cours de compilation 3 - Intranet 90

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation est une suite d’application de règles Une dérivation est une suite d’application de règles

qui part de l’axiome S :qui part de l’axiome S :

S S --> > --> > --> > --> > --> > --> >

encore notéeencore notée S S -->> >>

11 ii i+1i+1 kk

kk

24 septembre 2007 Cours de compilation 3 - Intranet 91

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation est une suite d’application de règles Une dérivation est une suite d’application de règles

qui part de l’axiome S :qui part de l’axiome S :

S S --> > --> > --> > --> > --> > --> >

encore notéeencore notée S S -->> >>

dans laquelle dans laquelle et et sont respectivement de la sont respectivement de la formeforme

CC et et

et qu’il existe une règle de la forme et qu’il existe une règle de la forme C ::= C ::= | | | |

11 ii i+1i+1 kk

kk

ii i+1i+1

24 septembre 2007 Cours de compilation 3 - Intranet 92

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation est une suite d’application de règles qui Une dérivation est une suite d’application de règles qui

part de l’axiome S :part de l’axiome S :

S S --> > --> > --> > --> > --> > --> >

encore notéeencore notée S S -->> >>

dans laquelle dans laquelle et et sont respectivement de la forme sont respectivement de la forme

CC et et

et qu’il existe une règle de la forme et qu’il existe une règle de la forme C ::= C ::= | | | |

La dérivation est « gauche » si, à chaque étape, C est le La dérivation est « gauche » si, à chaque étape, C est le non-terminal le plus à gauche, c’est-à-dire si non-terminal le plus à gauche, c’est-à-dire si V*.V*.

11 ii i+1i+1 kk

kk

ii i+1i+1

24 septembre 2007 Cours de compilation 3 - Intranet 93

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A toute dérivationA toute dérivation S S -->> >> correspond au moins correspond au moins

une dérivation gauche.une dérivation gauche.kk

24 septembre 2007 Cours de compilation 3 - Intranet 94

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A toute dérivationA toute dérivation S S -->> >> correspond au moins correspond au moins

une dérivation gauche.une dérivation gauche.

• Une dérivation Une dérivation S S -->> >> est terminéeest terminéelorsquelorsque n’est n’est

constitué que de lettres terminales.constitué que de lettres terminales.

kk

kk kk

24 septembre 2007 Cours de compilation 3 - Intranet 95

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A toute dérivationA toute dérivation S S -->> >> correspond au moins correspond au moins

une dérivation gauche.une dérivation gauche.

• Une dérivation Une dérivation S S -->> >> est terminéeest terminéelorsquelorsque n’est n’est

constitué que de lettres terminales.constitué que de lettres terminales.

• A une grammaire G , c’est-à-dire un ensemble de A une grammaire G , c’est-à-dire un ensemble de règles, nous associons le langage L ( G ) des mots règles, nous associons le langage L ( G ) des mots terminaux dérivables en partant de l’axiome S :terminaux dérivables en partant de l’axiome S :

u u L ( G ) L ( G ) S S --> . . . > . . . --> u> u

S S --> . . . > . . . --> u , > u , par une dérivation par une dérivation gauche.gauche.

kk

kk kk

24 septembre 2007 Cours de compilation 3 - Intranet 96

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A toute dérivationA toute dérivation S S -->> >> correspond au moins une correspond au moins une

dérivation gauche.dérivation gauche.

• Une dérivation Une dérivation S S -->> >> est terminéeest terminéelorsquelorsque n’est n’est

constitué que de lettres terminales.constitué que de lettres terminales.

• A une grammaire G , c’est-à-dire un ensemble de règles, A une grammaire G , c’est-à-dire un ensemble de règles, nous associons le langage L ( G ) des mots terminaux nous associons le langage L ( G ) des mots terminaux dérivables en partant de l’axiome S :dérivables en partant de l’axiome S :

u u L ( G ) L ( G ) S S --> . . . > . . . --> u> u

S S --> . . . > . . . --> u , > u , par une dérivation gauche.par une dérivation gauche.

• Une grammaire G est non ambiguë, si pour tout mot Une grammaire G est non ambiguë, si pour tout mot terminal il existe au plus une dérivation gauche.terminal il existe au plus une dérivation gauche.

kk

kk kk

24 septembre 2007 Cours de compilation 3 - Intranet 97

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

24 septembre 2007 Cours de compilation 3 - Intranet 98

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

24 septembre 2007 Cours de compilation 3 - Intranet 99

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

S S --> a B C > a B C --> a b C > a b C --> a b c> a b c

24 septembre 2007 Cours de compilation 3 - Intranet 100

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

S S -->> a B C a B C --> a b C > a b C --> a b c> a b c

SS

aa BB CC

24 septembre 2007 Cours de compilation 3 - Intranet 101

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

S S -->> a B C a B C -->> a b C a b C --> a b c> a b c

SS

aa BB CC

bb

24 septembre 2007 Cours de compilation 3 - Intranet 102

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

S S -->> a B C a B C -->> a b C a b C -->> a b c a b c

SS

aa BB CC

bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 103

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• A chaque dérivation correspond un arbre de A chaque dérivation correspond un arbre de

dérivation.dérivation.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

S S -->> a B C a B C -->> a b C a b C -->> a b c a b c

SS

aa BB CC

bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 104

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Voici une grammaire ambiguë :Voici une grammaire ambiguë :

S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c B ::= b c B ::= b c C ::= C ::=

24 septembre 2007 Cours de compilation 3 - Intranet 105

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Voici une grammaire ambiguë :Voici une grammaire ambiguë :

S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c B ::= b c B ::= b c C ::= C ::=

S S -->> a B C a B C --> a b c C > a b c C --> a b c> a b c

SS

aa BB CC

24 septembre 2007 Cours de compilation 3 - Intranet 106

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Voici une grammaire ambiguë :Voici une grammaire ambiguë :

S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c B ::= b c B ::= b c C ::= C ::=

S S -->> a B C a B C -->> a b c C a b c C --> a b c> a b c

SS

aa BB CC

bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 107

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Voici une grammaire ambiguë :Voici une grammaire ambiguë :

S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c B ::= b c B ::= b c C ::= C ::=

S S -->> a B C a B C -->> a b c C a b c C -->> a b c a b c

SS

aa BB CC

bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 108

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Voici une grammaire ambiguë :Voici une grammaire ambiguë :

S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c B ::= b c B ::= b c C ::= C ::=

S S -->> a B C a B C -->> a b c C a b c C -->> a b c a b c

SS

aa BB CC

bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 109

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il existe deux types de dérivations.Il existe deux types de dérivations.

24 septembre 2007 Cours de compilation 3 - Intranet 110

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il existe deux types de dérivations.Il existe deux types de dérivations.

• Descendante (LL) :Descendante (LL) :

. . . de la racine vers les feuilles . . .. . . de la racine vers les feuilles . . .

24 septembre 2007 Cours de compilation 3 - Intranet 111

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Il existe deux types de dérivations.Il existe deux types de dérivations.

• Descendante (LL) :Descendante (LL) :

. . . de la racine vers les feuilles . . .. . . de la racine vers les feuilles . . .

• Ascendante (LR) :Ascendante (LR) :

. . . des feuilles vers la racine . . .. . . des feuilles vers la racine . . .

24 septembre 2007 Cours de compilation 3 - Intranet 112

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

24 septembre 2007 Cours de compilation 3 - Intranet 113

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

SS

aa bb cc

??????

24 septembre 2007 Cours de compilation 3 - Intranet 114

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

SS

aa BB CC

??????

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 115

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

SS

aa BB CC

??????

aa bb cc

Analyse de laAnalyse de laracine vers racine vers les feuilles !les feuilles !

Depuis la gauche !Depuis la gauche !

24 septembre 2007 Cours de compilation 3 - Intranet 116

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

SS

aa BB CC

??????bb

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 117

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

SS

aa BB CC

bb cc

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 118

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

24 septembre 2007 Cours de compilation 3 - Intranet 119

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

24 septembre 2007 Cours de compilation 3 - Intranet 120

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

24 septembre 2007 Cours de compilation 3 - Intranet 121

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 122

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

aa

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 123

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C B ::= b C ::= cS ::= a B C B ::= b C ::= c

aa

aa bb ccDepuis la gauche !Depuis la gauche !

24 septembre 2007 Cours de compilation 3 - Intranet 124

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C S ::= a B C B ::= bB ::= b C ::= c C ::= c

aa BB

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 125

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C B ::= b S ::= a B C B ::= b C ::= cC ::= c

aa BB CC

aa bb cc

24 septembre 2007 Cours de compilation 3 - Intranet 126

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B C B ::= b S ::= a B C B ::= b C ::= cC ::= c

aa BB CC

aa bb cc

Analyse desAnalyse desfeuilles versfeuilles versla racine !la racine !

24 septembre 2007 Cours de compilation 3 - Intranet 127

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

– Tant que nous n’avons pas reconnu le membre Tant que nous n’avons pas reconnu le membre droit d’une règle nous avançons, sinon nous droit d’une règle nous avançons, sinon nous remplaçons par le membre gauche.remplaçons par le membre gauche.

S ::= a B CS ::= a B C B ::= b C ::= c B ::= b C ::= c

SS

aa BB CC

aa bb cc

Analyse desAnalyse desfeuilles versfeuilles versla racine !la racine !

24 septembre 2007 Cours de compilation 3 - Intranet 128

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une analyse ascendante est plus puissante qu’une Une analyse ascendante est plus puissante qu’une

analyse descendante, mais aussi plus lourde à analyse descendante, mais aussi plus lourde à mettre en oeuvre.mettre en oeuvre.

24 septembre 2007 Cours de compilation 3 - Intranet 129

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une analyse ascendante est plus puissante qu’une Une analyse ascendante est plus puissante qu’une

analyse descendante, mais aussi plus lourde à analyse descendante, mais aussi plus lourde à mettre en oeuvre.mettre en oeuvre.

• LL ou LR réussit S LL ou LR réussit S -->> u existe>> u existe

=>=><=<=//

24 septembre 2007 Cours de compilation 3 - Intranet 130

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une analyse ascendante est plus puissante qu’une Une analyse ascendante est plus puissante qu’une

analyse descendante, mais aussi plus lourde à analyse descendante, mais aussi plus lourde à mettre en oeuvre.mettre en oeuvre.

• LL ou LR réussit S LL ou LR réussit S -->> u existe>> u existe

• Le problème de la « fin du fichier » :Le problème de la « fin du fichier » :

Si le fichier contient « u v » et que « u » Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du appartient au langage, alors la partie « v » du fichier ne sera pas lue.fichier ne sera pas lue.

=>=><=<=//

24 septembre 2007 Cours de compilation 3 - Intranet 131

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une analyse ascendante est plus puissante qu’une Une analyse ascendante est plus puissante qu’une

analyse descendante, mais aussi plus lourde à analyse descendante, mais aussi plus lourde à mettre en oeuvre.mettre en oeuvre.

• LL ou LR réussit S LL ou LR réussit S -->> u existe>> u existe

• Le problème de la « fin du fichier » :Le problème de la « fin du fichier » :

Si le fichier contient « u v » et que « u » Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du appartient au langage, alors la partie « v » du fichier ne sera pas lue.fichier ne sera pas lue.

• Nous matérialisons la fin de fichier par le nouveau Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient «  u v caractère « # ». Le contenu du fichier devient «  u v # ».# ».

=>=><=<=//

24 septembre 2007 Cours de compilation 3 - Intranet 132

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une analyse ascendante est plus puissante qu’une Une analyse ascendante est plus puissante qu’une

analyse descendante, mais aussi plus lourde à mettre analyse descendante, mais aussi plus lourde à mettre en oeuvre.en oeuvre.

• LL ou LR réussit S LL ou LR réussit S -->> u existe>> u existe

• Le problème de la « fin du fichier » :Le problème de la « fin du fichier » :

Si le fichier contient « u v » et que « u » appartient Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du fichier ne sera au langage, alors la partie « v » du fichier ne sera pas lue.pas lue.

• Nous matérialisons la fin de fichier par le nouveau Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient «  u v # ».caractère « # ». Le contenu du fichier devient «  u v # ».

• Nous prenons comme nouvel axiome Z ::= S # .Nous prenons comme nouvel axiome Z ::= S # .

=>=><=<=//

24 septembre 2007 Cours de compilation 3 - Intranet 133

L’analyse syntaxiqueL’analyse syntaxique----------------------------------------------------------------------------------------------------------------------------

----• Une analyse ascendante est plus puissante qu’une Une analyse ascendante est plus puissante qu’une

analyse descendante, mais aussi plus lourde à mettre en analyse descendante, mais aussi plus lourde à mettre en oeuvre.oeuvre.

• LL ou LR réussit S LL ou LR réussit S -->> u existe>> u existe

• Le problème de la « fin du fichier » :Le problème de la « fin du fichier » :

Si le fichier contient « u v » et que « u » appartient au Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du fichier ne sera pas lue.langage, alors la partie « v » du fichier ne sera pas lue.

• Nous matérialisons la fin de fichier par le nouveau Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient «  u v # ».caractère « # ». Le contenu du fichier devient «  u v # ».

• Nous prenons comme nouvel axiome Z ::= S # .Nous prenons comme nouvel axiome Z ::= S # .

• Il faudra donc la dérivation Z Il faudra donc la dérivation Z -->> u v # .>> u v # .

=>=><=<=//

24 septembre 2007 Cours de compilation 3 - Intranet 134

RésuméRésumé----------------------------------------------------------------------------------------------------------------------------

----

•Analyse lexicaleAnalyse lexicale

•Analyse syntaxique (début)Analyse syntaxique (début)

24 septembre 2007 Cours de compilation 3 - 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 ! ! !