Vous êtes sur la page 1sur 3
TP2 Département Génie Logiciel Techniques de et Systémes d’Information Compilatio: GLSI Flex (Applications) iveau : 1** année cycle ingénieurs Exercices 1: 1. Compléter et exécuter le programme suivant : or int nbl, nbc, abm; 3} = Majuscul [A-2] Minuscul [a-z] nom {Majuscul} {Minuscul}+ 8 {nom} — nbm++; nbc=nbe+yyleng; {\n] nbl++; 5 nbe++; 88 int yywrap() {return 1;} int main{ yylex(); print£("td %d %d",nbe,nbl,nbm) ; i Le code est donné comme suit : 2. Modifier le programme pour qu’il puisse lire et traiter ces données d'un fichier texte. a int nbl, nbc, nbm; } Majuscul [A-Z) Minuscul [a-z] nom {Majuscul} (Minuscul} + a8 {nom} nbm++;_nbe=nbetyyleng; t\a] nbl++; : nbe++; 38 int yywrap() (return 1;) int main(int arge, char ** argv) { if (argo) yyin=fopen(argv[1], "r"); yylex(); print£("td 4d %d",nbe, nbl, nbm) ; i Ist 1 2008-2010 Note: argc : est un entier qui est égal au nombre de paramétres dans la ligne de commande. argv : est un pointeur sur un tableau de pointeurs : chaque pointeur du tableau pointe sur le début des chaines respectives (chaines représentant les paramétres). 3. Compiler le programme avec Flex pour obtenir lex.yy.c. Compiler lex.yy.c avec CodeBloks pour obtenir lex.yy.exe. Créer dans le méme répertoire un fichier texte qui contient un ensemble de mots et de lignes (exemple : test.txt). A partir de Vinvite de commande, exécuter la commande lex.yy.exe test.txt. Exercice 2 : Parmi les taches secondaires d’un analyseur lexical : L’élimination des commentaires, des espaces, gestion de numéros de lignes du programme source...etc. Ecrire & V’aide de Flex un analyseur lexical qui permet de supprimer les lignes qui commencent pat # (considérons que chaque ligne qui commence par # est un commentaire), éliminer les espaces, remplacer les ‘,’ par des ‘,’ et retoumner le reste inchangé, L’analyseur doit aussi afficher le nombre de lignes du programme source. Exercice 3: On considére un répertoire téléphonique ott chaque ligne est écrite selon le format suivant : Channouf belgacem @ 04 25 32 15 88 Ben salah jalel @85 75 89 56 56 Soufi mohamed amine@ 45 78 12 37 57 Touons omar chatty @78 65 42 15 19 Brun leon paul @54 89 67 32 45 Donner et exprimer en Flex les définitions régulitres pour décrire nom, prénom et téléphone. 1. On s’est restreint aux noms et prénoms exclusivement composés de caractéres alphanumériques. 2. Le nom doit commencer par une lettre majuscule. 3. On pourra avoir plusieurs prénoms (écrits qu’en minuscules) séparés par un nombre quelconque de blancs. 4, Le numéro de téléphone est composé de 5 paires de digits séparées par un blanc. Exercice 4: 1. Ecrire a l'aide de Flex un analyseur lexical qui reconnait les unités lexicales suivantes : ENTIER : une constante entiére REEL : une constante réelle IDENT : un identificateur type C OP-ARTHM: +,-,*,/ OP-REL:<,>,<= AFFE MOTCLE: if, else, while CHAINE : une chaine de caractéres entre guillemets COMMENTAIRE : une ligne commengant par # Ist 2 2009-2010 2. Votre analyseur devra ignorer les espaces, tabulations, passages & la ligne et les lignes vides. 3. Afficher pour chaque lexéme, son type (ENTIER, REEL....etc.) et sa valeur. 4, Traiter quelques cas d’erreurs en affichant le numéro de la ligne, le type de ’erreur et la chaine qui pose le probléme. Par exemple, si le fichier en entrée est le suivant : " fichier exemple " ifa>b a=a+2 "chaine deux " # commmentaire 3545.3 -04 trucl x1 1x "chaine incomplete t fin L’analyseur doit indiquer : OP- ARTHM: + ENTIER :2 CHAINE : "chaine deux" COMMENT : # commmentaire REEL : 3.500000 "Chatne incompléte ** Erreur : ligne 6 ** fin de chaine attendue Ist 3 2009-2010

Vous aimerez peut-être aussi