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