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