0% ont trouvé ce document utile (0 vote)
160 vues6 pages

Flex

Ce document décrit la structure d'un analyseur lexical basé sur l'outil Flex. Il explique les différentes parties d'un fichier Flex et les concepts clés comme les expressions régulières, les règles et les actions associées.

Transféré par

neziha
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
160 vues6 pages

Flex

Ce document décrit la structure d'un analyseur lexical basé sur l'outil Flex. Il explique les différentes parties d'un fichier Flex et les concepts clés comme les expressions régulières, les règles et les actions associées.

Transféré par

neziha
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Construction d’un analyseur lexical basée sur

un outil générateur FLex

Neziha Jaouedi
Définition

FLex «fast lexical analyzer generator » est un langage de spécification


d’analyseurs lexicaux.

• Un programme en FLex définit un ensemble de schémas qui sont


appliqués à un flux textuel.
• Chaque schéma est représenté sous la forme d’une expression
régulière.
• Lorsque l’application d’un schéma réussit, les actions qui lui sont
associées sont exécutées.
• L’ exécutable FLex permet de transformer un programme en FLex
en un programme en C qui définit la fonction yylex(void) qui
constitue l’analyseur lexical.
Structure d’un fichier FLex

%{
Partie 1 : déclarations pour le compilateur C
%}
Partie 2 : définitions régulières
%%
Partie 3 : règles
%%
Partie 4 : fonctions C supplémentaires
Partie 1: se compose de déclarations qui seront simplement recopiées au début du
fichier produit.
On y trouve souvent une directive #include qui produit l’inclusion du fichier d’en
tête contenant les définitions des codes des unités lexicales.
Partie 2: Les définitions régulières sont de la forme identificateur expressionRégulière
où identificateur est écrit au début de la ligne et séparé de expressionRégulière par
des blancs.
lettre [A-Za-z]
chiffre [0-9]

Les identificateurs ainsi définis peuvent être utilisés dans les règles et dans les
définitions suivantes ; il faut alors les encadrer par des accolades.
lettre [A-Za-z]
chiffre [0-9]
alphanum {lettre}|{chiffre}
Partie 3: Les règles sont de la forme
expressionRégulière { action}

expressionRégulière est écrit au début de la ligne.
action est un morceau de code C, qui sera recopie tel quel, au bon
endroit, dans la fonction yylex.

A la fin de la reconnaissance d’une unité lexicale, la chaîne reconnue


est la valeur de la variable yytext de type char *.
La variable yylen indique la longueur de l’unite lexicale contenue ´
dans yytext.

(+|-)?[0-9]+ {yylval = atoi(yytext); return NOMBRE;}

Partie 4: se compose de fonctions C qui seront simplement recopiées à


la fin du fichier produit.
Quelques variables importantes
 char *yytext chaine de caractères dans laquelle est stockée la
suite de caractères qui correspond à l’expression régulière
d’une règle.
 int yyleng longueur de la chaine de caractères stockée dans
yytext.
 int yylval valeur associée a une unité lexicale.
 FILE *yyin flux dans lequel yylex lit le texte a analyser.
Lorsque yylex() atteint la fin du flux yyin, il appelle la fonction
yywrap qui renvoie 0 ou 1.
 Si la valeur renvoyée est 1, le programme s’arrête.
 Si la valeur renvoyée est 0, l’analyseur lexical suppose que
yywrap a ouvert un nouveau fichier en lecture et le traitement
de yyin continue.

Vous aimerez peut-être aussi