Ens.: M.T. Bennani FST - Département Génie Informatique Travaux dirigés en théorie de compilation Année : 2012-2013 Série N1 - Analyse lexicale 1. Construction des AFDs Soit un alphabet formé de deux lettre ”a” et ”b”. Transformer les AFND suivants en AFD. (a) Le premier automate est : a,b q0 a b q2 q1 a (b) Le deuxième automate est : b q0 a q1 b q2 a b q3 a (c) Le troisième automate est : q0 b a q1 a a q2 a a,b q3 b q4 q5 2. Algorithme Maximal Munch Soient les trois Tokens définis par les expressions régulières du listing ci-dessous. a∗b ( a | b)∗b c∗ printf (”1”); printf (”2”); printf (”3”); Quelles sont les sorties produites en appliquant l’algorithme maxiaml munch pour : (a) aaabccabbb (b) cbbbbac (c) cbabc 3. Limites de la résolution de conflits Nous avons introduit dans le cours que l’algorithme Maximal Munch associé à la définition d’un critère de priorité sur les expressions régulières permettent de résoudre la résolution de conflits. (a) Expliquer ce principe avec un exemple différent de celui introduit dans le cours. (b) Soient les trois Tokens définis par les expressions régulières du listing ci-dessous. TDs en théorie de compilation aa a ab TD1 Année universitaire : 2012-2013 printf (”1”); printf (”2”); printf (”3”); Quelles sont les sorties produites lorsqu’on applique l’algorithme maxiaml munch pour la chaine ”aab”? 4. Lenteur des scanners Soient les Tokens définis par les expressions régulières du listing ci-dessous ” photo ” ” photosynthese ” ” . | \ n” { p r i n t f ( ”PHOTO” ) ; } { p r i n t f ( ”PHOTOSYNTHESE” ) ; } { p r i n t f ( ”X” ) ; } (a) Quelles sont les sorties produites pour l’entrée ”photosynthetiser” ? (b) Déduire le nombre de caractères scannés. (c) Soient les deux Tokens définis par les expressions régulières du listing ci-dessous a ∗b a { printf (”1”); } { printf (”2”); } Supposons le langage défini par L={a{n}, où n > 1}. Quel est le nombre de caractères scannés ? 5. Analyseurs inversés L’algorithme d’analyse introduit dans le cours est basé sur une lecture de gauche à droite d’une entrée. L’objectif de cet exercice est de réaliser un analyseur qui réalise la lecture de droite à gauche. (a) Modifier l’algorithme permettant de convertir l’expression régulière en AFND dans le but d’accpeter les chaı̂nes inversées. (b) Génerer un ensemble d’expressions régulières et une chaine de caractères où l’analyse de gauche à droite donne des Tokens différent de l’analyse de droite à gauche. Page 2