#include #ifndef lint #if 0 static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #else __IDSTRING(yyrcsid, "$NetBSD: skeleton.c,v 1.14 1997/10/20 03:41:16 lukem Exp $"); #endif #endif #include #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYLEX yylex() #define YYEMPTY -1 #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" #line 2 "parser.y" #include #include #include #include #include "cal.h" #ifdef linux #define gettxt(a,b) b /* for linux */ #endif extern int parse_year; int yacc_small; int yacc_stringcolor; char *yacc_string; int yacc_daycolor; static int m, d, y; #line 20 "parser.y" typedef union { int ival; char *sval; } YYSTYPE; #line 39 "y.tab.c" #define NUMBER 257 #define MONTH 258 #define WDAY 259 #define COLOR 260 #define STRING 261 #define IN 262 #define PLUS 263 #define MINUS 264 #define SMALL 265 #define CYEAR 266 #define LEAPYEAR 267 #define LENGTH 268 #define EASTER 269 #define EQ_ 270 #define NE 271 #define LE 272 #define GE 273 #define LT 274 #define GT 275 #define PASCHA 276 #define RESET 277 #define OR 278 #define AND 279 #define UMINUS 280 #define YYERRCODE 256 short yylhs[] = { -1, 0, 0, 11, 0, 9, 9, 1, 1, 10, 10, 10, 10, 10, 10, 10, 2, 2, 2, 3, 3, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, }; short yylen[] = { 2, 0, 1, 0, 7, 0, 1, 0, 1, 3, 3, 3, 3, 4, 6, 5, 0, 2, 2, 0, 2, 3, 4, 5, 3, 5, 2, 3, 2, 3, 4, 1, 1, 1, 3, 4, 3, 2, 2, 3, 4, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 2, 3, 3, 1, 1, 2, 1, 2, }; short yydefred[] = { 0, 2, 0, 6, 0, 8, 0, 0, 3, 0, 62, 0, 0, 64, 0, 0, 0, 0, 0, 0, 61, 0, 4, 0, 0, 0, 0, 0, 0, 65, 0, 0, 63, 0, 0, 0, 43, 0, 0, 0, 0, 0, 27, 0, 0, 0, 12, 0, 0, 9, 10, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 29, 0, 0, 0, 42, 0, 0, 11, 0, 0, 38, 0, 37, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 13, 30, 0, 0, 15, 39, 0, 0, 36, 0, 0, 0, 25, 40, 35, 57, 14, }; short yydgoto[] = { 2, 6, 27, 46, 35, 36, 20, 21, 58, 4, 22, 9, 23, }; short yysindex[] = { -272, 0, -253, 0, -245, 0, -244, -245, 0, -9, 0, 31, 382, 0, 31, -254, -254, -237, -26, -46, 0, -18, 0, -254, 31, -26, -26, -242, -37, 0, -242, -242, 0, -26, 375, 515, 0, 31, -240, -15, 31, -242, 0, 538, 538, -26, 0, -42, -254, 0, 0, -24, 31, 31, 0, 0, -44, -10, -53, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, 0, 0, 394, -242, 31, 0, -1, 2, 0, 538, -242, 0, 31, 0, -215, 394, 31, 0, 560, 560, 560, 560, 560, 560, 549, 560, -31, -31, -24, -24, -24, 526, 0, -254, 0, 0, -26, 31, 0, 0, 394, 5, 0, -26, -242, 538, 0, 0, 0, 0, 0, }; short yyrindex[] = { 143, 0, -227, 0, -244, 0, 0, 362, 0, 0, 0, 6, 192, 0, 0, 192, 192, 0, 0, 207, 0, 0, 0, 192, 226, 0, 0, 283, 0, 0, 283, 283, 0, 0, 0, 0, 0, 232, 192, 0, 0, 283, 0, 268, 270, 0, 0, 207, 192, 0, 0, 1, 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 217, 0, 238, 247, 0, 290, 283, 0, 0, 0, 0, 0, 0, 0, 121, 127, 133, 153, 165, 177, 198, 186, 81, 101, 21, 41, 61, 0, 0, 192, 0, 0, 253, 0, 0, 0, 0, -41, 0, 0, 283, 259, 0, 0, 0, 0, 0, }; short yygindex[] = { 0, 49, 12, 64, 640, 644, 0, -21, 0, 0, 0, 0, 29, }; #define YYTABLESIZE 835 short yytable[] = { 39, 58, 88, 18, 39, 1, 71, 33, 17, 25, 26, 69, 3, 57, 18, 5, 70, 7, 79, 17, 32, 54, 75, 25, 26, 18, 45, 30, 31, 40, 17, 18, 72, 5, 5, 41, 17, 89, 58, 72, 90, 55, 58, 58, 58, 109, 58, 113, 58, 110, 76, 121, 34, 41, 106, 42, 8, 48, 54, 58, 83, 56, 54, 54, 54, 34, 54, 114, 54, 0, 0, 18, 0, 0, 0, 0, 17, 0, 55, 54, 0, 53, 55, 55, 55, 0, 55, 0, 55, 0, 0, 0, 120, 0, 49, 50, 0, 0, 56, 55, 0, 52, 56, 56, 56, 81, 56, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 56, 0, 46, 53, 0, 53, 0, 53, 47, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 53, 107, 0, 52, 1, 52, 0, 52, 111, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 52, 0, 0, 46, 0, 0, 50, 0, 0, 47, 0, 0, 0, 0, 0, 48, 0, 0, 51, 0, 46, 0, 123, 0, 0, 0, 47, 45, 0, 0, 0, 0, 48, 16, 0, 49, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 50, 31, 0, 0, 0, 49, 37, 38, 86, 87, 37, 41, 51, 0, 10, 11, 0, 50, 0, 0, 26, 45, 0, 13, 14, 10, 28, 0, 0, 51, 0, 0, 21, 44, 13, 14, 10, 77, 45, 0, 0, 24, 10, 11, 12, 13, 14, 22, 42, 0, 44, 13, 14, 23, 15, 58, 58, 41, 58, 58, 58, 16, 17, 58, 18, 58, 58, 58, 58, 58, 58, 0, 0, 58, 58, 54, 54, 19, 54, 54, 54, 0, 10, 54, 20, 54, 54, 54, 54, 54, 54, 13, 14, 54, 54, 55, 55, 0, 55, 55, 55, 0, 0, 55, 0, 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, 56, 56, 0, 56, 56, 56, 0, 0, 56, 0, 56, 56, 56, 56, 56, 56, 0, 0, 56, 56, 53, 53, 0, 53, 53, 53, 0, 0, 53, 0, 53, 53, 53, 53, 53, 53, 0, 0, 53, 53, 52, 52, 0, 52, 52, 52, 0, 0, 52, 0, 52, 52, 52, 52, 52, 52, 0, 0, 52, 52, 46, 46, 0, 46, 46, 46, 47, 47, 46, 47, 47, 47, 48, 48, 47, 48, 48, 48, 46, 46, 48, 7, 1, 1, 47, 47, 7, 1, 0, 0, 48, 48, 49, 49, 18, 49, 49, 49, 0, 17, 49, 18, 0, 0, 50, 50, 17, 50, 50, 50, 49, 49, 50, 18, 0, 0, 51, 51, 17, 51, 51, 51, 50, 50, 51, 45, 45, 0, 45, 45, 45, 16, 16, 45, 51, 51, 16, 44, 44, 16, 44, 44, 44, 45, 45, 44, 31, 31, 0, 31, 31, 31, 0, 0, 31, 44, 41, 41, 0, 41, 41, 41, 0, 0, 41, 26, 26, 0, 26, 26, 26, 28, 28, 26, 28, 28, 28, 21, 21, 28, 21, 21, 21, 0, 0, 21, 24, 24, 0, 24, 24, 24, 22, 22, 24, 22, 22, 22, 23, 23, 22, 23, 23, 23, 0, 0, 23, 17, 17, 18, 18, 0, 17, 0, 18, 17, 0, 18, 0, 0, 0, 0, 19, 19, 0, 0, 0, 19, 0, 20, 20, 71, 0, 0, 20, 73, 69, 68, 0, 67, 0, 70, 71, 0, 0, 0, 0, 69, 68, 0, 67, 0, 70, 0, 71, 0, 0, 72, 0, 69, 68, 0, 67, 116, 70, 71, 0, 0, 72, 0, 69, 68, 0, 67, 0, 70, 71, 0, 0, 0, 72, 69, 68, 0, 67, 0, 70, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 72, 0, 0, 0, 0, 7, 7, 0, 7, 10, 52, 53, 0, 54, 0, 7, 10, 0, 13, 14, 0, 55, 25, 26, 0, 13, 14, 0, 10, 105, 19, 0, 24, 28, 0, 29, 0, 13, 14, 0, 0, 0, 43, 44, 0, 42, 0, 0, 0, 47, 51, 0, 0, 0, 0, 56, 0, 0, 74, 0, 78, 80, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 0, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 0, 0, 0, 0, 0, 0, 78, 0, 108, 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, 78, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 119, 0, 122, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 61, 62, 63, 64, 0, 0, 65, 66, 0, 59, 60, 61, 62, 63, 64, 0, 0, 65, 66, 0, 0, 59, 60, 61, 62, 63, 64, 0, 0, 65, 66, 0, 59, 60, 61, 62, 63, 64, 0, 0, 0, 66, 0, 59, 60, 61, 62, 63, 64, }; short yycheck[] = { 46, 0, 46, 40, 46, 277, 37, 33, 45, 263, 264, 42, 265, 34, 40, 260, 47, 261, 39, 45, 257, 0, 262, 263, 264, 40, 268, 15, 16, 47, 45, 40, 63, 260, 261, 23, 45, 47, 37, 63, 93, 0, 41, 42, 43, 46, 45, 262, 47, 47, 38, 46, 93, 47, 75, 47, 7, 28, 37, 58, 48, 0, 41, 42, 43, 91, 45, 88, 47, -1, -1, 40, -1, -1, -1, -1, 45, -1, 37, 58, -1, 0, 41, 42, 43, -1, 45, -1, 47, -1, -1, -1, 113, -1, 30, 31, -1, -1, 37, 58, -1, 0, 41, 42, 43, 41, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, 106, 58, -1, 0, 41, -1, 43, -1, 45, 0, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 58, 76, -1, 41, 0, 43, -1, 45, 83, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 58, -1, -1, 41, -1, -1, 0, -1, -1, 41, -1, -1, -1, -1, -1, 41, -1, -1, 0, -1, 58, -1, 117, -1, -1, -1, 58, 0, -1, -1, -1, -1, 58, 0, -1, 41, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, 41, 0, -1, -1, -1, 58, 258, 259, 258, 259, 258, 0, 41, -1, 257, 258, -1, 58, -1, -1, 0, 41, -1, 266, 267, 257, 0, -1, -1, 58, -1, -1, 0, 41, 266, 267, 257, 258, 58, -1, -1, 0, 257, 258, 259, 266, 267, 0, 47, -1, 58, 266, 267, 0, 269, 260, 261, 46, 263, 264, 265, 276, 0, 268, 0, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, 260, 261, 0, 263, 264, 265, -1, 257, 268, 0, 270, 271, 272, 273, 274, 275, 266, 267, 278, 279, 260, 261, -1, 263, 264, 265, -1, -1, 268, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, 260, 261, -1, 263, 264, 265, -1, -1, 268, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, 260, 261, -1, 263, 264, 265, -1, -1, 268, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, 260, 261, -1, 263, 264, 265, -1, -1, 268, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, 260, 261, -1, 263, 264, 265, 260, 261, 268, 263, 264, 265, 260, 261, 268, 263, 264, 265, 278, 279, 268, 40, 260, 261, 278, 279, 45, 265, -1, -1, 278, 279, 260, 261, 40, 263, 264, 265, -1, 45, 268, 40, -1, -1, 260, 261, 45, 263, 264, 265, 278, 279, 268, 40, -1, -1, 260, 261, 45, 263, 264, 265, 278, 279, 268, 260, 261, -1, 263, 264, 265, 260, 261, 268, 278, 279, 265, 260, 261, 268, 263, 264, 265, 278, 279, 268, 260, 261, -1, 263, 264, 265, -1, -1, 268, 278, 260, 261, -1, 263, 264, 265, -1, -1, 268, 260, 261, -1, 263, 264, 265, 260, 261, 268, 263, 264, 265, 260, 261, 268, 263, 264, 265, -1, -1, 268, 260, 261, -1, 263, 264, 265, 260, 261, 268, 263, 264, 265, 260, 261, 268, 263, 264, 265, -1, -1, 268, 260, 261, 260, 261, -1, 265, -1, 265, 268, -1, 268, -1, -1, -1, -1, 260, 261, -1, -1, -1, 265, -1, 260, 261, 37, -1, -1, 265, 41, 42, 43, -1, 45, -1, 47, 37, -1, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, 37, -1, -1, 63, -1, 42, 43, -1, 45, 58, 47, 37, -1, -1, 63, -1, 42, 43, -1, 45, -1, 47, 37, -1, -1, -1, 63, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, 257, 258, 259, -1, 63, -1, -1, -1, -1, 266, 267, -1, 269, 257, 258, 259, -1, 261, -1, 276, 257, -1, 266, 267, -1, 269, 263, 264, -1, 266, 267, -1, 257, 258, 9, -1, 11, 12, -1, 14, -1, 266, 267, -1, -1, -1, 25, 26, -1, 24, -1, -1, -1, 28, 33, -1, -1, -1, -1, 34, -1, -1, 37, -1, 39, 40, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52, 53, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, -1, 75, -1, 77, -1, -1, -1, -1, -1, -1, -1, 85, -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, -1, -1, -1, 110, -1, 116, 113, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, -1, -1, 270, 271, 272, 273, 274, 275, -1, -1, 278, 279, -1, 270, 271, 272, 273, 274, 275, -1, -1, -1, 279, -1, 270, 271, 272, 273, 274, 275, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 280 #if YYDEBUG char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'",0,"'-'","'.'","'/'",0,0,0,0,0,0,0, 0,0,0,"':'",0,0,0,0,"'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,"NUMBER","MONTH","WDAY","COLOR","STRING","IN","PLUS", "MINUS","SMALL","CYEAR","LEAPYEAR","LENGTH","EASTER","EQ_","NE","LE","GE","LT", "GT","PASCHA","RESET","OR","AND","UMINUS", }; char *yyrule[] = { "$accept : list", "list :", "list : RESET", "$$1 :", "list : list small color STRING color $$1 entry", "small :", "small : SMALL", "color :", "color : COLOR", "entry : EASTER offset length", "entry : PASCHA offset length", "entry : date offset length", "entry : WDAY offset length", "entry : pexpr WDAY offset length", "entry : pexpr WDAY IN month offset length", "entry : WDAY pexpr date offset length", "offset :", "offset : PLUS expr", "offset : MINUS expr", "length :", "length : LENGTH expr", "date : pexpr '.' month", "date : pexpr '.' month '.'", "date : pexpr '.' month '.' expr", "date : month '/' pexpr", "date : month '/' pexpr '/' pexpr", "date : MONTH pexpr", "date : MONTH pexpr pexpr", "date : pexpr MONTH", "date : pexpr MONTH pexpr", "date : pexpr '.' MONTH pexpr", "date : pexpr", "reldate : STRING", "reldate : EASTER", "reldate : pexpr '.' month", "reldate : pexpr '.' month '.'", "reldate : month '/' pexpr", "reldate : pexpr MONTH", "reldate : MONTH pexpr", "reldate : WDAY pexpr pexpr", "reldate : pexpr WDAY IN month", "month : MONTH", "month : pexpr", "expr : pexpr", "expr : expr OR expr", "expr : expr AND expr", "expr : expr EQ_ expr", "expr : expr NE expr", "expr : expr LE expr", "expr : expr GE expr", "expr : expr LT expr", "expr : expr GT expr", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '?' expr ':' expr", "expr : '!' expr", "expr : '[' reldate ']'", "pexpr : '(' expr ')'", "pexpr : number", "number : NUMBER", "number : '-' NUMBER", "number : CYEAR", "number : LEAPYEAR pexpr", }; #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 10000 #define YYMAXDEPTH 10000 #endif #endif #define YYINITSTACKSIZE 200 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; /* allocate initial stack or double stack size, up to YYMAXDEPTH */ int yyparse __P((void)); static int yygrowstack __P((void)); static int yygrowstack() { int newsize, i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; if ((newss = (short *)realloc(yyss, newsize * sizeof *newss)) == NULL) return -1; yyss = newss; yyssp = newss + i; if ((newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs)) == NULL) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse() { int yym, yyn, yystate; #if YYDEBUG char *yys; if ((yys = getenv("YYDEBUG")) != NULL) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; goto yynewerror; yynewerror: yyerror("syntax error"); goto yyerrlab; yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 2: #line 40 "parser.y" { reset_all_hdays(); } break; case 3: #line 41 "parser.y" { yacc_stringcolor = yyvsp[-2].ival; yacc_string = yyvsp[-1].sval; yacc_daycolor = yyvsp[0].ival; } break; case 4: #line 44 "parser.y" { free(yacc_string); } break; case 5: #line 47 "parser.y" { yacc_small = 0; } break; case 6: #line 48 "parser.y" { yacc_small = 1; } break; case 7: #line 51 "parser.y" { yyval.ival = 0; } break; case 8: #line 52 "parser.y" { yyval.ival = yyvsp[0].ival; } break; case 9: #line 55 "parser.y" { seteaster(yyvsp[-1].ival, yyvsp[0].ival, 0); } break; case 10: #line 56 "parser.y" { seteaster(yyvsp[-1].ival, yyvsp[0].ival, 1); } break; case 11: #line 57 "parser.y" { setdate( m, d, y, yyvsp[-1].ival, yyvsp[0].ival);} break; case 12: #line 58 "parser.y" { setwday( 0, yyvsp[-2].ival, 0, yyvsp[-1].ival, yyvsp[0].ival);} break; case 13: #line 59 "parser.y" { setwday(yyvsp[-3].ival, yyvsp[-2].ival, 0, yyvsp[-1].ival, yyvsp[0].ival);} break; case 14: #line 60 "parser.y" { setwday(yyvsp[-5].ival, yyvsp[-4].ival, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival);} break; case 15: #line 61 "parser.y" { setdoff(yyvsp[-4].ival, yyvsp[-3].ival,m,d,y,yyvsp[-1].ival,yyvsp[0].ival);} break; case 16: #line 64 "parser.y" { yyval.ival = 0; } break; case 17: #line 65 "parser.y" { yyval.ival = yyvsp[0].ival; } break; case 18: #line 66 "parser.y" { yyval.ival = -yyvsp[0].ival; } break; case 19: #line 69 "parser.y" { yyval.ival = 1; } break; case 20: #line 70 "parser.y" { yyval.ival = yyvsp[0].ival; } break; case 21: #line 73 "parser.y" { m = yyvsp[0].ival; d = yyvsp[-2].ival; y = 0; } break; case 22: #line 74 "parser.y" { m = yyvsp[-1].ival; d = yyvsp[-3].ival; y = 0; } break; case 23: #line 75 "parser.y" { m = yyvsp[-2].ival; d = yyvsp[-4].ival; y = yyvsp[0].ival; } break; case 24: #line 76 "parser.y" { m = yyvsp[-2].ival; d = yyvsp[0].ival; y = 0; } break; case 25: #line 77 "parser.y" { m = yyvsp[-4].ival; d = yyvsp[-2].ival; y = yyvsp[0].ival; } break; case 26: #line 78 "parser.y" { m = yyvsp[-1].ival; d = yyvsp[0].ival; y = 0; } break; case 27: #line 79 "parser.y" { m = yyvsp[-2].ival; d = yyvsp[-1].ival; y = yyvsp[0].ival; } break; case 28: #line 80 "parser.y" { m = yyvsp[0].ival; d = yyvsp[-1].ival; y = 0; } break; case 29: #line 81 "parser.y" { m = yyvsp[-1].ival; d = yyvsp[-2].ival; y = yyvsp[0].ival; } break; case 30: #line 82 "parser.y" { m = yyvsp[-1].ival; d = yyvsp[-3].ival; y = yyvsp[0].ival; } break; case 31: #line 83 "parser.y" { monthday_from_day(yyvsp[0].ival, &m, &d, &y); } break; case 32: #line 87 "parser.y" { yyval.ival = day_from_name(yyvsp[0].sval); } break; case 33: #line 88 "parser.y" { yyval.ival = day_from_easter(); } break; case 34: #line 89 "parser.y" { yyval.ival = day_from_monthday (yyvsp[0].ival, yyvsp[-2].ival); } break; case 35: #line 91 "parser.y" { yyval.ival = day_from_monthday (yyvsp[-1].ival, yyvsp[-3].ival); } break; case 36: #line 93 "parser.y" { yyval.ival = day_from_monthday (yyvsp[-2].ival, yyvsp[0].ival); } break; case 37: #line 95 "parser.y" { yyval.ival = day_from_monthday (yyvsp[0].ival, yyvsp[-1].ival); } break; case 38: #line 97 "parser.y" { yyval.ival = day_from_monthday (yyvsp[-1].ival, yyvsp[0].ival); } break; case 39: #line 99 "parser.y" { yyval.ival = day_from_wday(yyvsp[0].ival, yyvsp[-2].ival, yyvsp[-1].ival == -1 ? -1 : 0); } break; case 40: #line 101 "parser.y" { int d=day_from_monthday(yyvsp[0].ival,1); yyval.ival = yyvsp[-3].ival == 999 ? day_from_wday(d+1,yyvsp[-2].ival,-1) : day_from_wday(d,yyvsp[-2].ival,yyvsp[-3].ival-1);} break; case 43: #line 109 "parser.y" { yyval.ival = yyvsp[0].ival; } break; case 44: #line 110 "parser.y" { yyval.ival = yyvsp[-2].ival || yyvsp[0].ival; } break; case 45: #line 111 "parser.y" { yyval.ival = yyvsp[-2].ival && yyvsp[0].ival; } break; case 46: #line 112 "parser.y" { yyval.ival = yyvsp[-2].ival == yyvsp[0].ival; } break; case 47: #line 113 "parser.y" { yyval.ival = yyvsp[-2].ival != yyvsp[0].ival; } break; case 48: #line 114 "parser.y" { yyval.ival = yyvsp[-2].ival <= yyvsp[0].ival; } break; case 49: #line 115 "parser.y" { yyval.ival = yyvsp[-2].ival >= yyvsp[0].ival; } break; case 50: #line 116 "parser.y" { yyval.ival = yyvsp[-2].ival < yyvsp[0].ival; } break; case 51: #line 117 "parser.y" { yyval.ival = yyvsp[-2].ival > yyvsp[0].ival; } break; case 52: #line 118 "parser.y" { yyval.ival = yyvsp[-2].ival + yyvsp[0].ival; } break; case 53: #line 119 "parser.y" { yyval.ival = yyvsp[-2].ival - yyvsp[0].ival; } break; case 54: #line 120 "parser.y" { yyval.ival = yyvsp[-2].ival * yyvsp[0].ival; } break; case 55: #line 121 "parser.y" { yyval.ival = yyvsp[0].ival ? yyvsp[-2].ival / yyvsp[0].ival : 0; } break; case 56: #line 122 "parser.y" { yyval.ival = yyvsp[0].ival ? yyvsp[-2].ival % yyvsp[0].ival : 0; } break; case 57: #line 123 "parser.y" { yyval.ival = yyvsp[-4].ival ? yyvsp[-2].ival : yyvsp[0].ival; } break; case 58: #line 124 "parser.y" { yyval.ival = !yyvsp[0].ival; } break; case 59: #line 125 "parser.y" { yyval.ival = yyvsp[-1].ival; } break; case 60: #line 128 "parser.y" { yyval.ival = yyvsp[-1].ival; } break; case 61: #line 129 "parser.y" { yyval.ival = yyvsp[0].ival; } break; case 63: #line 133 "parser.y" { yyval.ival = -yyvsp[0].ival; } break; case 64: #line 134 "parser.y" { yyval.ival = parse_year; } break; case 65: #line 135 "parser.y" { yyval.ival = !((yyvsp[0].ival) & 3); } break; #line 841 "y.tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }