Está en la página 1de 24

Chapitre III Loutil (f)lex

erale Presentation gen Structure du chier de specication (f)lex ` Expressions reguli eres (f)lex enies Variables et fonctions pred Exemple dun chier (f)lex Compilation dun chier (f)lex

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

1 / 16

erale Presentation gen

erale Presentation gen


Loutil (f)Lex a ` construire des AL a ` partir de notations (f)lex est un outil destine ` speciques basees sur des expressions regulieres.
des modeles ` accepte en entree sous forme de denitions ` . reguli eres produit un programme ecrit dans un langage de haut niveau (langage C) : Analyseur Lexical.
lAL reconna lexicales entrees. Une fois compile, t les unites

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

2 / 16

erale Presentation gen

erale Presentation gen


Loutil (f)Lex a ` construire des AL a ` partir de notations (f)lex est un outil destine ` speciques basees sur des expressions regulieres.
des modeles ` accepte en entree sous forme de denitions ` . reguli eres produit un programme ecrit dans un langage de haut niveau (langage C) : Analyseur Lexical.
lAL reconna lexicales entrees. Une fois compile, t les unites
Code source a := b + c + d

Analyseur Lexical Units lexicales

Outil Lex

modles Dfinitions Rgulires

id1 := id2 + id3 + id4

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

2 / 16

erale Presentation gen

erale Presentation gen


Loutil (f)Lex a ` construire des AL a ` partir de notations (f)lex est un outil destine ` speciques basees sur des expressions regulieres.
des modeles ` accepte en entree sous forme de denitions ` . reguli eres produit un programme ecrit dans un langage de haut niveau (langage C) : Analyseur Lexical.
lAL reconna lexicales entrees. Une fois compile, t les unites
Code source a := b + c + d

Analyseur Lexical Units lexicales

Outil Lex

modles Dfinitions Rgulires

id1 := id2 + id3 + id4

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

2 / 16

erale Presentation gen

erale Presentation gen


Loutil (f)Lex a ` construire des AL a ` partir de notations (f)lex est un outil destine ` speciques basees sur des expressions regulieres.
des modeles ` accepte en entree sous forme de denitions ` . reguli eres produit un programme ecrit dans un langage de haut niveau (langage C) : Analyseur Lexical.
lAL reconna lexicales entrees. Une fois compile, t les unites
Code source a := b + c + d

Analyseur Lexical Units lexicales

Outil Lex

modles Dfinitions Rgulires

id1 := id2 + id3 + id4

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

2 / 16

erale Presentation gen

erale Presentation gen


Loutil (f)Lex a ` construire des AL a ` partir de notations (f)lex est un outil destine ` speciques basees sur des expressions regulieres.
des modeles ` accepte en entree sous forme de denitions ` . reguli eres produit un programme ecrit dans un langage de haut niveau (langage C) : Analyseur Lexical.
lAL reconna lexicales entrees. Une fois compile, t les unites
Code source a := b + c + d

Analyseur Lexical Units lexicales

Outil Lex

modles Dfinitions Rgulires

id1 := id2 + id3 + id4

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

2 / 16

erale Presentation gen

erale Presentation gen


Le chier de specications (f)lex Le chier de specications (f)lex contient simultanement :
` des expressions reguli eres ` des actions ou regles de traduction.

Lexecutable obtenu
1

caractere ` par caractere ` jusqua ` ce quil trouve le lit le texte dentree qui correspond a ` lune des plus long motif du texte dentree ` expressions reguli eres. ` Dans le cas ou reconnaissent le motif, cest la ` plusieurs regles ` regle ` (de haut en bas) qui lemporte : premiere rencontree
Il execute alors laction correspondante.

` : Dans le cas ou ne peut etre selectionn ee ` aucune regle


` copier le caractere ` du chier dentree en laction par defaut consiste a sortie.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

3 / 16

Structure du chier de specication (f)lex

Structure dun chier Lex

Specication Lex %{ d eclaration (en C) de variables et constantes %} d eclaration de d efinitions r eguli` eres %% r` egles de traduction %% bloc principal et fonctions auxiliaires

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

4 / 16

Structure du chier de specication (f)lex

Exemples de chier Lex


Exemple 1 : reconna t les nombres binaires mais afche tout binaire (0|1)+ %% {binaire} printf("ceci est un nombre binaire!\n");

Exemple 2 : afche que les nombres binaires reconnus binaire (0|1)+ %% {binaire} printf("ceci est un nombre binaire %s!\n", yytext); . // Rien!!!

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

5 / 16

Structure du chier de specication (f)lex

Specication du chier (f)lex


Description de la structure ` permet dassocier un nom a ` une Une denition reguli ere ` (f)lex et de se ref erer expression reguli ere par la suite (dans la ` ` ce nom plutot qua ` lexpression reguli ` section des regles) a ere. ` Les regles de traduction sont des suites dinstructions de la forme :
exp1 action1 exp2 action2 . . .

` Les expi sont des expressions reguli eres (f)lex et doivent commencer en colonne 0. Les actioni sont des blocs dinstructions en C : une seule instruction C ou une suite dinstructions entre { et } qui doivent commencer sur la meme ligne que lexpression correspondante.
Yousra Bendaly Hlaoui (ISITCOM) Loutil (f)lex 2011-2012 6 / 16

Structure du chier de specication (f)lex

Specication du chier (f)lex

Description de la structure La section du bloc principal et des fonctions auxiliaires est facultative. tem Cette section contient :
les routines C denies par lutilisateur, une fonction main() si celle par defaut ne convient pas.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

7 / 16

` Expressions reguli eres (f)lex

` Les expressions reguli eres (f)lex

Description ` (f)lex se compose : Une expression reguli ere


` de caracteres normaux, ` de meta-caract eres qui ont une signication speciale :
$, , [, ], {, }, <, >, +, , , /, |, ?, .

Attention (f)lex fait la difference entre les minuscules et les majuscules.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

8 / 16

` Expressions reguli eres (f)lex

` Expression reguli eres (f)lex


Expression c \c s r1 r2 . $ [s] Reconna t ou accepte ` qui nest pas tout caractere ` un meta-carat ere si c nest pas une lettre miniscule, ` litteralement le caratere ` la cha ne de caracteres s litteralement r1 suivie de r2 ` sauf retour a ` la ligne tout caractere ` de comme premier caractere lexpression, signie debut de la ligne ` de comme dernier caractere lexpression, signie n de la ligne ` constituant nimporte quel caractere la chaine s
Loutil (f)lex

Exemple a \+ abc + ab a.b abc abc $ [ab]

Yousra Bendaly Hlaoui (ISITCOM)

2011-2012

9 / 16

` Expressions reguli eres (f)lex

` Expression reguli eres (f)lex-Suite


[s] r r+ r? rm r m ,n r1 |r2 r1 /r2 (r ) \n \t {} << EOF >> ` sauf ceux nimporte quel caractere constituant la chaine s 0 ou plusieurs occurences de r 1 ou plusieurs occurences de r 0 ou 1 occurence de r m occurences de r ` n occurences de r de m a r1 ou r2 r1 si elle est suivie de r2 r ` retour a ` la ligne caractere ` tabulation m caratere erence ` une pour faire ref a ` denition reguli ere Fin de chier(Flex)
Loutil (f)lex

[ab] a a+ a? a5 a5,9 a|b ab/cd (a|b)

{mot } << EOF >>


2011-2012 10 / 16

Yousra Bendaly Hlaoui (ISITCOM)

` Expressions reguli eres (f)lex

` Expression reguli eres (f)lex

es Propriet e comme (x )|(y (z )). x |yz est interpret e avec ex comme ab(c {1, 3}). abc {1, 3} est interpret e avec ex comme (x |y ). x |y est interpret

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

11 / 16

enies Variables et fonctions pred

enies Variables et fonctions pred


Fonctions char yytext[] int yyleng() int yylex() Description ` tableau de caracteres qui contient la cha ne qui a et e acceptee. dentree longueur de cette cha ne lance lanalyseur et appelle yywrap() en n de ot dentree. Elle ne fait toujours appelee rien par defaut, mais lutilisateur peut la redenir dans la section des fonctions auxiliaires. retourne 0 si lanalyse doit se poursuivre sur un et 1 sinon. autre chier dentree ` yylex(). contient par defaut juste un appel a Lutilisateur peut la redenir dans la section des fonctions auxiliaires. ` dans le ot dentree remet le caractere fonction qui stoppe lanalyseur
Loutil (f)lex 2011-2012 12 / 16

int yywrap()

int main() unput(char c) yyterminate()

Yousra Bendaly Hlaoui (ISITCOM)

Exemple dun chier (f)lex

Exemple dun chier (f)lex


Exemple Cet exemple compte le nombre de voyelles, consonnes et ` caracteres de ponctuations dun chier texte. Code %option noyywrap %{ int nbVoyelles, nbConsonnes, nbPonct; %} consonne [b-df-hj-np-xz] ponctuation [,;:?!/.] %% [aeiouy] nbVoyelles++;
Yousra Bendaly Hlaoui (ISITCOM) Loutil (f)lex 2011-2012 13 / 16

Exemple dun chier (f)lex

Exemple dun chier (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)

Loutil (f)lex

2011-2012

14 / 16

Compilation dun chier (f)lex

Compilation dun chier (f)lex

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

La compilation dune source ex produit une fonction yylex(). Un appel de yylex() declenche une analyse lexicale du ux dentree. ` Au cours du traitement, lanalyseur tente de satisfaire la premiere ` regle, puis la seconde etc... il est charge dans la variable yytext et Quand un motif est detect e, sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

15 / 16

Compilation dun chier (f)lex

Compilation dun chier (f)lex


Spcifications (f)lex <nom>.l

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

La compilation dune source ex produit une fonction yylex(). Un appel de yylex() declenche une analyse lexicale du ux dentree. ` Au cours du traitement, lanalyseur tente de satisfaire la premiere ` regle, puis la seconde etc... il est charge dans la variable yytext et Quand un motif est detect e, sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

15 / 16

Compilation dun chier (f)lex

Compilation dun chier (f)lex


Spcifications (f)lex <nom>.l

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

La compilation dune source ex produit une fonction yylex(). Un appel de yylex() declenche une analyse lexicale du ux dentree. ` Au cours du traitement, lanalyseur tente de satisfaire la premiere ` regle, puis la seconde etc... il est charge dans la variable yytext et Quand un motif est detect e, sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

15 / 16

Compilation dun chier (f)lex

Compilation dun chier (f)lex


Spcifications (f)lex <nom>.l

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

Compilateur C gcc lex.yy.c -ll gcc lex.yy.c -lfl

La compilation dune source ex produit une fonction yylex(). Un appel de yylex() declenche une analyse lexicale du ux dentree. ` Au cours du traitement, lanalyseur tente de satisfaire la premiere ` regle, puis la seconde etc... il est charge dans la variable yytext et Quand un motif est detect e, sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

15 / 16

Compilation dun chier (f)lex

Compilation dun chier (f)lex


Spcifications (f)lex <nom>.l

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

Compilateur C gcc lex.yy.c -ll gcc lex.yy.c -lfl a.out

La compilation dune source ex produit une fonction yylex(). Un appel de yylex() declenche une analyse lexicale du ux dentree. ` Au cours du traitement, lanalyseur tente de satisfaire la premiere ` regle, puis la seconde etc... il est charge dans la variable yytext et Quand un motif est detect e, sa longueur dans yyleng.

Yousra Bendaly Hlaoui (ISITCOM)

Loutil (f)lex

2011-2012

15 / 16

Compilation dun chier (f)lex

Compilation dun chier (f)lex


` travers un exemple Etapes de compilation a
1 2 3

Editer un chier mot.lex. Lancer la commande flex -o mot.c mot.lex Si tout se passe bien, ex construit une source en langage C mot.c : gcc -Wall mot.c -o cible Lancer la commande cible < fichier.txt pour tester lexecutable cible sur le fichier.txt.

Options de compilation -d pour un mode debug -i pour ne pas differencier les majuscules des minuscules -l pour avoir un comportement lex -s pour supprimer laction par defaut
Yousra Bendaly Hlaoui (ISITCOM) Loutil (f)lex 2011-2012 16 / 16