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