%{ /* Ce fichier indique a l'outil "lex" comment generer l'analyseur lexical du langage. Il indique donc : - la liste des "lexemes" (symboles terminaux de la grammaire) - les actions que doit effectuer l'analyseur lorsqu'il lit le texte d'entree Il est structure de la maniere suivante : definitions %% regles - Les definitions sont des unites lexicales non elementaires decrites par des expressions regulieres. Sur l'exemple : - "espace" designe un caractere ' ', une tabulation ('\t') ou un retour a la ligne ('\n') - "bl" designe une sequence non vide d' "espace" - Les regles sont de la forme expression reguliere {action} Elles indiquent quelle action l'analyseur lexical doit effectuer lorqu'il lit une sequence de caractere qui correspond a l'expression reguliere indiquee. Elles seront evaluees dans l'ordre. Sur l'exemple : {bl} ; pas d'action, l'analyseur doit "sauter" toute sequence d'"espace" true {return(True) ;} l'analyseur doit renvoyer le lexeme "True" lorsqu'il lit la chaine "true" ... . {fprintf(stderr,"Erreur lexicale ! \n");return(Erreur_lexicale);} l'analyseur doit afficher un message d'erreur lorsqu'il lit toute autre chaine de caractere */ %} espace [ \t\n] bl {espace}+ %% {bl} ; true {return(True) ;} TRUE {return(True) ;} false {return(False) ;} FALSE {return(False) ;} "+" {return('+');} "*" { return('*');} "(" {return('(');} ")" { return(')');} . {fprintf(stderr,"Erreur lexicale ! \n");return(Erreur_lexicale);} %% int yywrap() { return(1); }