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