Chapitre3 Compilationflex
Chapitre3 Compilationflex
Chapitre3 Compilationflex
L’outil (f)lex
Yousra Hlaoui
FST-IF4
2016-2017
Yousra Hlaoui
FST-IF4
2016-2017
1 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.
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
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
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
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
Présentation générale
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
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 Hlaoui (FST-IF4) L’outil (f)lex 2016-2017 8 / 18
Structure du fichier de spécification (f)lex
Description de la structure
La section du bloc principal et des fonctions auxiliaires est
facultative.
Cette section contient :
les routines C définies par l’utilisateur,
une fonction main(), si celle par défaut ne convient pas.
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.
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 ).
Exemple
Cet exemple compte le nombre de voyelles, consonnes et
caractères de ponctuations d’un fichier texte.
Code
%option noyywrap
%{
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);
}
Compilateur (f)lex
Lex <nom>.l
Flex <nom>.l
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 Hlaoui (FST-IF4) L’outil (f)lex 2016-2017 18 / 18