1 %{ 2 #include "y.tab.h" 3 #include "string.h" 4 #undef yywrap yywrap(void)5int yywrap(void) { return(1); } 6 extern char *mystrdup(char *); 7 %} 8 9 %% 10 11 #.*\n ; 12 ^:.*\n ; 13 [ \t\r\n] ; 14 [-+*/%.!?:()\[\]] { return(*yytext); } 15 16 january { yylval.ival = 1; return(MONTH); } 17 february { yylval.ival = 2; return(MONTH); } 18 march { yylval.ival = 3; return(MONTH); } 19 april { yylval.ival = 4; return(MONTH); } 20 may { yylval.ival = 5; return(MONTH); } 21 june { yylval.ival = 6; return(MONTH); } 22 july { yylval.ival = 7; return(MONTH); } 23 august { yylval.ival = 8; return(MONTH); } 24 september { yylval.ival = 9; return(MONTH); } 25 october { yylval.ival = 10; return(MONTH); } 26 november { yylval.ival = 11; return(MONTH); } 27 december { yylval.ival = 12; return(MONTH); } 28 29 monday { yylval.ival = 1; return(WDAY); } 30 tuesday { yylval.ival = 2; return(WDAY); } 31 wednesday { yylval.ival = 3; return(WDAY); } 32 thursday { yylval.ival = 4; return(WDAY); } 33 friday { yylval.ival = 5; return(WDAY); } 34 saturday { yylval.ival = 6; return(WDAY); } 35 sunday { yylval.ival = 7; return(WDAY); } 36 workday { yylval.ival = -1; return(WDAY); } 37 38 1st|first { yylval.ival = 1; return(NUMBER); } 39 2nd|second { yylval.ival = 2; return(NUMBER); } 40 3rd|third { yylval.ival = 3; return(NUMBER); } 41 4th|fourth { yylval.ival = 4; return(NUMBER); } 42 5th|fifth { yylval.ival = 5; return(NUMBER); } 43 last { yylval.ival = 999; return(NUMBER); } 44 any { yylval.ival = 0; return(NUMBER); } 45 46 before { yylval.ival = -1; return(NUMBER); } 47 after { yylval.ival = -2; return(NUMBER); } 48 49 [0-9]+ { yylval.ival = atoi(yytext); return(NUMBER); } 50 51 \"[^"]*\" { yylval.sval = mystrdup(yytext+1); 52 yylval.sval[strlen(yylval.sval)-1] = 0; 53 return(STRING); } 54 55 every ; 56 day ; 57 days ; 58 on ; 59 in { return(IN); } 60 plus { return(PLUS); } 61 minus { return(MINUS); } 62 small { return(SMALL); } 63 year { return(CYEAR); } 64 leapyear { return(LEAPYEAR); } 65 easter { return(EASTER); } 66 pascha { return(PASCHA); } 67 length { return(LENGTH); } 68 reset { return(RESET); } 69 70 black { yylval.ival = 1; return(COLOR); } 71 red { yylval.ival = 2; return(COLOR); } 72 green { yylval.ival = 3; return(COLOR); } 73 yellow { yylval.ival = 4; return(COLOR); } 74 blue { yylval.ival = 5; return(COLOR); } 75 magenta { yylval.ival = 6; return(COLOR); } 76 cyan { yylval.ival = 7; return(COLOR); } 77 white { yylval.ival = 8; return(COLOR); } 78 weekend { yylval.ival = 9; return(COLOR); } 79 80 "==" { return(EQ_); } 81 "!=" { return(NE); } 82 "<=" { return(LE); } 83 ">=" { return(GE); } 84 "<" { return(LT); } 85 ">" { return(GT); } 86 "&&" { return(AND);} 87 "||" { return(OR); } 88 89 . { printf("holiday: bad char: %s \n", yytext); } 90 91 %% 92