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

135
24 septembre 2007 Cours de compilation 3 - Intranet 1 Cours de compilation Cours de compilation Analyse lexicale Analyse lexicale Analyse syntaxique (intro) Analyse syntaxique (intro)

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

Page 1: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

24 septembre 2007 Cours de compilation 3 - Intranet 1

Cours de compilationCours de compilation

Analyse lexicaleAnalyse lexicale

Analyse syntaxique (intro)Analyse syntaxique (intro)

Page 2: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale 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

Page 3: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 4: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

24 septembre 2007 Cours de compilation 3 - Intranet 4

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

----

CCOOMMPPIILLAATTEEUURR

Page 5: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 6: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 7: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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, . . .

Page 8: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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, . . .

Page 9: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 10: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 11: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 12: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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é.

Page 13: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 14: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 15: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 . . .

Page 16: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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).

Page 17: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 18: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 19: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 20: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 21: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 22: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 23: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 24: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 25: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 26: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 27: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 28: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 29: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 30: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 31: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 32: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 33: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 34: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 35: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 36: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 :

Page 37: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 38: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 39: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 40: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 :

Page 41: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 . . .

Page 42: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 : + == = . . .

Page 43: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 . . .

Page 44: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 : ; , «  » . . .

Page 45: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 »

Page 46: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 47: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 48: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 :

Page 49: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 50: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 51: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 ].

Page 52: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 53: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 54: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 55: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 56: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

. . .. . .

%%%%

Page 57: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

. . .. . .

%%%%

Page 58: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

24 septembre 2007 Cours de compilation 3 - Intranet 58

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

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

: := =: := =

Page 59: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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é :

%%%%

. . .. . .

:=:=

::

==

Page 60: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 » ?

Page 61: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 62: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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(«  »);

%%%%

Page 63: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 64: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 65: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 66: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 67: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 68: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 69: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 70: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 71: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 72: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 73: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 74: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 75: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 76: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 77: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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ë.

Page 78: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 :

Page 79: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 80: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 81: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 82: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 83: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 84: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 85: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 86: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 87: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 88: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 89: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 :

Page 90: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 91: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 92: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 93: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 94: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 95: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 96: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 97: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 98: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 99: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 100: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 101: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 102: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 103: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 104: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 ::=

Page 105: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 106: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 107: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 108: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 109: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 110: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 . . .

Page 111: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 . . .

Page 112: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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) :

Page 113: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

??????

Page 114: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 115: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 116: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 117: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 118: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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) :

Page 119: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 120: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 121: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 122: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 123: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 124: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 125: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

Page 126: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 127: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 !

Page 128: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

Page 129: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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

=>=><=<=//

Page 130: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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.

=>=><=<=//

Page 131: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 # ».# ».

=>=><=<=//

Page 132: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 # .

=>=><=<=//

Page 133: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 # .

=>=><=<=//

Page 134: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

24 septembre 2007 Cours de compilation 3 - Intranet 134

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

----

•Analyse lexicaleAnalyse lexicale

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

Page 135: 24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)

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 ! ! !