1 %{ 2 3 #include <string.h> 4 #include <time.h> 5 #include "parsetimey.h" 6 #include "parsetime.h" 7 8 char *last_token = NULL; 9 char **my_argv; 10 11 #define COPY_TOK do { last_token = strdup(yytext); } while(0) 12 13 #define COPY_VAL do { yylval.charval = strdup(yytext); } while(0) 14 15 #define YY_INPUT(buf,result,max_size) \ 16 do { \ 17 if (*my_argv == NULL) { \ 18 result = YY_NULL ;\ 19 buf[0] = 0; \ 20 } \ 21 else { \ 22 if (**my_argv == '\0') { \ 23 buf[0] = ' ' ; \ 24 my_argv ++; \ 25 } \ 26 else { \ 27 buf[0] = **my_argv; \ 28 (*my_argv) ++; \ 29 } \ 30 result = 1; \ 31 } \ 32 } while(0) 33 %} 34 35 WORD [a-z][a-z0-9]+ 36 %% 37 38 now { COPY_TOK ; return NOW; } 39 am { COPY_TOK ; return AM; } 40 pm { COPY_TOK ; return PM; } 41 noon { COPY_TOK ; return NOON; } 42 midnight { COPY_TOK ; return MIDNIGHT; } 43 teatime { COPY_TOK ; return TEATIME; } 44 sun(day)? { COPY_TOK ; return SUN; } 45 mon(day)? { COPY_TOK ; return MON; } 46 tue(sday)? { COPY_TOK ; return TUE; } 47 wed(nesday)? { COPY_TOK ; return WED; } 48 thu(rsday)? { COPY_TOK ; return THU; } 49 fri(day)? { COPY_TOK ; return FRI; } 50 sat(urday)? { COPY_TOK ; return SAT; } 51 today { COPY_TOK ; return TODAY; } 52 tomorrow { COPY_TOK ; return TOMORROW; } 53 next { COPY_TOK ; return NEXT; } 54 min { COPY_TOK ; return MINUTE; } 55 minute(s)? { COPY_TOK ; return MINUTE; } 56 hour(s)? { COPY_TOK ; return HOUR; } 57 day(s)? { COPY_TOK ; return DAY; } 58 week(s)? { COPY_TOK ; return WEEK; } 59 month(s)? { COPY_TOK ; return MONTH; } 60 jan(uary)? { COPY_TOK ; return JAN; } 61 feb(r?uary)? { COPY_TOK ; return FEB; } 62 mar(ch)? { COPY_TOK ; return MAR; } 63 apr(il)? { COPY_TOK ; return APR; } 64 may { COPY_TOK ; return MAY; } 65 jun(e)? { COPY_TOK ; return JUN; } 66 jul(y)? { COPY_TOK ; return JUL; } 67 aug(ust)? { COPY_TOK ; return AUG; } 68 sep(tember)? { COPY_TOK ; return SEP; } 69 oct(ober)? { COPY_TOK ; return OCT; } 70 nov(ember)? { COPY_TOK ; return NOV; } 71 dec(ember)? { COPY_TOK ; return DEC; } 72 [0-9]+ { COPY_TOK ; COPY_VAL; return INT; } 73 [ \t\n] ; 74 {WORD} { COPY_TOK ; COPY_VAL; return WORD; } 75 . { COPY_TOK ; return yytext[0]; } 76 77 %% 78 79 #ifdef NEED_YYWRAP 80 int yywrap() 81 { 82 return 1; 83 } 84 #endif 85