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

4 24 septembre 2007Cours de compilation 3 - Intranet4 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.

5 24 septembre 2007Cours de compilation 3 - Intranet5 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.

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

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

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

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

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

11 24 septembre 2007Cours de compilation 3 - Intranet11 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.

12 24 septembre 2007Cours de compilation 3 - Intranet12 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.

13 24 septembre 2007Cours de compilation 3 - Intranet13 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 % %

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

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

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

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

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

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

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

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

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

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

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

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

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

27 24 septembre 2007Cours de compilation 3 - Intranet27 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...

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

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

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

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

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

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

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

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

36 24 septembre 2007Cours de compilation 3 - Intranet36 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 #. => <= /


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

Présentations similaires


Annonces Google