0% ont trouvé ce document utile (0 vote)
84 vues15 pages

Introduction à Lex et Flex

Transféré par

myriamnyembo5
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)
84 vues15 pages

Introduction à Lex et Flex

Transféré par

myriamnyembo5
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

Analyseur Lexical avec

Lex et Flex (TP)


Dr Selain KASEREKA
Assistant L. MBALE

Qu’est-ce que Lex Installation de Structure de Expressions Quelques


TP
Flex Flex Flex Régulières Flex exemples
Lex / Flex
Analyseur lexical

Générateur de Générateur de code Bison Flex et Bison


Scanner C
Construit un Transforme les Compilateur de Le scanner qui
analyseur lexical expressions compilateurs découpe
à partir d’un régulières en l’expression en
ensemble de code source C. Ce token, le parser
règles d’action code est qui effectue une
décrites par des facilement analyse
expressions intégrable dans syntaxique
régulières. des applications.

sigma = gamma + theta ;

Flex : sigma , signe égal, gamma, signe plus, theta, point virgule (token)
Bison : gamma + theta est une expression affectée à sigma (Relation entre token)

2
Lex / Flex
Installation de Flex sur Linux

● sudo apt install flex ● appuyer la touche Y puis Enter

● Vérification de l’installation

3
Lex / Flex
Structure d’un fichier source flex

4
Flex routine !
Lex et Flex

5
Flex specifications !
Les trois grands bloc de Flex

Définitions et
Pattern - Actions Les sous-routines C
déclarations C
%%... %%
%{...%}

o Des commentaires
o Pattern qui est une o Contient les
/* …*/
E.R procédures et
o C code
o Action qui est fonctions C. appelées
%{ #include <stdio.h>%}
l’action associée à par les actions.
o Déclaration de var.
l’E.R o int main
int a = 145;
o p1 { action associée } o procédures, …
o Déclarations de
p2 { action associée }
substitution.

6
Flex spécifications : Exemples
Les trois grands bloc de Flex

Déclaration de Pattern Action code Sous routines C


substitution LEX

main()
{
yylex();
}

int main( void ) {


yylex() ;
printf("\nSomme
des nombres %d\nbye...\n",
total);
%% }
[0-9]+ { printf(“%s\n”, yytext); }
.|\n main(int argc, char **argv)
{} {
%% yylex();
printf("%8d%8d%8d\n", lines,
words, chars);
}

7
Flex : Expressions régulières
Syntaxe d’une E.R Flex

1. Les caractères normaux ( Qui représentent les expressions en elles-mêmes) : a, b, 1, 7, ...


2. Les métacaractères qui ont eux une signification particulière :

8
TP 1

● Donner sous lex le code qui identifie les expressions suivantes :


a. +, -, *, / (Message à afficher : opérateur arithmétique)
b. “, ‘ : (Message à afficher : apostrophe)
c. MM, MMM (Message à afficher : suite de M)
d. fgfg; fgfgfg (Message à afficher : suite de fg)
e. POLEP, O123D, MSQA1 (Message à afficher : mot de longueur 5 )
● Donner sous LEX un code permettant de reconnaître
a. un nombre entier et un réel.
b. Un identificateur qui commence obligatoirement par une majuscule suivie d’aumoins
un caractère alphanumérique dans le cas contraire, afficher erreurn°1.
c. Donner un code LEX qui permet de reconnaitre les E.R suivantes:
i. UNH
ii. c23
iii. t521sd
iv. pod_74_tr

9
Exercices
Exemple

● Résultats
● Soit le code suivant :

/*lex code to determine whether input is an identifier or


not*/
%{
#include <stdio.h>
%}
/*rule section*/
%%
^[a-zA-Z_] [a-zA-Z0-9_]* {printf("Valid Identifier");}
^[^a-zA-Z_] [a-zA-Z0-9_]* {printf("Invalid Identifier");}
.;
%%

● Exécution du programme
a. sudo flex nom_programme.l ou .lex
b. sudo cc lex.yy.c -lfl
c. ./a.out

10
Exercices
Flex et E.R

● Écrire un programme flex permettant de retourner un message selon qu’il s’agit d’une
consonne ou d’une voyelle.

● Que fait ce programme ? Expliquez !

11
Exercices
Flex et E.R

● Écrire un programme qui lit un fichier passé en argument et qui écrit "oui" sur le fichier
standard de sortie si il contient 4 lignes consécutives contenant les mots "prof" et "eleve".
Autrement, il écrit "non".

exemples:
aaa prof aaa eleve aaa\n −→ oui
aaa\n aaa prof aaa\n\n\n eleve aaa\n aaa\n −→ oui
aaa\n aaa eleve aaa\n\n\n prof aaa\n aaa\n −→ oui
aaa\n aaa prof aaa\n\n\naaa\n eleve aaa\n −→ non
aaa eleve aaa prof aaa\n −→ oui

12
Exercices
Flex et E.R

● Écrire un programme qui réécrit son argument après l’avoir passé dans le filtre suivant:
• Le caractère ’%’ est doublé si il n’est pas suivi du caractère ’%’.
• Les séquences "\\" sont remplacées par le caractère ’\’.
• Les séquences "\b", "\n", \f" sont remplacées par les caractères BEL
(0x7), LF (0xa) et FF (0xc).

exemples:

aa%bb%%cc%%%dd → ’a’ ’a’ ’%’ ’%’ ’b’ ’b’ ’%’ ’%’ ’%’
’c’ ’c’ ’%’ ’%’ ’%’ ’%’ ’d’ ’d’
\a\b\c\nd\f → ’\’ ’a’ 0x07 ’\’ ’c’ 0x0a ’d’ 0x0c
\a\b\c\\nd\f → ’\’ ’a’ 0x07 ’\’ ’c’ ’\’ ’n’ ’d’ 0x0c

13
Travail Pratique
Flex et E.R

● Écrire un programme qui lit le fichier standard d’entrée et écrit sur le fichier standard de sortie
et qui implante les filtres suivants:

○ filtre a) Il passe en majuscule la première lettre qui suit un ’.’, un ’!’ ou un ’?’ et séparée
de ce caractère par au moins un espace. Un espace est une suite d’au moins 1
caractère parmi les caractères blanc, tabulation et fin de ligne.

○ filtre b) Il exécute le filtre a) si et seulement si le caractère de ponctuation n’est pas


précédé du caractère ’\’. Dans ce cas le ’\’ n’est pas imprimé.

○ filtre c) Il insère un blanc derrière les caractères de ponctuation ’.’, ’!’ et ’?’ suivis d’une
lettre. De plus si la lettre est une minuscule, il la passe en majuscule.

○ filtre d) Il n’effectue pas le filtre c) si le le caractère de ponctuation est


précédé de ’\’. Dans ce cas le ’\’ n’est pas imprimé.

14
Travail Pratique
Flex et E.R

1. Ecrire un programme flex qui permet de reconnaître et compter les différents mots clés des
langages de programmation suivant : Python, C, C++, Java, Ruby, Pascal
● Qui sont contenu dans un texte
● Qui Qui sont dans un fichier .py

2. Ecrire un Programme Flex qui reconnaît l’équivalent des mots clés python dans la langue swahili.

3. Ecrire un Programme Flex qui reconnaît les mots clés de votre propre langage de programmation.

15

Vous aimerez peut-être aussi