1 /* $NetBSD: ok_syntax1.tab.c,v 1.5 2021/02/20 22:57:57 christos Exp $ */ 2 3 /* original parser id follows */ 4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 6 7 #define YYBYACC 1 8 #define YYMAJOR 2 9 #define YYMINOR 0 10 #define YYCHECK "yyyymmdd" 11 12 #define YYEMPTY (-1) 13 #define yyclearin (yychar = YYEMPTY) 14 #define yyerrok (yyerrflag = 0) 15 #define YYRECOVERING() (yyerrflag != 0) 16 #define YYENOMEM (-2) 17 #define YYEOF 0 18 19 #ifndef yyparse 20 #define yyparse ok_syntax1_parse 21 #endif /* yyparse */ 22 23 #ifndef yylex 24 #define yylex ok_syntax1_lex 25 #endif /* yylex */ 26 27 #ifndef yyerror 28 #define yyerror ok_syntax1_error 29 #endif /* yyerror */ 30 31 #ifndef yychar 32 #define yychar ok_syntax1_char 33 #endif /* yychar */ 34 35 #ifndef yyval 36 #define yyval ok_syntax1_val 37 #endif /* yyval */ 38 39 #ifndef yylval 40 #define yylval ok_syntax1_lval 41 #endif /* yylval */ 42 43 #ifndef yydebug 44 #define yydebug ok_syntax1_debug 45 #endif /* yydebug */ 46 47 #ifndef yynerrs 48 #define yynerrs ok_syntax1_nerrs 49 #endif /* yynerrs */ 50 51 #ifndef yyerrflag 52 #define yyerrflag ok_syntax1_errflag 53 #endif /* yyerrflag */ 54 55 #ifndef yylhs 56 #define yylhs ok_syntax1_lhs 57 #endif /* yylhs */ 58 59 #ifndef yylen 60 #define yylen ok_syntax1_len 61 #endif /* yylen */ 62 63 #ifndef yydefred 64 #define yydefred ok_syntax1_defred 65 #endif /* yydefred */ 66 67 #ifndef yydgoto 68 #define yydgoto ok_syntax1_dgoto 69 #endif /* yydgoto */ 70 71 #ifndef yysindex 72 #define yysindex ok_syntax1_sindex 73 #endif /* yysindex */ 74 75 #ifndef yyrindex 76 #define yyrindex ok_syntax1_rindex 77 #endif /* yyrindex */ 78 79 #ifndef yygindex 80 #define yygindex ok_syntax1_gindex 81 #endif /* yygindex */ 82 83 #ifndef yytable 84 #define yytable ok_syntax1_table 85 #endif /* yytable */ 86 87 #ifndef yycheck 88 #define yycheck ok_syntax1_check 89 #endif /* yycheck */ 90 91 #ifndef yyname 92 #define yyname ok_syntax1_name 93 #endif /* yyname */ 94 95 #ifndef yyrule 96 #define yyrule ok_syntax1_rule 97 #endif /* yyrule */ 98 #define YYPREFIX "ok_syntax1_" 99 100 #define YYPURE 1 101 102 #line 9 "ok_syntax1.y" 103 # include <stdio.h> 104 # include <ctype.h> 105 106 #ifdef YYBISON 107 #define YYSTYPE int 108 #define YYLEX_PARAM base 109 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) 110 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 111 int YYLEX_DECL(); 112 static void YYERROR_DECL(); 113 #endif 114 115 #ifdef YYSTYPE 116 #undef YYSTYPE_IS_DECLARED 117 #define YYSTYPE_IS_DECLARED 1 118 #endif 119 #ifndef YYSTYPE_IS_DECLARED 120 #define YYSTYPE_IS_DECLARED 1 121 #line 43 "ok_syntax1.y" 122 typedef union 123 { 124 char * cval; 125 int ival; 126 double dval; 127 } YYSTYPE; 128 #endif /* !YYSTYPE_IS_DECLARED */ 129 #line 128 "ok_syntax1.tab.c" 130 131 /* compatibility with bison */ 132 #ifdef YYPARSE_PARAM 133 /* compatibility with FreeBSD */ 134 # ifdef YYPARSE_PARAM_TYPE 135 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 136 # else 137 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 138 # endif 139 #else 140 # define YYPARSE_DECL() yyparse(int regs[26], int *base) 141 #endif 142 143 /* Parameters sent to lex. */ 144 #ifdef YYLEX_PARAM 145 # ifdef YYLEX_PARAM_TYPE 146 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) 147 # else 148 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) 149 # endif 150 # define YYLEX yylex(&yylval, YYLEX_PARAM) 151 #else 152 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base) 153 # define YYLEX yylex(&yylval, base) 154 #endif 155 156 /* Parameters sent to yyerror. */ 157 #ifndef YYERROR_DECL 158 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 159 #endif 160 #ifndef YYERROR_CALL 161 #define YYERROR_CALL(msg) yyerror(regs, base, msg) 162 #endif 163 164 extern int YYPARSE_DECL(); 165 166 #define DIGIT 257 167 #define LETTER 258 168 #define OCT1 259 169 #define HEX1 260 170 #define HEX2 261 171 #define HEX3 262 172 #define STR1 263 173 #define STR2 265 174 #define BELL 266 175 #define BS 267 176 #define NL 268 177 #define LF 269 178 #define CR 270 179 #define TAB 271 180 #define VT 272 181 #define UMINUS 273 182 #define YYERRCODE 256 183 typedef short YYINT; 184 static const YYINT ok_syntax1_lhs[] = { -1, 185 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 186 2, 2, 2, 2, 2, 2, 3, 3, 187 }; 188 static const YYINT ok_syntax1_len[] = { 2, 189 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 190 3, 3, 3, 2, 1, 1, 1, 2, 191 }; 192 static const YYINT ok_syntax1_defred[] = { 1, 193 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 194 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 195 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 196 10, 11, 197 }; 198 static const YYINT ok_syntax1_dgoto[] = { 1, 199 7, 8, 9, 200 }; 201 static const YYINT ok_syntax1_sindex[] = { 0, 202 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 203 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 204 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 205 0, 0, 206 }; 207 static const YYINT ok_syntax1_rindex[] = { 0, 208 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 209 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 211 0, 0, 212 }; 213 static const YYINT ok_syntax1_gindex[] = { 0, 214 0, 65, 0, 215 }; 216 #define YYTABLESIZE 220 217 static const YYINT ok_syntax1_table[] = { 6, 218 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 219 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 220 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 221 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 222 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 223 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 224 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 225 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 226 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 227 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 228 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 229 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 230 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 231 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 232 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236 0, 0, 0, 0, 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, 2, 3, 4, 3, 12, 240 }; 241 static const YYINT ok_syntax1_check[] = { 40, 242 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 243 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 244 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 245 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 246 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 247 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 248 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 249 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 250 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 251 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 252 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 253 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 254 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 255 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 256 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 259 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 262 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 263 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 264 }; 265 #define YYFINAL 1 266 #ifndef YYDEBUG 267 #define YYDEBUG 0 268 #endif 269 #define YYMAXTOKEN 273 270 #define YYUNDFTOKEN 279 271 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 272 #if YYDEBUG 273 static const char *const ok_syntax1_name[] = { 274 275 "end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'", 276 "'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('", 277 "')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0, 278 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0, 279 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0, 280 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 281 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 282 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 283 "'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1", 284 "\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0, 285 0,0,0,0,"illegal-symbol", 286 }; 287 static const char *const ok_syntax1_rule[] = { 288 "$accept : list", 289 "list :", 290 "list : list stat '\\n'", 291 "list : list error '\\n'", 292 "stat : expr", 293 "stat : LETTER '=' expr", 294 "expr : '(' expr ')'", 295 "expr : expr '+' expr", 296 "expr : expr '-' expr", 297 "expr : expr '*' expr", 298 "expr : expr '/' expr", 299 "expr : expr '%' expr", 300 "expr : expr '&' expr", 301 "expr : expr '|' expr", 302 "expr : '-' expr", 303 "expr : LETTER", 304 "expr : number", 305 "number : DIGIT", 306 "number : number DIGIT", 307 308 }; 309 #endif 310 311 #if YYDEBUG 312 int yydebug; 313 #endif 314 315 /* define the initial stack-sizes */ 316 #ifdef YYSTACKSIZE 317 #undef YYMAXDEPTH 318 #define YYMAXDEPTH YYSTACKSIZE 319 #else 320 #ifdef YYMAXDEPTH 321 #define YYSTACKSIZE YYMAXDEPTH 322 #else 323 #define YYSTACKSIZE 10000 324 #define YYMAXDEPTH 10000 325 #endif 326 #endif 327 328 #define YYINITSTACKSIZE 200 329 330 typedef struct { 331 unsigned stacksize; 332 YYINT *s_base; 333 YYINT *s_mark; 334 YYINT *s_last; 335 YYSTYPE *l_base; 336 YYSTYPE *l_mark; 337 } YYSTACKDATA; 338 #line 104 "ok_syntax1.y" 339 /* start of programs */ 340 341 #ifdef YYBYACC 342 extern int YYLEX_DECL(); 343 #endif 344 345 int 346 main (void) 347 { 348 int regs[26]; 349 int base = 10; 350 351 while(!feof(stdin)) { 352 yyparse(regs, &base); 353 } 354 return 0; 355 } 356 357 #define UNUSED(x) ((void)(x)) 358 359 static void 360 YYERROR_DECL() 361 { 362 UNUSED(regs); /* %parse-param regs is not actually used here */ 363 UNUSED(base); /* %parse-param base is not actually used here */ 364 fprintf(stderr, "%s\n", s); 365 } 366 367 int 368 YYLEX_DECL() 369 { 370 /* lexical analysis routine */ 371 /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 372 /* return DIGIT for a digit, yylval = 0 through 9 */ 373 /* all other characters are returned immediately */ 374 375 int c; 376 377 while( (c=getchar()) == ' ' ) { /* skip blanks */ } 378 379 /* c is now nonblank */ 380 381 if( islower( c )) { 382 yylval->ival = (c - 'a'); 383 return ( LETTER ); 384 } 385 if( isdigit( c )) { 386 yylval->ival = (c - '0') % (*base); 387 return ( DIGIT ); 388 } 389 return( c ); 390 } 391 #line 390 "ok_syntax1.tab.c" 392 393 #if YYDEBUG 394 #include <stdio.h> /* needed for printf */ 395 #endif 396 397 #include <stdlib.h> /* needed for malloc, etc */ 398 #include <string.h> /* needed for memset */ 399 400 /* allocate initial stack or double stack size, up to YYMAXDEPTH */ 401 static int yygrowstack(YYSTACKDATA *data) 402 { 403 int i; 404 unsigned newsize; 405 YYINT *newss; 406 YYSTYPE *newvs; 407 408 if ((newsize = data->stacksize) == 0) 409 newsize = YYINITSTACKSIZE; 410 else if (newsize >= YYMAXDEPTH) 411 return YYENOMEM; 412 else if ((newsize *= 2) > YYMAXDEPTH) 413 newsize = YYMAXDEPTH; 414 415 i = (int) (data->s_mark - data->s_base); 416 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 417 if (newss == 0) 418 return YYENOMEM; 419 420 data->s_base = newss; 421 data->s_mark = newss + i; 422 423 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 424 if (newvs == 0) 425 return YYENOMEM; 426 427 data->l_base = newvs; 428 data->l_mark = newvs + i; 429 430 data->stacksize = newsize; 431 data->s_last = data->s_base + newsize - 1; 432 return 0; 433 } 434 435 #if YYPURE || defined(YY_NO_LEAKS) 436 static void yyfreestack(YYSTACKDATA *data) 437 { 438 free(data->s_base); 439 free(data->l_base); 440 memset(data, 0, sizeof(*data)); 441 } 442 #else 443 #define yyfreestack(data) /* nothing */ 444 #endif 445 446 #define YYABORT goto yyabort 447 #define YYREJECT goto yyabort 448 #define YYACCEPT goto yyaccept 449 #define YYERROR goto yyerrlab 450 451 int 452 YYPARSE_DECL() 453 { 454 int yyerrflag; 455 int yychar; 456 YYSTYPE yyval; 457 YYSTYPE yylval; 458 int yynerrs; 459 460 /* variables for the parser stack */ 461 YYSTACKDATA yystack; 462 int yym, yyn, yystate; 463 #if YYDEBUG 464 const char *yys; 465 466 if ((yys = getenv("YYDEBUG")) != 0) 467 { 468 yyn = *yys; 469 if (yyn >= '0' && yyn <= '9') 470 yydebug = yyn - '0'; 471 } 472 #endif 473 474 memset(&yyval, 0, sizeof(yyval)); 475 memset(&yylval, 0, sizeof(yylval)); 476 477 yym = 0; 478 yyn = 0; 479 yynerrs = 0; 480 yyerrflag = 0; 481 yychar = YYEMPTY; 482 yystate = 0; 483 484 #if YYPURE 485 memset(&yystack, 0, sizeof(yystack)); 486 #endif 487 488 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 489 yystack.s_mark = yystack.s_base; 490 yystack.l_mark = yystack.l_base; 491 yystate = 0; 492 *yystack.s_mark = 0; 493 494 yyloop: 495 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 496 if (yychar < 0) 497 { 498 yychar = YYLEX; 499 if (yychar < 0) yychar = YYEOF; 500 #if YYDEBUG 501 if (yydebug) 502 { 503 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 504 printf("%sdebug: state %d, reading %d (%s)\n", 505 YYPREFIX, yystate, yychar, yys); 506 } 507 #endif 508 } 509 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 510 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 511 { 512 #if YYDEBUG 513 if (yydebug) 514 printf("%sdebug: state %d, shifting to state %d\n", 515 YYPREFIX, yystate, yytable[yyn]); 516 #endif 517 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 518 yystate = yytable[yyn]; 519 *++yystack.s_mark = yytable[yyn]; 520 *++yystack.l_mark = yylval; 521 yychar = YYEMPTY; 522 if (yyerrflag > 0) --yyerrflag; 523 goto yyloop; 524 } 525 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 526 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 527 { 528 yyn = yytable[yyn]; 529 goto yyreduce; 530 } 531 if (yyerrflag != 0) goto yyinrecovery; 532 533 YYERROR_CALL("syntax error"); 534 535 goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 536 yyerrlab: 537 ++yynerrs; 538 539 yyinrecovery: 540 if (yyerrflag < 3) 541 { 542 yyerrflag = 3; 543 for (;;) 544 { 545 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 546 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 547 { 548 #if YYDEBUG 549 if (yydebug) 550 printf("%sdebug: state %d, error recovery shifting\ 551 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 552 #endif 553 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 554 yystate = yytable[yyn]; 555 *++yystack.s_mark = yytable[yyn]; 556 *++yystack.l_mark = yylval; 557 goto yyloop; 558 } 559 else 560 { 561 #if YYDEBUG 562 if (yydebug) 563 printf("%sdebug: error recovery discarding state %d\n", 564 YYPREFIX, *yystack.s_mark); 565 #endif 566 if (yystack.s_mark <= yystack.s_base) goto yyabort; 567 --yystack.s_mark; 568 --yystack.l_mark; 569 } 570 } 571 } 572 else 573 { 574 if (yychar == YYEOF) goto yyabort; 575 #if YYDEBUG 576 if (yydebug) 577 { 578 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 579 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 580 YYPREFIX, yystate, yychar, yys); 581 } 582 #endif 583 yychar = YYEMPTY; 584 goto yyloop; 585 } 586 587 yyreduce: 588 #if YYDEBUG 589 if (yydebug) 590 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 591 YYPREFIX, yystate, yyn, yyrule[yyn]); 592 #endif 593 yym = yylen[yyn]; 594 if (yym > 0) 595 yyval = yystack.l_mark[1-yym]; 596 else 597 memset(&yyval, 0, sizeof yyval); 598 599 switch (yyn) 600 { 601 case 3: 602 #line 66 "ok_syntax1.y" 603 { yyerrok ; } 604 break; 605 case 4: 606 #line 70 "ok_syntax1.y" 607 { printf("%d\n",yystack.l_mark[0].ival);} 608 break; 609 case 5: 610 #line 72 "ok_syntax1.y" 611 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; } 612 break; 613 case 6: 614 #line 76 "ok_syntax1.y" 615 { yyval.ival = yystack.l_mark[-1].ival; } 616 break; 617 case 7: 618 #line 78 "ok_syntax1.y" 619 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; } 620 break; 621 case 8: 622 #line 80 "ok_syntax1.y" 623 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; } 624 break; 625 case 9: 626 #line 82 "ok_syntax1.y" 627 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; } 628 break; 629 case 10: 630 #line 84 "ok_syntax1.y" 631 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; } 632 break; 633 case 11: 634 #line 86 "ok_syntax1.y" 635 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; } 636 break; 637 case 12: 638 #line 88 "ok_syntax1.y" 639 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; } 640 break; 641 case 13: 642 #line 90 "ok_syntax1.y" 643 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; } 644 break; 645 case 14: 646 #line 92 "ok_syntax1.y" 647 { yyval.ival = - yystack.l_mark[0].ival; } 648 break; 649 case 15: 650 #line 94 "ok_syntax1.y" 651 { yyval.ival = regs[yystack.l_mark[0].ival]; } 652 break; 653 case 17: 654 #line 99 "ok_syntax1.y" 655 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; } 656 break; 657 case 18: 658 #line 101 "ok_syntax1.y" 659 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; } 660 break; 661 #line 660 "ok_syntax1.tab.c" 662 } 663 yystack.s_mark -= yym; 664 yystate = *yystack.s_mark; 665 yystack.l_mark -= yym; 666 yym = yylhs[yyn]; 667 if (yystate == 0 && yym == 0) 668 { 669 #if YYDEBUG 670 if (yydebug) 671 printf("%sdebug: after reduction, shifting from state 0 to\ 672 state %d\n", YYPREFIX, YYFINAL); 673 #endif 674 yystate = YYFINAL; 675 *++yystack.s_mark = YYFINAL; 676 *++yystack.l_mark = yyval; 677 if (yychar < 0) 678 { 679 yychar = YYLEX; 680 if (yychar < 0) yychar = YYEOF; 681 #if YYDEBUG 682 if (yydebug) 683 { 684 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 685 printf("%sdebug: state %d, reading %d (%s)\n", 686 YYPREFIX, YYFINAL, yychar, yys); 687 } 688 #endif 689 } 690 if (yychar == YYEOF) goto yyaccept; 691 goto yyloop; 692 } 693 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 694 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 695 yystate = yytable[yyn]; 696 else 697 yystate = yydgoto[yym]; 698 #if YYDEBUG 699 if (yydebug) 700 printf("%sdebug: after reduction, shifting from state %d \ 701 to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 702 #endif 703 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 704 *++yystack.s_mark = (YYINT) yystate; 705 *++yystack.l_mark = yyval; 706 goto yyloop; 707 708 yyoverflow: 709 YYERROR_CALL("yacc stack overflow"); 710 711 yyabort: 712 yyfreestack(&yystack); 713 return (1); 714 715 yyaccept: 716 yyfreestack(&yystack); 717 return (0); 718 } 719