TP de compilation : une solution de l'exercice 4 du TP 1

Rappel : un mot est bien parenthésé si et seulement si :
– il contient autant de parenthèses ouvrantes que de parenthèses fermantes, et
– tout préfixe de ce mot (ce mot compris donc) ne contient pas plus de fermantes que d'ouvrantes.
 
%{
int ouvr=0;
int ferm=0;
int erreur=0;
%}
%%
^\     {printf("\n"); return 0;}
"("    {ECHO; ouvr++;}
")"    {ECHO; ferm++; if (ferm>ouvr) {erreur++;}}
\n     { printf(" ligne ");
         if ((ferm==ouvr)&&(erreur==0)) printf("bien");
         else printf("mal");
         printf(" parenthésée\n");
         ouvr=0; ferm=0; }

N.B. Un analyseur plus brutal s'arrêterait dès que erreur>0 avec un message d'erreur. Cet analyseur par contre peut distinguer deux types d'erreurs en continuant l'analyse jusqu'à la fin.
© 2000, 2017 – A. Sigayret