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