Vous êtes sur la page 1sur 24

Chapitre III

L’outil (f)lex

1 Présentation générale

2 Structure du fichier de spécification (f)lex

3 Expressions régulières (f)lex

4 Variables et fonctions prédéfinies

5 Exemple d’un fichier (f)lex

6 Compilation d’un fichier (f)lex

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 1 / 16


Présentation générale

Présentation générale

L’outil (f)Lex
(f)lex est un outil destiné à construire des AL à partir de notations
spécifiques basées sur des expressions régulières.
accepte en entrée des modèles sous forme de définitions
régulières.
produit un programme écrit dans un langage de haut niveau
(langage C) : Analyseur Lexical.
Une fois compilé, l’AL reconnaı̂t les unités lexicales entrées.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 2 / 16


Présentation générale

Présentation générale

L’outil (f)Lex
(f)lex est un outil destiné à construire des AL à partir de notations
spécifiques basées sur des expressions régulières.
accepte en entrée des modèles sous forme de définitions
régulières.
produit un programme écrit dans un langage de haut niveau
(langage C) : Analyseur Lexical.
Une fois compilé, l’AL reconnaı̂t les unités lexicales entrées.

Code source a := b + c + d

Analyseur Outil
modèles
Lexical Lex
Définitions
Unités Régulières
id1 := id2 + id3 + id4
lexicales

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 2 / 16


Présentation générale

Présentation générale

L’outil (f)Lex
(f)lex est un outil destiné à construire des AL à partir de notations
spécifiques basées sur des expressions régulières.
accepte en entrée des modèles sous forme de définitions
régulières.
produit un programme écrit dans un langage de haut niveau
(langage C) : Analyseur Lexical.
Une fois compilé, l’AL reconnaı̂t les unités lexicales entrées.

Code source a := b + c + d

Analyseur Outil
modèles
Lexical Lex
Définitions
Unités Régulières
id1 := id2 + id3 + id4
lexicales

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 2 / 16


Présentation générale

Présentation générale

L’outil (f)Lex
(f)lex est un outil destiné à construire des AL à partir de notations
spécifiques basées sur des expressions régulières.
accepte en entrée des modèles sous forme de définitions
régulières.
produit un programme écrit dans un langage de haut niveau
(langage C) : Analyseur Lexical.
Une fois compilé, l’AL reconnaı̂t les unités lexicales entrées.

Code source a := b + c + d

Analyseur Outil
modèles
Lexical Lex
Définitions
Unités Régulières
id1 := id2 + id3 + id4
lexicales

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 2 / 16


Présentation générale

Présentation générale

L’outil (f)Lex
(f)lex est un outil destiné à construire des AL à partir de notations
spécifiques basées sur des expressions régulières.
accepte en entrée des modèles sous forme de définitions
régulières.
produit un programme écrit dans un langage de haut niveau
(langage C) : Analyseur Lexical.
Une fois compilé, l’AL reconnaı̂t les unités lexicales entrées.

Code source a := b + c + d

Analyseur Outil
modèles
Lexical Lex
Définitions
Unités Régulières
id1 := id2 + id3 + id4
lexicales

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 2 / 16


Présentation générale

Présentation générale

Le fichier de spécifications (f)lex


Le fichier de spécifications (f)lex contient simultanément :
des expressions régulières
des actions ou règles de traduction.
L’exécutable obtenu
1 lit le texte d’entrée caractère par caractère jusqu’à ce qu’il trouve le
plus long motif du texte d’entrée qui correspond à l’une des
expressions régulières.
2 Dans le cas où plusieurs règles reconnaissent le motif, c’est la
première règle rencontrée (de haut en bas) qui l’emporte :
Il exécute alors l’action correspondante.
3 Dans le cas où aucune règle ne peut être sélectionnée :
l’action par défaut consiste à copier le caractère du fichier d’entrée en
sortie.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 3 / 16


Structure du fichier de spécification (f)lex

Structure d’un fichier Lex

Spécification Lex
%{
déclaration (en C) de variables et constantes
%}
déclaration de définitions régulières
%%
règles de traduction
%%
bloc principal et fonctions auxiliaires

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 4 / 16


Structure du fichier de spécification (f)lex

Exemples de fichier Lex

Exemple 1 : reconnaı̂t les nombres binaires mais affiche tout


binaire (0|1)+
%%
{binaire} printf("ceci est un nombre binaire!\n");

Exemple 2 : affiche que les nombres binaires reconnus


binaire (0|1)+
%%
{binaire} printf("ceci est un nombre binaire %s!\n",
yytext);
. // Rien!!!

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 5 / 16


Structure du fichier de spécification (f)lex

Spécification du fichier (f)lex

Description de la structure
Une définition régulière permet d’associer un nom à une
expression régulière (f)lex et de se référer par la suite (dans la
section des règles) à ce nom plutôt qu’à l’expression régulière.
Les règles de traduction sont des suites d’instructions de la
forme :
exp1 action1
exp2 action2
..
.
Les expi sont des expressions régulières (f)lex et doivent
commencer en colonne 0.
Les actioni sont des blocs d’instructions en C : une seule
instruction C ou une suite d’instructions entre { et } qui doivent
commencer sur la même ligne que l’expression correspondante.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 6 / 16


Structure du fichier de spécification (f)lex

Spécification du fichier (f)lex

Description de la structure
La section du bloc principal et des fonctions auxiliaires est
facultative. tem Cette section contient :
les routines C définies par l’utilisateur,
une fonction main() si celle par défaut ne convient pas.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 7 / 16


Expressions régulières (f)lex

Les expressions régulières (f)lex

Description
Une expression régulière (f)lex se compose :
de caractères normaux,
de méta-caractères qui ont une signification spéciale :
$, , [, ], {, }, <, >, +, −, ∗, /, |, ?, .

Attention
(f)lex fait la différence entre les minuscules et les majuscules.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 8 / 16


Expressions régulières (f)lex

Expression régulières (f)lex

Expression Reconnaı̂t ou accepte Exemple


tout caractère qui n’est pas
c a
un méta-caratère
si c n’est pas une lettre miniscule,
\c \+
le caratère littéralement
la chaı̂ne de caractères s
”s” ”abc ∗ +”
littéralement
r1 r2 r1 suivie de r2 ab
. tout caractère sauf retour à la ligne a.b
comme premier caractère de
∧ ∧abc
l’expression, signifie début de la ligne
comme dernier caractère de
$ abc$
l’expression, signifie fin de la ligne
n’importe quel caractère constituant
[s] [ab]
la chaine s

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 9 / 16


Expressions régulières (f)lex

Expression régulières (f)lex-Suite


n’importe quel caractère sauf ceux
[∧s] [∧ab]
constituant la chaine s
r∗ 0 ou plusieurs occurences de r a∗
r+ 1 ou plusieurs occurences de r a+
r? 0 ou 1 occurence de r a?
rm m occurences de r a5
r m,n de m à n occurences de r a5,9
r1 |r2 r1 ou r2 a|b
r1 si elle est suivie
r1 /r2 ab/cd
de r2
(r ) r (a|b)
\n caractère retour à la ligne
\t m caratère tabulation
pour faire référence à une
{} {mot}
définition régulière
<< EOF >> Fin de fichier(Flex) << EOF >>
Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 10 / 16
Expressions régulières (f)lex

Expression régulières (f)lex

Propriétés
x|yz ∗ est interprété comme (x)|(y (z ∗ )).
abc{1, 3} est interprété avec flex comme ab(c{1, 3}).
x|y est interprété avec flex comme (x|y ).

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 11 / 16


Variables et fonctions prédéfinies

Variables et fonctions prédéfinies

Fonctions Description
tableau de caractères qui contient la chaı̂ne
char yytext[]
d’entrée qui a été acceptée.
int yyleng() longueur de cette chaı̂ne
int yylex() lance l’analyseur et appelle yywrap()
toujours appelée en fin de flot d’entrée. Elle ne fait
rien par défaut, mais l’utilisateur peut la redéfinir
int yywrap() dans la section des fonctions auxiliaires.
retourne 0 si l’analyse doit se poursuivre sur un
autre fichier d’entrée et 1 sinon.
contient par défaut juste un appel à yylex().
int main() L’utilisateur peut la redéfinir dans la section des
fonctions auxiliaires.
unput(char c) remet le caractère dans le flot d’entrée
yyterminate() fonction qui stoppe l’analyseur

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 12 / 16


Exemple d’un fichier (f)lex

Exemple d’un fichier (f)lex

Exemple
Cet exemple compte le nombre de voyelles, consonnes et
caractères de ponctuations d’un fichier texte.

Code
%option noyywrap
%{

int nbVoyelles, nbConsonnes, nbPonct;


%}
consonne [b-df-hj-np-xz]
ponctuation [,;:?!/.]
%%
[aeiouy] nbVoyelles++;

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 13 / 16


Exemple d’un fichier (f)lex

Exemple d’un fichier (f)lex - Suite

Code-Suite
{consonne} nbConsonnes++;
{ponctuation} nbPonct++;
\$ yyterminate();
.|\n // ne rien faire
%%
main()
{
nbVoyelles = nbConsonnes = nbPonct = 0;
yylex();
printf("Il y a %d voyelles, %d consonnes et
%d signes de ponctuations.\n", nbVoyelles,
nbConsonnes, nbPonct);
}

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 14 / 16


Compilation d’un fichier (f)lex

Compilation d’un fichier (f)lex

Compilateur (f)lex
Lex <nom>.l
Flex <nom>.l

La compilation d’une source flex produit une fonction yylex().


Un appel de yylex() déclenche une analyse lexicale du flux
d’entrée.
Au cours du 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 et
sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 15 / 16


Compilation d’un fichier (f)lex

Compilation d’un fichier (f)lex

Spécifications Compilateur (f)lex


(f)lex
Lex <nom>.l
<nom>.l
Flex <nom>.l

La compilation d’une source flex produit une fonction yylex().


Un appel de yylex() déclenche une analyse lexicale du flux
d’entrée.
Au cours du 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 et
sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 15 / 16


Compilation d’un fichier (f)lex

Compilation d’un fichier (f)lex

Spécifications Compilateur (f)lex


(f)lex
Lex <nom>.l lex.yy.c
<nom>.l
Flex <nom>.l

La compilation d’une source flex produit une fonction yylex().


Un appel de yylex() déclenche une analyse lexicale du flux
d’entrée.
Au cours du 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 et
sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 15 / 16


Compilation d’un fichier (f)lex

Compilation d’un fichier (f)lex

Spécifications Compilateur (f)lex Compilateur C


(f)lex
Lex <nom>.l lex.yy.c gcc lex.yy.c -ll
<nom>.l
Flex <nom>.l gcc lex.yy.c -lfl

La compilation d’une source flex produit une fonction yylex().


Un appel de yylex() déclenche une analyse lexicale du flux
d’entrée.
Au cours du 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 et
sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 15 / 16


Compilation d’un fichier (f)lex

Compilation d’un fichier (f)lex

Spécifications Compilateur (f)lex Compilateur C


(f)lex
Lex <nom>.l lex.yy.c gcc lex.yy.c -ll a.out
<nom>.l
Flex <nom>.l gcc lex.yy.c -lfl

La compilation d’une source flex produit une fonction yylex().


Un appel de yylex() déclenche une analyse lexicale du flux
d’entrée.
Au cours du 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 et
sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 15 / 16


Compilation d’un fichier (f)lex

Compilation d’un fichier (f)lex

Étapes de compilation à travers un exemple


1 Éditer un fichier mot.lex.
2 Lancer la commande flex -o mot.c mot.lex
3 Si tout se passe bien, flex construit une source en langage C
mot.c : gcc -Wall mot.c -o cible
4 Lancer la commande cible < fichier.txt pour tester
l’exécutable cible sur le fichier.txt.

Options de compilation
-d pour un mode debug
-i pour ne pas différencier les majuscules des minuscules
-l pour avoir un comportement lex
-s pour supprimer l’action par défaut

Yousra Bendaly Hlaoui (ISITCOM) L’outil (f)lex 2011-2012 16 / 16

Vous aimerez peut-être aussi