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