TP de compilation : une solution de l'exercice 2 du TP 3
 
%{
int nmaj=0;
int nmin=0;
%}
%s tiret
%s anomalie
%%
^\n                 {return 0;}
<INITIAL>"-"        { BEGIN(tiret); nmaj=0; nmin=0; }
<INITIAL>[A-Za-z]   ;
<INITIAL>.          {BEGIN(anomalie);}
<tiret>"-"          {if ((nmin%2!=0) || (nmaj%2!=0)) BEGIN(anomalie);
                     nmaj=0; nmin=0;}
<tiret>[A-Z]        {nmaj++;}
<tiret>[a-z]        {nmin++;}
<tiret>.            {BEGIN(anomalie);}
<anomalie>.         ;
<INITIAL,tiret>\n   { BEGIN(INITIAL); nmaj=0; nmin=0; printf("mot accepté\n"); }
<anomalie>\n        {BEGIN(INITIAL); nmaj=0; nmin=0; printf("mot refusé\n"); }

© 2000, 2017 – A. Sigayret