1 /* $NetBSD: quote_calc4.tab.c,v 1.2 2017/02/11 19:33:13 christos Exp $ */ 2 3 /* original parser id follows */ 4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on 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 19 #ifndef yyparse 20 #define yyparse quote_calc4_parse 21 #endif /* yyparse */ 22 23 #ifndef yylex 24 #define yylex quote_calc4_lex 25 #endif /* yylex */ 26 27 #ifndef yyerror 28 #define yyerror quote_calc4_error 29 #endif /* yyerror */ 30 31 #ifndef yychar 32 #define yychar quote_calc4_char 33 #endif /* yychar */ 34 35 #ifndef yyval 36 #define yyval quote_calc4_val 37 #endif /* yyval */ 38 39 #ifndef yylval 40 #define yylval quote_calc4_lval 41 #endif /* yylval */ 42 43 #ifndef yydebug 44 #define yydebug quote_calc4_debug 45 #endif /* yydebug */ 46 47 #ifndef yynerrs 48 #define yynerrs quote_calc4_nerrs 49 #endif /* yynerrs */ 50 51 #ifndef yyerrflag 52 #define yyerrflag quote_calc4_errflag 53 #endif /* yyerrflag */ 54 55 #ifndef yylhs 56 #define yylhs quote_calc4_lhs 57 #endif /* yylhs */ 58 59 #ifndef yylen 60 #define yylen quote_calc4_len 61 #endif /* yylen */ 62 63 #ifndef yydefred 64 #define yydefred quote_calc4_defred 65 #endif /* yydefred */ 66 67 #ifndef yydgoto 68 #define yydgoto quote_calc4_dgoto 69 #endif /* yydgoto */ 70 71 #ifndef yysindex 72 #define yysindex quote_calc4_sindex 73 #endif /* yysindex */ 74 75 #ifndef yyrindex 76 #define yyrindex quote_calc4_rindex 77 #endif /* yyrindex */ 78 79 #ifndef yygindex 80 #define yygindex quote_calc4_gindex 81 #endif /* yygindex */ 82 83 #ifndef yytable 84 #define yytable quote_calc4_table 85 #endif /* yytable */ 86 87 #ifndef yycheck 88 #define yycheck quote_calc4_check 89 #endif /* yycheck */ 90 91 #ifndef yyname 92 #define yyname quote_calc4_name 93 #endif /* yyname */ 94 95 #ifndef yyrule 96 #define yyrule quote_calc4_rule 97 #endif /* yyrule */ 98 #define YYPREFIX "quote_calc4_" 99 100 #define YYPURE 0 101 102 #line 2 "quote_calc4.y" 103 # include <stdio.h> 104 # include <ctype.h> 105 106 int regs[26]; 107 int base; 108 109 int yylex(void); 110 static void yyerror(const char *s); 111 112 #line 111 "quote_calc4.tab.c" 113 114 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) 115 /* Default: YYSTYPE is the semantic value type. */ 116 typedef int YYSTYPE; 117 # define YYSTYPE_IS_DECLARED 1 118 #endif 119 120 /* compatibility with bison */ 121 #ifdef YYPARSE_PARAM 122 /* compatibility with FreeBSD */ 123 # ifdef YYPARSE_PARAM_TYPE 124 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 125 # else 126 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 127 # endif 128 #else 129 # define YYPARSE_DECL() yyparse(void) 130 #endif 131 132 /* Parameters sent to lex. */ 133 #ifdef YYLEX_PARAM 134 # define YYLEX_DECL() yylex(void *YYLEX_PARAM) 135 # define YYLEX yylex(YYLEX_PARAM) 136 #else 137 # define YYLEX_DECL() yylex(void) 138 # define YYLEX yylex() 139 #endif 140 141 /* Parameters sent to yyerror. */ 142 #ifndef YYERROR_DECL 143 #define YYERROR_DECL() yyerror(const char *s) 144 #endif 145 #ifndef YYERROR_CALL 146 #define YYERROR_CALL(msg) yyerror(msg) 147 #endif 148 149 extern int YYPARSE_DECL(); 150 151 #define OP_ADD 257 152 #define OP_SUB 259 153 #define OP_MUL 261 154 #define OP_DIV 263 155 #define OP_MOD 265 156 #define OP_AND 267 157 #define DIGIT 269 158 #define LETTER 270 159 #define UMINUS 271 160 #define YYERRCODE 256 161 typedef short YYINT; 162 static const YYINT quote_calc4_lhs[] = { -1, 163 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 164 2, 2, 2, 2, 2, 2, 3, 3, 165 }; 166 static const YYINT quote_calc4_len[] = { 2, 167 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 168 3, 3, 3, 2, 1, 1, 1, 2, 169 }; 170 static const YYINT quote_calc4_defred[] = { 1, 171 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 172 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 173 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 174 0, 0, 175 }; 176 static const YYINT quote_calc4_dgoto[] = { 1, 177 7, 8, 9, 178 }; 179 static const YYINT quote_calc4_sindex[] = { 0, 180 -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 181 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, 182 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, 183 -121, -243, 184 }; 185 static const YYINT quote_calc4_rindex[] = { 0, 186 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 187 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 188 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 189 3, -4, 190 }; 191 static const YYINT quote_calc4_gindex[] = { 0, 192 0, 42, 0, 193 }; 194 #define YYTABLESIZE 259 195 static const YYINT quote_calc4_table[] = { 16, 196 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 197 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 198 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 199 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 200 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 201 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 202 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 210 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 211 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 217 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 218 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 219 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 220 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 221 15, 16, 15, 16, 15, 16, 15, 16, 15, 222 }; 223 static const YYINT quote_calc4_check[] = { 10, 224 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 225 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 226 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 227 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, 228 -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, 229 -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 230 19, 20, 21, 22, -1, -1, -1, -1, -1, -1, 231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 234 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, 235 -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, 236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 237 -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 238 262, -1, 264, -1, 266, -1, 268, -1, -1, -1, 239 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 241 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 242 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 243 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 245 -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 246 -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 247 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 248 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 249 260, 262, 262, 264, 264, 266, 266, 268, 268, 250 }; 251 #define YYFINAL 1 252 #ifndef YYDEBUG 253 #define YYDEBUG 0 254 #endif 255 #define YYMAXTOKEN 271 256 #define YYUNDFTOKEN 277 257 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 258 #if YYDEBUG 259 static const char *const quote_calc4_name[] = { 260 261 "end-of-file",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, 262 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 263 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 264 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 266 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 267 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 268 0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", 269 "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", 270 "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, 271 "illegal-symbol", 272 }; 273 static const char *const quote_calc4_rule[] = { 274 "$accept : list", 275 "list :", 276 "list : list stat '\\n'", 277 "list : list error '\\n'", 278 "stat : expr", 279 "stat : LETTER '=' expr", 280 "expr : '(' expr ')'", 281 "expr : expr \"ADD-operator\" expr", 282 "expr : expr \"SUB-operator\" expr", 283 "expr : expr \"MUL-operator\" expr", 284 "expr : expr \"DIV-operator\" expr", 285 "expr : expr \"MOD-operator\" expr", 286 "expr : expr \"AND-operator\" expr", 287 "expr : expr '|' expr", 288 "expr : \"SUB-operator\" expr", 289 "expr : LETTER", 290 "expr : number", 291 "number : DIGIT", 292 "number : number DIGIT", 293 294 }; 295 #endif 296 297 int yydebug; 298 int yynerrs; 299 300 int yyerrflag; 301 int yychar; 302 YYSTYPE yyval; 303 YYSTYPE yylval; 304 305 /* define the initial stack-sizes */ 306 #ifdef YYSTACKSIZE 307 #undef YYMAXDEPTH 308 #define YYMAXDEPTH YYSTACKSIZE 309 #else 310 #ifdef YYMAXDEPTH 311 #define YYSTACKSIZE YYMAXDEPTH 312 #else 313 #define YYSTACKSIZE 10000 314 #define YYMAXDEPTH 10000 315 #endif 316 #endif 317 318 #define YYINITSTACKSIZE 200 319 320 typedef struct { 321 unsigned stacksize; 322 YYINT *s_base; 323 YYINT *s_mark; 324 YYINT *s_last; 325 YYSTYPE *l_base; 326 YYSTYPE *l_mark; 327 } YYSTACKDATA; 328 /* variables for the parser stack */ 329 static YYSTACKDATA yystack; 330 #line 73 "quote_calc4.y" 331 /* start of programs */ 332 333 int 334 main (void) 335 { 336 while(!feof(stdin)) { 337 yyparse(); 338 } 339 return 0; 340 } 341 342 static void 343 yyerror(const char *s) 344 { 345 fprintf(stderr, "%s\n", s); 346 } 347 348 int 349 yylex(void) { 350 /* lexical analysis routine */ 351 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 352 /* return DIGIT for a digit, yylval = 0 through 9 */ 353 /* all other characters are returned immediately */ 354 355 int c; 356 357 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 358 359 /* c is now nonblank */ 360 361 if( islower( c )) { 362 yylval = c - 'a'; 363 return ( LETTER ); 364 } 365 if( isdigit( c )) { 366 yylval = c - '0'; 367 return ( DIGIT ); 368 } 369 return( c ); 370 } 371 #line 370 "quote_calc4.tab.c" 372 373 #if YYDEBUG 374 #include <stdio.h> /* needed for printf */ 375 #endif 376 377 #include <stdlib.h> /* needed for malloc, etc */ 378 #include <string.h> /* needed for memset */ 379 380 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 381 static int yygrowstack(YYSTACKDATA *data) 382 { 383 int i; 384 unsigned newsize; 385 YYINT *newss; 386 YYSTYPE *newvs; 387 388 if ((newsize = data->stacksize) == 0) 389 newsize = YYINITSTACKSIZE; 390 else if (newsize >= YYMAXDEPTH) 391 return YYENOMEM; 392 else if ((newsize *= 2) > YYMAXDEPTH) 393 newsize = YYMAXDEPTH; 394 395 i = (int) (data->s_mark - data->s_base); 396 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 397 if (newss == 0) 398 return YYENOMEM; 399 400 data->s_base = newss; 401 data->s_mark = newss + i; 402 403 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 404 if (newvs == 0) 405 return YYENOMEM; 406 407 data->l_base = newvs; 408 data->l_mark = newvs + i; 409 410 data->stacksize = newsize; 411 data->s_last = data->s_base + newsize - 1; 412 return 0; 413 } 414 415 #if YYPURE || defined(YY_NO_LEAKS) 416 static void yyfreestack(YYSTACKDATA *data) 417 { 418 free(data->s_base); 419 free(data->l_base); 420 memset(data, 0, sizeof(*data)); 421 } 422 #else 423 #define yyfreestack(data) /* nothing */ 424 #endif 425 426 #define YYABORT goto yyabort 427 #define YYREJECT goto yyabort 428 #define YYACCEPT goto yyaccept 429 #define YYERROR goto yyerrlab 430 431 int 432 YYPARSE_DECL() 433 { 434 int yym, yyn, yystate; 435 #if YYDEBUG 436 const char *yys; 437 438 if ((yys = getenv("YYDEBUG")) != 0) 439 { 440 yyn = *yys; 441 if (yyn >= '0' && yyn <= '9') 442 yydebug = yyn - '0'; 443 } 444 #endif 445 446 yym = 0; 447 yyn = 0; 448 yynerrs = 0; 449 yyerrflag = 0; 450 yychar = YYEMPTY; 451 yystate = 0; 452 453 #if YYPURE 454 memset(&yystack, 0, sizeof(yystack)); 455 #endif 456 457 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 458 yystack.s_mark = yystack.s_base; 459 yystack.l_mark = yystack.l_base; 460 yystate = 0; 461 *yystack.s_mark = 0; 462 463 yyloop: 464 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 465 if (yychar < 0) 466 { 467 yychar = YYLEX; 468 if (yychar < 0) yychar = YYEOF; 469 #if YYDEBUG 470 if (yydebug) 471 { 472 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 473 printf("%sdebug: state %d, reading %d (%s)\n", 474 YYPREFIX, yystate, yychar, yys); 475 } 476 #endif 477 } 478 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 479 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 480 { 481 #if YYDEBUG 482 if (yydebug) 483 printf("%sdebug: state %d, shifting to state %d\n", 484 YYPREFIX, yystate, yytable[yyn]); 485 #endif 486 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 487 yystate = yytable[yyn]; 488 *++yystack.s_mark = yytable[yyn]; 489 *++yystack.l_mark = yylval; 490 yychar = YYEMPTY; 491 if (yyerrflag > 0) --yyerrflag; 492 goto yyloop; 493 } 494 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 495 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 496 { 497 yyn = yytable[yyn]; 498 goto yyreduce; 499 } 500 if (yyerrflag != 0) goto yyinrecovery; 501 502 YYERROR_CALL("syntax error"); 503 504 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 505 yyerrlab: 506 ++yynerrs; 507 508 yyinrecovery: 509 if (yyerrflag < 3) 510 { 511 yyerrflag = 3; 512 for (;;) 513 { 514 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 515 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 516 { 517 #if YYDEBUG 518 if (yydebug) 519 printf("%sdebug: state %d, error recovery shifting\ 520 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 521 #endif 522 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 523 yystate = yytable[yyn]; 524 *++yystack.s_mark = yytable[yyn]; 525 *++yystack.l_mark = yylval; 526 goto yyloop; 527 } 528 else 529 { 530 #if YYDEBUG 531 if (yydebug) 532 printf("%sdebug: error recovery discarding state %d\n", 533 YYPREFIX, *yystack.s_mark); 534 #endif 535 if (yystack.s_mark <= yystack.s_base) goto yyabort; 536 --yystack.s_mark; 537 --yystack.l_mark; 538 } 539 } 540 } 541 else 542 { 543 if (yychar == YYEOF) goto yyabort; 544 #if YYDEBUG 545 if (yydebug) 546 { 547 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 548 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 549 YYPREFIX, yystate, yychar, yys); 550 } 551 #endif 552 yychar = YYEMPTY; 553 goto yyloop; 554 } 555 556 yyreduce: 557 #if YYDEBUG 558 if (yydebug) 559 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 560 YYPREFIX, yystate, yyn, yyrule[yyn]); 561 #endif 562 yym = yylen[yyn]; 563 if (yym > 0) 564 yyval = yystack.l_mark[1-yym]; 565 else 566 memset(&yyval, 0, sizeof yyval); 567 568 switch (yyn) 569 { 570 case 3: 571 #line 35 "quote_calc4.y" 572 { yyerrok ; } 573 break; 574 case 4: 575 #line 39 "quote_calc4.y" 576 { printf("%d\n",yystack.l_mark[0]);} 577 break; 578 case 5: 579 #line 41 "quote_calc4.y" 580 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 581 break; 582 case 6: 583 #line 45 "quote_calc4.y" 584 { yyval = yystack.l_mark[-1]; } 585 break; 586 case 7: 587 #line 47 "quote_calc4.y" 588 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 589 break; 590 case 8: 591 #line 49 "quote_calc4.y" 592 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 593 break; 594 case 9: 595 #line 51 "quote_calc4.y" 596 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 597 break; 598 case 10: 599 #line 53 "quote_calc4.y" 600 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 601 break; 602 case 11: 603 #line 55 "quote_calc4.y" 604 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 605 break; 606 case 12: 607 #line 57 "quote_calc4.y" 608 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 609 break; 610 case 13: 611 #line 59 "quote_calc4.y" 612 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 613 break; 614 case 14: 615 #line 61 "quote_calc4.y" 616 { yyval = - yystack.l_mark[0]; } 617 break; 618 case 15: 619 #line 63 "quote_calc4.y" 620 { yyval = regs[yystack.l_mark[0]]; } 621 break; 622 case 17: 623 #line 68 "quote_calc4.y" 624 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 625 break; 626 case 18: 627 #line 70 "quote_calc4.y" 628 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 629 break; 630 #line 629 "quote_calc4.tab.c" 631 } 632 yystack.s_mark -= yym; 633 yystate = *yystack.s_mark; 634 yystack.l_mark -= yym; 635 yym = yylhs[yyn]; 636 if (yystate == 0 && yym == 0) 637 { 638 #if YYDEBUG 639 if (yydebug) 640 printf("%sdebug: after reduction, shifting from state 0 to\ 641 state %d\n", YYPREFIX, YYFINAL); 642 #endif 643 yystate = YYFINAL; 644 *++yystack.s_mark = YYFINAL; 645 *++yystack.l_mark = yyval; 646 if (yychar < 0) 647 { 648 yychar = YYLEX; 649 if (yychar < 0) yychar = YYEOF; 650 #if YYDEBUG 651 if (yydebug) 652 { 653 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 654 printf("%sdebug: state %d, reading %d (%s)\n", 655 YYPREFIX, YYFINAL, yychar, yys); 656 } 657 #endif 658 } 659 if (yychar == YYEOF) goto yyaccept; 660 goto yyloop; 661 } 662 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 663 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 664 yystate = yytable[yyn]; 665 else 666 yystate = yydgoto[yym]; 667 #if YYDEBUG 668 if (yydebug) 669 printf("%sdebug: after reduction, shifting from state %d \ 670 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 671 #endif 672 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 673 *++yystack.s_mark = (YYINT) yystate; 674 *++yystack.l_mark = yyval; 675 goto yyloop; 676 677 yyoverflow: 678 YYERROR_CALL("yacc stack overflow"); 679 680 yyabort: 681 yyfreestack(&yystack); 682 return (1); 683 684 yyaccept: 685 yyfreestack(&yystack); 686 return (0); 687 } 688