1234949Sbapt#ifndef lint 2234949Sbaptstatic const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; 3234949Sbapt#endif 4234949Sbapt 5234949Sbapt#define YYBYACC 1 6234949Sbapt#define YYMAJOR 1 7234949Sbapt#define YYMINOR 9 8234949Sbapt 9234949Sbapt#define YYEMPTY (-1) 10234949Sbapt#define yyclearin (yychar = YYEMPTY) 11234949Sbapt#define yyerrok (yyerrflag = 0) 12234949Sbapt#define YYRECOVERING() (yyerrflag != 0) 13234949Sbapt 14234949Sbapt 15234949Sbapt#ifndef yyparse 16234949Sbapt#define yyparse calc_parse 17234949Sbapt#endif /* yyparse */ 18234949Sbapt 19234949Sbapt#ifndef yylex 20234949Sbapt#define yylex calc_lex 21234949Sbapt#endif /* yylex */ 22234949Sbapt 23234949Sbapt#ifndef yyerror 24234949Sbapt#define yyerror calc_error 25234949Sbapt#endif /* yyerror */ 26234949Sbapt 27234949Sbapt#ifndef yychar 28234949Sbapt#define yychar calc_char 29234949Sbapt#endif /* yychar */ 30234949Sbapt 31234949Sbapt#ifndef yyval 32234949Sbapt#define yyval calc_val 33234949Sbapt#endif /* yyval */ 34234949Sbapt 35234949Sbapt#ifndef yylval 36234949Sbapt#define yylval calc_lval 37234949Sbapt#endif /* yylval */ 38234949Sbapt 39234949Sbapt#ifndef yydebug 40234949Sbapt#define yydebug calc_debug 41234949Sbapt#endif /* yydebug */ 42234949Sbapt 43234949Sbapt#ifndef yynerrs 44234949Sbapt#define yynerrs calc_nerrs 45234949Sbapt#endif /* yynerrs */ 46234949Sbapt 47234949Sbapt#ifndef yyerrflag 48234949Sbapt#define yyerrflag calc_errflag 49234949Sbapt#endif /* yyerrflag */ 50234949Sbapt 51234949Sbapt#ifndef yylhs 52234949Sbapt#define yylhs calc_lhs 53234949Sbapt#endif /* yylhs */ 54234949Sbapt 55234949Sbapt#ifndef yylen 56234949Sbapt#define yylen calc_len 57234949Sbapt#endif /* yylen */ 58234949Sbapt 59234949Sbapt#ifndef yydefred 60234949Sbapt#define yydefred calc_defred 61234949Sbapt#endif /* yydefred */ 62234949Sbapt 63234949Sbapt#ifndef yydgoto 64234949Sbapt#define yydgoto calc_dgoto 65234949Sbapt#endif /* yydgoto */ 66234949Sbapt 67234949Sbapt#ifndef yysindex 68234949Sbapt#define yysindex calc_sindex 69234949Sbapt#endif /* yysindex */ 70234949Sbapt 71234949Sbapt#ifndef yyrindex 72234949Sbapt#define yyrindex calc_rindex 73234949Sbapt#endif /* yyrindex */ 74234949Sbapt 75234949Sbapt#ifndef yygindex 76234949Sbapt#define yygindex calc_gindex 77234949Sbapt#endif /* yygindex */ 78234949Sbapt 79234949Sbapt#ifndef yytable 80234949Sbapt#define yytable calc_table 81234949Sbapt#endif /* yytable */ 82234949Sbapt 83234949Sbapt#ifndef yycheck 84234949Sbapt#define yycheck calc_check 85234949Sbapt#endif /* yycheck */ 86234949Sbapt 87234949Sbapt#ifndef yyname 88234949Sbapt#define yyname calc_name 89234949Sbapt#endif /* yyname */ 90234949Sbapt 91234949Sbapt#ifndef yyrule 92234949Sbapt#define yyrule calc_rule 93234949Sbapt#endif /* yyrule */ 94234949Sbapt#define YYPREFIX "calc_" 95234949Sbapt 96234949Sbapt#define YYPURE 0 97234949Sbapt 98234949Sbapt#line 2 "calc.y" 99234949Sbapt# include <stdio.h> 100234949Sbapt# include <ctype.h> 101234949Sbapt 102234949Sbaptint regs[26]; 103234949Sbaptint base; 104234949Sbapt 105234949Sbaptextern int yylex(void); 106234949Sbaptstatic void yyerror(const char *s); 107234949Sbapt 108234949Sbapt#line 109 "calc.tab.c" 109234949Sbapt 110234949Sbapt#ifndef YYSTYPE 111234949Sbapttypedef int YYSTYPE; 112234949Sbapt#endif 113234949Sbapt 114234949Sbapt/* compatibility with bison */ 115234949Sbapt#ifdef YYPARSE_PARAM 116234949Sbapt/* compatibility with FreeBSD */ 117234949Sbapt# ifdef YYPARSE_PARAM_TYPE 118234949Sbapt# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 119234949Sbapt# else 120234949Sbapt# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 121234949Sbapt# endif 122234949Sbapt#else 123234949Sbapt# define YYPARSE_DECL() yyparse(void) 124234949Sbapt#endif 125234949Sbapt 126234949Sbapt/* Parameters sent to lex. */ 127234949Sbapt#ifdef YYLEX_PARAM 128234949Sbapt# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 129234949Sbapt# define YYLEX yylex(YYLEX_PARAM) 130234949Sbapt#else 131234949Sbapt# define YYLEX_DECL() yylex(void) 132234949Sbapt# define YYLEX yylex() 133234949Sbapt#endif 134234949Sbapt 135234949Sbapt/* Parameters sent to yyerror. */ 136234949Sbapt#ifndef YYERROR_DECL 137234949Sbapt#define YYERROR_DECL() yyerror(const char *s) 138234949Sbapt#endif 139234949Sbapt#ifndef YYERROR_CALL 140234949Sbapt#define YYERROR_CALL(msg) yyerror(msg) 141234949Sbapt#endif 142234949Sbapt 143234949Sbaptextern int YYPARSE_DECL(); 144234949Sbapt 145234949Sbapt#define DIGIT 257 146234949Sbapt#define LETTER 258 147234949Sbapt#define UMINUS 259 148234949Sbapt#define YYERRCODE 256 149234949Sbaptstatic const short calc_lhs[] = { -1, 150234949Sbapt 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 151234949Sbapt 2, 2, 2, 2, 2, 2, 3, 3, 152234949Sbapt}; 153234949Sbaptstatic const short calc_len[] = { 2, 154234949Sbapt 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 155234949Sbapt 3, 3, 3, 2, 1, 1, 1, 2, 156234949Sbapt}; 157234949Sbaptstatic const short calc_defred[] = { 1, 158234949Sbapt 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 159234949Sbapt 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 160234949Sbapt 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 161234949Sbapt 10, 11, 162234949Sbapt}; 163234949Sbaptstatic const short calc_dgoto[] = { 1, 164234949Sbapt 7, 8, 9, 165234949Sbapt}; 166234949Sbaptstatic const short calc_sindex[] = { 0, 167234949Sbapt -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 168234949Sbapt -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 169234949Sbapt -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 170234949Sbapt 0, 0, 171234949Sbapt}; 172234949Sbaptstatic const short calc_rindex[] = { 0, 173234949Sbapt 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 174234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175234949Sbapt 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 176234949Sbapt 0, 0, 177234949Sbapt}; 178234949Sbaptstatic const short calc_gindex[] = { 0, 179234949Sbapt 0, 65, 0, 180234949Sbapt}; 181234949Sbapt#define YYTABLESIZE 220 182234949Sbaptstatic const short calc_table[] = { 6, 183234949Sbapt 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 184234949Sbapt 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 185234949Sbapt 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 186234949Sbapt 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 187234949Sbapt 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 188234949Sbapt 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 189234949Sbapt 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 190234949Sbapt 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 191234949Sbapt 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 192234949Sbapt 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 193234949Sbapt 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 194234949Sbapt 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 195234949Sbapt 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 196234949Sbapt 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 197234949Sbapt 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 198234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203234949Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204234949Sbapt 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, 205234949Sbapt}; 206234949Sbaptstatic const short calc_check[] = { 40, 207234949Sbapt 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 208234949Sbapt 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 209234949Sbapt -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 210234949Sbapt -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 211234949Sbapt -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 212234949Sbapt 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 213234949Sbapt -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 214234949Sbapt 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 215234949Sbapt 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 216234949Sbapt -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 217234949Sbapt -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 218234949Sbapt -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 219234949Sbapt -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 220234949Sbapt -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 221234949Sbapt -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 222234949Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 223234949Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 224234949Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 225234949Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 226234949Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 227234949Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 228234949Sbapt -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 229234949Sbapt}; 230234949Sbapt#define YYFINAL 1 231234949Sbapt#ifndef YYDEBUG 232234949Sbapt#define YYDEBUG 0 233234949Sbapt#endif 234234949Sbapt#define YYMAXTOKEN 259 235234949Sbapt#if YYDEBUG 236234949Sbaptstatic const char *yyname[] = { 237234949Sbapt 238234949Sbapt"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, 239234949Sbapt0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 240234949Sbapt0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 241234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 242234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 243234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 244234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 245234949Sbapt0,0,0,0,0,0,"DIGIT","LETTER","UMINUS", 246234949Sbapt}; 247234949Sbaptstatic const char *yyrule[] = { 248234949Sbapt"$accept : list", 249234949Sbapt"list :", 250234949Sbapt"list : list stat '\\n'", 251234949Sbapt"list : list error '\\n'", 252234949Sbapt"stat : expr", 253234949Sbapt"stat : LETTER '=' expr", 254234949Sbapt"expr : '(' expr ')'", 255234949Sbapt"expr : expr '+' expr", 256234949Sbapt"expr : expr '-' expr", 257234949Sbapt"expr : expr '*' expr", 258234949Sbapt"expr : expr '/' expr", 259234949Sbapt"expr : expr '%' expr", 260234949Sbapt"expr : expr '&' expr", 261234949Sbapt"expr : expr '|' expr", 262234949Sbapt"expr : '-' expr", 263234949Sbapt"expr : LETTER", 264234949Sbapt"expr : number", 265234949Sbapt"number : DIGIT", 266234949Sbapt"number : number DIGIT", 267234949Sbapt 268234949Sbapt}; 269234949Sbapt#endif 270234949Sbapt 271234949Sbaptint yydebug; 272234949Sbaptint yynerrs; 273234949Sbapt 274234949Sbaptint yyerrflag; 275234949Sbaptint yychar; 276234949SbaptYYSTYPE yyval; 277234949SbaptYYSTYPE yylval; 278234949Sbapt 279234949Sbapt/* define the initial stack-sizes */ 280234949Sbapt#ifdef YYSTACKSIZE 281234949Sbapt#undef YYMAXDEPTH 282234949Sbapt#define YYMAXDEPTH YYSTACKSIZE 283234949Sbapt#else 284234949Sbapt#ifdef YYMAXDEPTH 285234949Sbapt#define YYSTACKSIZE YYMAXDEPTH 286234949Sbapt#else 287234949Sbapt#define YYSTACKSIZE 500 288234949Sbapt#define YYMAXDEPTH 500 289234949Sbapt#endif 290234949Sbapt#endif 291234949Sbapt 292234949Sbapt#define YYINITSTACKSIZE 500 293234949Sbapt 294234949Sbapttypedef struct { 295234949Sbapt unsigned stacksize; 296234949Sbapt short *s_base; 297234949Sbapt short *s_mark; 298234949Sbapt short *s_last; 299234949Sbapt YYSTYPE *l_base; 300234949Sbapt YYSTYPE *l_mark; 301234949Sbapt} YYSTACKDATA; 302234949Sbapt/* variables for the parser stack */ 303234949Sbaptstatic YYSTACKDATA yystack; 304234949Sbapt#line 66 "calc.y" 305234949Sbapt /* start of programs */ 306234949Sbapt 307234949Sbaptint 308234949Sbaptmain (void) 309234949Sbapt{ 310234949Sbapt while(!feof(stdin)) { 311234949Sbapt yyparse(); 312234949Sbapt } 313234949Sbapt return 0; 314234949Sbapt} 315234949Sbapt 316234949Sbaptstatic void 317234949Sbaptyyerror(const char *s) 318234949Sbapt{ 319234949Sbapt fprintf(stderr, "%s\n", s); 320234949Sbapt} 321234949Sbapt 322234949Sbaptint 323234949Sbaptyylex(void) 324234949Sbapt{ 325234949Sbapt /* lexical analysis routine */ 326234949Sbapt /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 327234949Sbapt /* return DIGIT for a digit, yylval = 0 through 9 */ 328234949Sbapt /* all other characters are returned immediately */ 329234949Sbapt 330234949Sbapt int c; 331234949Sbapt 332234949Sbapt while( (c=getchar()) == ' ' ) { /* skip blanks */ } 333234949Sbapt 334234949Sbapt /* c is now nonblank */ 335234949Sbapt 336234949Sbapt if( islower( c )) { 337234949Sbapt yylval = c - 'a'; 338234949Sbapt return ( LETTER ); 339234949Sbapt } 340234949Sbapt if( isdigit( c )) { 341234949Sbapt yylval = c - '0'; 342234949Sbapt return ( DIGIT ); 343234949Sbapt } 344234949Sbapt return( c ); 345234949Sbapt} 346234949Sbapt#line 347 "calc.tab.c" 347234949Sbapt 348234949Sbapt#if YYDEBUG 349234949Sbapt#include <stdio.h> /* needed for printf */ 350234949Sbapt#endif 351234949Sbapt 352234949Sbapt#include <stdlib.h> /* needed for malloc, etc */ 353234949Sbapt#include <string.h> /* needed for memset */ 354234949Sbapt 355234949Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 356234949Sbaptstatic int yygrowstack(YYSTACKDATA *data) 357234949Sbapt{ 358234949Sbapt int i; 359234949Sbapt unsigned newsize; 360234949Sbapt short *newss; 361234949Sbapt YYSTYPE *newvs; 362234949Sbapt 363234949Sbapt if ((newsize = data->stacksize) == 0) 364234949Sbapt newsize = YYINITSTACKSIZE; 365234949Sbapt else if (newsize >= YYMAXDEPTH) 366234949Sbapt return -1; 367234949Sbapt else if ((newsize *= 2) > YYMAXDEPTH) 368234949Sbapt newsize = YYMAXDEPTH; 369234949Sbapt 370251143Sbapt i = (int) (data->s_mark - data->s_base); 371234949Sbapt newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); 372234949Sbapt if (newss == 0) 373234949Sbapt return -1; 374234949Sbapt 375234949Sbapt data->s_base = newss; 376234949Sbapt data->s_mark = newss + i; 377234949Sbapt 378234949Sbapt newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 379234949Sbapt if (newvs == 0) 380234949Sbapt return -1; 381234949Sbapt 382234949Sbapt data->l_base = newvs; 383234949Sbapt data->l_mark = newvs + i; 384234949Sbapt 385234949Sbapt data->stacksize = newsize; 386234949Sbapt data->s_last = data->s_base + newsize - 1; 387234949Sbapt return 0; 388234949Sbapt} 389234949Sbapt 390234949Sbapt#if YYPURE || defined(YY_NO_LEAKS) 391234949Sbaptstatic void yyfreestack(YYSTACKDATA *data) 392234949Sbapt{ 393234949Sbapt free(data->s_base); 394234949Sbapt free(data->l_base); 395234949Sbapt memset(data, 0, sizeof(*data)); 396234949Sbapt} 397234949Sbapt#else 398234949Sbapt#define yyfreestack(data) /* nothing */ 399234949Sbapt#endif 400234949Sbapt 401234949Sbapt#define YYABORT goto yyabort 402234949Sbapt#define YYREJECT goto yyabort 403234949Sbapt#define YYACCEPT goto yyaccept 404234949Sbapt#define YYERROR goto yyerrlab 405234949Sbapt 406234949Sbaptint 407234949SbaptYYPARSE_DECL() 408234949Sbapt{ 409234949Sbapt int yym, yyn, yystate; 410234949Sbapt#if YYDEBUG 411234949Sbapt const char *yys; 412234949Sbapt 413234949Sbapt if ((yys = getenv("YYDEBUG")) != 0) 414234949Sbapt { 415234949Sbapt yyn = *yys; 416234949Sbapt if (yyn >= '0' && yyn <= '9') 417234949Sbapt yydebug = yyn - '0'; 418234949Sbapt } 419234949Sbapt#endif 420234949Sbapt 421234949Sbapt yynerrs = 0; 422234949Sbapt yyerrflag = 0; 423234949Sbapt yychar = YYEMPTY; 424234949Sbapt yystate = 0; 425234949Sbapt 426234949Sbapt#if YYPURE 427234949Sbapt memset(&yystack, 0, sizeof(yystack)); 428234949Sbapt#endif 429234949Sbapt 430234949Sbapt if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow; 431234949Sbapt yystack.s_mark = yystack.s_base; 432234949Sbapt yystack.l_mark = yystack.l_base; 433234949Sbapt yystate = 0; 434234949Sbapt *yystack.s_mark = 0; 435234949Sbapt 436234949Sbaptyyloop: 437234949Sbapt if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 438234949Sbapt if (yychar < 0) 439234949Sbapt { 440234949Sbapt if ((yychar = YYLEX) < 0) yychar = 0; 441234949Sbapt#if YYDEBUG 442234949Sbapt if (yydebug) 443234949Sbapt { 444234949Sbapt yys = 0; 445234949Sbapt if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 446234949Sbapt if (!yys) yys = "illegal-symbol"; 447234949Sbapt printf("%sdebug: state %d, reading %d (%s)\n", 448234949Sbapt YYPREFIX, yystate, yychar, yys); 449234949Sbapt } 450234949Sbapt#endif 451234949Sbapt } 452234949Sbapt if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 453234949Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 454234949Sbapt { 455234949Sbapt#if YYDEBUG 456234949Sbapt if (yydebug) 457234949Sbapt printf("%sdebug: state %d, shifting to state %d\n", 458234949Sbapt YYPREFIX, yystate, yytable[yyn]); 459234949Sbapt#endif 460234949Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 461234949Sbapt { 462234949Sbapt goto yyoverflow; 463234949Sbapt } 464234949Sbapt yystate = yytable[yyn]; 465234949Sbapt *++yystack.s_mark = yytable[yyn]; 466234949Sbapt *++yystack.l_mark = yylval; 467234949Sbapt yychar = YYEMPTY; 468234949Sbapt if (yyerrflag > 0) --yyerrflag; 469234949Sbapt goto yyloop; 470234949Sbapt } 471234949Sbapt if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 472234949Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 473234949Sbapt { 474234949Sbapt yyn = yytable[yyn]; 475234949Sbapt goto yyreduce; 476234949Sbapt } 477234949Sbapt if (yyerrflag) goto yyinrecovery; 478234949Sbapt 479234949Sbapt yyerror("syntax error"); 480234949Sbapt 481234949Sbapt goto yyerrlab; 482234949Sbapt 483234949Sbaptyyerrlab: 484234949Sbapt ++yynerrs; 485234949Sbapt 486234949Sbaptyyinrecovery: 487234949Sbapt if (yyerrflag < 3) 488234949Sbapt { 489234949Sbapt yyerrflag = 3; 490234949Sbapt for (;;) 491234949Sbapt { 492234949Sbapt if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 493234949Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 494234949Sbapt { 495234949Sbapt#if YYDEBUG 496234949Sbapt if (yydebug) 497234949Sbapt printf("%sdebug: state %d, error recovery shifting\ 498234949Sbapt to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 499234949Sbapt#endif 500234949Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 501234949Sbapt { 502234949Sbapt goto yyoverflow; 503234949Sbapt } 504234949Sbapt yystate = yytable[yyn]; 505234949Sbapt *++yystack.s_mark = yytable[yyn]; 506234949Sbapt *++yystack.l_mark = yylval; 507234949Sbapt goto yyloop; 508234949Sbapt } 509234949Sbapt else 510234949Sbapt { 511234949Sbapt#if YYDEBUG 512234949Sbapt if (yydebug) 513234949Sbapt printf("%sdebug: error recovery discarding state %d\n", 514234949Sbapt YYPREFIX, *yystack.s_mark); 515234949Sbapt#endif 516234949Sbapt if (yystack.s_mark <= yystack.s_base) goto yyabort; 517234949Sbapt --yystack.s_mark; 518234949Sbapt --yystack.l_mark; 519234949Sbapt } 520234949Sbapt } 521234949Sbapt } 522234949Sbapt else 523234949Sbapt { 524234949Sbapt if (yychar == 0) goto yyabort; 525234949Sbapt#if YYDEBUG 526234949Sbapt if (yydebug) 527234949Sbapt { 528234949Sbapt yys = 0; 529234949Sbapt if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 530234949Sbapt if (!yys) yys = "illegal-symbol"; 531234949Sbapt printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 532234949Sbapt YYPREFIX, yystate, yychar, yys); 533234949Sbapt } 534234949Sbapt#endif 535234949Sbapt yychar = YYEMPTY; 536234949Sbapt goto yyloop; 537234949Sbapt } 538234949Sbapt 539234949Sbaptyyreduce: 540234949Sbapt#if YYDEBUG 541234949Sbapt if (yydebug) 542234949Sbapt printf("%sdebug: state %d, reducing by rule %d (%s)\n", 543234949Sbapt YYPREFIX, yystate, yyn, yyrule[yyn]); 544234949Sbapt#endif 545234949Sbapt yym = yylen[yyn]; 546234949Sbapt if (yym) 547234949Sbapt yyval = yystack.l_mark[1-yym]; 548234949Sbapt else 549234949Sbapt memset(&yyval, 0, sizeof yyval); 550234949Sbapt switch (yyn) 551234949Sbapt { 552234949Sbaptcase 3: 553234949Sbapt#line 28 "calc.y" 554234949Sbapt { yyerrok ; } 555234949Sbaptbreak; 556234949Sbaptcase 4: 557234949Sbapt#line 32 "calc.y" 558234949Sbapt { printf("%d\n",yystack.l_mark[0]);} 559234949Sbaptbreak; 560234949Sbaptcase 5: 561234949Sbapt#line 34 "calc.y" 562234949Sbapt { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 563234949Sbaptbreak; 564234949Sbaptcase 6: 565234949Sbapt#line 38 "calc.y" 566234949Sbapt { yyval = yystack.l_mark[-1]; } 567234949Sbaptbreak; 568234949Sbaptcase 7: 569234949Sbapt#line 40 "calc.y" 570234949Sbapt { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 571234949Sbaptbreak; 572234949Sbaptcase 8: 573234949Sbapt#line 42 "calc.y" 574234949Sbapt { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 575234949Sbaptbreak; 576234949Sbaptcase 9: 577234949Sbapt#line 44 "calc.y" 578234949Sbapt { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 579234949Sbaptbreak; 580234949Sbaptcase 10: 581234949Sbapt#line 46 "calc.y" 582234949Sbapt { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 583234949Sbaptbreak; 584234949Sbaptcase 11: 585234949Sbapt#line 48 "calc.y" 586234949Sbapt { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 587234949Sbaptbreak; 588234949Sbaptcase 12: 589234949Sbapt#line 50 "calc.y" 590234949Sbapt { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 591234949Sbaptbreak; 592234949Sbaptcase 13: 593234949Sbapt#line 52 "calc.y" 594234949Sbapt { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 595234949Sbaptbreak; 596234949Sbaptcase 14: 597234949Sbapt#line 54 "calc.y" 598234949Sbapt { yyval = - yystack.l_mark[0]; } 599234949Sbaptbreak; 600234949Sbaptcase 15: 601234949Sbapt#line 56 "calc.y" 602234949Sbapt { yyval = regs[yystack.l_mark[0]]; } 603234949Sbaptbreak; 604234949Sbaptcase 17: 605234949Sbapt#line 61 "calc.y" 606234949Sbapt { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } 607234949Sbaptbreak; 608234949Sbaptcase 18: 609234949Sbapt#line 63 "calc.y" 610234949Sbapt { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } 611234949Sbaptbreak; 612234949Sbapt#line 613 "calc.tab.c" 613234949Sbapt } 614234949Sbapt yystack.s_mark -= yym; 615234949Sbapt yystate = *yystack.s_mark; 616234949Sbapt yystack.l_mark -= yym; 617234949Sbapt yym = yylhs[yyn]; 618234949Sbapt if (yystate == 0 && yym == 0) 619234949Sbapt { 620234949Sbapt#if YYDEBUG 621234949Sbapt if (yydebug) 622234949Sbapt printf("%sdebug: after reduction, shifting from state 0 to\ 623234949Sbapt state %d\n", YYPREFIX, YYFINAL); 624234949Sbapt#endif 625234949Sbapt yystate = YYFINAL; 626234949Sbapt *++yystack.s_mark = YYFINAL; 627234949Sbapt *++yystack.l_mark = yyval; 628234949Sbapt if (yychar < 0) 629234949Sbapt { 630234949Sbapt if ((yychar = YYLEX) < 0) yychar = 0; 631234949Sbapt#if YYDEBUG 632234949Sbapt if (yydebug) 633234949Sbapt { 634234949Sbapt yys = 0; 635234949Sbapt if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; 636234949Sbapt if (!yys) yys = "illegal-symbol"; 637234949Sbapt printf("%sdebug: state %d, reading %d (%s)\n", 638234949Sbapt YYPREFIX, YYFINAL, yychar, yys); 639234949Sbapt } 640234949Sbapt#endif 641234949Sbapt } 642234949Sbapt if (yychar == 0) goto yyaccept; 643234949Sbapt goto yyloop; 644234949Sbapt } 645234949Sbapt if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 646234949Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 647234949Sbapt yystate = yytable[yyn]; 648234949Sbapt else 649234949Sbapt yystate = yydgoto[yym]; 650234949Sbapt#if YYDEBUG 651234949Sbapt if (yydebug) 652234949Sbapt printf("%sdebug: after reduction, shifting from state %d \ 653234949Sbaptto state %d\n", YYPREFIX, *yystack.s_mark, yystate); 654234949Sbapt#endif 655234949Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack)) 656234949Sbapt { 657234949Sbapt goto yyoverflow; 658234949Sbapt } 659234949Sbapt *++yystack.s_mark = (short) yystate; 660234949Sbapt *++yystack.l_mark = yyval; 661234949Sbapt goto yyloop; 662234949Sbapt 663234949Sbaptyyoverflow: 664234949Sbapt yyerror("yacc stack overflow"); 665234949Sbapt 666234949Sbaptyyabort: 667234949Sbapt yyfreestack(&yystack); 668234949Sbapt return (1); 669234949Sbapt 670234949Sbaptyyaccept: 671234949Sbapt yyfreestack(&yystack); 672234949Sbapt return (0); 673234949Sbapt} 674