calc.tab.c revision 277086
1234287Sdim/* original parser id follows */ 2234287Sdim/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3234287Sdim/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4234287Sdim 5234287Sdim#define YYBYACC 1 6234287Sdim#define YYMAJOR 1 7234287Sdim#define YYMINOR 9 8234287Sdim#define YYCHECK "yyyymmdd" 9234287Sdim 10234287Sdim#define YYEMPTY (-1) 11249423Sdim#define yyclearin (yychar = YYEMPTY) 12234287Sdim#define yyerrok (yyerrflag = 0) 13234287Sdim#define YYRECOVERING() (yyerrflag != 0) 14249423Sdim#define YYENOMEM (-2) 15234287Sdim#define YYEOF 0 16234287Sdim 17234287Sdim#ifndef yyparse 18234287Sdim#define yyparse calc_parse 19234287Sdim#endif /* yyparse */ 20234287Sdim 21234287Sdim#ifndef yylex 22234287Sdim#define yylex calc_lex 23234287Sdim#endif /* yylex */ 24234287Sdim 25234287Sdim#ifndef yyerror 26234287Sdim#define yyerror calc_error 27234287Sdim#endif /* yyerror */ 28234287Sdim 29234287Sdim#ifndef yychar 30234287Sdim#define yychar calc_char 31234287Sdim#endif /* yychar */ 32234287Sdim 33234287Sdim#ifndef yyval 34234287Sdim#define yyval calc_val 35234287Sdim#endif /* yyval */ 36234287Sdim 37234287Sdim#ifndef yylval 38234287Sdim#define yylval calc_lval 39234287Sdim#endif /* yylval */ 40249423Sdim 41263508Sdim#ifndef yydebug 42263508Sdim#define yydebug calc_debug 43263508Sdim#endif /* yydebug */ 44234287Sdim 45234287Sdim#ifndef yynerrs 46234287Sdim#define yynerrs calc_nerrs 47234287Sdim#endif /* yynerrs */ 48234287Sdim 49234287Sdim#ifndef yyerrflag 50234287Sdim#define yyerrflag calc_errflag 51234287Sdim#endif /* yyerrflag */ 52234287Sdim 53234287Sdim#ifndef yylhs 54234287Sdim#define yylhs calc_lhs 55234287Sdim#endif /* yylhs */ 56234287Sdim 57234287Sdim#ifndef yylen 58234287Sdim#define yylen calc_len 59234287Sdim#endif /* yylen */ 60234287Sdim 61234287Sdim#ifndef yydefred 62234287Sdim#define yydefred calc_defred 63234287Sdim#endif /* yydefred */ 64234287Sdim 65234287Sdim#ifndef yydgoto 66234287Sdim#define yydgoto calc_dgoto 67234287Sdim#endif /* yydgoto */ 68234287Sdim 69234287Sdim#ifndef yysindex 70234287Sdim#define yysindex calc_sindex 71234287Sdim#endif /* yysindex */ 72234287Sdim 73234287Sdim#ifndef yyrindex 74234287Sdim#define yyrindex calc_rindex 75234287Sdim#endif /* yyrindex */ 76234287Sdim 77234287Sdim#ifndef yygindex 78234287Sdim#define yygindex calc_gindex 79234287Sdim#endif /* yygindex */ 80234287Sdim 81234287Sdim#ifndef yytable 82234287Sdim#define yytable calc_table 83234287Sdim#endif /* yytable */ 84234287Sdim 85234287Sdim#ifndef yycheck 86234287Sdim#define yycheck calc_check 87234287Sdim#endif /* yycheck */ 88234287Sdim 89234287Sdim#ifndef yyname 90234287Sdim#define yyname calc_name 91234287Sdim#endif /* yyname */ 92234287Sdim 93234287Sdim#ifndef yyrule 94234287Sdim#define yyrule calc_rule 95234287Sdim#endif /* yyrule */ 96234287Sdim#define YYPREFIX "calc_" 97234287Sdim 98234287Sdim#define YYPURE 0 99234287Sdim 100234287Sdim#line 2 "calc.y" 101234287Sdim# include <stdio.h> 102234287Sdim# include <ctype.h> 103234287Sdim 104234287Sdimint regs[26]; 105234287Sdimint base; 106234287Sdim 107234287Sdimextern int yylex(void); 108234287Sdimstatic void yyerror(const char *s); 109234287Sdim 110234287Sdim#line 111 "calc.tab.c" 111234287Sdim 112234287Sdim#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) 113234287Sdim/* Default: YYSTYPE is the semantic value type. */ 114234287Sdimtypedef int YYSTYPE; 115234287Sdim# define YYSTYPE_IS_DECLARED 1 116234287Sdim#endif 117234287Sdim 118234287Sdim/* compatibility with bison */ 119234287Sdim#ifdef YYPARSE_PARAM 120234287Sdim/* compatibility with FreeBSD */ 121234287Sdim# ifdef YYPARSE_PARAM_TYPE 122234287Sdim# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 123234287Sdim# else 124234287Sdim# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 125234287Sdim# endif 126234287Sdim#else 127234287Sdim# define YYPARSE_DECL() yyparse(void) 128234287Sdim#endif 129234287Sdim 130234287Sdim/* Parameters sent to lex. */ 131234287Sdim#ifdef YYLEX_PARAM 132234287Sdim# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 133234287Sdim# define YYLEX yylex(YYLEX_PARAM) 134234287Sdim#else 135234287Sdim# define YYLEX_DECL() yylex(void) 136234287Sdim# define YYLEX yylex() 137234287Sdim#endif 138234287Sdim 139234287Sdim/* Parameters sent to yyerror. */ 140234287Sdim#ifndef YYERROR_DECL 141234287Sdim#define YYERROR_DECL() yyerror(const char *s) 142234287Sdim#endif 143234287Sdim#ifndef YYERROR_CALL 144234287Sdim#define YYERROR_CALL(msg) yyerror(msg) 145234287Sdim#endif 146234287Sdim 147234287Sdimextern int YYPARSE_DECL(); 148234287Sdim 149234287Sdim#define DIGIT 257 150234287Sdim#define LETTER 258 151234287Sdim#define UMINUS 259 152234287Sdim#define YYERRCODE 256 153234287Sdimtypedef int YYINT; 154234287Sdimstatic const YYINT calc_lhs[] = { -1, 155234287Sdim 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 156234287Sdim 2, 2, 2, 2, 2, 2, 3, 3, 157234287Sdim}; 158234287Sdimstatic const YYINT calc_len[] = { 2, 159234287Sdim 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 160234287Sdim 3, 3, 3, 2, 1, 1, 1, 2, 161234287Sdim}; 162234287Sdimstatic const YYINT calc_defred[] = { 1, 163234287Sdim 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 164234287Sdim 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 165234287Sdim 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 166234287Sdim 10, 11, 167234287Sdim}; 168234287Sdimstatic const YYINT calc_dgoto[] = { 1, 169234287Sdim 7, 8, 9, 170234287Sdim}; 171234287Sdimstatic const YYINT calc_sindex[] = { 0, 172234287Sdim -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 173234287Sdim -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 174234287Sdim -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 175234287Sdim 0, 0, 176234287Sdim}; 177234287Sdimstatic const YYINT calc_rindex[] = { 0, 178234287Sdim 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 179234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180234287Sdim 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 181234287Sdim 0, 0, 182234287Sdim}; 183234287Sdimstatic const YYINT calc_gindex[] = { 0, 184234287Sdim 0, 65, 0, 185234287Sdim}; 186234287Sdim#define YYTABLESIZE 220 187234287Sdimstatic const YYINT calc_table[] = { 6, 188263508Sdim 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 189234287Sdim 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 190234287Sdim 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 191234287Sdim 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 192234287Sdim 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 193234287Sdim 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 194234287Sdim 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 195234287Sdim 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 196234287Sdim 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 197234287Sdim 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 198234287Sdim 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 199234287Sdim 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 200234287Sdim 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 201234287Sdim 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 202234287Sdim 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 203234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208234287Sdim 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209234287Sdim 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, 210234287Sdim}; 211234287Sdimstatic const YYINT calc_check[] = { 40, 212234287Sdim 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 213234287Sdim 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 214234287Sdim -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 215234287Sdim -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 216234287Sdim -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 217234287Sdim 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 218234287Sdim -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 219234287Sdim 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 220234287Sdim 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 221234287Sdim -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 222234287Sdim -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 223234287Sdim -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 224234287Sdim -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 225234287Sdim -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 226234287Sdim -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 227234287Sdim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228234287Sdim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 229234287Sdim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 230234287Sdim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 231234287Sdim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 232234287Sdim -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 233234287Sdim -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 234234287Sdim}; 235234287Sdim#define YYFINAL 1 236234287Sdim#ifndef YYDEBUG 237263508Sdim#define YYDEBUG 0 238234287Sdim#endif 239234287Sdim#define YYMAXTOKEN 259 240234287Sdim#define YYUNDFTOKEN 265 241234287Sdim#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 242234287Sdim#if YYDEBUG 243234287Sdimstatic const char *const calc_name[] = { 244234287Sdim 245234287Sdim"end-of-file",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, 246234287Sdim0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 247234287Sdim0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 248234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 249234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 250234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 251234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 252234287Sdim0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", 253234287Sdim}; 254234287Sdimstatic const char *const calc_rule[] = { 255234287Sdim"$accept : list", 256234287Sdim"list :", 257234287Sdim"list : list stat '\\n'", 258234287Sdim"list : list error '\\n'", 259234287Sdim"stat : expr", 260234287Sdim"stat : LETTER '=' expr", 261234287Sdim"expr : '(' expr ')'", 262234287Sdim"expr : expr '+' expr", 263234287Sdim"expr : expr '-' expr", 264234287Sdim"expr : expr '*' expr", 265234287Sdim"expr : expr '/' expr", 266234287Sdim"expr : expr '%' expr", 267234287Sdim"expr : expr '&' expr", 268263508Sdim"expr : expr '|' expr", 269234287Sdim"expr : '-' expr", 270234287Sdim"expr : LETTER", 271234287Sdim"expr : number", 272234287Sdim"number : DIGIT", 273234287Sdim"number : number DIGIT", 274234287Sdim 275234287Sdim}; 276234287Sdim#endif 277234287Sdim 278234287Sdimint yydebug; 279234287Sdimint yynerrs; 280234287Sdim 281234287Sdimint yyerrflag; 282234287Sdimint yychar; 283234287SdimYYSTYPE yyval; 284234287SdimYYSTYPE yylval; 285234287Sdim 286234287Sdim/* define the initial stack-sizes */ 287234287Sdim#ifdef YYSTACKSIZE 288234287Sdim#undef YYMAXDEPTH 289234287Sdim#define YYMAXDEPTH YYSTACKSIZE 290234287Sdim#else 291234287Sdim#ifdef YYMAXDEPTH 292234287Sdim#define YYSTACKSIZE YYMAXDEPTH 293234287Sdim#else 294234287Sdim#define YYSTACKSIZE 10000 295234287Sdim#define YYMAXDEPTH 10000 296234287Sdim#endif 297234287Sdim#endif 298234287Sdim 299234287Sdim#define YYINITSTACKSIZE 200 300234287Sdim 301234287Sdimtypedef struct { 302234287Sdim unsigned stacksize; 303234287Sdim YYINT *s_base; 304234287Sdim YYINT *s_mark; 305234287Sdim YYINT *s_last; 306263508Sdim YYSTYPE *l_base; 307263508Sdim YYSTYPE *l_mark; 308234287Sdim} YYSTACKDATA; 309234287Sdim/* variables for the parser stack */ 310234287Sdimstatic YYSTACKDATA yystack; 311234287Sdim#line 66 "calc.y" 312234287Sdim /* start of programs */ 313234287Sdim 314234287Sdimint 315234287Sdimmain (void) 316234287Sdim{ 317234287Sdim while(!feof(stdin)) { 318234287Sdim yyparse(); 319234287Sdim } 320234287Sdim return 0; 321234287Sdim} 322234287Sdim 323234287Sdimstatic void 324234287Sdimyyerror(const char *s) 325234287Sdim{ 326234287Sdim fprintf(stderr, "%s\n", s); 327234287Sdim} 328234287Sdim 329234287Sdimint 330234287Sdimyylex(void) 331234287Sdim{ 332234287Sdim /* lexical analysis routine */ 333234287Sdim /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 334234287Sdim /* return DIGIT for a digit, yylval = 0 through 9 */ 335234287Sdim /* all other characters are returned immediately */ 336234287Sdim 337239462Sdim int c; 338234287Sdim 339234287Sdim while( (c=getchar()) == ' ' ) { /* skip blanks */ } 340234287Sdim 341234287Sdim /* c is now nonblank */ 342234287Sdim 343234287Sdim if( islower( c )) { 344234287Sdim yylval = c - 'a'; 345234287Sdim return ( LETTER ); 346234287Sdim } 347234287Sdim if( isdigit( c )) { 348234287Sdim yylval = c - '0'; 349 return ( DIGIT ); 350 } 351 return( c ); 352} 353#line 354 "calc.tab.c" 354 355#if YYDEBUG 356#include <stdio.h> /* needed for printf */ 357#endif 358 359#include <stdlib.h> /* needed for malloc, etc */ 360#include <string.h> /* needed for memset */ 361 362/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 363static int yygrowstack(YYSTACKDATA *data) 364{ 365 int i; 366 unsigned newsize; 367 YYINT *newss; 368 YYSTYPE *newvs; 369 370 if ((newsize = data->stacksize) == 0) 371 newsize = YYINITSTACKSIZE; 372 else if (newsize >= YYMAXDEPTH) 373 return YYENOMEM; 374 else if ((newsize *= 2) > YYMAXDEPTH) 375 newsize = YYMAXDEPTH; 376 377 i = (int) (data->s_mark - data->s_base); 378 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 379 if (newss == 0) 380 return YYENOMEM; 381 382 data->s_base = newss; 383 data->s_mark = newss + i; 384 385 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 386 if (newvs == 0) 387 return YYENOMEM; 388 389 data->l_base = newvs; 390 data->l_mark = newvs + i; 391 392 data->stacksize = newsize; 393 data->s_last = data->s_base + newsize - 1; 394 return 0; 395} 396 397#if YYPURE || defined(YY_NO_LEAKS) 398static void yyfreestack(YYSTACKDATA *data) 399{ 400 free(data->s_base); 401 free(data->l_base); 402 memset(data, 0, sizeof(*data)); 403} 404#else 405#define yyfreestack(data) /* nothing */ 406#endif 407 408#define YYABORT goto yyabort 409#define YYREJECT goto yyabort 410#define YYACCEPT goto yyaccept 411#define YYERROR goto yyerrlab 412 413int 414YYPARSE_DECL() 415{ 416 int yym, yyn, yystate; 417#if YYDEBUG 418 const char *yys; 419 420 if ((yys = getenv("YYDEBUG")) != 0) 421 { 422 yyn = *yys; 423 if (yyn >= '0' && yyn <= '9') 424 yydebug = yyn - '0'; 425 } 426#endif 427 428 yynerrs = 0; 429 yyerrflag = 0; 430 yychar = YYEMPTY; 431 yystate = 0; 432 433#if YYPURE 434 memset(&yystack, 0, sizeof(yystack)); 435#endif 436 437 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 438 yystack.s_mark = yystack.s_base; 439 yystack.l_mark = yystack.l_base; 440 yystate = 0; 441 *yystack.s_mark = 0; 442 443yyloop: 444 if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 445 if (yychar < 0) 446 { 447 if ((yychar = YYLEX) < 0) yychar = YYEOF; 448#if YYDEBUG 449 if (yydebug) 450 { 451 yys = yyname[YYTRANSLATE(yychar)]; 452 printf("%sdebug: state %d, reading %d (%s)\n", 453 YYPREFIX, yystate, yychar, yys); 454 } 455#endif 456 } 457 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 458 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 459 { 460#if YYDEBUG 461 if (yydebug) 462 printf("%sdebug: state %d, shifting to state %d\n", 463 YYPREFIX, yystate, yytable[yyn]); 464#endif 465 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 466 { 467 goto yyoverflow; 468 } 469 yystate = yytable[yyn]; 470 *++yystack.s_mark = yytable[yyn]; 471 *++yystack.l_mark = yylval; 472 yychar = YYEMPTY; 473 if (yyerrflag > 0) --yyerrflag; 474 goto yyloop; 475 } 476 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 477 yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 478 { 479 yyn = yytable[yyn]; 480 goto yyreduce; 481 } 482 if (yyerrflag) goto yyinrecovery; 483 484 YYERROR_CALL("syntax error"); 485 486 goto yyerrlab; 487 488yyerrlab: 489 ++yynerrs; 490 491yyinrecovery: 492 if (yyerrflag < 3) 493 { 494 yyerrflag = 3; 495 for (;;) 496 { 497 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 498 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 499 { 500#if YYDEBUG 501 if (yydebug) 502 printf("%sdebug: state %d, error recovery shifting\ 503 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 504#endif 505 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 506 { 507 goto yyoverflow; 508 } 509 yystate = yytable[yyn]; 510 *++yystack.s_mark = yytable[yyn]; 511 *++yystack.l_mark = yylval; 512 goto yyloop; 513 } 514 else 515 { 516#if YYDEBUG 517 if (yydebug) 518 printf("%sdebug: error recovery discarding state %d\n", 519 YYPREFIX, *yystack.s_mark); 520#endif 521 if (yystack.s_mark <= yystack.s_base) goto yyabort; 522 --yystack.s_mark; 523 --yystack.l_mark; 524 } 525 } 526 } 527 else 528 { 529 if (yychar == YYEOF) goto yyabort; 530#if YYDEBUG 531 if (yydebug) 532 { 533 yys = yyname[YYTRANSLATE(yychar)]; 534 printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 535 YYPREFIX, yystate, yychar, yys); 536 } 537#endif 538 yychar = YYEMPTY; 539 goto yyloop; 540 } 541 542yyreduce: 543#if YYDEBUG 544 if (yydebug) 545 printf("%sdebug: state %d, reducing by rule %d (%s)\n", 546 YYPREFIX, yystate, yyn, yyrule[yyn]); 547#endif 548 yym = yylen[yyn]; 549 if (yym) 550 yyval = yystack.l_mark[1-yym]; 551 else 552 memset(&yyval, 0, sizeof yyval); 553 switch (yyn) 554 { 555case 3: 556#line 28 "calc.y" 557 { yyerrok ; } 558break; 559case 4: 560#line 32 "calc.y" 561 { printf("%d\n",yystack.l_mark[0]);} 562break; 563case 5: 564#line 34 "calc.y" 565 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 566break; 567case 6: 568#line 38 "calc.y" 569 { yyval = yystack.l_mark[-1]; } 570break; 571case 7: 572#line 40 "calc.y" 573 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 574break; 575case 8: 576#line 42 "calc.y" 577 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 578break; 579case 9: 580#line 44 "calc.y" 581 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 582break; 583case 10: 584#line 46 "calc.y" 585 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 586break; 587case 11: 588#line 48 "calc.y" 589 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 590break; 591case 12: 592#line 50 "calc.y" 593 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 594break; 595case 13: 596#line 52 "calc.y" 597 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 598break; 599case 14: 600#line 54 "calc.y" 601 { yyval = - yystack.l_mark[0]; } 602break; 603case 15: 604#line 56 "calc.y" 605 { yyval = regs[yystack.l_mark[0]]; } 606break; 607case 17: 608#line 61 "calc.y" 609 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 610break; 611case 18: 612#line 63 "calc.y" 613 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 614break; 615#line 616 "calc.tab.c" 616 } 617 yystack.s_mark -= yym; 618 yystate = *yystack.s_mark; 619 yystack.l_mark -= yym; 620 yym = yylhs[yyn]; 621 if (yystate == 0 && yym == 0) 622 { 623#if YYDEBUG 624 if (yydebug) 625 printf("%sdebug: after reduction, shifting from state 0 to\ 626 state %d\n", YYPREFIX, YYFINAL); 627#endif 628 yystate = YYFINAL; 629 *++yystack.s_mark = YYFINAL; 630 *++yystack.l_mark = yyval; 631 if (yychar < 0) 632 { 633 if ((yychar = YYLEX) < 0) yychar = YYEOF; 634#if YYDEBUG 635 if (yydebug) 636 { 637 yys = yyname[YYTRANSLATE(yychar)]; 638 printf("%sdebug: state %d, reading %d (%s)\n", 639 YYPREFIX, YYFINAL, yychar, yys); 640 } 641#endif 642 } 643 if (yychar == YYEOF) goto yyaccept; 644 goto yyloop; 645 } 646 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 647 yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 648 yystate = yytable[yyn]; 649 else 650 yystate = yydgoto[yym]; 651#if YYDEBUG 652 if (yydebug) 653 printf("%sdebug: after reduction, shifting from state %d \ 654to state %d\n", YYPREFIX, *yystack.s_mark, yystate); 655#endif 656 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 657 { 658 goto yyoverflow; 659 } 660 *++yystack.s_mark = (YYINT) yystate; 661 *++yystack.l_mark = yyval; 662 goto yyloop; 663 664yyoverflow: 665 YYERROR_CALL("yacc stack overflow"); 666 667yyabort: 668 yyfreestack(&yystack); 669 return (1); 670 671yyaccept: 672 yyfreestack(&yystack); 673 return (0); 674} 675