1 /* original parser id follows */ 2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4 5 #define YYBYACC 1 6 #define YYMAJOR 2 7 #define YYMINOR 0 8 #define YYCHECK "yyyymmdd" 9 10 #define YYEMPTY (-1) 11 #define yyclearin (yychar = YYEMPTY) 12 #define yyerrok (yyerrflag = 0) 13 #define YYRECOVERING() (yyerrflag != 0) 14 #define YYENOMEM (-2) 15 #define YYEOF 0 16 #undef YYBTYACC 17 #define YYBTYACC 1 18 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug") 19 20 #ifndef yyparse 21 #define yyparse destroy2_parse 22 #endif /* yyparse */ 23 24 #ifndef yylex 25 #define yylex destroy2_lex 26 #endif /* yylex */ 27 28 #ifndef yyerror 29 #define yyerror destroy2_error 30 #endif /* yyerror */ 31 32 #ifndef yychar 33 #define yychar destroy2_char 34 #endif /* yychar */ 35 36 #ifndef yyval 37 #define yyval destroy2_val 38 #endif /* yyval */ 39 40 #ifndef yylval 41 #define yylval destroy2_lval 42 #endif /* yylval */ 43 44 #ifndef yydebug 45 #define yydebug destroy2_debug 46 #endif /* yydebug */ 47 48 #ifndef yynerrs 49 #define yynerrs destroy2_nerrs 50 #endif /* yynerrs */ 51 52 #ifndef yyerrflag 53 #define yyerrflag destroy2_errflag 54 #endif /* yyerrflag */ 55 56 #ifndef yylhs 57 #define yylhs destroy2_lhs 58 #endif /* yylhs */ 59 60 #ifndef yylen 61 #define yylen destroy2_len 62 #endif /* yylen */ 63 64 #ifndef yydefred 65 #define yydefred destroy2_defred 66 #endif /* yydefred */ 67 68 #ifndef yystos 69 #define yystos destroy2_stos 70 #endif /* yystos */ 71 72 #ifndef yydgoto 73 #define yydgoto destroy2_dgoto 74 #endif /* yydgoto */ 75 76 #ifndef yysindex 77 #define yysindex destroy2_sindex 78 #endif /* yysindex */ 79 80 #ifndef yyrindex 81 #define yyrindex destroy2_rindex 82 #endif /* yyrindex */ 83 84 #ifndef yygindex 85 #define yygindex destroy2_gindex 86 #endif /* yygindex */ 87 88 #ifndef yytable 89 #define yytable destroy2_table 90 #endif /* yytable */ 91 92 #ifndef yycheck 93 #define yycheck destroy2_check 94 #endif /* yycheck */ 95 96 #ifndef yyname 97 #define yyname destroy2_name 98 #endif /* yyname */ 99 100 #ifndef yyrule 101 #define yyrule destroy2_rule 102 #endif /* yyrule */ 103 104 #if YYBTYACC 105 106 #ifndef yycindex 107 #define yycindex destroy2_cindex 108 #endif /* yycindex */ 109 110 #ifndef yyctable 111 #define yyctable destroy2_ctable 112 #endif /* yyctable */ 113 114 #endif /* YYBTYACC */ 115 116 #define YYPREFIX "destroy2_" 117 118 #define YYPURE 0 119 120 #line 4 "btyacc_destroy2.y" 121 #include <stdlib.h> 122 123 typedef enum {cGLOBAL, cLOCAL} class; 124 typedef enum {tREAL, tINTEGER} type; 125 typedef char * name; 126 127 struct symbol { class c; type t; name id; }; 128 typedef struct symbol symbol; 129 130 struct namelist { symbol *s; struct namelist *next; }; 131 typedef struct namelist namelist; 132 133 struct parser_param { 134 int *rtrn; 135 symbol ss; 136 }; 137 138 extern symbol *mksymbol(type t, class c, name id); 139 140 #ifdef YYBISON 141 #define YYLEX_DECL() yylex(void) 142 #define YYERROR_DECL() yyerror(const char *s) 143 #endif 144 #ifdef YYSTYPE 145 #undef YYSTYPE_IS_DECLARED 146 #define YYSTYPE_IS_DECLARED 1 147 #endif 148 #ifndef YYSTYPE_IS_DECLARED 149 #define YYSTYPE_IS_DECLARED 1 150 #line 50 "btyacc_destroy2.y" 151 typedef union 152 { 153 class cval; 154 type tval; 155 namelist * nlist; 156 name id; 157 } YYSTYPE; 158 #endif /* !YYSTYPE_IS_DECLARED */ 159 #line 160 "btyacc_destroy2.tab.c" 160 161 /* compatibility with bison */ 162 #ifdef YYPARSE_PARAM 163 /* compatibility with FreeBSD */ 164 # ifdef YYPARSE_PARAM_TYPE 165 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 166 # else 167 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 168 # endif 169 #else 170 # define YYPARSE_DECL() yyparse(struct parser_param *param, int flag) 171 #endif 172 173 /* Parameters sent to lex. */ 174 #ifdef YYLEX_PARAM 175 # define YYLEX_DECL() yylex(void *YYLEX_PARAM) 176 # define YYLEX yylex(YYLEX_PARAM) 177 #else 178 # define YYLEX_DECL() yylex(void) 179 # define YYLEX yylex() 180 #endif 181 182 /* Parameters sent to yyerror. */ 183 #ifndef YYERROR_DECL 184 #define YYERROR_DECL() yyerror(struct parser_param *param, int flag, const char *s) 185 #endif 186 #ifndef YYERROR_CALL 187 #define YYERROR_CALL(msg) yyerror(param, flag, msg) 188 #endif 189 190 #ifndef YYDESTRUCT_DECL 191 #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, struct parser_param *param, int flag) 192 #endif 193 #ifndef YYDESTRUCT_CALL 194 #define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val, param, flag) 195 #endif 196 197 extern int YYPARSE_DECL(); 198 199 #define GLOBAL 257 200 #define LOCAL 258 201 #define REAL 259 202 #define INTEGER 260 203 #define NAME 261 204 #define YYERRCODE 256 205 typedef int YYINT; 206 static const YYINT destroy2_lhs[] = { -1, 207 0, 0, 2, 2, 3, 3, 4, 4, 1, 208 }; 209 static const YYINT destroy2_len[] = { 2, 210 8, 5, 1, 1, 1, 1, 2, 1, 6, 211 }; 212 static const YYINT destroy2_defred[] = { 0, 213 3, 4, 5, 6, 0, 0, 0, 0, 8, 0, 214 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 215 0, 0, 0, 0, 9, 1, 216 }; 217 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) 218 static const YYINT destroy2_stos[] = { 0, 219 257, 258, 259, 260, 263, 265, 266, 266, 261, 264, 220 267, 267, 40, 261, 40, 40, 265, 258, 265, 41, 221 44, 44, 266, 266, 41, 41, 222 }; 223 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ 224 static const YYINT destroy2_dgoto[] = { 5, 225 10, 6, 7, 11, 226 }; 227 static const YYINT destroy2_sindex[] = { -254, 228 0, 0, 0, 0, 0, -251, -248, -248, 0, -26, 229 -40, -39, -246, 0, -243, -246, -25, -24, -23, 0, 230 -251, -251, -22, -19, 0, 0, 231 }; 232 static const YYINT destroy2_rindex[] = { 0, 233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235 0, 0, 0, 0, 0, 0, 236 }; 237 #if YYBTYACC 238 static const YYINT destroy2_cindex[] = { 0, 239 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241 0, 0, 0, 0, 0, 0, 242 }; 243 #endif 244 static const YYINT destroy2_gindex[] = { 0, 245 0, -6, -4, 15, 246 }; 247 #define YYTABLESIZE 222 248 static const YYINT destroy2_table[] = { 15, 249 16, 8, 1, 2, 3, 4, 17, 3, 4, 19, 250 1, 2, 9, 13, 18, 20, 23, 24, 25, 21, 251 22, 26, 12, 0, 0, 0, 0, 0, 0, 0, 252 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271 14, 14, 272 }; 273 static const YYINT destroy2_check[] = { 40, 274 40, 6, 257, 258, 259, 260, 13, 259, 260, 16, 275 257, 258, 261, 40, 258, 41, 21, 22, 41, 44, 276 44, 41, 8, -1, -1, -1, -1, -1, -1, -1, 277 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 278 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 281 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 282 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 284 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 285 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 287 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 288 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 291 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 295 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 296 261, 261, 297 }; 298 #if YYBTYACC 299 static const YYINT destroy2_ctable[] = { -1, 300 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 302 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 303 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 304 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 309 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 310 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 311 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 312 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 314 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 315 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 317 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 319 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 321 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322 -1, 323 }; 324 #endif 325 #define YYFINAL 5 326 #ifndef YYDEBUG 327 #define YYDEBUG 0 328 #endif 329 #define YYMAXTOKEN 261 330 #define YYUNDFTOKEN 268 331 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 332 #if YYDEBUG 333 static const char *const destroy2_name[] = { 334 335 "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 336 0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 337 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 338 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 339 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 340 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 341 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL", 342 "REAL","INTEGER","NAME","$accept","declaration","locnamelist","class","type", 343 "namelist","illegal-symbol", 344 }; 345 static const char *const destroy2_rule[] = { 346 "$accept : declaration", 347 "declaration : class type namelist '(' class ',' type ')'", 348 "declaration : type locnamelist '(' class ')'", 349 "class : GLOBAL", 350 "class : LOCAL", 351 "type : REAL", 352 "type : INTEGER", 353 "namelist : namelist NAME", 354 "namelist : NAME", 355 "locnamelist : namelist '(' LOCAL ',' type ')'", 356 357 }; 358 #endif 359 360 #if YYDEBUG 361 int yydebug; 362 #endif 363 364 int yyerrflag; 365 int yychar; 366 YYSTYPE yyval; 367 YYSTYPE yylval; 368 int yynerrs; 369 370 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 371 YYLTYPE yyloc; /* position returned by actions */ 372 YYLTYPE yylloc; /* position from the lexer */ 373 #endif 374 375 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 376 #ifndef YYLLOC_DEFAULT 377 #define YYLLOC_DEFAULT(loc, rhs, n) \ 378 do \ 379 { \ 380 if (n == 0) \ 381 { \ 382 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ 383 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ 384 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ 385 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ 386 } \ 387 else \ 388 { \ 389 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ 390 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ 391 (loc).last_line = YYRHSLOC(rhs, n).last_line; \ 392 (loc).last_column = YYRHSLOC(rhs, n).last_column; \ 393 } \ 394 } while (0) 395 #endif /* YYLLOC_DEFAULT */ 396 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 397 #if YYBTYACC 398 399 #ifndef YYLVQUEUEGROWTH 400 #define YYLVQUEUEGROWTH 32 401 #endif 402 #endif /* YYBTYACC */ 403 404 /* define the initial stack-sizes */ 405 #ifdef YYSTACKSIZE 406 #undef YYMAXDEPTH 407 #define YYMAXDEPTH YYSTACKSIZE 408 #else 409 #ifdef YYMAXDEPTH 410 #define YYSTACKSIZE YYMAXDEPTH 411 #else 412 #define YYSTACKSIZE 10000 413 #define YYMAXDEPTH 10000 414 #endif 415 #endif 416 417 #ifndef YYINITSTACKSIZE 418 #define YYINITSTACKSIZE 200 419 #endif 420 421 typedef struct { 422 unsigned stacksize; 423 YYINT *s_base; 424 YYINT *s_mark; 425 YYINT *s_last; 426 YYSTYPE *l_base; 427 YYSTYPE *l_mark; 428 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 429 YYLTYPE *p_base; 430 YYLTYPE *p_mark; 431 #endif 432 } YYSTACKDATA; 433 #if YYBTYACC 434 435 struct YYParseState_s 436 { 437 struct YYParseState_s *save; /* Previously saved parser state */ 438 YYSTACKDATA yystack; /* saved parser stack */ 439 int state; /* saved parser state */ 440 int errflag; /* saved error recovery status */ 441 int lexeme; /* saved index of the conflict lexeme in the lexical queue */ 442 YYINT ctry; /* saved index in yyctable[] for this conflict */ 443 }; 444 typedef struct YYParseState_s YYParseState; 445 #endif /* YYBTYACC */ 446 /* variables for the parser stack */ 447 static YYSTACKDATA yystack; 448 #if YYBTYACC 449 450 /* Current parser state */ 451 static YYParseState *yyps = 0; 452 453 /* yypath != NULL: do the full parse, starting at *yypath parser state. */ 454 static YYParseState *yypath = 0; 455 456 /* Base of the lexical value queue */ 457 static YYSTYPE *yylvals = 0; 458 459 /* Current position at lexical value queue */ 460 static YYSTYPE *yylvp = 0; 461 462 /* End position of lexical value queue */ 463 static YYSTYPE *yylve = 0; 464 465 /* The last allocated position at the lexical value queue */ 466 static YYSTYPE *yylvlim = 0; 467 468 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 469 /* Base of the lexical position queue */ 470 static YYLTYPE *yylpsns = 0; 471 472 /* Current position at lexical position queue */ 473 static YYLTYPE *yylpp = 0; 474 475 /* End position of lexical position queue */ 476 static YYLTYPE *yylpe = 0; 477 478 /* The last allocated position at the lexical position queue */ 479 static YYLTYPE *yylplim = 0; 480 #endif 481 482 /* Current position at lexical token queue */ 483 static YYINT *yylexp = 0; 484 485 static YYINT *yylexemes = 0; 486 #endif /* YYBTYACC */ 487 #line 89 "btyacc_destroy2.y" 488 489 extern int YYLEX_DECL(); 490 extern void YYERROR_DECL(); 491 #line 492 "btyacc_destroy2.tab.c" 492 493 /* Release memory associated with symbol. */ 494 #if ! defined YYDESTRUCT_IS_DECLARED 495 static void 496 YYDESTRUCT_DECL() 497 { 498 switch (psymb) 499 { 500 case 263: 501 #line 41 "btyacc_destroy2.y" 502 { 503 namelist *p = (*val).nlist; 504 while (p != NULL) 505 { namelist *pp = p; 506 p = p->next; 507 free(pp->s); free(pp); 508 } 509 } 510 #line 511 "btyacc_destroy2.tab.c" 511 break; 512 } 513 } 514 #define YYDESTRUCT_IS_DECLARED 1 515 #endif 516 517 /* For use in generated program */ 518 #define yydepth (int)(yystack.s_mark - yystack.s_base) 519 #if YYBTYACC 520 #define yytrial (yyps->save) 521 #endif /* YYBTYACC */ 522 523 #if YYDEBUG 524 #include <stdio.h> /* needed for printf */ 525 #endif 526 527 #include <stdlib.h> /* needed for malloc, etc */ 528 #include <string.h> /* needed for memset */ 529 530 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 531 static int yygrowstack(YYSTACKDATA *data) 532 { 533 int i; 534 unsigned newsize; 535 YYINT *newss; 536 YYSTYPE *newvs; 537 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 538 YYLTYPE *newps; 539 #endif 540 541 if ((newsize = data->stacksize) == 0) 542 newsize = YYINITSTACKSIZE; 543 else if (newsize >= YYMAXDEPTH) 544 return YYENOMEM; 545 else if ((newsize *= 2) > YYMAXDEPTH) 546 newsize = YYMAXDEPTH; 547 548 i = (int) (data->s_mark - data->s_base); 549 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 550 if (newss == NULL) 551 return YYENOMEM; 552 553 data->s_base = newss; 554 data->s_mark = newss + i; 555 556 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 557 if (newvs == NULL) 558 return YYENOMEM; 559 560 data->l_base = newvs; 561 data->l_mark = newvs + i; 562 563 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 564 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); 565 if (newps == NULL) 566 return YYENOMEM; 567 568 data->p_base = newps; 569 data->p_mark = newps + i; 570 #endif 571 572 data->stacksize = newsize; 573 data->s_last = data->s_base + newsize - 1; 574 575 #if YYDEBUG 576 if (yydebug) 577 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); 578 #endif 579 return 0; 580 } 581 582 #if YYPURE || defined(YY_NO_LEAKS) 583 static void yyfreestack(YYSTACKDATA *data) 584 { 585 free(data->s_base); 586 free(data->l_base); 587 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 588 free(data->p_base); 589 #endif 590 memset(data, 0, sizeof(*data)); 591 } 592 #else 593 #define yyfreestack(data) /* nothing */ 594 #endif /* YYPURE || defined(YY_NO_LEAKS) */ 595 #if YYBTYACC 596 597 static YYParseState * 598 yyNewState(unsigned size) 599 { 600 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); 601 if (p == NULL) return NULL; 602 603 p->yystack.stacksize = size; 604 if (size == 0) 605 { 606 p->yystack.s_base = NULL; 607 p->yystack.l_base = NULL; 608 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 609 p->yystack.p_base = NULL; 610 #endif 611 return p; 612 } 613 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); 614 if (p->yystack.s_base == NULL) return NULL; 615 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); 616 if (p->yystack.l_base == NULL) return NULL; 617 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); 618 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 619 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); 620 if (p->yystack.p_base == NULL) return NULL; 621 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); 622 #endif 623 624 return p; 625 } 626 627 static void 628 yyFreeState(YYParseState *p) 629 { 630 yyfreestack(&p->yystack); 631 free(p); 632 } 633 #endif /* YYBTYACC */ 634 635 #define YYABORT goto yyabort 636 #define YYREJECT goto yyabort 637 #define YYACCEPT goto yyaccept 638 #define YYERROR goto yyerrlab 639 #if YYBTYACC 640 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) 641 #define YYVALID_NESTED do { if (yyps->save && \ 642 yyps->save->save == 0) goto yyvalid; } while(0) 643 #endif /* YYBTYACC */ 644 645 int 646 YYPARSE_DECL() 647 { 648 int yym, yyn, yystate, yyresult; 649 #if YYBTYACC 650 int yynewerrflag; 651 YYParseState *yyerrctx = NULL; 652 #endif /* YYBTYACC */ 653 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 654 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ 655 #endif 656 #if YYDEBUG 657 const char *yys; 658 659 if ((yys = getenv("YYDEBUG")) != NULL) 660 { 661 yyn = *yys; 662 if (yyn >= '0' && yyn <= '9') 663 yydebug = yyn - '0'; 664 } 665 if (yydebug) 666 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); 667 #endif 668 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 669 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); 670 #endif 671 672 #if YYBTYACC 673 yyps = yyNewState(0); if (yyps == 0) goto yyenomem; 674 yyps->save = 0; 675 #endif /* YYBTYACC */ 676 yym = 0; 677 /* yyn is set below */ 678 yynerrs = 0; 679 yyerrflag = 0; 680 yychar = YYEMPTY; 681 yystate = 0; 682 683 #if YYPURE 684 memset(&yystack, 0, sizeof(yystack)); 685 #endif 686 687 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 688 yystack.s_mark = yystack.s_base; 689 yystack.l_mark = yystack.l_base; 690 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 691 yystack.p_mark = yystack.p_base; 692 #endif 693 yystate = 0; 694 *yystack.s_mark = 0; 695 696 yyloop: 697 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 698 if (yychar < 0) 699 { 700 #if YYBTYACC 701 do { 702 if (yylvp < yylve) 703 { 704 /* we're currently re-reading tokens */ 705 yylval = *yylvp++; 706 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 707 yylloc = *yylpp++; 708 #endif 709 yychar = *yylexp++; 710 break; 711 } 712 if (yyps->save) 713 { 714 /* in trial mode; save scanner results for future parse attempts */ 715 if (yylvp == yylvlim) 716 { /* Enlarge lexical value queue */ 717 size_t p = (size_t) (yylvp - yylvals); 718 size_t s = (size_t) (yylvlim - yylvals); 719 720 s += YYLVQUEUEGROWTH; 721 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; 722 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; 723 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 724 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; 725 #endif 726 yylvp = yylve = yylvals + p; 727 yylvlim = yylvals + s; 728 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 729 yylpp = yylpe = yylpsns + p; 730 yylplim = yylpsns + s; 731 #endif 732 yylexp = yylexemes + p; 733 } 734 *yylexp = (YYINT) YYLEX; 735 *yylvp++ = yylval; 736 yylve++; 737 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 738 *yylpp++ = yylloc; 739 yylpe++; 740 #endif 741 yychar = *yylexp++; 742 break; 743 } 744 /* normal operation, no conflict encountered */ 745 #endif /* YYBTYACC */ 746 yychar = YYLEX; 747 #if YYBTYACC 748 } while (0); 749 #endif /* YYBTYACC */ 750 if (yychar < 0) yychar = YYEOF; 751 #if YYDEBUG 752 if (yydebug) 753 { 754 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 755 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", 756 YYDEBUGSTR, yydepth, yystate, yychar, yys); 757 #ifdef YYSTYPE_TOSTRING 758 #if YYBTYACC 759 if (!yytrial) 760 #endif /* YYBTYACC */ 761 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); 762 #endif 763 fputc('\n', stderr); 764 } 765 #endif 766 } 767 #if YYBTYACC 768 769 /* Do we have a conflict? */ 770 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && 771 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 772 { 773 YYINT ctry; 774 775 if (yypath) 776 { 777 YYParseState *save; 778 #if YYDEBUG 779 if (yydebug) 780 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", 781 YYDEBUGSTR, yydepth, yystate); 782 #endif 783 /* Switch to the next conflict context */ 784 save = yypath; 785 yypath = save->save; 786 save->save = NULL; 787 ctry = save->ctry; 788 if (save->state != yystate) YYABORT; 789 yyFreeState(save); 790 791 } 792 else 793 { 794 795 /* Unresolved conflict - start/continue trial parse */ 796 YYParseState *save; 797 #if YYDEBUG 798 if (yydebug) 799 { 800 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); 801 if (yyps->save) 802 fputs("ALREADY in conflict, continuing trial parse.\n", stderr); 803 else 804 fputs("Starting trial parse.\n", stderr); 805 } 806 #endif 807 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 808 if (save == NULL) goto yyenomem; 809 save->save = yyps->save; 810 save->state = yystate; 811 save->errflag = yyerrflag; 812 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); 813 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 814 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); 815 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 816 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 817 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); 818 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 819 #endif 820 ctry = yytable[yyn]; 821 if (yyctable[ctry] == -1) 822 { 823 #if YYDEBUG 824 if (yydebug && yychar >= YYEOF) 825 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); 826 #endif 827 ctry++; 828 } 829 save->ctry = ctry; 830 if (yyps->save == NULL) 831 { 832 /* If this is a first conflict in the stack, start saving lexemes */ 833 if (!yylexemes) 834 { 835 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); 836 if (yylexemes == NULL) goto yyenomem; 837 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); 838 if (yylvals == NULL) goto yyenomem; 839 yylvlim = yylvals + YYLVQUEUEGROWTH; 840 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 841 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); 842 if (yylpsns == NULL) goto yyenomem; 843 yylplim = yylpsns + YYLVQUEUEGROWTH; 844 #endif 845 } 846 if (yylvp == yylve) 847 { 848 yylvp = yylve = yylvals; 849 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 850 yylpp = yylpe = yylpsns; 851 #endif 852 yylexp = yylexemes; 853 if (yychar >= YYEOF) 854 { 855 *yylve++ = yylval; 856 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 857 *yylpe++ = yylloc; 858 #endif 859 *yylexp = (YYINT) yychar; 860 yychar = YYEMPTY; 861 } 862 } 863 } 864 if (yychar >= YYEOF) 865 { 866 yylvp--; 867 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 868 yylpp--; 869 #endif 870 yylexp--; 871 yychar = YYEMPTY; 872 } 873 save->lexeme = (int) (yylvp - yylvals); 874 yyps->save = save; 875 } 876 if (yytable[yyn] == ctry) 877 { 878 #if YYDEBUG 879 if (yydebug) 880 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 881 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); 882 #endif 883 if (yychar < 0) 884 { 885 yylvp++; 886 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 887 yylpp++; 888 #endif 889 yylexp++; 890 } 891 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 892 goto yyoverflow; 893 yystate = yyctable[ctry]; 894 *++yystack.s_mark = (YYINT) yystate; 895 *++yystack.l_mark = yylval; 896 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 897 *++yystack.p_mark = yylloc; 898 #endif 899 yychar = YYEMPTY; 900 if (yyerrflag > 0) --yyerrflag; 901 goto yyloop; 902 } 903 else 904 { 905 yyn = yyctable[ctry]; 906 goto yyreduce; 907 } 908 } /* End of code dealing with conflicts */ 909 #endif /* YYBTYACC */ 910 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 911 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 912 { 913 #if YYDEBUG 914 if (yydebug) 915 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 916 YYDEBUGSTR, yydepth, yystate, yytable[yyn]); 917 #endif 918 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 919 yystate = yytable[yyn]; 920 *++yystack.s_mark = yytable[yyn]; 921 *++yystack.l_mark = yylval; 922 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 923 *++yystack.p_mark = yylloc; 924 #endif 925 yychar = YYEMPTY; 926 if (yyerrflag > 0) --yyerrflag; 927 goto yyloop; 928 } 929 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 930 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 931 { 932 yyn = yytable[yyn]; 933 goto yyreduce; 934 } 935 if (yyerrflag != 0) goto yyinrecovery; 936 #if YYBTYACC 937 938 yynewerrflag = 1; 939 goto yyerrhandler; 940 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 941 942 yyerrlab: 943 /* explicit YYERROR from an action -- pop the rhs of the rule reduced 944 * before looking for error recovery */ 945 yystack.s_mark -= yym; 946 yystate = *yystack.s_mark; 947 yystack.l_mark -= yym; 948 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 949 yystack.p_mark -= yym; 950 #endif 951 952 yynewerrflag = 0; 953 yyerrhandler: 954 while (yyps->save) 955 { 956 int ctry; 957 YYParseState *save = yyps->save; 958 #if YYDEBUG 959 if (yydebug) 960 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", 961 YYDEBUGSTR, yydepth, yystate, yyps->save->state, 962 (int)(yylvp - yylvals - yyps->save->lexeme)); 963 #endif 964 /* Memorize most forward-looking error state in case it's really an error. */ 965 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) 966 { 967 /* Free old saved error context state */ 968 if (yyerrctx) yyFreeState(yyerrctx); 969 /* Create and fill out new saved error context state */ 970 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 971 if (yyerrctx == NULL) goto yyenomem; 972 yyerrctx->save = yyps->save; 973 yyerrctx->state = yystate; 974 yyerrctx->errflag = yyerrflag; 975 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); 976 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 977 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); 978 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 979 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 980 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); 981 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 982 #endif 983 yyerrctx->lexeme = (int) (yylvp - yylvals); 984 } 985 yylvp = yylvals + save->lexeme; 986 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 987 yylpp = yylpsns + save->lexeme; 988 #endif 989 yylexp = yylexemes + save->lexeme; 990 yychar = YYEMPTY; 991 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); 992 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 993 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); 994 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 995 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 996 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); 997 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 998 #endif 999 ctry = ++save->ctry; 1000 yystate = save->state; 1001 /* We tried shift, try reduce now */ 1002 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; 1003 yyps->save = save->save; 1004 save->save = NULL; 1005 yyFreeState(save); 1006 1007 /* Nothing left on the stack -- error */ 1008 if (!yyps->save) 1009 { 1010 #if YYDEBUG 1011 if (yydebug) 1012 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", 1013 YYPREFIX, yydepth); 1014 #endif 1015 /* Restore state as it was in the most forward-advanced error */ 1016 yylvp = yylvals + yyerrctx->lexeme; 1017 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1018 yylpp = yylpsns + yyerrctx->lexeme; 1019 #endif 1020 yylexp = yylexemes + yyerrctx->lexeme; 1021 yychar = yylexp[-1]; 1022 yylval = yylvp[-1]; 1023 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1024 yylloc = yylpp[-1]; 1025 #endif 1026 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); 1027 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 1028 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); 1029 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1030 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1031 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); 1032 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1033 #endif 1034 yystate = yyerrctx->state; 1035 yyFreeState(yyerrctx); 1036 yyerrctx = NULL; 1037 } 1038 yynewerrflag = 1; 1039 } 1040 if (yynewerrflag == 0) goto yyinrecovery; 1041 #endif /* YYBTYACC */ 1042 1043 YYERROR_CALL("syntax error"); 1044 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1045 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ 1046 #endif 1047 1048 #if !YYBTYACC 1049 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 1050 yyerrlab: 1051 #endif 1052 ++yynerrs; 1053 1054 yyinrecovery: 1055 if (yyerrflag < 3) 1056 { 1057 yyerrflag = 3; 1058 for (;;) 1059 { 1060 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 1061 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 1062 { 1063 #if YYDEBUG 1064 if (yydebug) 1065 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", 1066 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); 1067 #endif 1068 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1069 yystate = yytable[yyn]; 1070 *++yystack.s_mark = yytable[yyn]; 1071 *++yystack.l_mark = yylval; 1072 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1073 /* lookahead position is error end position */ 1074 yyerror_loc_range[2] = yylloc; 1075 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ 1076 *++yystack.p_mark = yyloc; 1077 #endif 1078 goto yyloop; 1079 } 1080 else 1081 { 1082 #if YYDEBUG 1083 if (yydebug) 1084 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", 1085 YYDEBUGSTR, yydepth, *yystack.s_mark); 1086 #endif 1087 if (yystack.s_mark <= yystack.s_base) goto yyabort; 1088 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1089 /* the current TOS position is the error start position */ 1090 yyerror_loc_range[1] = *yystack.p_mark; 1091 #endif 1092 #if defined(YYDESTRUCT_CALL) 1093 #if YYBTYACC 1094 if (!yytrial) 1095 #endif /* YYBTYACC */ 1096 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1097 YYDESTRUCT_CALL("error: discarding state", 1098 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); 1099 #else 1100 YYDESTRUCT_CALL("error: discarding state", 1101 yystos[*yystack.s_mark], yystack.l_mark); 1102 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1103 #endif /* defined(YYDESTRUCT_CALL) */ 1104 --yystack.s_mark; 1105 --yystack.l_mark; 1106 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1107 --yystack.p_mark; 1108 #endif 1109 } 1110 } 1111 } 1112 else 1113 { 1114 if (yychar == YYEOF) goto yyabort; 1115 #if YYDEBUG 1116 if (yydebug) 1117 { 1118 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1119 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", 1120 YYDEBUGSTR, yydepth, yystate, yychar, yys); 1121 } 1122 #endif 1123 #if defined(YYDESTRUCT_CALL) 1124 #if YYBTYACC 1125 if (!yytrial) 1126 #endif /* YYBTYACC */ 1127 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1128 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); 1129 #else 1130 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); 1131 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1132 #endif /* defined(YYDESTRUCT_CALL) */ 1133 yychar = YYEMPTY; 1134 goto yyloop; 1135 } 1136 1137 yyreduce: 1138 yym = yylen[yyn]; 1139 #if YYDEBUG 1140 if (yydebug) 1141 { 1142 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", 1143 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); 1144 #ifdef YYSTYPE_TOSTRING 1145 #if YYBTYACC 1146 if (!yytrial) 1147 #endif /* YYBTYACC */ 1148 if (yym > 0) 1149 { 1150 int i; 1151 fputc('<', stderr); 1152 for (i = yym; i > 0; i--) 1153 { 1154 if (i != yym) fputs(", ", stderr); 1155 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], 1156 yystack.l_mark[1-i]), stderr); 1157 } 1158 fputc('>', stderr); 1159 } 1160 #endif 1161 fputc('\n', stderr); 1162 } 1163 #endif 1164 if (yym > 0) 1165 yyval = yystack.l_mark[1-yym]; 1166 else 1167 memset(&yyval, 0, sizeof yyval); 1168 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1169 1170 /* Perform position reduction */ 1171 memset(&yyloc, 0, sizeof(yyloc)); 1172 #if YYBTYACC 1173 if (!yytrial) 1174 #endif /* YYBTYACC */ 1175 { 1176 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); 1177 /* just in case YYERROR is invoked within the action, save 1178 the start of the rhs as the error start position */ 1179 yyerror_loc_range[1] = yystack.p_mark[1-yym]; 1180 } 1181 #endif 1182 1183 switch (yyn) 1184 { 1185 case 1: 1186 if (!yytrial) 1187 #line 62 "btyacc_destroy2.y" 1188 { yyval.nlist = yystack.l_mark[-5].nlist; } 1189 #line 1190 "btyacc_destroy2.tab.c" 1190 break; 1191 case 2: 1192 if (!yytrial) 1193 #line 64 "btyacc_destroy2.y" 1194 { yyval.nlist = yystack.l_mark[-3].nlist; } 1195 #line 1196 "btyacc_destroy2.tab.c" 1196 break; 1197 case 3: 1198 if (!yytrial) 1199 #line 67 "btyacc_destroy2.y" 1200 { yyval.cval = cGLOBAL; } 1201 #line 1202 "btyacc_destroy2.tab.c" 1202 break; 1203 case 4: 1204 if (!yytrial) 1205 #line 68 "btyacc_destroy2.y" 1206 { yyval.cval = cLOCAL; } 1207 #line 1208 "btyacc_destroy2.tab.c" 1208 break; 1209 case 5: 1210 if (!yytrial) 1211 #line 71 "btyacc_destroy2.y" 1212 { yyval.tval = tREAL; } 1213 #line 1214 "btyacc_destroy2.tab.c" 1214 break; 1215 case 6: 1216 if (!yytrial) 1217 #line 72 "btyacc_destroy2.y" 1218 { yyval.tval = tINTEGER; } 1219 #line 1220 "btyacc_destroy2.tab.c" 1220 break; 1221 case 7: 1222 if (!yytrial) 1223 #line 76 "btyacc_destroy2.y" 1224 { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); 1225 yyval.nlist->next = yystack.l_mark[-1].nlist; 1226 } 1227 #line 1228 "btyacc_destroy2.tab.c" 1228 break; 1229 case 8: 1230 if (!yytrial) 1231 #line 80 "btyacc_destroy2.y" 1232 { yyval.nlist->s = mksymbol(0, 0, yystack.l_mark[0].id); 1233 yyval.nlist->next = NULL; 1234 } 1235 #line 1236 "btyacc_destroy2.tab.c" 1236 break; 1237 case 9: 1238 if (!yytrial) 1239 #line 86 "btyacc_destroy2.y" 1240 { yyval.nlist = yystack.l_mark[-5].nlist; } 1241 #line 1242 "btyacc_destroy2.tab.c" 1242 break; 1243 #line 1244 "btyacc_destroy2.tab.c" 1244 default: 1245 break; 1246 } 1247 yystack.s_mark -= yym; 1248 yystate = *yystack.s_mark; 1249 yystack.l_mark -= yym; 1250 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1251 yystack.p_mark -= yym; 1252 #endif 1253 yym = yylhs[yyn]; 1254 if (yystate == 0 && yym == 0) 1255 { 1256 #if YYDEBUG 1257 if (yydebug) 1258 { 1259 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1260 #ifdef YYSTYPE_TOSTRING 1261 #if YYBTYACC 1262 if (!yytrial) 1263 #endif /* YYBTYACC */ 1264 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); 1265 #endif 1266 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); 1267 } 1268 #endif 1269 yystate = YYFINAL; 1270 *++yystack.s_mark = YYFINAL; 1271 *++yystack.l_mark = yyval; 1272 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1273 *++yystack.p_mark = yyloc; 1274 #endif 1275 if (yychar < 0) 1276 { 1277 #if YYBTYACC 1278 do { 1279 if (yylvp < yylve) 1280 { 1281 /* we're currently re-reading tokens */ 1282 yylval = *yylvp++; 1283 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1284 yylloc = *yylpp++; 1285 #endif 1286 yychar = *yylexp++; 1287 break; 1288 } 1289 if (yyps->save) 1290 { 1291 /* in trial mode; save scanner results for future parse attempts */ 1292 if (yylvp == yylvlim) 1293 { /* Enlarge lexical value queue */ 1294 size_t p = (size_t) (yylvp - yylvals); 1295 size_t s = (size_t) (yylvlim - yylvals); 1296 1297 s += YYLVQUEUEGROWTH; 1298 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) 1299 goto yyenomem; 1300 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) 1301 goto yyenomem; 1302 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1303 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) 1304 goto yyenomem; 1305 #endif 1306 yylvp = yylve = yylvals + p; 1307 yylvlim = yylvals + s; 1308 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1309 yylpp = yylpe = yylpsns + p; 1310 yylplim = yylpsns + s; 1311 #endif 1312 yylexp = yylexemes + p; 1313 } 1314 *yylexp = (YYINT) YYLEX; 1315 *yylvp++ = yylval; 1316 yylve++; 1317 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1318 *yylpp++ = yylloc; 1319 yylpe++; 1320 #endif 1321 yychar = *yylexp++; 1322 break; 1323 } 1324 /* normal operation, no conflict encountered */ 1325 #endif /* YYBTYACC */ 1326 yychar = YYLEX; 1327 #if YYBTYACC 1328 } while (0); 1329 #endif /* YYBTYACC */ 1330 if (yychar < 0) yychar = YYEOF; 1331 #if YYDEBUG 1332 if (yydebug) 1333 { 1334 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1335 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", 1336 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); 1337 } 1338 #endif 1339 } 1340 if (yychar == YYEOF) goto yyaccept; 1341 goto yyloop; 1342 } 1343 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 1344 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 1345 yystate = yytable[yyn]; 1346 else 1347 yystate = yydgoto[yym]; 1348 #if YYDEBUG 1349 if (yydebug) 1350 { 1351 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1352 #ifdef YYSTYPE_TOSTRING 1353 #if YYBTYACC 1354 if (!yytrial) 1355 #endif /* YYBTYACC */ 1356 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); 1357 #endif 1358 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); 1359 } 1360 #endif 1361 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1362 *++yystack.s_mark = (YYINT) yystate; 1363 *++yystack.l_mark = yyval; 1364 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1365 *++yystack.p_mark = yyloc; 1366 #endif 1367 goto yyloop; 1368 #if YYBTYACC 1369 1370 /* Reduction declares that this path is valid. Set yypath and do a full parse */ 1371 yyvalid: 1372 if (yypath) YYABORT; 1373 while (yyps->save) 1374 { 1375 YYParseState *save = yyps->save; 1376 yyps->save = save->save; 1377 save->save = yypath; 1378 yypath = save; 1379 } 1380 #if YYDEBUG 1381 if (yydebug) 1382 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", 1383 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); 1384 #endif 1385 if (yyerrctx) 1386 { 1387 yyFreeState(yyerrctx); 1388 yyerrctx = NULL; 1389 } 1390 yylvp = yylvals + yypath->lexeme; 1391 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1392 yylpp = yylpsns + yypath->lexeme; 1393 #endif 1394 yylexp = yylexemes + yypath->lexeme; 1395 yychar = YYEMPTY; 1396 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); 1397 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 1398 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); 1399 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1400 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1401 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); 1402 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1403 #endif 1404 yystate = yypath->state; 1405 goto yyloop; 1406 #endif /* YYBTYACC */ 1407 1408 yyoverflow: 1409 YYERROR_CALL("yacc stack overflow"); 1410 #if YYBTYACC 1411 goto yyabort_nomem; 1412 yyenomem: 1413 YYERROR_CALL("memory exhausted"); 1414 yyabort_nomem: 1415 #endif /* YYBTYACC */ 1416 yyresult = 2; 1417 goto yyreturn; 1418 1419 yyabort: 1420 yyresult = 1; 1421 goto yyreturn; 1422 1423 yyaccept: 1424 #if YYBTYACC 1425 if (yyps->save) goto yyvalid; 1426 #endif /* YYBTYACC */ 1427 yyresult = 0; 1428 1429 yyreturn: 1430 #if defined(YYDESTRUCT_CALL) 1431 if (yychar != YYEOF && yychar != YYEMPTY) 1432 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1433 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); 1434 #else 1435 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); 1436 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1437 1438 { 1439 YYSTYPE *pv; 1440 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1441 YYLTYPE *pp; 1442 1443 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) 1444 YYDESTRUCT_CALL("cleanup: discarding state", 1445 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); 1446 #else 1447 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) 1448 YYDESTRUCT_CALL("cleanup: discarding state", 1449 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); 1450 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1451 } 1452 #endif /* defined(YYDESTRUCT_CALL) */ 1453 1454 #if YYBTYACC 1455 if (yyerrctx) 1456 { 1457 yyFreeState(yyerrctx); 1458 yyerrctx = NULL; 1459 } 1460 while (yyps) 1461 { 1462 YYParseState *save = yyps; 1463 yyps = save->save; 1464 save->save = NULL; 1465 yyFreeState(save); 1466 } 1467 while (yypath) 1468 { 1469 YYParseState *save = yypath; 1470 yypath = save->save; 1471 save->save = NULL; 1472 yyFreeState(save); 1473 } 1474 #endif /* YYBTYACC */ 1475 yyfreestack(&yystack); 1476 return (yyresult); 1477 } 1478