TP de compilation : une solution de l'exercice 1 du TP 2
N.B. On a défini ici des mots d'au plus 10 lettres (borne arbitraire),
yytext étant déclaré comme un tableau de caractères dans cette version de Lex.
L'initialisation de la variable mots
assure
que le pointeur correspondant existe. Pour gérer un dépassement de
borne (plus de 10 caractère dans yytext), il faudra tenir compte du
comportement du C (pas toujours cohérent !) dans la gestion des types char*
et char[].
Fin du texte indiqué par un point
%{
// d'après Hervé PROT & Guillaume HARRY,
Maitrise d'informatique 2000-2001
#include <string.h>
char mot[10];
%}
%%
"."
{return 0 ;}
[A-Za-z]+ {if(strcmp(mot,yytext)!=0) ECHO; strcpy(mot,yytext);}
.|\n {ECHO ;}
%%
main() {
mot[0]='\0';
yylex() ;
}
Fin du texte par une ligne non terminée par "//"
%{
#include <string.h>
char mot[50];
%}
%%
"//"\n {printf("\n");}
[A-Za-z]+ {if(strcmp(mot,yytext)!=0) ECHO; strcpy(mot,yytext);}
. {ECHO ;}
\n
{ECHO; return 0;}
%%
main() {
mot[0]='\0';
yylex() ;
}
© 2000, 2017 – A. Sigayret & al.