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.