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