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