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