%{ extern int yylex(); #include #include "proto-color.h" extern char *yytext; extern int yylineno; /* cf. %option yylineno dans le fichier flex */ int yyerror (char const *message) { fprintf(stderr,RED("l.%d [%s] <%s>")"\n", yylineno, yytext, message); return 0; } void print(char * msg) { fprintf(stderr,BLUE("%s"),msg); } %} %error-verbose %token MAJWORD MINWORD QUOTED '.' ',' %% Text: Sentence | Text Sentence Sentence: MAJWORD Words '.' { print("SENTENCE OK1"); } | QUOTED Words '.' { print("SENTENCE OK2"); } | error '.' { yyerrok; print("SKIP WRONG SENTENCE\n");} Words : /* eventuellement vide */ | Words Word Word : MINWORD | MAJWORD | QUOTED | ',' ; %% int main(void) { return yyparse(); }