Université Mohamed El Bachir El Ibrahimi de Bordj Bou Arreridj
Faculté des Mathématiques et d'informatique Durée : 2 Séances
Département d'informatique
Licence 3ème année Systèmes informatiques
Module : Compilation
TP N° : 02
Introduction à l’analyse lexicale
1. Objectifs :
L'objectif de ces séances de travaux pratiques de compilation est de se familiariser aux
commandes flex, un outil de compilation permet de construire un analyseur lexical à partir d’un
ensemble de règles/actions décrites par des expressions régulières.
2. Outils :
- Editeur de texte.
- Le générateur Flex
- un compilateur de c, (gcc ou un autre outil de développement utilisant le langage C).
3. Travail demandé :
3.1. Partie I : Premier pas avec Flex
- Commencer par l’installation des outils Flex, dans le dossier c:\ GnuWin32 , vérifier que Flex
est déjà ajouté dans les variables d’environnement (path)
- A partir de l’invite de commande « cmd.exe », lancer la commande :>flex --version , pour
vérifier que Flex est reconnue par le système
- Créer un dossier nommé :TP02
- Lancer un éditeur de texte : exemple bloc-notes.exe, et taper le code ci-dessus
%%
(0|1)+ printf ("c'est un nombre binaire");
.* printf ("ce n'est pas un nombre binaire");
%%
int yywrap()
{
return 1;
}
main()
{
yylex();
}
- Le fichier doit être enregistré avec l’extension. lex (exemple : TP02_binaire.lex), et Placer
dans le dossier TP02.
- A partir de l’invite de commande, lancer la commande :> Flex tp02_binaire.lex
- En cas de réussite, le fichier lex.yy.c est généré dans le même répertoire
- Utiliser un outil de développement utilisant le langage C. Pour compiler le fichier lex.yy.c pour
générer l’exécutable
Exemple : gcc lex.yy.c
Page 1/2
Module : compilation TP N° 02
- Lancer l’exécutable pour tester les séquences suivant :
Fichier : Binaire.txt
10111
12001111
111110
10002001
- En utilisant la commande :
o > lex.yy.exe <binaire.txt
o ou bien : a <binaire.txt .. Suivant le nom de votre exécutable
Exercice 01 :
- Compiler et exécuter le fichier exc1.lex suivant, que fait cet analyseur ?
%{
int c ;
%}
%%
^\n { return 0 ;}
. { c++ ; }
\n { printf("total ligne %d\n",c) ; }
%%
int yywrap()
{
return 1;
}
main()
{
c=0 ;
yylex() ;
printf("total final : %d\n",c) ;
}
- Lancer l’exécutable pour tester un fichier contient un texte quelconque.
Exercice 02 :
- Ecrire un programme Flex, qui lit un fichier et nous permet de compter le nombre de lignes, de mots et
de caractères dans le fichier
Exercice 03 :
- Ecrire un programme qui compte le nombre de voyelles, de consonnes et de caractères de ponctuations,
d’un texte entre au clavier
Exercice 04 :
- Écrire un programme Flex qui permet de reconnaître :
Toutes les chaînes de lettres commençant par une majuscule au début d’une ligne.
Toutes les chaînes de lettres commençant par "a" et se terminant par "e".
Toutes les chaînes de "0" et de "1" qui contiennent le facteur "011".
Tous les caractères "." ou "?" qui se trouvent à la fin d’une ligne.
Exercice 05 :
- Écrire un programme Flex qui permet de calculer la moyenne d’une série de nombres d’entiers
Exercice 06 :
- Construire un analyseur qui, pour chaque lettre minuscule d'un texte, affiche après chaque ligne le
nombre de fois où cette lettre est apparue en tout.
- Construire un analyseur qui, pour chaque mot (en minuscules) d'un texte, affiche le nombre de fois où ce
mot est apparu.
Page 2/2