Université de BOUIRA
Département d’informatique
Support pour L3
Compilation
CHAPITRE II : ANALYSE
LEXICALE
Outil Flex
HAMID Rabah
[email protected]
2018/2019 3° eme ANNEE SYSTÈME
INFORMATIQUE
Références
Support de cours Mr HAMDANI Université de tizi ouzou
Support de cours Compilation Anne BERRY
A. Aho, M. Lam, R. Sethi et J. Ullman, "Compilateurs: principe, techniques et
outils", Pearson Education.
R. Wilhelm et D. Maurer, "Les compilateurs: théorie, construction,
génération", Masson
Cours de techniques de compilation, J.Bonneville Documentation Lex-Flex
http://users.polytech.unice.fr/~dedale/cours/compilation/Lex-HowTo/
Cours de compilation, Luc Maranget
http://www.enseignement.polytechnique.fr/profs/informatique/
Luc.Maranget/compil/poly/index.html
4- Cours de compilation, ENS de Lyon, Christophe Alias, cours, TD, TP,
examens et partiels
http://perso.ens-lyon.fr/christophe.alias/compilation_ens.html
Support de cours A. DARGHAM Faculté des Sciences Oujda
ANALYSE LEXICALE OUTIL FLEX
Sommaire :
Description de l’outil Flex
Format d’un programme Flex
Les motifs
Fonctionnement des analyseurs
Flex
Les actions prédéfinies
Étude de quelques exemples
Exercices corrigés
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil Flex
• Flex (Fast Lexer) est un compilateur pour la
génération automatique d’analyseurs
lexicaux.
• 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 ». Ce dernier doit
être compilé à l’aide d’un
compilateur C (gcc, par exemple) pour obtenir le code
exécutable de l’analyseur lexical.
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil 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.
Procédure :
– On crée le fichier source avec un
Étapes de développement éditeur de
d’un analyseur lexical texte.
avec Flex – On compile le fichier source par :
• flex scan.flex
ANALYSE LEXICALE OUTIL FLEX
rmat d’un programme Flex
Le contenu d’un fichier Flex comprend 3 sections séparées par
une ligne contenant le symbole
Section « %% » :
des définitions
%%
Section des règles
%%
Section du code
complémentaire
Section des définitions :
– Contient la déclaration des variables
et des fonctions globales, des
inclusions de fichiers et des
expressions régulières.
– Les inclusions de fichiers et les
déclarations des variables et des
fonctions globales sont mises entre les
symboles « %{ » et « %} » (chacun
ANALYSE LEXICALE OUTIL FLEX
rmat d’un programme Flex
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.
Exemple :
L [a-zA-Z]
D [0-9]
U "_"
Ident ({L}|{U})({L}|{D}|{U})*
ANALYSE LEXICALE OUTIL FLEX
rmat d’un programme Flex
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ée à cette action.
– Les règles sont toutes écrites entre les deux symboles « %% ».
ANALYSE LEXICALE OUTIL FLEX
rmat d’un programme Flex
Section du code complémentaire :
– Sera copiée telle quelle dans le fichier « lex.yy.c ».
– Contient des routines pouvant être appelées par l’analyseur lexical.
– Peut aussi contenir une fonction « main ».
– Section optionnelle : si elle est absente, le second symbole « %% » peut
être omis.
Exemple (complet) :
ANALYSE LEXICALE OUTIL FLEX
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).
ANALYSE LEXICALE OUTIL FLEX
Les motifs
•\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.
ANALYSE LEXICALE OUTIL FLEX
ctionnement des analyseurs Flex
ANALYSE LEXICALE OUTIL FLEX
ctionnement des analyseurs Flex
ANALYSE LEXICALE OUTIL FLEX
ctionnement des analyseurs Flex
ANALYSE LEXICALE OUTIL FLEX
Les motifs
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil Flex
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil Flex
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil Flex
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil Flex
ANALYSE LEXICALE OUTIL FLEX
escription de l’outil Flex