%{ #include "y.tab.h" #include "reloc.h" /* Pour MAX_LABEL_LEN */ #include %} %option nounput CHIFFRE [0-9] BLANC [ \t\n] IDENTIFICATEUR [a-zA-Z][a-zA-Z0-9_]* %x MLCOMMENT /* %s : inclusive start condition (inclus aussi les règles sans ) %x : exclusive start condition (règles sans inactives) */ %% "/*" BEGIN(MLCOMMENT); \n yylineno++;; "*/" BEGIN(INITIAL); . ; "//"[^\n]*\n yylineno++; /* Single line Comment*/ if return IF; else return ELSE; while return WHILE; do return DO; main{BLANC}*\({BLANC}*\) return MAIN; printf return PRINTF; \{ return '{'; \} return '}'; const return CONST; int return INT; "*" return '*'; "/" return '/'; "+" return '+'; "-" return '-'; ">" return '>'; "<" return '<'; "=" return AFF; "==" return EGALE; "!=" return DIFFERENT; \( return '('; \) return ')'; {IDENTIFICATEUR} { int lg = strlen(yytext); if ( lg > MAX_LABEL_LEN ) { return ERROR; } else { yylval.str = malloc(sizeof(char)*lg); strcpy(yylval.str, yytext); return IDENTIFICATEUR; } } {CHIFFRE}+ { yylval.nb = atoi(yytext); return ENTIER; } "," return ','; ";" return ';'; \n yylineno++; /*printf("\n");*/ {BLANC} /*printf("BLANC");*/ [^ \t\n] fprintf(stderr, "LEX : ERROR : unknown char '%c'", yytext[0]); // TODO standardiser le msg d'erreur /*[ \t] ;*/ %%