La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)"— Transcription de la présentation:

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

2 24 septembre 2007Cours de compilation 3 - Intranet2 Les grandes lignes du cours Définitions de base Définitions de base Composition de compilateurs Composition de compilateurs Lenvironnement dun compilateur Lenvironnement dun compilateur Evaluation partielle et compilation Evaluation partielle et compilation Analyses lexicales et syntaxiques Analyses lexicales et syntaxiques Techniques danalyse descendantes Techniques danalyse descendantes Techniques danalyse ascendantes Techniques danalyse ascendantes YACC YACC Analyse sémantique Analyse sémantique Environnement dexécution Environnement dexécution Génération de code Génération de code Optimisation de code Optimisation de code

3 24 septembre 2007Cours de compilation 3 - Intranet3 L E S C O N S T I T U A N T S D U N C O M P I L A T E U R

4 24 septembre 2007Cours de compilation 3 - Intranet4 Les constituants dun compilateur COMPILATEUR

5 24 septembre 2007Cours de compilation 3 - Intranet5 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation

6 24 septembre 2007Cours de compilation 3 - Intranet6 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation } } Analyse du texte source Génération du texte de sortie

7 24 septembre 2007Cours de compilation 3 - Intranet7 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Découpage du fichier source en mots, séparateurs,...

8 24 septembre 2007Cours de compilation 3 - Intranet8 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Reconnaissance de la structure du programme : instructions, fonctions,...

9 24 septembre 2007Cours de compilation 3 - Intranet9 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Vérification du sens des phrases.

10 24 septembre 2007Cours de compilation 3 - Intranet10 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation } 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 typage que nous vérifions pour le typage et nous passons à la suite. et nous passons à la suite.

11 24 septembre 2007Cours de compilation 3 - Intranet11 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Décision des adresses mémoire pour certaines données.

12 24 septembre 2007Cours de compilation 3 - Intranet12 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Création dun programme de sortie correct, mais non optimisé.

13 24 septembre 2007Cours de compilation 3 - Intranet13 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Optimisation du code de sortie, si cest du code assembleur.

14 24 septembre 2007Cours de compilation 3 - Intranet14 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Ces phases sont souvent réalisées simultanément. } Cest presquun compilateur à part.

15 24 septembre 2007Cours de compilation 3 - Intranet15 Les constituants dun compilateur Analyselexicale Analysesyntaxique Analysesémantique Allocationmémoire Génération de code Optimisation Les entêtes de chapitre seront...

16 24 septembre 2007Cours de compilation 3 - Intranet16 Principe de lanalyse lexicale Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token).Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token).

17 24 septembre 2007Cours de compilation 3 - Intranet17 Principe de lanalyse lexicale Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token).Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token). Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités.Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités.

18 24 septembre 2007Cours de compilation 3 - Intranet18 Principe de lanalyse lexicale Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token).Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token). Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités.Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités. Nous déterminons la catégorie dappartenance (mot réservé, nombre, opérateur,...) de chaque lexème.Nous déterminons la catégorie dappartenance (mot réservé, nombre, opérateur,...) de chaque lexème.

19 24 septembre 2007Cours de compilation 3 - Intranet19 Principe de lanalyse lexicale Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token).Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token). Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités.Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités. Nous déterminons la catégorie dappartenance (mot réservé, nombre, opérateur,...) de chaque lexème.Nous déterminons la catégorie dappartenance (mot réservé, nombre, opérateur,...) de chaque lexème. if A = 1 then... fi if A = 1 then... fi

20 24 septembre 2007Cours de compilation 3 - Intranet20 Principe de lanalyse lexicale Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token).Il sagit de traduire une suite de caractères en une suite de « lexèmes » (mots, token). Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités.Nous devons donc reconnaître les séparateurs explicites (espace, passage à la ligne,...) et implicites (rien) qui séparent les entités. Nous déterminons la catégorie dappartenance (mot réservé, nombre, opérateur,...) de chaque lexème.Nous déterminons la catégorie dappartenance (mot réservé, nombre, opérateur,...) de chaque lexème. if A = 1 then... fi if A = 1 then... fi Mot_réservé_if Var ( A ) Oprel ( = ) Entier ( 1 ) Mot_réservé_then... Mot_réservé_fi

21 24 septembre 2007Cours de compilation 3 - Intranet21 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme.

22 24 septembre 2007Cours de compilation 3 - Intranet22 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.

23 24 septembre 2007Cours de compilation 3 - Intranet23 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.

24 24 septembre 2007Cours de compilation 3 - Intranet24 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. if A = 1 then... fi if A = 1 then... fi

25 24 septembre 2007Cours de compilation 3 - Intranet25 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi if A = 1 then... fi if A = 1 then... fi

26 24 septembre 2007Cours de compilation 3 - Intranet26 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi if A = 1 then... fi if A = 1 then... fi

27 24 septembre 2007Cours de compilation 3 - Intranet27 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi

28 24 septembre 2007Cours de compilation 3 - Intranet28 Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi Principe de lanalyse syntaxique Test

29 24 septembre 2007Cours de compilation 3 - Intranet29 Principe de lanalyse syntaxique Test Bloc Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi

30 24 septembre 2007Cours de compilation 3 - Intranet30 Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi Principe de lanalyse syntaxique Test Bloc Si_alors

31 24 septembre 2007Cours de compilation 3 - Intranet31 Principe de lanalyse syntaxique Test Bloc Si_alors Arbre de syntaxe Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi

32 24 septembre 2007Cours de compilation 3 - Intranet32 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi MR_if Var( A ) Oprel( = ) Entier( 1 ) MR_then... MR_fi Test Bloc Si_alors Arbre de syntaxe abstraite

33 24 septembre 2007Cours de compilation 3 - Intranet33 Principe de lanalyse syntaxique Il sagit de reconnaître la structure du programme.Il sagit de reconnaître la structure du programme. Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme.Nous allons construire une représentation structurée (sous forme darbre de syntaxe abstraite) du programme. Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser.Pour lanalyse, nous nous appuyons sur une grammaire du langage à analyser. Var( A ) Oprel( = ) Entier( 1 )... Var( A ) Oprel( = ) Entier( 1 )... Test Bloc Si_alors Arbre de syntaxe abstraite

34 24 septembre 2007Cours de compilation 3 - Intranet34 Principe de lanalyse sémantique Nous devons maintenant vérifier le sens du programme.Nous devons maintenant vérifier le sens du programme.

35 24 septembre 2007Cours de compilation 3 - Intranet35 Principe de lanalyse sémantique Nous devons maintenant vérifier le sens du programme.Nous devons maintenant vérifier le sens du programme. Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations.Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations.

36 24 septembre 2007Cours de compilation 3 - Intranet36 Principe de lanalyse sémantique Nous devons maintenant vérifier le sens du programme.Nous devons maintenant vérifier le sens du programme. Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations.Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations. Nous opérons peut-être des petites transformations et nous explicitons des conversions de types implicites :Nous opérons peut-être des petites transformations et nous explicitons des conversions de types implicites :

37 24 septembre 2007Cours de compilation 3 - Intranet37 Principe de lanalyse sémantique Nous devons maintenant vérifier le sens du programme.Nous devons maintenant vérifier le sens du programme. Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations.Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations. Nous opérons peut-être des petites transformations et nous explicitons des conversions de types implicites :Nous opérons peut-être des petites transformations et nous explicitons des conversions de types implicites : 2 * A => A + A 2 * A => A + A

38 24 septembre 2007Cours de compilation 3 - Intranet38 Principe de lanalyse sémantique Nous devons maintenant vérifier le sens du programme.Nous devons maintenant vérifier le sens du programme. Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations.Nous collectons les déclarations des variables et fonctions dans la table des symboles et nous nous assurons que tout est déclaré et utilisé conformément aux déclarations. Nous opérons peut-être des petites transformations et nous explicitons des conversions de types implicites :Nous opérons peut-être des petites transformations et nous explicitons des conversions de types implicites : 2 * A => A + A 2 * A => A + A add int x x 1.5 add_float x 1.5 int_to_float

39 24 septembre 2007Cours de compilation 3 - Intranet39 L A N A L Y S E L E X I C A L E

40 24 septembre 2007Cours de compilation 3 - Intranet40 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :

41 24 septembre 2007Cours de compilation 3 - Intranet41 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while...

42 24 septembre 2007Cours de compilation 3 - Intranet42 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while... –Opérateurs : + == =...

43 24 septembre 2007Cours de compilation 3 - Intranet43 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while... –Opérateurs : + == =... –Nombres :

44 24 septembre 2007Cours de compilation 3 - Intranet44 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while... –Opérateurs : + == =... –Nombres : –Séparateurs : ;, « »...

45 24 septembre 2007Cours de compilation 3 - Intranet45 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while... –Opérateurs : + == =... –Nombres : –Séparateurs : ;, « »... –Variables : « les autres »

46 24 septembre 2007Cours de compilation 3 - Intranet46 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while... –Opérateurs : + == =... –Nombres : –Séparateurs : ;, « »... –Variables : « les autres » Les lexèmes sont reconnus par la grammaire du langage.Les lexèmes sont reconnus par la grammaire du langage.

47 24 septembre 2007Cours de compilation 3 - Intranet47 Lanalyse lexicale Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance :Nous découpons le programme en lexèmes. Nous déterminons leurs classes dappartenance : –Mots clefs : if while... –Opérateurs : + == =... –Nombres : –Séparateurs : ;, « »... –Variables : « les autres » Les lexèmes sont reconnus par la grammaire du langage.Les lexèmes sont reconnus par la grammaire du langage. Ce sont presque toujours des expressions régulières qui peuvent donc être reconnues par un automate.Ce sont presque toujours des expressions régulières qui peuvent donc être reconnues par un automate.

48 24 septembre 2007Cours de compilation 3 - Intranet48 Lanalyse lexicale Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières :

49 24 septembre 2007Cours de compilation 3 - Intranet49 Lanalyse lexicale Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières : –Tout caractère isolé est régulier.

50 24 septembre 2007Cours de compilation 3 - Intranet50 Lanalyse lexicale Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières : –Tout caractère isolé est régulier. –Toute séquence finie dexpressions régulières est régulière.

51 24 septembre 2007Cours de compilation 3 - Intranet51 Lanalyse lexicale Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières : –Tout caractère isolé est régulier. –Toute séquence finie dexpressions régulières est régulière. –Un choix fini entre expressions régulières est régulier comme [ a-d | h-p ].

52 24 septembre 2007Cours de compilation 3 - Intranet52 Lanalyse lexicale Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières : –Tout caractère isolé est régulier. –Toute séquence finie dexpressions régulières est régulière. –Un choix fini entre expressions régulières est régulier comme [ a-d | h-p ]. –u*, cest-à-dire la répétition du motif « u » n fois, avec n >= 0, est régulier.

53 24 septembre 2007Cours de compilation 3 - Intranet53 Lanalyse lexicale Petit rappel sur les expressions régulières :Petit rappel sur les expressions régulières : –Tout caractère isolé est régulier. –Toute séquence finie dexpressions régulières est régulière. –Un choix fini entre expressions régulières est régulier comme [ a-d | h-p ]. –u*, cest-à-dire la répétition du motif « u » n fois, avec n >= 0, est régulier. –u+, cest-à-dire la répétition du motif « u » n fois, avec n > 0, est régulier.

54 24 septembre 2007Cours de compilation 3 - Intranet54 Lanalyse lexicale Lautomatisation de lanalyse lexicale :Lautomatisation de lanalyse lexicale : –« lex » ou « flex » prennent des fichiers dexpressions régulières et les actions associées et construisent lautomate danalyse.

55 24 septembre 2007Cours de compilation 3 - Intranet55 Lanalyse lexicale Lautomatisation de lanalyse lexicale :Lautomatisation de lanalyse lexicale : –« lex » ou « flex » prennent des fichiers dexpressions régulières et les actions associées et construisent lautomate danalyse. –Nous aurons donc les commandes : lex fichier_lex cc -ll lex.y.cc a.out < fichier_source

56 24 septembre 2007Cours de compilation 3 - Intranet56 Lanalyse lexicale Lautomatisation de lanalyse lexicale :Lautomatisation de lanalyse lexicale : –« lex » ou « flex » prennent des fichiers dexpressions régulières et les actions associées et construisent lautomate danalyse. –Nous aurons donc les commandes : lex fichier_lex cc -ll lex.y.cc a.out < fichier_source –Format dun fichier lex : % % mot_à_reconnaître action_en_C mot_à_reconnaître action_en_C % %

57 24 septembre 2007Cours de compilation 3 - Intranet57 Lanalyse lexicale Lautomatisation de lanalyse lexicale :Lautomatisation de lanalyse lexicale : –« lex » ou « flex » prennent des fichiers dexpressions régulières et les actions associées et construisent lautomate danalyse. –Nous aurons donc les commandes : lex fichier_lex cc -ll lex.y.cc a.out < fichier_source –Format dun fichier lex : % % mot_à_reconnaître action_en_C mot_à_reconnaître action_en_C % %

58 24 septembre 2007Cours de compilation 3 - Intranet58 Lanalyse lexicale Attention aux cas ambigus :Attention aux cas ambigus : : := = : := =

59 24 septembre 2007Cours de compilation 3 - Intranet59 Lanalyse lexicale Attention aux cas ambigus :Attention aux cas ambigus : : := = : := = –Lordre des lexèmes donne la priorité : % % := := : =

60 24 septembre 2007Cours de compilation 3 - Intranet60 Lanalyse lexicale Attention aux cas ambigus :Attention aux cas ambigus : : := = : := = –Lordre des lexèmes donne la priorité : % % := := : = –De même, est-ce que « ifabc » signifie « ifabc » ou bien « if » suivi de « abc » ?

61 24 septembre 2007Cours de compilation 3 - Intranet61 Lanalyse lexicale Attention aux cas ambigus :Attention aux cas ambigus : : := = : := = –Lordre des lexèmes donne la priorité : % % := := : = –De même, est-ce que « ifabc » signifie « ifabc » ou bien « if » suivi de « abc » ? –La règle veut que lex reconnaisse le mot le plus long !

62 24 septembre 2007Cours de compilation 3 - Intranet62 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); %

63 24 septembre 2007Cours de compilation 3 - Intranet63 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % Des mots et opérateurs fixés !

64 24 septembre 2007Cours de compilation 3 - Intranet64 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % Nous avons différents symboles de relation !

65 24 septembre 2007Cours de compilation 3 - Intranet65 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % Les variables !

66 24 septembre 2007Cours de compilation 3 - Intranet66 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % Les entiers !

67 24 septembre 2007Cours de compilation 3 - Intranet67 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % Nous supprimons les espaces et retours à la ligne superflux !

68 24 septembre 2007Cours de compilation 3 - Intranet68 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi

69 24 septembre 2007Cours de compilation 3 - Intranet69 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi sivar(ab56)rel(=)ent(5)alorsvar(abc)affectent(113)addalorsaddent(12)var(ab)finsi

70 24 septembre 2007Cours de compilation 3 - Intranet70 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi sivar(ab56)rel(=)ent(5)alorsvar(abc)affectent(113)addalorsaddent(12)var(ab)finsi

71 24 septembre 2007Cours de compilation 3 - Intranet71 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi sivar(ab56)rel(=)ent(5)alorsvar(abc)affectent(113)addalorsaddent(12)var(ab)finsi

72 24 septembre 2007Cours de compilation 3 - Intranet72 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); [a-z0-9]* printf(« ovni(%s)\n », yytext); \ printf(« »); \n printf(« »); % Ici, nous récupérons les mélanges de lettres et chiffres illégaux !

73 24 septembre 2007Cours de compilation 3 - Intranet73 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); [a-z0-9]* printf(« ovni(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi

74 24 septembre 2007Cours de compilation 3 - Intranet74 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); [a-z0-9]* printf(« ovni(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi sivar(ab56)rel(=)ent(5)alorsvar(abc)affectent(113)addalorsaddovni(12ab)finsi

75 24 septembre 2007Cours de compilation 3 - Intranet75 Lanalyse lexicale Exemple :Exemple :% if printf(« si\n »); then printf(« alors\n »); fi printf(« finsi\n »); = printf(« rel(%s)\n », yytext); := printf(« affect\n»); + printf(« add\n »); [a-z][a-z0-9]* printf(« var(%s)\n », yytext); [0-9]* printf(« ent(%s)\n », yytext); [a-z0-9]* printf(« ovni(%s)\n », yytext); \ printf(« »); \n printf(« »); % if ab56 = 5 then abc := then + 12ab fi sivar(ab56)rel(=)ent(5)alorsvar(abc)affectent(113)addalorsaddovni(12ab)finsi

76 24 septembre 2007Cours de compilation 3 - Intranet76 L A N A L Y S E S Y N T A X I Q U E

77 24 septembre 2007Cours de compilation 3 - Intranet77 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë.

78 24 septembre 2007Cours de compilation 3 - Intranet78 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires :

79 24 septembre 2007Cours de compilation 3 - Intranet79 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | 12n

80 24 septembre 2007Cours de compilation 3 - Intranet80 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –Les NON-TERMINAUX : Cest lensemble N des symboles qui apparaissent au membre gauche dune règle au moins. 12n

81 24 septembre 2007Cours de compilation 3 - Intranet81 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –Les NON-TERMINAUX : Cest lensemble N des symboles qui apparaissent au membre gauche dune règle au moins. –Nous utilisons des lettres latines majuscules. 12n

82 24 septembre 2007Cours de compilation 3 - Intranet82 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –LAXIOME : Cest un non-terminal distingué à partir duquel nous allons démarrer. 12n

83 24 septembre 2007Cours de compilation 3 - Intranet83 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –LAXIOME : Cest un non-terminal distingué à partir duquel nous allons démarrer. –Nous utiliserons la lettre S (comme « start »). 12n

84 24 septembre 2007Cours de compilation 3 - Intranet84 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –Les TERMINAUX : Cest lensemble V des symboles qui napparaissent quaux membres droits des règles. 12n

85 24 septembre 2007Cours de compilation 3 - Intranet85 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –Les TERMINAUX : Cest lensemble V des symboles qui napparaissent quaux membres droits des règles. –Nous utilisons des lettres latines minuscules, du début de lalphabet. 12n

86 24 septembre 2007Cours de compilation 3 - Intranet86 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –Une suite, éventuellement vide, de terminaux est notée comme lettre latine minuscule de la fin de lalphabet. 12n

87 24 septembre 2007Cours de compilation 3 - Intranet87 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | –Une suite, éventuellement vide, de terminaux est notée comme lettre latine minuscule de la fin de lalphabet. –Une suite, éventuellement vide, de non-terminaux et de terminaux est notée comme lettre grecque minuscule. 12n

88 24 septembre 2007Cours de compilation 3 - Intranet88 Lanalyse syntaxique Nous allons reconnaître le langage à laide dune grammaire non ambiguë.Nous allons reconnaître le langage à laide dune grammaire non ambiguë. Rappels sur les grammaires :Rappels sur les grammaires : Une grammaire est une suite de règles de lune des formes suivantes : Une grammaire est une suite de règles de lune des formes suivantes : A ::= A ::= A ::= | | | A ::= | | | – a, b V – u, v V* ( est le mot vide ) –, ( N v V )* 12n

89 24 septembre 2007Cours de compilation 3 - Intranet89 Lanalyse syntaxique Une dérivation est une suite dapplication de règles qui part de laxiome S :Une dérivation est une suite dapplication de règles qui part de laxiome S :

90 24 septembre 2007Cours de compilation 3 - Intranet90 Lanalyse syntaxique Une dérivation est une suite dapplication de règles qui part de laxiome S :Une dérivation est une suite dapplication de règles qui part de laxiome S : S - > - > - > - > - > - > S - > - > - > - > - > - > encore notée S - >> encore notée S - >> 1ii+1k k

91 24 septembre 2007Cours de compilation 3 - Intranet91 Lanalyse syntaxique Une dérivation est une suite dapplication de règles qui part de laxiome S :Une dérivation est une suite dapplication de règles qui part de laxiome S : S - > - > - > - > - > - > S - > - > - > - > - > - > encore notée S - >> encore notée S - >> dans laquelle et sont respectivement de la forme dans laquelle et sont respectivement de la forme C et C et et quil existe une règle de la forme C ::= | | et quil existe une règle de la forme C ::= | | 1ii+1k k ii+1

92 24 septembre 2007Cours de compilation 3 - Intranet92 Lanalyse syntaxique Une dérivation est une suite dapplication de règles qui part de laxiome S :Une dérivation est une suite dapplication de règles qui part de laxiome S : S - > - > - > - > - > - > S - > - > - > - > - > - > encore notée S - >> encore notée S - >> dans laquelle et sont respectivement de la forme dans laquelle et sont respectivement de la forme C et C et et quil existe une règle de la forme C ::= | | et quil existe une règle de la forme C ::= | | La dérivation est « gauche » si, à chaque étape, C est le non-terminal le plus à gauche, cest-à-dire si V*. La dérivation est « gauche » si, à chaque étape, C est le non-terminal le plus à gauche, cest-à-dire si V*. 1ii+1k k ii+1

93 24 septembre 2007Cours de compilation 3 - Intranet93 Lanalyse syntaxique A toute dérivation S - >> correspond au moins une dérivation gauche.A toute dérivation S - >> correspond au moins une dérivation gauche. k

94 24 septembre 2007Cours de compilation 3 - Intranet94 Lanalyse syntaxique A toute dérivation S - >> correspond au moins une dérivation gauche.A toute dérivation S - >> correspond au moins une dérivation gauche. Une dérivation S - >> est terminée lorsque nestUne dérivation S - >> est terminée lorsque nest constitué que de lettres terminales. constitué que de lettres terminales. k kk

95 24 septembre 2007Cours de compilation 3 - Intranet95 Lanalyse syntaxique A toute dérivation S - >> correspond au moins une dérivation gauche.A toute dérivation S - >> correspond au moins une dérivation gauche. Une dérivation S - >> est terminée lorsque nestUne dérivation S - >> est terminée lorsque nest constitué que de lettres terminales. constitué que de lettres terminales. A une grammaire G, cest-à-dire un ensemble de règles, nous associons le langage L ( G ) des mots terminaux dérivables en partant de laxiome S :A une grammaire G, cest-à-dire un ensemble de règles, nous associons le langage L ( G ) des mots terminaux dérivables en partant de laxiome S : u L ( G ) S - >... - > u u L ( G ) S - >... - > u S - >... - > u, par une dérivation gauche. S - >... - > u, par une dérivation gauche. k kk

96 24 septembre 2007Cours de compilation 3 - Intranet96 Lanalyse syntaxique A toute dérivation S - >> correspond au moins une dérivation gauche.A toute dérivation S - >> correspond au moins une dérivation gauche. Une dérivation S - >> est terminée lorsque nestUne dérivation S - >> est terminée lorsque nest constitué que de lettres terminales. constitué que de lettres terminales. A une grammaire G, cest-à-dire un ensemble de règles, nous associons le langage L ( G ) des mots terminaux dérivables en partant de laxiome S :A une grammaire G, cest-à-dire un ensemble de règles, nous associons le langage L ( G ) des mots terminaux dérivables en partant de laxiome S : u L ( G ) S - >... - > u u L ( G ) S - >... - > u S - >... - > u, par une dérivation gauche. S - >... - > u, par une dérivation gauche. Une grammaire G est non ambiguë, si pour tout mot terminal il existe au plus une dérivation gauche.Une grammaire G est non ambiguë, si pour tout mot terminal il existe au plus une dérivation gauche. k kk

97 24 septembre 2007Cours de compilation 3 - Intranet97 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation.

98 24 septembre 2007Cours de compilation 3 - Intranet98 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c

99 24 septembre 2007Cours de compilation 3 - Intranet99 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c S - > a B C - > a b C - > a b c S - > a B C - > a b C - > a b c

100 24 septembre 2007Cours de compilation 3 - Intranet100 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c S - > a B C - > a b C - > a b c S - > a B C - > a b C - > a b c S aBC

101 24 septembre 2007Cours de compilation 3 - Intranet101 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c S - > a B C - > a b C - > a b c S - > a B C - > a b C - > a b c S aBC b

102 24 septembre 2007Cours de compilation 3 - Intranet102 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c S - > a B C - > a b C - > a b c S - > a B C - > a b C - > a b c S aBC bc

103 24 septembre 2007Cours de compilation 3 - Intranet103 Lanalyse syntaxique A chaque dérivation correspond un arbre de dérivation.A chaque dérivation correspond un arbre de dérivation. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c S - > a B C - > a b C - > a b c S - > a B C - > a b C - > a b c S aBC bc

104 24 septembre 2007Cours de compilation 3 - Intranet104 Lanalyse syntaxique Voici une grammaire ambiguë :Voici une grammaire ambiguë : S ::= a B C B ::= b C ::= c B ::= b c C ::= S ::= a B C B ::= b C ::= c B ::= b c C ::=

105 24 septembre 2007Cours de compilation 3 - Intranet105 Lanalyse syntaxique Voici une grammaire ambiguë :Voici une grammaire ambiguë : S ::= a B C B ::= b C ::= c B ::= b c C ::= S ::= a B C B ::= b C ::= c B ::= b c C ::= S - > a B C - > a b c C - > a b c S - > a B C - > a b c C - > a b c S aBC

106 24 septembre 2007Cours de compilation 3 - Intranet106 Lanalyse syntaxique Voici une grammaire ambiguë :Voici une grammaire ambiguë : S ::= a B C B ::= b C ::= c B ::= b c C ::= S ::= a B C B ::= b C ::= c B ::= b c C ::= S - > a B C - > a b c C - > a b c S - > a B C - > a b c C - > a b c S aBC bc

107 24 septembre 2007Cours de compilation 3 - Intranet107 Lanalyse syntaxique Voici une grammaire ambiguë :Voici une grammaire ambiguë : S ::= a B C B ::= b C ::= c B ::= b c C ::= S ::= a B C B ::= b C ::= c B ::= b c C ::= S - > a B C - > a b c C - > a b c S - > a B C - > a b c C - > a b c S aBC bc

108 24 septembre 2007Cours de compilation 3 - Intranet108 Lanalyse syntaxique Voici une grammaire ambiguë :Voici une grammaire ambiguë : S ::= a B C B ::= b C ::= c B ::= b c C ::= S ::= a B C B ::= b C ::= c B ::= b c C ::= S - > a B C - > a b c C - > a b c S - > a B C - > a b c C - > a b c S aBC bc

109 24 septembre 2007Cours de compilation 3 - Intranet109 Lanalyse syntaxique Il existe deux types de dérivations.Il existe deux types de dérivations.

110 24 septembre 2007Cours de compilation 3 - Intranet110 Lanalyse 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...

111 24 septembre 2007Cours de compilation 3 - Intranet111 Lanalyse 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...

112 24 septembre 2007Cours de compilation 3 - Intranet112 Lanalyse syntaxique Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) :

113 24 septembre 2007Cours de compilation 3 - Intranet113 Lanalyse syntaxique Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) : S abc ???

114 24 septembre 2007Cours de compilation 3 - Intranet114 Lanalyse syntaxique Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) : S aBC ??? abc

115 24 septembre 2007Cours de compilation 3 - Intranet115 Lanalyse syntaxique Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) : S aBC ??? abc Analyse de la racine vers les feuilles ! Depuis la gauche !

116 24 septembre 2007Cours de compilation 3 - Intranet116 Lanalyse syntaxique Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) : S aBC ??? b abc

117 24 septembre 2007Cours de compilation 3 - Intranet117 Lanalyse syntaxique Une dérivation descendante (et gauche) :Une dérivation descendante (et gauche) : S aBC bc abc

118 24 septembre 2007Cours de compilation 3 - Intranet118 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) :

119 24 septembre 2007Cours de compilation 3 - Intranet119 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche.

120 24 septembre 2007Cours de compilation 3 - Intranet120 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c

121 24 septembre 2007Cours de compilation 3 - Intranet121 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c abc

122 24 septembre 2007Cours de compilation 3 - Intranet122 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c a abc

123 24 septembre 2007Cours de compilation 3 - Intranet123 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c a abc Depuis la gauche !

124 24 septembre 2007Cours de compilation 3 - Intranet124 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c aB abc

125 24 septembre 2007Cours de compilation 3 - Intranet125 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c aBC abc

126 24 septembre 2007Cours de compilation 3 - Intranet126 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c aBC abc Analyse des feuilles vers la racine !

127 24 septembre 2007Cours de compilation 3 - Intranet127 Lanalyse syntaxique Une dérivation ascendante (et gauche) :Une dérivation ascendante (et gauche) : –Tant que nous navons pas reconnu le membre droit dune règle nous avançons, sinon nous remplaçons par le membre gauche. S ::= a B C B ::= b C ::= c S ::= a B C B ::= b C ::= c S aBC abc Analyse des feuilles vers la racine !

128 24 septembre 2007Cours de compilation 3 - Intranet128 Lanalyse syntaxique Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.

129 24 septembre 2007Cours de compilation 3 - Intranet129 Lanalyse syntaxique Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre. LL ou LR réussit S - >> u existeLL ou LR réussit S - >> u existe => <= /

130 24 septembre 2007Cours de compilation 3 - Intranet130 Lanalyse syntaxique Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre. LL ou LR réussit S - >> u existeLL ou LR réussit S - >> 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 langage, alors la partie « v » du fichier ne sera pas lue. Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du fichier ne sera pas lue. => <= /

131 24 septembre 2007Cours de compilation 3 - Intranet131 Lanalyse syntaxique Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre. LL ou LR réussit S - >> u existeLL ou LR réussit S - >> 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 langage, alors la partie « v » du fichier ne sera pas lue. Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du fichier ne sera pas lue. Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient « u v # ».Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient « u v # ». => <= /

132 24 septembre 2007Cours de compilation 3 - Intranet132 Lanalyse syntaxique Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre. LL ou LR réussit S - >> u existeLL ou LR réussit S - >> 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 langage, alors la partie « v » du fichier ne sera pas lue. Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du fichier ne sera pas lue. Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient « u v # ».Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient « u v # ». Nous prenons comme nouvel axiome Z ::= S #.Nous prenons comme nouvel axiome Z ::= S #. => <= /

133 24 septembre 2007Cours de compilation 3 - Intranet133 Lanalyse syntaxique Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre.Une analyse ascendante est plus puissante quune analyse descendante, mais aussi plus lourde à mettre en oeuvre. LL ou LR réussit S - >> u existeLL ou LR réussit S - >> 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 langage, alors la partie « v » du fichier ne sera pas lue. Si le fichier contient « u v » et que « u » appartient au langage, alors la partie « v » du fichier ne sera pas lue. Nous matérialisons la fin de fichier par le nouveau caractère « # ». Le contenu du fichier devient « u v # ».Nous matérialisons la fin de fichier par le nouveau 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 - >> u v #.Il faudra donc la dérivation Z - >> u v #. => <= /

134 24 septembre 2007Cours de compilation 3 - Intranet134 Résumé Analyse lexicale Analyse lexicale Analyse syntaxique (début) Analyse syntaxique (début)

135 24 septembre 2007Cours de compilation 3 - Intranet135 C e S t L a F i N ! ! ! b O n N e J o U r N é E ! ! !


Télécharger ppt "24 septembre 2007Cours de compilation 3 - Intranet1 Cours de compilation Analyse lexicale Analyse syntaxique (intro)"

Présentations similaires


Annonces Google