/* lex1.txt * Michel Cartereau @ inapg.inra.fr - 11 II 2003 * exemple d'analyseur lexical construit avec lex, * texte d'entree : fichier donne en parametre ou entree normale * reconnaissance de : * - entier (sans signe) * - identificateur (une ou plusieurs lettres, ou _ sauf en debut) * - symbole (caractere entre guillemets ou entier prefixe par # * affichage commente des lexemes reconnus * affichage tel que de tout caractere hors lexeme */ %{ #include %} IDENTIFICATEUR [A-Za-z][A-Za-z_]* ENTIER [0-9]+ SYMBOLE (\".\")|#{ENTIER} %% [ \t]+ ; {IDENTIFICATEUR} { printf("[identificateur %s] ", yytext); } {ENTIER} { printf("[entier %s] ", yytext); } {SYMBOLE} { printf("[symbole %s] ", yytext); } \n { puts(""); } . { printf("%c ", yytext[0]); } %% int main(int nbArg, char **ptrTabArg) { FILE * ptrFichier; if (nbArg > 1) { printf ("-- Analyse de '%s'\n", ptrTabArg[1]); ptrFichier= fopen(ptrTabArg[1], "r"); if (ptrFichier == NULL) { printf(" :-( Fichier '%s' introuvable\n", ptrTabArg[1]); return (EXIT_FAILURE); } yyin= ptrFichier; } else { printf ("-- Analyse du texte en entree (fin : Ctrl+C) ...\n"); yyin= stdin; } yylex(); printf("\n-- Fin d'analyse\n"); return (EXIT_SUCCESS); } /* FIN */