Dans ce texte, en raison de l'interprètation des balises HTML,
un espace a du être ajouté apres chaque occurence du caractère '<'
Criteres generaux
Q1
- utilisation d'une regle "balai" .|_n pour delimiter les autres fragments
- mise en evidence claire du fragment reconnu
Q2
- utilisation de macro-definitions
// ---------- lex1a.flex : ADRESSE IP ---------------------------------------
Nb [0-9]+
%%
({N}\.){3}{N} printf("< IPADR:%s>",yytext);
.|\n ECHO;
%%
// ---------- lex1b.flex : CHAINES ENTRE DOUBLE QUOTES ----------------------
NonDQ [^"]
DQString \"{NonDQ}*\"
%%
{DQString} printf("< < DQSTRING:%s>>",yytext);
.|\n ECHO;
%%
// ---------- lex1c.flex : DATES --------------------------------------------
N [0-9]
N2 {N}{2}
N4 {N}{4}
L [A-Za-z]
L3 {L}{3}
%%
"["{N2}"/"{L3}"/"{N4}:{N2}:{N2}:{N2}" +"{N4}"]" printf("< DATE:%s>",yytext);
.|\n ECHO;
%%
// ---------- lex1d.flex : AUTHORITY ----------------------------------------
Nb [0-9]+
Name [-_A-Za-z]+
Names {Name}(\.{Name})*
%%
^{Names}(:{Nb})? printf("< < AUTH:%s>>",yytext);
.|\n ECHO;
%%
// ---------- lex2a.flex : EXTRACTION Date + Requete ------------------------
N [0-9]
N2 {N}{2}
N4 {N}{4}
Nb [0-9]+
L [A-Za-z]
L3 {L}{3}
Date "["{N2}"/"{L3}"/"{N4}:{N2}:{N2}:{N2}" +"{N4}"]"
NonDQ [^"]
DQString \"{NonDQ}*\"
%{
int lineNb = 1; // pour numeroter les lignes
int strNb = 0; // pour selectioner la 1ere chaine dans chaque ligne
%}
%%
{Date} printf("%d:\t%s\n", lineNb, yytext);
\n { lineNb++; strNb = 0; }
{DQString} { if( strNb++==0 )
fprintf(stderr,"%d:\t%s\n", lineNb, yytext); }
. ; // on absorbe le reste, qui ne nous ininteresse pas
%%
// ---------- lex2b.flex : VERIFICATION DE FICHIER --------------------------
N [0-9]
N2 {N}{2}
N4 {N}{4}
Nb [0-9]+
L [A-Za-z]
L3 {L}{3}
Name [-_A-Za-z]+
Names {Name}(\.{Name})*
Auth ^{Names}(:{Nb})?
NonDQ [^"]
DQStr \"{NonDQ}*\"
Date "["{N2}"/"{L3}"/"{N4}:{N2}:{N2}:{N2}" +"{N4}"]"
IPAd ({Nb}\.){3}{Nb}
%{
// Les lignes OK ne sont pas affichees, seulement un message d'acceptation
// Les autres lignes, erronnees, sont affichees (par defaut tout ce qui n'est
// pas reconnu est affiche)
// Pour la commodite d'usage, on pourrait aussi afficher les nos de ligne.
%}
%%
{Auth}" "{IPAd}" - - "{Date}" "{DQStr}" "{Nb}" "{Nb}" "{DQStr}" "{DQStr}"\n" {
printf("---OK !---\n");
}
%%