Analyseur Lexical
Durée : 3 heures.
L'objectif de cette feuille de travaux pratiques
est d'écrire un programme pour calculer la distribution
des mots dans un fichier texte. Il s'agit de gérer une liste
de chaines , ordonnée par ordre alphabétique et balisée
par deux sentinelles. La commande unix flex sera
utilisée pour extraire les mots du fichiers texte.
Mots clefs : la commande flex, liste chaînée, fonction de hachage.
[ 1 ] Analyseur lexical.
int cpt=0, mot=0, ligne=0, somme=0;
int ajoute(int s, char *str)
{
return( atoi(str)+s);
}
%}
CHIFFRE [0-9]
LETTRE [A-Za-z]
NOMBRE {CHIFFRE}+
MOT {LETTRE}+
%%
{NOMBRE} somme = ajoute(somme, yytext);
{MOT} mot++;
\n ligne++;
. cpt++;
%%
int main(int argc, char *argv[])
{
printf("\nWelcome!\n");
++argv, --argc;
if ( argc > 0 )
yyin = fopen(
argv[0], "r" );
else
yyin = stdin;
yylex();
printf("\nNombre de mots lus :%d", mot);
printf("\nNombre de lignes :%d", ligne);
printf("\ncaracteres ignores :%d", mot);
printf("\nsomme des nombres :%d", somme);
printf("\nBye...\n");
}
prog.x: prog.lex
$(LL) -oprog.c prog.lex
$(CC) -o prog.x prog.c
-lfl