Compilation, Langages et Automates - TP 1 - 18 mai 2004 1/2 Flex Pour compiler
Compilation, Langages et Automates - TP 1 - 18 mai 2004 1/2 Flex Pour compiler le fichier exemple.lex : # flex exemple.lex # gcc lex.yy.c -lfl On obtient alors un ex´ ecutable a.out qu’il faut lancer par ./a.out. Par d´ efaut, le programme g´ en´ er´ e attend que l’on tape au clavier le texte ` a traiter. Pour quitter le pro- gramme, il faut entrer au clavier la commande fin de fichier, c’est ` 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 d’un fichier 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 d’entr´ ee o` u chaque s´ equence d’espaces est remplac´ ee par un seul espace. Modifier 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 n’y a qu’un 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 chiffres) ; – les mot-clefs : begin, end ; – les identificateurs (s´ equences de chiffres 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 affichera ` a l’´ ecran la liste des entit´ es reconnues : “nombre 12”, “identificateur abc”, “erreur”, etc. Exercice 4 : Une chaˆ ıne de caract` eres est d´ elimit´ ee par des guillemets ". ` A l’int´ 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 fin 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 l’exercice pr´ ec´ edent, mais en g´ erant les commentaires imbriqu´ es (utiliser les start conditions). Si la fin du texte d’entr´ e est atteinte alors qu’un commentaire n’est pas termin´ e, on affichera 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´ efinir des abr´ eviations. Une ligne de la forme .def toto du texte d´ efinit 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 l’inclusion de fichiers. Une ligne de la forme .include blha sera remplac´ ee par le contenu du fichier blha. Le fichier blha peut ´ egalement contenir des directives d’inclusion. (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 uploads/Industriel/ td2-compilation.pdf
Documents similaires










-
35
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mar 24, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.0345MB