TP de compilation : une solution de l'exercice 4 du TP 2
Comme pour l'exercice correspondant du TP 1, cette version simplifiée ne gère
que trois codons (Leucine, Phénylalanine, Sérine). Dans cette solution, le
flux d'entrée est consommé caractère par caractère (et pas trois par trois)
jusqu'à trouver un codon START ou une fin de ligne. Cet analyseur sait
aussi reconnaitre un nombre incorrect (non multiple de trois) de bases
après START.
%{
int t=0;
%}
start [aA][uU][gG]
stop [uU][aAgG][aAgG]
leu ([cC][uU][aAgGcCuU])|([uU][uU][aAgG])
phe [uU][uU][uUcC]
ser ([uU][cC][aAcCgGuU])|([aA][gG][cCuU])
%s PENDANT
%s APRES
%s ANOMALIE
%%
^\n
{return 0;}
<INITIAL>{start}
{ printf("start\n"); BEGIN(PENDANT); }
<INITIAL>.
;
<PENDANT>{leu}
{printf("Leucine\n");}
<PENDANT>{phe}
{printf("Phénylalanine\n");}
<PENDANT>{ser}
{printf("Sérine\n");}
<PENDANT>{stop}
{ printf("stop\n"); BEGIN(APRES); }
<PENDANT>[aAcCgGuU]{3} {printf("autre codon à traiter...\n");}
<PENDANT>.
{ printf("nombre incorrect de bases\n"); BEGIN(ANOMALIE); }
<ANOMALIE>.
;
<PENDANT,ANOMALIE>\n
{ printf("Erreur : absence de codon STOP\n"); BEGIN(INITIAL); }
<INITIAL>\n
{printf("Erreur : absence de codon START\n");}
<APRES>\n
{ printf("OK\n"); BEGIN(INITIAL); }
© 2000, 2017 – A. Sigayret