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