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