Vous êtes sur la page 1sur 5

COMPTE RENDU N 3

TP TLC: Gnrateurs danalyseur lexical :Outil


flex

Groupe: 3MI3

But:
Notre but est de compiler un fichier source , excuter en passant comme argument un fichier
texte(pour lexercice 1) et un fichier source (pour lexercice 2) :

Exercice1 :
Il reprsente un fichier source quil faut le compiler et lexcuter en passant comme argument
un fichier texte.
1er cas : Afficher seulement le nombre de lignes.
//user1]$ vi exvend.l pour crier un fichier
Le fichier source :
%{
Int nbligne=0 ;
%}
Chiffre
Entier

[0-9]
{chiffre}+

%%
\n nbligne++ ;
{entier}
//afficher
%%
int main()
{

printf(\n je censure les entiers ) ; //faire censurer les entiers sans les

yylex() ;
printf(#de lignes = %d,nbligne) ; //afficher le nombre de lignes
}
//echap :wq pour sauvegarder et sortir
//pour compiler et excuter
flex exvend.l
cc lex.yy.c ll
./a.out exvend.c
//puis saisie le fichier texte
Exemple : a2aa2b3
Pour afficher le nombre de lignes il faut taper : Ctrl+D
Aprs lexcution il affiche : #de lignes=1
2eme cas : Affiche les entiers et le nombre de lignes .
Le fichier source :
%{
Int nbligne=0 ;
%}
Chiffre
Entier

[0-9]
{chiffre}+

%%
\n nbligne++ ;
{entier}

printf(\n je censure lentier : %s,yytext) ; //avec yytext est un tableau

//de caractre rempli par des entiers dun fichier de texte donn en entre
%%
int main()
{
yylex() ;
printf(#de lignes = %d,nbligne) ;
}
//echap :wq pour sauvegarder et sortir

// compile et excute, puis crive un fichier texte


Exemple : hamdi2zrelli24b3
//pour afficher le nombre de lignes il faut taper : Ctrl+D
Aprs lexcution il affiche :
je censure lentier :2
je censure lentier :24
je censure lentier :3

Exercice2 :
Il reprsente un scanner qui compte le nombre de lignes et de mots dun fichier de texte
//user1]$ vi exvend2.l pour crier un fichier appelant exvend2
Le fichier est :
%{
int nbligne =0 ;
int nbmot =0 ;
%}
Caractre [^.,:;! ?\n\t]
mot {caractre}+
%%
\n nbligne++ ;
{mot} nbmot++ ;
%%
int main()
{
yylex() ;
printf (#de lignes = %d,nbligne) ;
printf (#de mots = %d ,nbmot) ;
}//fin de fichier
//pour compiler et excuter

flex exvend.l
cc lex.yy.c ll
./a.out exvend1.c
//puis crivez le fichier texte
Exemple : tlc,outil ;flex!aprs
//pour afficher le nombre de lignes et le nombre de mots il faut taper : Ctrl+D
Dans cet exemple en a un ligne et quatre mots
Aprs lexcution il affiche :
#de lignes =1
#de mots =4

Exercice3 :
%{
#include<math.h>
%}
DIGIT [0-9]
ID

[a-z][a-z 0-9]*

%%
{DIGIT}+

{
printf(un entier :%s (%d)\n,yytext,atoi( yytext)) ;
}

{DIGIT}+. {DIGIT}*
printf(un rel :%s (%g)\n,yytext,atof( yytext)) ;
}
if|then|begin|end|procedure|function
printf(un mot cl:%s\n,yytext);
}
{ID}

printf(un identificateur : %s\n,yytext) ;

+|-|*|/ printf(un oprateur :%s\n,yytext) ;


{[^}\n]*}
[\t\n]+

/*commentaires*/
/*espaces*/

printf(caractere non reconnu :%s\n,yytext) ;


%%

main(argc,argv)
int argc ;
char **argv ;
{
++argv, --argc ; /* ignorer le nom du programme */
if(argc>0)
yyin =fopen(argv[0], r) ;
else
yyin =stdin;
yylex();
}

Vous aimerez peut-être aussi