/*** definition section ***/ %{ /* C to be copied verbatim */ #include "parser.h" %} /* read only one input file */ %option noyywrap %option yylineno DIGIT [0-9] ALPHA [[:alpha:]_] /*** rules section ***/ %% "(" {return L_PAREN;} ")" {return R_PAREN;} "{" {return L_BRACK;} "}" {return R_BRACK;} ";" {return SEMI_COL;} "~" {return COMP;} "*" {return MULT;} "/" {return DIV;} "%" {return MOD;} "-" {return MINUS;} "+" {return PLUS;} "int" {return INT;} "void" {return VOID;} "return" {return RET;} {DIGIT}+ {yylval.ival = atol(yytext); return NUMBER;} {ALPHA}+ { yylval.sval = strdup(yytext); return WORD; } [[:space:]]+ {/* discard */} . { printf("Error at line %d: unrecognized symbol \"%s\"\n", yylineno, yytext); return YYerror; } %% /*** C section ***/