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