#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 3 "gram.y" /* yacc grammar for spreadsheet expressions */ /* Arlindo Oliveira */ #include "calc.hh" extern Parser *act_parser; /* #include extern "C" { #include "yydefines.h" } #include "yydefines.hh" */ char var_arg_cnt; char cnt; #line 25 "gram.y" typedef union { int ival; double fval; char *stval; short sval; } YYSTYPE; #line 48 "y.tab.c" #define L_INTEGER 257 #define L_FLOAT 258 #define L_DATE 259 #define L_CELL_ID 260 #define L_COLON 261 #define L_DOUBLEQUOTE 262 #define L_COMMA 263 #define L_STRING 264 #define L_LEFTPAR 265 #define L_RIGHTPAR 266 #define L_EQUAL 267 #define L_GREATER 268 #define L_SMALLER 269 #define L_NEQUAL 270 #define L_SMALLEREQ 271 #define L_GREATEREQ 272 #define L_AND 273 #define L_OR 274 #define L_NOT 275 #define L_ABS 276 #define L_INTF 277 #define L_SQRT 278 #define L_LOG 279 #define L_LN 280 #define L_PI 281 #define L_SIN 282 #define L_COS 283 #define L_TAN 284 #define L_ATAN2 285 #define L_ATAN 286 #define L_ASIN 287 #define L_ACOS 288 #define L_EXP 289 #define L_MOD 290 #define L_DAY 291 #define L_MONTH 292 #define L_ROUND 293 #define L_HOUR 294 #define L_MINUTE 295 #define L_SECOND 296 #define L_UPPER 297 #define L_LOWER 298 #define L_PROPER 299 #define L_SUMIF 300 #define L_SUM 301 #define L_AVG 302 #define L_COUNT 303 #define L_MIN 304 #define L_MAX 305 #define L_VLOOKUP 306 #define L_NPV 307 #define L_VAR 308 #define L_STD 309 #define L_IRR 310 #define L_HLOOKUP 311 #define L_DSUM 312 #define L_DAVG 313 #define L_DCOUNT 314 #define L_DMIN 315 #define L_DMAN 316 #define L_DVAR 317 #define L_DSTD 318 #define L_INDEX 319 #define L_COLS 320 #define L_ROWS 321 #define L_REPEAT 322 #define L_IF 323 #define L_ETA 324 #define L_MINUS 325 #define L_HAT 326 #define L_LABEL 327 #define L_QUOTE 328 #define L_PLUS 329 #define L_TIMES 330 #define L_DIVIDE 331 #define L_POWER 332 #define NEG 333 #define YYERRCODE 256 short yylhs[] = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 14, 14, 15, 15, 13, 13, 13, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 10, 10, 3, 4, 6, 7, 8, }; short yylen[] = { 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 5, 3, 3, 3, 3, 3, 3, 7, 7, 1, 2, 1, 1, 1, 1, 4, 4, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 4, 8, 8, 4, 4, 4, 4, 8, 6, 4, 4, 4, 4, 4, 3, 4, 4, 4, 6, 4, 4, 4, 4, 6, 4, 4, 4, 4, 4, 10, 3, 1, 1, 1, 3, 1, 1, 1, 1, }; short yydefred[] = { 0, 82, 80, 81, 0, 0, 9, 0, 6, 8, 4, 79, 31, 0, 0, 0, 0, 32, 22, 42, 43, 41, 1, 3, 7, 5, 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, 40, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 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, 10, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 24, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 53, 54, 55, 56, 57, 59, 60, 61, 0, 63, 64, 65, 66, 0, 68, 69, 0, 70, 71, 72, 28, 29, 30, 0, 0, 0, 44, 49, 50, 48, 47, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 74, 0, 0, 0, 0, 26, 0, 20, 21, 62, 67, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 51, 0, 73, }; short yydgoto[] = { 7, 127, 64, 164, 17, 18, 19, 20, 21, 130, 165, 224, 131, 65, 157, 225, 166, }; short yysindex[] = { -235, 0, 0, 0, -90, -212, 0, 0, 0, 0, 0, 0, 0, -49, 366, -49, 365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, -126, -240, -237, -230, -216, -215, -206, -178, -174, -167, -146, -145, -144, -141, -135, -134, -132, -131, -124, -122, -121, -120, -114, -113, -112, -107, -105, -103, -94, -92, -88, -79, -78, -77, -63, -58, -53, 0, 0, -274, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, 0, -39, -39, -39, -49, -49, -49, -49, -49, -232, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -231, -231, -231, -218, -19, -19, -19, -19, -19, -49, -49, -39, -277, -277, -277, -277, -277, -277, -274, -274, -207, -207, -207, 425, 365, 0, 0, -102, 0, -91, -68, -82, 63, 73, 83, 140, 0, 161, 170, 186, -219, 197, 215, 223, 231, -183, 239, 247, -175, 257, 265, 275, 0, 0, -52, -51, -44, -48, -46, -48, -277, 0, -40, -42, -41, -38, -37, -36, -166, -149, -32, -39, -39, 0, 0, 0, 0, 0, 0, 0, 0, 0, -49, 0, 0, 0, 0, -49, 0, 0, -49, 0, 0, 0, 0, 0, 0, -33, -238, -19, 0, 0, 0, 0, 0, -218, -218, -64, -34, -24, 283, 291, 299, 0, -196, -30, 0, -18, -12, 473, -277, 0, -11, 0, 0, 0, 0, 0, -49, -13, -13, -64, -140, -10, -9, -8, -218, 0, 0, 0, -7, 0, }; short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 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, 31, 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, 61, 62, 71, 72, 81, 82, 41, 51, 1, 11, 21, 0, 0, -203, -193, 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, -236, -256, 0, -3, 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, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short yygindex[] = { 0, 349, 0, -104, -67, 12, 3, 254, 4, -75, 0, -4, 251, 0, -85, 28, -93, }; #define YYTABLESIZE 844 short yytable[] = { 22, 37, 161, 8, 10, 132, 133, 77, 24, 25, 77, 38, 128, 128, 128, 167, 168, 169, 170, 158, 159, 34, 1, 2, 3, 79, 12, 79, 80, 11, 79, 33, 4, 12, 139, 81, 155, 155, 155, 173, 27, 36, 160, 27, 185, 1, 2, 128, 73, 82, 83, 35, 74, 75, 76, 77, 75, 76, 77, 84, 12, 15, 14, 12, 32, 32, 32, 32, 32, 32, 11, 16, 19, 11, 41, 41, 41, 41, 41, 41, 190, 18, 17, 129, 129, 129, 217, 85, 193, 79, 5, 86, 6, 79, 79, 79, 79, 208, 87, 211, 212, 52, 53, 54, 220, 221, 73, 128, 128, 219, 74, 75, 76, 77, 209, 156, 156, 156, 129, 88, 89, 90, 32, 239, 91, 77, 32, 32, 32, 32, 92, 93, 41, 94, 95, 243, 41, 41, 41, 41, 78, 96, 73, 97, 98, 99, 74, 75, 76, 77, 73, 100, 101, 102, 74, 75, 76, 77, 103, 73, 104, 174, 105, 74, 75, 76, 77, 1, 2, 3, 11, 106, 175, 107, 12, 13, 73, 108, 129, 129, 74, 75, 76, 77, 177, 73, 109, 110, 111, 74, 75, 76, 77, 1, 2, 3, 11, 218, 176, 73, 12, 13, 112, 74, 75, 76, 77, 113, 1, 2, 3, 11, 114, 200, 197, 198, 13, 201, 1, 2, 3, 11, 199, 202, 203, 204, 13, 216, 205, 206, 207, 210, 226, 231, 14, 15, 236, 237, 1, 2, 3, 162, 227, 73, 1, 232, 13, 74, 75, 76, 77, 233, 234, 2, 9, 23, 240, 241, 242, 244, 222, 15, 238, 75, 37, 0, 0, 37, 37, 37, 37, 37, 37, 37, 38, 26, 15, 38, 38, 38, 38, 38, 38, 38, 34, 126, 15, 34, 34, 34, 34, 34, 34, 34, 33, 0, 0, 33, 33, 33, 33, 33, 33, 33, 36, 26, 15, 36, 36, 36, 36, 36, 36, 36, 35, 0, 0, 35, 35, 35, 35, 35, 35, 35, 15, 14, 37, 15, 14, 178, 37, 37, 37, 0, 16, 19, 38, 16, 19, 179, 38, 38, 38, 0, 18, 17, 34, 18, 17, 180, 34, 34, 34, 16, 0, 0, 33, 0, 0, 0, 33, 0, 27, 0, 66, 0, 36, 0, 0, 0, 36, 0, 0, 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 74, 75, 76, 77, 0, 0, 73, 0, 0, 0, 74, 75, 76, 77, 181, 0, 73, 0, 0, 0, 74, 75, 76, 77, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 182, 0, 0, 0, 134, 135, 136, 137, 138, 183, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 184, 0, 0, 0, 163, 163, 163, 163, 163, 171, 172, 186, 0, 73, 0, 0, 0, 74, 75, 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 73, 0, 0, 188, 74, 75, 76, 77, 0, 73, 0, 189, 0, 74, 75, 76, 77, 0, 0, 191, 0, 0, 0, 0, 0, 73, 0, 192, 0, 74, 75, 76, 77, 0, 0, 0, 73, 194, 0, 0, 74, 75, 76, 77, 0, 195, 0, 0, 213, 0, 0, 0, 0, 214, 73, 196, 215, 0, 74, 75, 76, 77, 73, 228, 0, 163, 74, 75, 76, 77, 73, 229, 0, 223, 74, 75, 76, 77, 73, 230, 0, 0, 74, 75, 76, 77, 73, 0, 0, 0, 74, 75, 76, 77, 235, 0, 73, 223, 0, 0, 74, 75, 76, 77, 73, 0, 0, 0, 74, 75, 76, 77, 0, 0, 73, 0, 0, 0, 74, 75, 76, 77, 73, 0, 0, 0, 74, 75, 76, 77, 73, 0, 0, 0, 74, 75, 76, 77, 73, 0, 0, 0, 74, 75, 76, 77, 67, 68, 69, 70, 71, 72, 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 73, 0, 0, 0, 74, 75, 76, 77, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, }; short yycheck[] = { 4, 0, 106, 0, 0, 80, 81, 263, 5, 5, 266, 0, 79, 80, 81, 108, 109, 110, 111, 104, 105, 0, 257, 258, 259, 265, 264, 263, 265, 260, 266, 0, 267, 264, 266, 265, 103, 104, 105, 114, 263, 0, 260, 266, 263, 257, 258, 114, 325, 265, 265, 0, 329, 330, 331, 332, 330, 331, 332, 265, 263, 0, 0, 266, 267, 268, 269, 270, 271, 272, 263, 0, 0, 266, 267, 268, 269, 270, 271, 272, 263, 0, 0, 79, 80, 81, 324, 265, 263, 325, 325, 265, 327, 329, 330, 331, 332, 263, 265, 174, 175, 297, 298, 299, 208, 209, 325, 174, 175, 202, 329, 330, 331, 332, 263, 103, 104, 105, 114, 265, 265, 265, 325, 263, 265, 332, 329, 330, 331, 332, 265, 265, 325, 265, 265, 239, 329, 330, 331, 332, 266, 265, 325, 265, 265, 265, 329, 330, 331, 332, 325, 265, 265, 265, 329, 330, 331, 332, 265, 325, 265, 263, 265, 329, 330, 331, 332, 257, 258, 259, 260, 265, 263, 265, 264, 265, 325, 265, 174, 175, 329, 330, 331, 332, 266, 325, 265, 265, 265, 329, 330, 331, 332, 257, 258, 259, 260, 201, 266, 325, 264, 265, 265, 329, 330, 331, 332, 265, 257, 258, 259, 260, 265, 261, 266, 266, 265, 263, 257, 258, 259, 260, 266, 263, 266, 266, 265, 260, 266, 266, 266, 263, 266, 263, 324, 325, 232, 233, 257, 258, 259, 260, 266, 325, 257, 263, 265, 329, 330, 331, 332, 263, 263, 0, 0, 4, 266, 266, 266, 266, 324, 325, 234, 266, 263, -1, -1, 266, 267, 268, 269, 270, 271, 272, 263, 324, 325, 266, 267, 268, 269, 270, 271, 272, 263, 324, 325, 266, 267, 268, 269, 270, 271, 272, 263, -1, -1, 266, 267, 268, 269, 270, 271, 272, 263, 324, 325, 266, 267, 268, 269, 270, 271, 272, 263, -1, -1, 266, 267, 268, 269, 270, 271, 272, 263, 263, 325, 266, 266, 266, 329, 330, 331, -1, 263, 263, 325, 266, 266, 266, 329, 330, 331, -1, 263, 263, 325, 266, 266, 266, 329, 330, 331, 4, -1, -1, 325, -1, -1, -1, 329, -1, 13, -1, 15, -1, 325, -1, -1, -1, 329, -1, -1, -1, -1, -1, 325, -1, -1, -1, 329, -1, -1, -1, -1, -1, -1, -1, 325, -1, -1, -1, 329, 330, 331, 332, -1, -1, 325, -1, -1, -1, 329, 330, 331, 332, 266, -1, 325, -1, -1, -1, 329, 330, 331, 332, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 266, -1, -1, -1, 82, 83, 84, 85, 86, 266, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 266, -1, -1, -1, 107, 108, 109, 110, 111, 112, 113, 266, -1, 325, -1, -1, -1, 329, 330, 331, 332, -1, -1, -1, -1, -1, -1, -1, -1, 266, -1, -1, -1, -1, 325, -1, -1, 266, 329, 330, 331, 332, -1, 325, -1, 266, -1, 329, 330, 331, 332, -1, -1, 266, -1, -1, -1, -1, -1, 325, -1, 266, -1, 329, 330, 331, 332, -1, -1, -1, 325, 266, -1, -1, 329, 330, 331, 332, -1, 266, -1, -1, 185, -1, -1, -1, -1, 190, 325, 266, 193, -1, 329, 330, 331, 332, 325, 266, -1, 202, 329, 330, 331, 332, 325, 266, -1, 210, 329, 330, 331, 332, 325, 266, -1, -1, 329, 330, 331, 332, 325, -1, -1, -1, 329, 330, 331, 332, 231, -1, 325, 234, -1, -1, 329, 330, 331, 332, 325, -1, -1, -1, 329, 330, 331, 332, -1, -1, 325, -1, -1, -1, 329, 330, 331, 332, 325, -1, -1, -1, 329, 330, 331, 332, 325, -1, -1, -1, 329, 330, 331, 332, 325, -1, -1, -1, 329, 330, 331, 332, 267, 268, 269, 270, 271, 272, -1, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323, 325, -1, -1, -1, 329, 330, 331, 332, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, -1, -1, 300, 301, 302, 303, 304, 305, 306, -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 323, }; #define YYFINAL 7 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 333 #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,0,0,0,0,0,0,0,0,0,0,0,0,0,"L_INTEGER","L_FLOAT","L_DATE", "L_CELL_ID","L_COLON","L_DOUBLEQUOTE","L_COMMA","L_STRING","L_LEFTPAR", "L_RIGHTPAR","L_EQUAL","L_GREATER","L_SMALLER","L_NEQUAL","L_SMALLEREQ", "L_GREATEREQ","L_AND","L_OR","L_NOT","L_ABS","L_INTF","L_SQRT","L_LOG","L_LN", "L_PI","L_SIN","L_COS","L_TAN","L_ATAN2","L_ATAN","L_ASIN","L_ACOS","L_EXP", "L_MOD","L_DAY","L_MONTH","L_ROUND","L_HOUR","L_MINUTE","L_SECOND","L_UPPER", "L_LOWER","L_PROPER","L_SUMIF","L_SUM","L_AVG","L_COUNT","L_MIN","L_MAX", "L_VLOOKUP","L_NPV","L_VAR","L_STD","L_IRR","L_HLOOKUP","L_DSUM","L_DAVG", "L_DCOUNT","L_DMIN","L_DMAN","L_DVAR","L_DSTD","L_INDEX","L_COLS","L_ROWS", "L_REPEAT","L_IF","L_ETA","L_MINUS","L_HAT","L_LABEL","L_QUOTE","L_PLUS", "L_TIMES","L_DIVIDE","L_POWER","NEG", }; char *yyrule[] = { "$accept : result", "result : L_EQUAL stringexp", "result : L_EQUAL exp", "result : L_EQUAL logicexp", "result : integer", "result : L_MINUS integer", "result : float", "result : L_MINUS float", "result : date", "result : L_LABEL", "logicexp_int_cell : logicexp", "logicexp_int_cell : integer", "logicexp_int_cell : cell_id", "logicexp : L_ETA L_NOT L_LEFTPAR logicexp_int_cell L_RIGHTPAR", "logicexp : exp L_GREATER exp", "logicexp : exp L_EQUAL exp", "logicexp : exp L_SMALLER exp", "logicexp : exp L_GREATEREQ exp", "logicexp : exp L_SMALLEREQ exp", "logicexp : exp L_NEQUAL exp", "logicexp : L_ETA L_AND L_LEFTPAR logicexp_int_cell L_COMMA logicexp_int_cell L_RIGHTPAR", "logicexp : L_ETA L_OR L_LEFTPAR logicexp_int_cell L_COMMA logicexp_int_cell L_RIGHTPAR", "stringexp : string", "stringexp : L_ETA string_function", "string_cell_id : string", "string_cell_id : cell_id", "stringexp_exp : stringexp", "stringexp_exp : exp", "string_function : L_UPPER L_LEFTPAR string_cell_id L_RIGHTPAR", "string_function : L_LOWER L_LEFTPAR string_cell_id L_RIGHTPAR", "string_function : L_PROPER L_LEFTPAR string_cell_id L_RIGHTPAR", "string : L_STRING", "exp : cell_id", "exp : L_MINUS exp", "exp : exp L_POWER exp", "exp : exp L_PLUS exp", "exp : exp L_MINUS exp", "exp : exp L_TIMES exp", "exp : exp L_DIVIDE exp", "exp : L_LEFTPAR exp L_RIGHTPAR", "exp : L_ETA function", "exp : integer", "exp : float", "exp : date", "function : L_SUM L_LEFTPAR list_range_cell_value L_RIGHTPAR", "function : L_VLOOKUP L_LEFTPAR exp L_COMMA range L_COMMA integer L_RIGHTPAR", "function : L_HLOOKUP L_LEFTPAR exp L_COMMA range L_COMMA integer L_RIGHTPAR", "function : L_MAX L_LEFTPAR list_range_cell_value L_RIGHTPAR", "function : L_MIN L_LEFTPAR list_range_cell_value L_RIGHTPAR", "function : L_AVG L_LEFTPAR list_range_cell_value L_RIGHTPAR", "function : L_COUNT L_LEFTPAR list_range_cell_value L_RIGHTPAR", "function : L_IF L_LEFTPAR logicexp_int_cell L_COMMA stringexp_exp L_COMMA stringexp_exp L_RIGHTPAR", "function : L_ROUND L_LEFTPAR exp L_COMMA exp L_RIGHTPAR", "function : L_ABS L_LEFTPAR exp L_RIGHTPAR", "function : L_INTF L_LEFTPAR exp L_RIGHTPAR", "function : L_SQRT L_LEFTPAR exp L_RIGHTPAR", "function : L_LOG L_LEFTPAR exp L_RIGHTPAR", "function : L_LN L_LEFTPAR exp L_RIGHTPAR", "function : L_PI L_LEFTPAR L_RIGHTPAR", "function : L_SIN L_LEFTPAR exp L_RIGHTPAR", "function : L_COS L_LEFTPAR exp L_RIGHTPAR", "function : L_TAN L_LEFTPAR exp L_RIGHTPAR", "function : L_ATAN2 L_LEFTPAR exp L_COMMA exp L_RIGHTPAR", "function : L_ATAN L_LEFTPAR exp L_RIGHTPAR", "function : L_ASIN L_LEFTPAR exp L_RIGHTPAR", "function : L_ACOS L_LEFTPAR exp L_RIGHTPAR", "function : L_EXP L_LEFTPAR exp L_RIGHTPAR", "function : L_MOD L_LEFTPAR exp L_COMMA exp L_RIGHTPAR", "function : L_DAY L_LEFTPAR exp L_RIGHTPAR", "function : L_MONTH L_LEFTPAR exp L_RIGHTPAR", "function : L_HOUR L_LEFTPAR exp L_RIGHTPAR", "function : L_MINUTE L_LEFTPAR exp L_RIGHTPAR", "function : L_SECOND L_LEFTPAR exp L_RIGHTPAR", "function : L_SUMIF L_LEFTPAR range L_COMMA stringexp L_COMMA exp L_COMMA range L_RIGHTPAR", "list_range_cell_value : range_cell_value L_COMMA list_range_cell_value", "list_range_cell_value : range_cell_value", "range_cell_value : range", "range_cell_value : exp", "range : L_CELL_ID L_COLON L_CELL_ID", "cell_id : L_CELL_ID", "float : L_FLOAT", "date : L_DATE", "integer : L_INTEGER", }; #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; #line 386 "gram.y" /* $Log: gram.y,v $ * Revision 1.28 1998/10/20 13:20:47 cthulhu * Added dummy types and actions to two rules so bison wouldn't type clash on * default action ($$=$1). * * Revision 1.27 1998/08/06 21:05:21 aml * Released alpha version of Abacus. * * Revision 1.26 1997/02/10 15:09:56 aml * Print settings now are saved to file. * Fixed buggy error message when loading sheets. * * Revision 1.25 1997/01/02 16:15:27 aml * Fixed unsufficient range of colunm width. * First cut of vlookup and hlookup functions. * Fixed bug in display routines. * * Revision 1.24 1996/12/11 21:39:40 aml * Sumif implemented. * Diverse time functions implemented. * Fixed needtoscroll2 to avoid out of control scroll. * * Revision 1.23 1996/10/07 12:35:21 aml * First cut at error handling. * Date formats are in. * Fixed problem with blank cell drawing. * * Revision 1.22 1996/08/28 17:17:06 aml * Load and save now accept string_value for formula cells. * This fixes previous thought problem of formula values not * being stored. * Functions upper,lower and proper created. * Function if can now return labels. * Fixed problem with function count. * Reasonably stable version, very used to manipulate notas.wk1. * * Revision 1.21 1996/08/27 17:18:41 aml * First version of regressive tests created. * Changes were made to allow for string functions. * String function upper created. Raises the problem * that formulas do NOT have a space for string values, * and therefore have to be evaluated upon loading. * * Revision 1.20 1996/08/26 17:22:20 aml * Function round fixed. * Many other functions added, from power to mod. * * Revision 1.19 1996/07/23 14:00:30 aml * Changed canvas widget to handle special items like cell borders. * Seems to work well. Spreadsheet size is no more limited now. * * Revision 1.18 1996/03/11 15:47:41 aml * Made redraw more efficient by removing at once all cells before redrawing. * Fixed problem with unsufficient difinition of logical expressions. * Added >=, <=, <>, @and and @or functions. * * Revision 1.17 1996/03/09 08:32:35 aml * Fixed problem in string_single_arg macro * Created if function, boolean evaluations and so on. * Improved print controls. * * Revision 1.16 1996/03/08 19:00:15 aml * Fixed problem in string_single_arg macro * Created if function, boolean evaluations and so on. * * Revision 1.15 1996/03/07 20:32:44 aml * Created print range ability. * Set in gray non-working menus. * Created RangeKill command. * Created round function and macros for single argument functions. * * Revision 1.14 1996/03/01 13:08:27 aml * Stack references are now pushed instead of double value. * Fixed problem with integers too large on formulas. * Scroll with cursors now works better. * * Revision 1.13 1996/02/19 15:47:30 aml * Fixed abnormality with mouse click. * Variable width columns implemented, but not yet saved. * Labels are now a lex element, fixing some aberrant behavior that existed. * * Revision 1.12 1996/02/16 23:09:25 aml * Improved user interf state machine. * Centralized range definitions. * Range defined outiside current view work properly. * * Revision 1.11 1996/02/13 12:03:19 aml * Fixed bug with range definition via mouse. * Fixed bug in range iterators. * * Revision 1.10 1996/01/11 22:48:38 aml * Range iterators created. * Functions sum, max and min now work properly. * Negative numbers now allowed by flex (oops :-) * * Revision 1.9 1996/01/10 18:53:36 aml * Fixed limited integer range of cells. * Fixed incorrect code in spreadsheet type. * Users interface improved. Cursors and mouse clicks * now work in the most basic modes. * * Revision 1.8 1996/01/07 09:07:23 aml * Sheet::save and Sheet::load created. * Program can now write and read wk1 files. * Slight changes made to relative references. Bit 14 is now always 0. * * Revision 1.7 1996/01/05 23:05:52 aml * Cell references evaluated. * Spreadsheet is recalculated at every change, by an arbitrary order. * Reformulated program structure. Evaluation and reverse parsing * are member functions of Sheet. * * Revision 1.6 1996/01/04 20:27:11 aml * Range references parsed and reverse parsed. * * Revision 1.5 1996/01/03 23:07:03 aml * Absolute and relative references to cells introduced. * They are parsed and reverse parsed, not yet evaluated. * * Revision 1.4 1996/01/02 16:22:04 aml * Formula compilation, evaluation and decompilation now work. * Cells can be of type label, numerical formula or numbers. * * Revision 1.3 1995/12/30 16:40:21 aml * First cut of formula compilation. * * Revision 1.2 1995/12/28 19:20:34 aml * Created skeleton to merge calculation engine * * Revision 1.1 1995/12/28 18:23:09 aml * Initial revision * * Revision 1.7 1995/09/18 09:25:35 aml * Last working release with inline expressions. * Move to wk1 format will start after this. * * Revision 1.6 1995/08/18 19:39:32 aml * Modularized to allow for multiple spreadsheets. * Introduced bindings for cursors in main canvas. * Introduced range_opers. Copy redone, cut created. * Automatic positioning of active cell. * * Revision 1.5 1995/08/08 22:07:05 aml * Fixed copy operation. * Fixed parsing of ranges in operations. * * Revision 1.4 1995/06/26 22:52:25 aml * Change to C++ * * Revision 1.3 1995/06/25 00:09:44 aml * First version of copy * * Revision 1.2 1995/06/23 16:10:17 aml * *** empty log message *** * * Revision 1.1 1995/06/23 15:41:34 aml * Initial revision * */ #line 710 "y.tab.c" /* 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 1: #line 130 "gram.y" {act_parser->code = CODE_FORMULA; act_parser->cell->append(NULL,FORM_RETURN);} break; case 2: #line 132 "gram.y" {act_parser->code = CODE_FORMULA; act_parser->cell->append(NULL,FORM_RETURN);} break; case 3: #line 134 "gram.y" {act_parser->code = CODE_FORMULA; act_parser->cell->append(NULL,FORM_RETURN);} break; case 4: #line 136 "gram.y" { if (yyvsp[0].ival <= 32767 && yyvsp[0].ival > -32766) { act_parser->code = CODE_INTEGER; act_parser->integ = (short)yyvsp[0].ival; } else { act_parser->code = CODE_NUMBER; act_parser->number = (double)(yyvsp[0].ival); }} break; case 5: #line 145 "gram.y" { if (yyvsp[0].ival <= 32767 && yyvsp[0].ival > -32766) { act_parser->code = CODE_INTEGER; act_parser->integ = - ((short)yyvsp[0].ival); } else { act_parser->code = CODE_NUMBER; act_parser->number = - (double)(yyvsp[0].ival); }} break; case 6: #line 154 "gram.y" {act_parser->code = CODE_NUMBER; act_parser->number = yyvsp[0].fval;} break; case 7: #line 156 "gram.y" {act_parser->code = CODE_NUMBER; act_parser->number = -(yyvsp[0].fval);} break; case 8: #line 158 "gram.y" {act_parser->code = CODE_NUMBER; act_parser->number = yyvsp[0].fval;} break; case 9: #line 160 "gram.y" {act_parser->code = CODE_LABEL;} break; case 10: #line 164 "gram.y" {yyval.stval=NULL;} break; case 11: #line 165 "gram.y" {yyval.stval=NULL;} break; case 12: #line 166 "gram.y" {yyval.stval=NULL;} break; case 13: #line 171 "gram.y" {act_parser->cell->append(NULL,FORM_NOT);} break; case 14: #line 173 "gram.y" {act_parser->cell->append(NULL,FORM_GREATER);} break; case 15: #line 175 "gram.y" {act_parser->cell->append(NULL,FORM_EQUAL);} break; case 16: #line 177 "gram.y" {act_parser->cell->append(NULL,FORM_SMALLER);} break; case 17: #line 179 "gram.y" {act_parser->cell->append(NULL,FORM_GREATEREQ);} break; case 18: #line 181 "gram.y" {act_parser->cell->append(NULL,FORM_SMALLEREQ);} break; case 19: #line 183 "gram.y" {act_parser->cell->append(NULL,FORM_NEQUAL);} break; case 20: #line 185 "gram.y" {act_parser->cell->append(NULL,FORM_AND);} break; case 21: #line 187 "gram.y" {act_parser->cell->append(NULL,FORM_OR);} break; case 22: #line 193 "gram.y" {} break; case 23: #line 194 "gram.y" {} break; case 24: #line 198 "gram.y" {} break; case 25: #line 200 "gram.y" {} break; case 26: #line 204 "gram.y" {} break; case 27: #line 204 "gram.y" {} break; case 28: #line 208 "gram.y" {act_parser->cell->append(NULL,FORM_UPPER);} break; case 29: #line 210 "gram.y" {act_parser->cell->append(NULL,FORM_LOWER);} break; case 30: #line 212 "gram.y" {act_parser->cell->append(NULL,FORM_PROPER);} break; case 31: #line 218 "gram.y" {act_parser->cell->append(yyval.stval,FORM_STRING);} break; case 32: #line 221 "gram.y" {} break; case 33: #line 223 "gram.y" {act_parser->cell->append(NULL,FORM_UNARY_MINUS);} break; case 34: #line 225 "gram.y" {act_parser->cell->append(NULL,FORM_POWER);} break; case 35: #line 227 "gram.y" {act_parser->cell->append(NULL,FORM_PLUS);} break; case 36: #line 229 "gram.y" {act_parser->cell->append(NULL,FORM_SUB);} break; case 37: #line 231 "gram.y" {act_parser->cell->append(NULL,FORM_MULT);} break; case 38: #line 233 "gram.y" {act_parser->cell->append(NULL,FORM_DIV);} break; case 39: #line 235 "gram.y" {act_parser->cell->append(NULL,FORM_PAR);} break; case 40: #line 237 "gram.y" {} break; case 41: #line 239 "gram.y" {} break; case 42: #line 241 "gram.y" {} break; case 43: #line 243 "gram.y" {} break; case 44: #line 248 "gram.y" {act_parser->cell->append(&var_arg_cnt, FORM_SUM);} break; case 45: #line 252 "gram.y" {act_parser->cell->append(&cnt, FORM_VLOOKUP);} break; case 46: #line 256 "gram.y" {act_parser->cell->append(&cnt, FORM_HLOOKUP);} break; case 47: #line 259 "gram.y" {act_parser->cell->append(&var_arg_cnt, FORM_MAX);} break; case 48: #line 262 "gram.y" {act_parser->cell->append(&var_arg_cnt, FORM_MIN);} break; case 49: #line 265 "gram.y" {act_parser->cell->append(&var_arg_cnt, FORM_AVG);} break; case 50: #line 268 "gram.y" {act_parser->cell->append(&var_arg_cnt, FORM_COUNT);} break; case 51: #line 271 "gram.y" {var_arg_cnt = 3; act_parser->cell->append(&var_arg_cnt, FORM_IF);} break; case 52: #line 275 "gram.y" {act_parser->cell->append(&cnt, FORM_ROUND);} break; case 53: #line 278 "gram.y" {act_parser->cell->append(&cnt, FORM_ABS);} break; case 54: #line 281 "gram.y" {act_parser->cell->append(&cnt, FORM_INTF);} break; case 55: #line 284 "gram.y" {act_parser->cell->append(&cnt, FORM_SQRT);} break; case 56: #line 287 "gram.y" {act_parser->cell->append(&cnt, FORM_LOG);} break; case 57: #line 290 "gram.y" {act_parser->cell->append(&cnt, FORM_LN);} break; case 58: #line 293 "gram.y" {act_parser->cell->append(&cnt, FORM_PI);} break; case 59: #line 296 "gram.y" {act_parser->cell->append(&cnt, FORM_SIN);} break; case 60: #line 299 "gram.y" {act_parser->cell->append(&cnt, FORM_COS);} break; case 61: #line 302 "gram.y" {act_parser->cell->append(&cnt, FORM_TAN);} break; case 62: #line 305 "gram.y" {act_parser->cell->append(&cnt, FORM_ATAN2);} break; case 63: #line 308 "gram.y" {act_parser->cell->append(&cnt, FORM_ATAN);} break; case 64: #line 311 "gram.y" {act_parser->cell->append(&cnt, FORM_ASIN);} break; case 65: #line 314 "gram.y" {act_parser->cell->append(&cnt, FORM_ACOS);} break; case 66: #line 317 "gram.y" {act_parser->cell->append(&cnt, FORM_EXP);} break; case 67: #line 320 "gram.y" {act_parser->cell->append(&cnt, FORM_MOD);} break; case 68: #line 323 "gram.y" {act_parser->cell->append(&cnt, FORM_DAY);} break; case 69: #line 326 "gram.y" {act_parser->cell->append(&cnt, FORM_MONTH);} break; case 70: #line 329 "gram.y" {act_parser->cell->append(&cnt, FORM_HOUR);} break; case 71: #line 332 "gram.y" {act_parser->cell->append(&cnt, FORM_MINUTE);} break; case 72: #line 335 "gram.y" {act_parser->cell->append(&cnt, FORM_SECOND);} break; case 73: #line 338 "gram.y" {var_arg_cnt = 4; act_parser->cell->append(&var_arg_cnt, FORM_SUMIF);} break; case 74: #line 344 "gram.y" {var_arg_cnt++;} break; case 75: #line 345 "gram.y" {var_arg_cnt = 1;} break; case 76: #line 350 "gram.y" {yyval.stval=NULL;} break; case 77: #line 351 "gram.y" {yyval.stval=NULL;} break; case 78: #line 355 "gram.y" {Range *rg = range_reference(yyvsp[-2].stval,yyvsp[0].stval); act_parser->cell->append(rg,FORM_RANGE);} break; case 79: #line 360 "gram.y" {Ref *ref = cell_reference(yyvsp[0].stval); act_parser->cell->append(ref,FORM_REF);} break; case 80: #line 363 "gram.y" {yyval.fval = yyvsp[0].fval; act_parser->cell->append(&(yyvsp[0].fval),FORM_FP);} break; case 81: #line 366 "gram.y" {yyval.fval = yyvsp[0].fval; act_parser->cell->append(&(yyvsp[0].fval),FORM_FP); act_parser->cell->setformat(DEFAULT_DATE_FORMAT);} break; case 82: #line 373 "gram.y" {yyval.ival = yyvsp[0].ival; if (yyvsp[0].ival <= 32767 && yyvsp[0].ival > -32766) act_parser->cell->append(&(yyvsp[0].ival),FORM_INT); else { double x; x = yyvsp[0].ival; act_parser->cell->append(&(x),FORM_FP); }} break; #line 1267 "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); }