Vous êtes sur la page 1sur 6

AU : 2022-2023 TLC

Travaux Pratique N°1

But de TP
Le but de ce TP consiste à étudier les générateurs d’analyseur lexical en
utilisant l’outil « Flex ».
Flex (Fast Lexer) (version gnu de la commande lex) construit un analyseur
lexical à partir d’un ensemble de règles/actions décrites par des expressions
régulières.

 Un fichier Flex est un fichier texte qui contient la description d’un


analyseur lexical en termes d’expressions régulières et d’actions écrites en
langage C.
 Le compilateur Flex prend en entrée un fichier source Felx et produit en
sortie un fichier contenant le code C (ou C ++) du future analyseur
lexical.
 Le fichier C généré est nommé « lex.yy.c » doit être compilé à l’aide d’un
compilateur C (gcc, par exemple) pour obtenir le code exécutable de
l’analyseur lexical.
 Un fichier Flex porte l’extension « .lex » ou «.flex »
 Une fois l’analyseur lexical est mis en œuvre, il analyse le fichier source
pour chercher les occurrences d’expressions régulières.
 Lorsqu’un mot est reconnu, l’analyseur lexical exécute le code C
correspondant à l’expression régulière qui dénote ce mot.

L’analyseur lexical transforme une suite de symboles en terminaux. Le but de


l’analyseur lexical est donc de ‘consommer’ des symboles et de les fournir à
l’analyseur syntaxique.

1
AU : 2022-2023 TLC

Etude théorique :
La structure d'un programme flex est découpée en 3 zones séparées par les
balises %{ , %}, %%, %%.
Structure de fichier spécification (f)lex :
%{
Déclaration des variables (en C) constantes…
%}
Déclaration des définitions régulières
%%
Règles de traduction
%%
Bloc principal et fonctions auxiliaires
1. Déclaration des définitions :
Une définition régulière permet d’associer un nom à une Expressions
Régulières (ER) (f)lex et de se référer par la suite (dans la section des règles) à
ce nom plutôt qu’à ER.
2. Règles de traduction :
Sont des suites d’instructions de la forme :
Exp1 action1
Exp2 action2
Les Expi sont des ER (f)lex et doivent commencer en colonne 0. Les actions
sont des blocs d’instructions en C, qui doivent commencer sur la même ligne
que l’ER correspondante.

2
AU : 2022-2023 TLC

3. Bloc principale :
Si aucune fonction auxiliaire n’est déclarée, Lex considère que c’est juste :
main ( )
{
yylex () ;
}

Définition d’une expression régulière :


 Syntaxe :
Nom Expression_Régulière
 « Nom » : un identificateur qui sert à nommer une expression régulière
pour l’avoir référencer ultérieurement.
 Le nom doit être non indenté.
 Une définition d’une expression régulière doit tenir sur une seule ligne.
Section des règles :
 Une règle se présente sous la forme :
Motif Action
 Un motif ne doit pas être indenté et les actions doivent commencer dans
la même ligne que leur motif.
 Un motif est une expression régulière qui peut référencer les expressions
régulières définies dans la section des définitions.
 Une action est séparée de son motif par au moins un espace (ou une
tabulation).
 L’analyseur lexical déclenche une action autant de fois qu’il trouve un
lexème qui correspond au motif associé à cette action.
 La compilation d'une source flex produit une fonction yylex(). Un appel
de yylex() déclenche une analyse lexicale du flux yyin.
 Au cours traitement, l'analyseur tente de satisfaire la première règle, puis
la seconde etc... Quand un motif est détecté, il est chargé dans la
variable yytext, sa longueur dans yyleng.

3
AU : 2022-2023 TLC

Les motifs :
x dénote le singleton {x}
. dénote n’importe quel caractère, sauf le caractère '\n'
[xyz] dénote {x, y, z}
[abj-oZ] dénote {a, b, j, k, l, m, n, o,Z}
[^A-Z] dénote n’importe quel caractère sauf les lettres majuscules
r* zéro, une ou plusieurs occurrences de r (r étant une expression
régulière valide)
r+ une ou plusieurs occurrences de r
r? zéro ou une occurrence de r
r{2, 5} 2, 3, 4 ou 5 occurrences de r
r{2,} 2 ou plusieurs occurrences de r
r{4} exactement 4 occurrences de r
{nom} expansion de la définition « nom »
\x dénote les caractères ASCII comme \a, \t
\0 dénote le caractère de code ASCII 0 (NULL)
\123 dénote le caractère de code ASCII123
\x2a dénote le caractère de code ASCII hexadécimal 2a
(r) une seule occurrence de r, les parenthèses sont utilisées pour
fixer la priorité
r|s une seule occurrence de r ou de s
rs une seule occurrence de r, suivie d’une seule occurrence de s
(concaténation)
r/s une seule occurrence de r, et seulement si cette occurrence est
suivie immédiatement par une seule occurrence de s
^r une seule occurrence de r, mais uniquement si cette occurrence
se trouve au début d’une ligne
r$ une seule occurrence de r, mais uniquement si cette occurrence
se trouve à la fin d’une ligne
<< EOF >> dénote le caractère de fin de fichier

4
AU : 2022-2023 TLC

Exercice N° 1
1-
a. Ecrire le code ci-dessous en utilisant : gedit ex1_1.l
b. Compiler le code avec Flex en tapant : flex ex1_1.l
c. Compiler avec le compilateur C en tapant : cc lex.yy.c -lfl
d. Exécuter en tapant : ./a.out

%%
0|1 {
printf("un nombre binaire [%s]\n", yytext);
}
%%

e. Le tester avec les entrées suivantes :


0 0 1110
101 01 11
012
01201201 000223400agfrue304
0+0=la tete a toto
f. Que fait l’analyseur ci-dessus.
2-
a. Ecrire le code ci-dessous en utilisant : gedit ex1_2.l. Compiler
puis exécuter avec les mêmes entrées.
Bin 0|1
%%
{Bin}+ {
printf("un nombre binaire [%s]\n", yytext); }
%%

b. Quelle est la différence avec l'exercice précédent ?

5
AU : 2022-2023 TLC

3-
a. Ecrire le code ci-dessous en utilisant : gedit ex1_3.l. Compiler
puis exécuter.
%%
(0|1)+ {
printf("un nombre binaire [%s]\n", yytext); }
. //taper un espace pour séparer le motif de l'action
%%

b. Quelle est la différence avec les autres exercices ?


Exercice N° 2
1- Que fait l’analyseur ci-dessous.

%%
[a-zA-Z][a-zA-Z0-9]* printf("<%s> ", yytext );
%%

Exercice N° 3

Ecrire un analyseur lexical en utilisant l’utilitaire Flex qui permet d’afficher


le message « entier trouvé » à chaque fois qu’il trouve un entier d’un texte
saisie au clavier.

Exercice N° 4

Ecrire un analyseur lexical en utilisant l’utilitaire Flex qui permet de compter


le nombre de mots d’un texte saisie au clavier.

Vous aimerez peut-être aussi