:: Enseignements :: Licence :: L3 :: 2007-2008 :: Traduction ::
[LOGO]

Analyse lexicale avec flex


Le but de ce TD est de se familiariser avec l'analyse lexicale en flex.

Exercice 1 - Mots de moins de 10 lettres

Écrire un programme flex qui extrait d'un texte tous les mots de moins de dix lettres, sans utiliser la fonction strlen ou la variable yyleng.

Exercice 2 - Colonne de texte

Écrire un programme flex qui prend en entrée un texte et qui affiche en sortie toutes les lettres de ce texte sur une colonne de 5 caractères de large. Voici ce qui doit s'afficher pour le texte "Je crois que c'est bien, oui.":
Jecro
isque
cestb
ienou
i

Exercice 3 - Codage circulaire

Écrire un programme flex qui remplace dans un texte chaque lettre par sa suivante en conservant la casse (a par b, B par C, z par a). Exemple: pour "Je me sens VRAIMENT bien!": Kf nf tfot WSBJNFOU cjfo!

Exercice 4 - Repérage des noms de fonctions en C

Écrire un programme \verb$flex$ qui prend un programme C et qui affiche tous les noms de fonctions utilisés dans ce programme. On fera attention à ne pas repérer abusivement les noms qui apparaissent dans les chaînes et les commentaires. Si l'on prend en entrée le programme suivant:
/* la fonction plus(int,int) renvoie
   la somme de ses paramètres */
int plus
   (int a,int b) {
return a+b;
}
int main (void) {
printf ("plus(4,7)=%d\n",plus(4,7));
getchar(); // getchar() attend un retour chariot
return 0;
}			
		
on devra obtenir la liste suivante: plus main printf plus getchar

Exercice 5 - Coupures de mots

Les traitements de texte coupent parfois les mots en fin de ligne, en insérant un tiret juste avant le retour à la ligne. Ecrire un programme flex qui supprime les coupures d'un texte, en rétablissant les mots en fin de ligne. On fera attention au caractère qui suit la fin du mot, de façon à ne pas laisser d'espace en début de ligne et à ne pas envoyer une ponctuation à la ligne. Si l'on prend le texte suivant:
Ma grand-mère me dit sou-
vent de jouer - sagement -
à faire de la mu-
sique
pour me dis-
traire.
		
il ne doit pas devenir ceci:
Ma grand-mère me dit souvent
 de jouer - sagement -à faire de la musique

pour me distraire
.			
		
mais ceci:
Ma grand-mère me dit souvent
de jouer - sagement -
à faire de la musique
pour me distraire.