Vous êtes sur la page 1sur 2

Compilation, Langages et Automates - TP 1 - 18 mai 2004

1/2

Flex
Pour compiler le chier exemple.lex : # flex exemple.lex # gcc lex.yy.c -lfl On obtient alors un ex ecutable a.out quil faut lancer par ./a.out. Par d efaut, le programme g en er e attend que lon tape au clavier le texte ` a traiter. Pour quitter le programme, il faut entrer au clavier la commande n de chier, cest ` a dire : Contr ole + D en d ebut de ligne (attention ` a ne pas taper Contr ole + C qui interromprait le programme sans le laisser terminer son travail). Il est possible de nourrir le programme a ` partir dun chier texte en utilisant la commande ./a.out < mon-fichier.txt. La documentation du logiciel Flex est disponible en utilisant les commandes man flex et info flex. Exercice 1 : Ecrire un lexeur flex qui supprime les espaces redondants : la sortie du programme sera le texte dentr ee o` u chaque s equence despaces est remplac ee par un seul espace. Modier ce lexeur pour que tous les espaces apparaissant en d ebut de ligne soient supprim es. Exercice 2 : Ecrire un lexeur flex qui compte le nombre de mots, de nombres et de signes de ponctuation dans un texte. Attention, dans 12 345,45 euros, il ny a quun seul nombre et aucun signe de ponctuation ! Exercice 3 : Ecrire un lexeur flex capable de reconna tre les entit es suivantes : les nombres (s equences de chires) ; les mot-clefs : begin, end ; les identicateurs (s equences de chires et de lettres comman cant par une lettre, et qui ne sont pas des mot-clefs) ; les op erateurs : +, , et . Les espaces, tabulations et retours ` a la ligne sont des s eparateurs. Toute autre s equence de caract` eres qui ne forme pas une entit e est consid er ee comme une erreur. Le lexeur achera ` a l ecran la liste des entit es reconnues : nombre 12, identicateur abc, erreur, etc. Exercice 4 : ` lint Une cha ne de caract` eres est d elimit ee par des guillemets ". A erieur de la cha ne, il est possible de taper des caract` eres " ` a condition de les pr ec eder de \ (pour ne pas les confondre avec le d elimiteur de n de cha ne). Ajouter au lexeur pr ec edent la gestion des cha nes de caract` eres. Exercice 5 : En langage C, les commentaires sont encadr es entre /* et */. Ils ne peuvent pas etre imbriqu es. Ajouter au lexeur pr ec edent la gestion des commentaires C. Quelle est la sortie g en er ee par bla /* blo /* bli */ blu */ bligerc , par /** toto **/ ? Exercice 6 : Refaire lexercice pr ec edent, mais en g erant les commentaires imbriqu es (utiliser les start conditions). Si la n du texte dentr e est atteinte alors quun commentaire nest pas termin e, on achera une erreur.

Universit e Paris Dauphine - IUP GMI 3 Apprentissage

Antoine Min e

Compilation, Langages et Automates - TP 1 - 18 mai 2004

2/2

Exercice 7 : Ecrire en flex un macro-processeur qui permet de d enir des abr eviations. Une ligne de la forme .def toto du texte d enit une nouvelle macro toto associ ee au texte du texte. Dans la suite du texte, chaque occurrence du mot toto sera remplac ee par le contenu de la macro : du texte. (On pourra, pour cela, stocker les couples (macro,texte de remplacement) dans des tableaux C de cha nes de caract` eres.) Exercice 8 : Ecrire en flex un macro-processeur qui permet linclusion de chiers. Une ligne de la forme .include blha sera remplac ee par le contenu du chier blha. Le chier blha peut egalement contenir des directives dinclusion. (On pourra, pour cela, g erer une pile de YY_BUFFER_STATE et utiliser la commande yy_switch_to_buffer.)

Universit e Paris Dauphine - IUP GMI 3 Apprentissage

Antoine Min e