1 %{
2 #include "y.tab.h"
3 #include "string.h"
4 #undef yywrap
yywrap(void)5 int 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