Vous êtes sur la page 1sur 14

Université Abdelmalek Essaadi

Ecole Nationale des Sciences Appliquées Al-Hoceima

Flex
Flex (Fast Lexical Analyzer Generator)
>> Realisée par : Siham Kalach
>> Encadrée par : Pr. Mohamed CHERRADI
>> Première Année TDAI-1

Année Universitaire : 2023/2024


Introduction à l'analyse lexicale:

L'analyse lexicale est la première


phase du compilateur, également
connue sous le nom de scanner. Elle
convertit le programme d'entrée de
haut niveau en une séquence de
tokens .

La sortie est une séquence de tokens


qui est envoyée à l'analyseur
syntaxique pour une analyse
syntaxique.
Qu'est-ce qu’un token ?
Un token lexical est une séquence de caractères pouvant être traitée comme une unite dans la grammaire des
langages de programmation. Exemples de tokens:
• Tokens de type (id, nombre, réel, ...)
• Tokens de ponctuation (SI, void, return, ...)
• Tokens alphabétiques (mots-clés)
Exemples :
- Les mots clés : for , while , if …
- Les opérateurs : ‘ + ‘ , ‘ ++ ‘ …
Les séparateurs : ‘ ‘ , ‘ ; ‘ …
Comment fonctionne l'analyseur lexical :

• Prétraitement de l'entrée : Cette étape consiste à nettoyer le texte


d'entrée et à le préparer pour l'analyse lexicale. Cela peut inclure la
suppression des commentaires, des espaces blancs et d'autres
caractères non essentiels du texte d'entrée.
• Tokenisation : Il s'agit du processus de découpe du texte d'entrée en
une séquence de jetons. Cela se fait généralement en faisant
correspondre les caractères du texte d'entrée avec un ensemble de
motifs ou d'expressions régulières définissant les différents types de
jetons.
• Classification des Tokens : À cette étape, l'analyseur lexical détermine le type
de chaque token. Par exemple, dans un langage de programmation,
l'analyseur lexical pourrait classer les mots-clés, les identifiants, les
opérateurs et les symboles de ponctuation en tant que types de tokens
distincts.
• Validation des Tokens : À cette étape, l'analyseur lexical vérifie que chaque
token est valide selon les règles du langage de programmation. Par exemple, il
pourrait vérifier qu'un nom de variable est un identifiant valide, ou qu'un
opérateur a la syntaxe correcte.
• Génération de la sortie : À cette étape finale, l'analyseur lexical génère la
sortie du processus d'analyse lexicale, qui est généralement une liste de
tokens. Cette liste de jetons peut ensuite être transmise à la prochaine étape
de compilation ou d'interprétation.
Flex (Fast Lexical Analyzer Generator )
Definition : Flex (Fast Lexical Analyzer Generator) est un outil de
génération d'analyseurs lexicaux. Il permet de créer automatiquement
des analyseurs lexicaux pour les langages de programmation en
fournissant une spécification déclarative des règles de reconnaissance
des lexèmes. L'utilisation de Flex simplifie le processus d'analyse
lexicale dans la chaîne de compilation en générant du code source C à
partir des spécifications, permettant ainsi de reconnaître et de traiter
les unités lexicales du langage source de manière efficace.
Installer Flex sur Ubuntu:
L'image donnée décrit comment Flex est utilisé:

Étape 1 : Un fichier d'entrée décrivant l'analyseur lexical à générer,nommé lex.l,


est rédigé en langage Lex.Le compilateur Lex transforme lex.l en un programme en langage C, contenu
dans un fichier toujours nommé lex.yy.c.
Étape 2 : Le compilateur C compile le fichier lex.yy.c en un fichier exécutable appelé a.out.
Étape 3 : Le fichier de sortie a.out prend un flux de caractères en entrée et produit un flux de jetons.
Structure de programme:
Dans le fichier d'entrée, il y a 3 sections :
1- Section de Définition : La section de définition contient la déclaration de variables, les définitions régulières,
les constantes manifestes. Dans la section de définition, le texte est encadré par les accolades « %{ %} ». Tout
ce qui est écrit entre ces accolades est copié directement dans le fichier lex.yy.c.
Syntaxe :

2-Section des Règles : La section des règles contient une série de règles sous la forme : motif action, où le
motif doit être ininterrompu et l'action commence sur la même ligne entre des accolades {}. La section des
règles est encadrée par «%% %%».
Syntaxe :

3-Section du Code Utilisateur : Cette section contient des instructions en langage C et des fonctions
supplémentaires. Nous pouvons également compiler ces fonctions séparément et les charger avec l'analyseur
lexical.
Comment exécuter le programme :
Pour exécuter le programme, il doit d'abord être enregistré avec l'extension .l ou .lex. Exécutez les commandes
suivantes dans le terminal pour exécuter le fichier du programme.

Étape 1 : flex nom_fichier.l ou flex nom_fichier.lex en fonction de l'extension avec laquelle le fichier est enregistré.
>> dans notre exemple est : exemple.l
Étape 2 : gcc lex.yy.c
Étape 3 : ./a.out
Étape 4 : Fournir l'entrée au programme si cela est nécessaire.
Exemple : compter le nombre de caractères dans une chaîne de caractères
Exemple : compter le nombre de caractères dans une chaîne de caractères ( la suite )
La sortie de programme :
FIN

Vous aimerez peut-être aussi