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