1264790Sbapt/* original parser id follows */ 2264790Sbapt/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3264790Sbapt/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ 4264790Sbapt 5264790Sbapt#define YYBYACC 1 6264790Sbapt#define YYMAJOR 1 7264790Sbapt#define YYMINOR 9 8264790Sbapt#define YYCHECK "yyyymmdd" 9264790Sbapt 10264790Sbapt#define YYEMPTY (-1) 11264790Sbapt#define yyclearin (yychar = YYEMPTY) 12264790Sbapt#define yyerrok (yyerrflag = 0) 13264790Sbapt#define YYRECOVERING() (yyerrflag != 0) 14264790Sbapt#define YYENOMEM (-2) 15264790Sbapt#define YYEOF 0 16264790Sbapt 17264790Sbapt#ifndef yyparse 18264790Sbapt#define yyparse calc3_parse 19264790Sbapt#endif /* yyparse */ 20264790Sbapt 21264790Sbapt#ifndef yylex 22264790Sbapt#define yylex calc3_lex 23264790Sbapt#endif /* yylex */ 24264790Sbapt 25264790Sbapt#ifndef yyerror 26264790Sbapt#define yyerror calc3_error 27264790Sbapt#endif /* yyerror */ 28264790Sbapt 29264790Sbapt#ifndef yychar 30264790Sbapt#define yychar calc3_char 31264790Sbapt#endif /* yychar */ 32264790Sbapt 33264790Sbapt#ifndef yyval 34264790Sbapt#define yyval calc3_val 35264790Sbapt#endif /* yyval */ 36264790Sbapt 37264790Sbapt#ifndef yylval 38264790Sbapt#define yylval calc3_lval 39264790Sbapt#endif /* yylval */ 40264790Sbapt 41264790Sbapt#ifndef yydebug 42264790Sbapt#define yydebug calc3_debug 43264790Sbapt#endif /* yydebug */ 44264790Sbapt 45264790Sbapt#ifndef yynerrs 46264790Sbapt#define yynerrs calc3_nerrs 47264790Sbapt#endif /* yynerrs */ 48264790Sbapt 49264790Sbapt#ifndef yyerrflag 50264790Sbapt#define yyerrflag calc3_errflag 51264790Sbapt#endif /* yyerrflag */ 52264790Sbapt 53264790Sbapt#ifndef yylhs 54264790Sbapt#define yylhs calc3_lhs 55264790Sbapt#endif /* yylhs */ 56264790Sbapt 57264790Sbapt#ifndef yylen 58264790Sbapt#define yylen calc3_len 59264790Sbapt#endif /* yylen */ 60264790Sbapt 61264790Sbapt#ifndef yydefred 62264790Sbapt#define yydefred calc3_defred 63264790Sbapt#endif /* yydefred */ 64264790Sbapt 65264790Sbapt#ifndef yydgoto 66264790Sbapt#define yydgoto calc3_dgoto 67264790Sbapt#endif /* yydgoto */ 68264790Sbapt 69264790Sbapt#ifndef yysindex 70264790Sbapt#define yysindex calc3_sindex 71264790Sbapt#endif /* yysindex */ 72264790Sbapt 73264790Sbapt#ifndef yyrindex 74264790Sbapt#define yyrindex calc3_rindex 75264790Sbapt#endif /* yyrindex */ 76264790Sbapt 77264790Sbapt#ifndef yygindex 78264790Sbapt#define yygindex calc3_gindex 79264790Sbapt#endif /* yygindex */ 80264790Sbapt 81264790Sbapt#ifndef yytable 82264790Sbapt#define yytable calc3_table 83264790Sbapt#endif /* yytable */ 84264790Sbapt 85264790Sbapt#ifndef yycheck 86264790Sbapt#define yycheck calc3_check 87264790Sbapt#endif /* yycheck */ 88264790Sbapt 89264790Sbapt#ifndef yyname 90264790Sbapt#define yyname calc3_name 91264790Sbapt#endif /* yyname */ 92264790Sbapt 93264790Sbapt#ifndef yyrule 94264790Sbapt#define yyrule calc3_rule 95264790Sbapt#endif /* yyrule */ 96264790Sbapt#define YYPREFIX "calc3_" 97264790Sbapt 98264790Sbapt#define YYPURE 1 99264790Sbapt 100264790Sbapt#line 9 "calc3.y" 101264790Sbapt# include <stdio.h> 102264790Sbapt# include <ctype.h> 103264790Sbapt 104264790Sbapt#ifdef YYBISON 105264790Sbapt#define YYSTYPE int 106264790Sbapt#define YYLEX_PARAM base 107264790Sbapt#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) 108264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 109264790Sbaptint YYLEX_DECL(); 110264790Sbaptstatic void YYERROR_DECL(); 111264790Sbapt#endif 112264790Sbapt 113264790Sbapt#line 114 "calc3.tab.c" 114264790Sbapt 115264790Sbapt#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) 116264790Sbapt/* Default: YYSTYPE is the semantic value type. */ 117264790Sbapttypedef int YYSTYPE; 118264790Sbapt# define YYSTYPE_IS_DECLARED 1 119264790Sbapt#endif 120264790Sbapt 121264790Sbapt/* compatibility with bison */ 122264790Sbapt#ifdef YYPARSE_PARAM 123264790Sbapt/* compatibility with FreeBSD */ 124264790Sbapt# ifdef YYPARSE_PARAM_TYPE 125264790Sbapt# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 126264790Sbapt# else 127264790Sbapt# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 128264790Sbapt# endif 129264790Sbapt#else 130264790Sbapt# define YYPARSE_DECL() yyparse(int regs[26], int * base) 131264790Sbapt#endif 132264790Sbapt 133264790Sbapt/* Parameters sent to lex. */ 134264790Sbapt#ifdef YYLEX_PARAM 135264790Sbapt# ifdef YYLEX_PARAM_TYPE 136264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) 137264790Sbapt# else 138264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) 139264790Sbapt# endif 140264790Sbapt# define YYLEX yylex(&yylval, YYLEX_PARAM) 141264790Sbapt#else 142264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base) 143264790Sbapt# define YYLEX yylex(&yylval, base) 144264790Sbapt#endif 145264790Sbapt 146264790Sbapt/* Parameters sent to yyerror. */ 147264790Sbapt#ifndef YYERROR_DECL 148264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int * base, const char *s) 149264790Sbapt#endif 150264790Sbapt#ifndef YYERROR_CALL 151264790Sbapt#define YYERROR_CALL(msg) yyerror(regs, base, msg) 152264790Sbapt#endif 153264790Sbapt 154264790Sbaptextern int YYPARSE_DECL(); 155264790Sbapt 156264790Sbapt#define DIGIT 257 157264790Sbapt#define LETTER 258 158264790Sbapt#define UMINUS 259 159264790Sbapt#define YYERRCODE 256 160264790Sbapttypedef short YYINT; 161264790Sbaptstatic const YYINT calc3_lhs[] = { -1, 162264790Sbapt 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 163264790Sbapt 2, 2, 2, 2, 2, 2, 3, 3, 164264790Sbapt}; 165264790Sbaptstatic const YYINT calc3_len[] = { 2, 166264790Sbapt 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 167264790Sbapt 3, 3, 3, 2, 1, 1, 1, 2, 168264790Sbapt}; 169264790Sbaptstatic const YYINT calc3_defred[] = { 1, 170264790Sbapt 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 171264790Sbapt 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 172264790Sbapt 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 173264790Sbapt 10, 11, 174264790Sbapt}; 175264790Sbaptstatic const YYINT calc3_dgoto[] = { 1, 176264790Sbapt 7, 8, 9, 177264790Sbapt}; 178264790Sbaptstatic const YYINT calc3_sindex[] = { 0, 179264790Sbapt -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 180264790Sbapt -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 181264790Sbapt -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 182264790Sbapt 0, 0, 183264790Sbapt}; 184264790Sbaptstatic const YYINT calc3_rindex[] = { 0, 185264790Sbapt 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 186264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187264790Sbapt 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 188264790Sbapt 0, 0, 189264790Sbapt}; 190264790Sbaptstatic const YYINT calc3_gindex[] = { 0, 191264790Sbapt 0, 65, 0, 192264790Sbapt}; 193264790Sbapt#define YYTABLESIZE 220 194264790Sbaptstatic const YYINT calc3_table[] = { 6, 195264790Sbapt 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 196264790Sbapt 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 197264790Sbapt 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 198264790Sbapt 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 199264790Sbapt 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 200264790Sbapt 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 201264790Sbapt 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 202264790Sbapt 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 203264790Sbapt 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 204264790Sbapt 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 205264790Sbapt 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 206264790Sbapt 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 207264790Sbapt 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 208264790Sbapt 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 209264790Sbapt 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 210264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216264790Sbapt 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, 217264790Sbapt}; 218264790Sbaptstatic const YYINT calc3_check[] = { 40, 219264790Sbapt 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 220264790Sbapt 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 221264790Sbapt -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 222264790Sbapt -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 223264790Sbapt -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 224264790Sbapt 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 225264790Sbapt -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 226264790Sbapt 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 227264790Sbapt 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 228264790Sbapt -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 229264790Sbapt -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 230264790Sbapt -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 231264790Sbapt -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 232264790Sbapt -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 233264790Sbapt -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 234264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 235264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 236264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 237264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 238264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 239264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 240264790Sbapt -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 241264790Sbapt}; 242264790Sbapt#define YYFINAL 1 243264790Sbapt#ifndef YYDEBUG 244264790Sbapt#define YYDEBUG 0 245264790Sbapt#endif 246264790Sbapt#define YYMAXTOKEN 259 247264790Sbapt#define YYUNDFTOKEN 265 248264790Sbapt#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 249264790Sbapt#if YYDEBUG 250264790Sbaptstatic const char *const calc3_name[] = { 251264790Sbapt 252264790Sbapt"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, 253264790Sbapt0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 254264790Sbapt0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 255264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 256264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 257264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 258264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 259264790Sbapt0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", 260264790Sbapt}; 261264790Sbaptstatic const char *const calc3_rule[] = { 262264790Sbapt"$accept : list", 263264790Sbapt"list :", 264264790Sbapt"list : list stat '\\n'", 265264790Sbapt"list : list error '\\n'", 266264790Sbapt"stat : expr", 267264790Sbapt"stat : LETTER '=' expr", 268264790Sbapt"expr : '(' expr ')'", 269264790Sbapt"expr : expr '+' expr", 270264790Sbapt"expr : expr '-' expr", 271264790Sbapt"expr : expr '*' expr", 272264790Sbapt"expr : expr '/' expr", 273264790Sbapt"expr : expr '%' expr", 274264790Sbapt"expr : expr '&' expr", 275264790Sbapt"expr : expr '|' expr", 276264790Sbapt"expr : '-' expr", 277264790Sbapt"expr : LETTER", 278264790Sbapt"expr : number", 279264790Sbapt"number : DIGIT", 280264790Sbapt"number : number DIGIT", 281264790Sbapt 282264790Sbapt}; 283264790Sbapt#endif 284264790Sbapt 285264790Sbaptint yydebug; 286264790Sbaptint yynerrs; 287264790Sbapt 288264790Sbapt/* define the initial stack-sizes */ 289264790Sbapt#ifdef YYSTACKSIZE 290264790Sbapt#undef YYMAXDEPTH 291264790Sbapt#define YYMAXDEPTH YYSTACKSIZE 292264790Sbapt#else 293264790Sbapt#ifdef YYMAXDEPTH 294264790Sbapt#define YYSTACKSIZE YYMAXDEPTH 295264790Sbapt#else 296264790Sbapt#define YYSTACKSIZE 10000 297264790Sbapt#define YYMAXDEPTH 10000 298264790Sbapt#endif 299264790Sbapt#endif 300264790Sbapt 301264790Sbapt#define YYINITSTACKSIZE 200 302264790Sbapt 303264790Sbapttypedef struct { 304264790Sbapt unsigned stacksize; 305264790Sbapt YYINT *s_base; 306264790Sbapt YYINT *s_mark; 307264790Sbapt YYINT *s_last; 308264790Sbapt YYSTYPE *l_base; 309264790Sbapt YYSTYPE *l_mark; 310264790Sbapt} YYSTACKDATA; 311264790Sbapt#line 76 "calc3.y" 312264790Sbapt /* start of programs */ 313264790Sbapt 314264790Sbapt#ifdef YYBYACC 315264790Sbaptextern int YYLEX_DECL(); 316264790Sbapt#endif 317264790Sbapt 318264790Sbaptint 319264790Sbaptmain (void) 320264790Sbapt{ 321264790Sbapt int regs[26]; 322264790Sbapt int base = 10; 323264790Sbapt 324264790Sbapt while(!feof(stdin)) { 325264790Sbapt yyparse(regs, &base); 326264790Sbapt } 327264790Sbapt return 0; 328264790Sbapt} 329264790Sbapt 330264790Sbapt#define UNUSED(x) ((void)(x)) 331264790Sbapt 332264790Sbaptstatic void 333264790SbaptYYERROR_DECL() 334264790Sbapt{ 335264790Sbapt UNUSED(regs); /* %parse-param regs is not actually used here */ 336264790Sbapt UNUSED(base); /* %parse-param base is not actually used here */ 337264790Sbapt fprintf(stderr, "%s\n", s); 338264790Sbapt} 339264790Sbapt 340264790Sbaptint 341264790SbaptYYLEX_DECL() 342264790Sbapt{ 343264790Sbapt /* lexical analysis routine */ 344264790Sbapt /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 345264790Sbapt /* return DIGIT for a digit, yylval = 0 through 9 */ 346264790Sbapt /* all other characters are returned immediately */ 347264790Sbapt 348264790Sbapt int c; 349264790Sbapt 350264790Sbapt while( (c=getchar()) == ' ' ) { /* skip blanks */ } 351264790Sbapt 352264790Sbapt /* c is now nonblank */ 353264790Sbapt 354264790Sbapt if( islower( c )) { 355264790Sbapt *yylval = (c - 'a'); 356264790Sbapt return ( LETTER ); 357264790Sbapt } 358264790Sbapt if( isdigit( c )) { 359264790Sbapt *yylval = (c - '0') % (*base); 360264790Sbapt return ( DIGIT ); 361264790Sbapt } 362264790Sbapt return( c ); 363264790Sbapt} 364264790Sbapt#line 365 "calc3.tab.c" 365264790Sbapt 366264790Sbapt#if YYDEBUG 367264790Sbapt#include <stdio.h> /* needed for printf */ 368264790Sbapt#endif 369264790Sbapt 370264790Sbapt#include <stdlib.h> /* needed for malloc, etc */ 371264790Sbapt#include <string.h> /* needed for memset */ 372264790Sbapt 373264790Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 374264790Sbaptstatic int yygrowstack(YYSTACKDATA *data) 375264790Sbapt{ 376264790Sbapt int i; 377264790Sbapt unsigned newsize; 378264790Sbapt YYINT *newss; 379264790Sbapt YYSTYPE *newvs; 380264790Sbapt 381264790Sbapt if ((newsize = data->stacksize) == 0) 382264790Sbapt newsize = YYINITSTACKSIZE; 383264790Sbapt else if (newsize >= YYMAXDEPTH) 384264790Sbapt return YYENOMEM; 385264790Sbapt else if ((newsize *= 2) > YYMAXDEPTH) 386264790Sbapt newsize = YYMAXDEPTH; 387264790Sbapt 388264790Sbapt i = (int) (data->s_mark - data->s_base); 389264790Sbapt newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 390264790Sbapt if (newss == 0) 391264790Sbapt return YYENOMEM; 392264790Sbapt 393264790Sbapt data->s_base = newss; 394264790Sbapt data->s_mark = newss + i; 395264790Sbapt 396264790Sbapt newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 397264790Sbapt if (newvs == 0) 398264790Sbapt return YYENOMEM; 399264790Sbapt 400264790Sbapt data->l_base = newvs; 401264790Sbapt data->l_mark = newvs + i; 402264790Sbapt 403264790Sbapt data->stacksize = newsize; 404264790Sbapt data->s_last = data->s_base + newsize - 1; 405264790Sbapt return 0; 406264790Sbapt} 407264790Sbapt 408264790Sbapt#if YYPURE || defined(YY_NO_LEAKS) 409264790Sbaptstatic void yyfreestack(YYSTACKDATA *data) 410264790Sbapt{ 411264790Sbapt free(data->s_base); 412264790Sbapt free(data->l_base); 413264790Sbapt memset(data, 0, sizeof(*data)); 414264790Sbapt} 415264790Sbapt#else 416264790Sbapt#define yyfreestack(data) /* nothing */ 417264790Sbapt#endif 418264790Sbapt 419264790Sbapt#define YYABORT goto yyabort 420264790Sbapt#define YYREJECT goto yyabort 421264790Sbapt#define YYACCEPT goto yyaccept 422264790Sbapt#define YYERROR goto yyerrlab 423264790Sbapt 424264790Sbaptint 425264790SbaptYYPARSE_DECL() 426264790Sbapt{ 427264790Sbapt int yyerrflag; 428264790Sbapt int yychar; 429264790Sbapt YYSTYPE yyval; 430264790Sbapt YYSTYPE yylval; 431264790Sbapt 432264790Sbapt /* variables for the parser stack */ 433264790Sbapt YYSTACKDATA yystack; 434264790Sbapt int yym, yyn, yystate; 435264790Sbapt#if YYDEBUG 436264790Sbapt const char *yys; 437264790Sbapt 438264790Sbapt if ((yys = getenv("YYDEBUG")) != 0) 439264790Sbapt { 440264790Sbapt yyn = *yys; 441264790Sbapt if (yyn >= '0' && yyn <= '9') 442264790Sbapt yydebug = yyn - '0'; 443264790Sbapt } 444264790Sbapt#endif 445264790Sbapt 446264790Sbapt yynerrs = 0; 447264790Sbapt yyerrflag = 0; 448264790Sbapt yychar = YYEMPTY; 449264790Sbapt yystate = 0; 450264790Sbapt 451264790Sbapt#if YYPURE 452264790Sbapt memset(&yystack, 0, sizeof(yystack)); 453264790Sbapt#endif 454264790Sbapt 455264790Sbapt if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 456264790Sbapt yystack.s_mark = yystack.s_base; 457264790Sbapt yystack.l_mark = yystack.l_base; 458264790Sbapt yystate = 0; 459264790Sbapt *yystack.s_mark = 0; 460264790Sbapt 461264790Sbaptyyloop: 462264790Sbapt if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 463264790Sbapt if (yychar < 0) 464264790Sbapt { 465264790Sbapt if ((yychar = YYLEX) < 0) yychar = YYEOF; 466264790Sbapt#if YYDEBUG 467264790Sbapt if (yydebug) 468264790Sbapt { 469264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 470264790Sbapt printf("%sdebug: state %d, reading %d (%s)\n", 471264790Sbapt YYPREFIX, yystate, yychar, yys); 472264790Sbapt } 473264790Sbapt#endif 474264790Sbapt } 475264790Sbapt if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && 476264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 477264790Sbapt { 478264790Sbapt#if YYDEBUG 479264790Sbapt if (yydebug) 480264790Sbapt printf("%sdebug: state %d, shifting to state %d\n", 481264790Sbapt YYPREFIX, yystate, yytable[yyn]); 482264790Sbapt#endif 483264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 484264790Sbapt { 485264790Sbapt goto yyoverflow; 486264790Sbapt } 487264790Sbapt yystate = yytable[yyn]; 488264790Sbapt *++yystack.s_mark = yytable[yyn]; 489264790Sbapt *++yystack.l_mark = yylval; 490264790Sbapt yychar = YYEMPTY; 491264790Sbapt if (yyerrflag > 0) --yyerrflag; 492264790Sbapt goto yyloop; 493264790Sbapt } 494264790Sbapt if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && 495264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yychar) 496264790Sbapt { 497264790Sbapt yyn = yytable[yyn]; 498264790Sbapt goto yyreduce; 499264790Sbapt } 500264790Sbapt if (yyerrflag) goto yyinrecovery; 501264790Sbapt 502264790Sbapt YYERROR_CALL("syntax error"); 503264790Sbapt 504264790Sbapt goto yyerrlab; 505264790Sbapt 506264790Sbaptyyerrlab: 507264790Sbapt ++yynerrs; 508264790Sbapt 509264790Sbaptyyinrecovery: 510264790Sbapt if (yyerrflag < 3) 511264790Sbapt { 512264790Sbapt yyerrflag = 3; 513264790Sbapt for (;;) 514264790Sbapt { 515264790Sbapt if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 && 516264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) 517264790Sbapt { 518264790Sbapt#if YYDEBUG 519264790Sbapt if (yydebug) 520264790Sbapt printf("%sdebug: state %d, error recovery shifting\ 521264790Sbapt to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); 522264790Sbapt#endif 523264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 524264790Sbapt { 525264790Sbapt goto yyoverflow; 526264790Sbapt } 527264790Sbapt yystate = yytable[yyn]; 528264790Sbapt *++yystack.s_mark = yytable[yyn]; 529264790Sbapt *++yystack.l_mark = yylval; 530264790Sbapt goto yyloop; 531264790Sbapt } 532264790Sbapt else 533264790Sbapt { 534264790Sbapt#if YYDEBUG 535264790Sbapt if (yydebug) 536264790Sbapt printf("%sdebug: error recovery discarding state %d\n", 537264790Sbapt YYPREFIX, *yystack.s_mark); 538264790Sbapt#endif 539264790Sbapt if (yystack.s_mark <= yystack.s_base) goto yyabort; 540264790Sbapt --yystack.s_mark; 541264790Sbapt --yystack.l_mark; 542264790Sbapt } 543264790Sbapt } 544264790Sbapt } 545264790Sbapt else 546264790Sbapt { 547264790Sbapt if (yychar == YYEOF) goto yyabort; 548264790Sbapt#if YYDEBUG 549264790Sbapt if (yydebug) 550264790Sbapt { 551264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 552264790Sbapt printf("%sdebug: state %d, error recovery discards token %d (%s)\n", 553264790Sbapt YYPREFIX, yystate, yychar, yys); 554264790Sbapt } 555264790Sbapt#endif 556264790Sbapt yychar = YYEMPTY; 557264790Sbapt goto yyloop; 558264790Sbapt } 559264790Sbapt 560264790Sbaptyyreduce: 561264790Sbapt#if YYDEBUG 562264790Sbapt if (yydebug) 563264790Sbapt printf("%sdebug: state %d, reducing by rule %d (%s)\n", 564264790Sbapt YYPREFIX, yystate, yyn, yyrule[yyn]); 565264790Sbapt#endif 566264790Sbapt yym = yylen[yyn]; 567264790Sbapt if (yym) 568264790Sbapt yyval = yystack.l_mark[1-yym]; 569264790Sbapt else 570264790Sbapt memset(&yyval, 0, sizeof yyval); 571264790Sbapt switch (yyn) 572264790Sbapt { 573264790Sbaptcase 3: 574264790Sbapt#line 38 "calc3.y" 575264790Sbapt { yyerrok ; } 576264790Sbaptbreak; 577264790Sbaptcase 4: 578264790Sbapt#line 42 "calc3.y" 579264790Sbapt { printf("%d\n",yystack.l_mark[0]);} 580264790Sbaptbreak; 581264790Sbaptcase 5: 582264790Sbapt#line 44 "calc3.y" 583264790Sbapt { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 584264790Sbaptbreak; 585264790Sbaptcase 6: 586264790Sbapt#line 48 "calc3.y" 587264790Sbapt { yyval = yystack.l_mark[-1]; } 588264790Sbaptbreak; 589264790Sbaptcase 7: 590264790Sbapt#line 50 "calc3.y" 591264790Sbapt { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 592264790Sbaptbreak; 593264790Sbaptcase 8: 594264790Sbapt#line 52 "calc3.y" 595264790Sbapt { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 596264790Sbaptbreak; 597264790Sbaptcase 9: 598264790Sbapt#line 54 "calc3.y" 599264790Sbapt { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 600264790Sbaptbreak; 601264790Sbaptcase 10: 602264790Sbapt#line 56 "calc3.y" 603264790Sbapt { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 604264790Sbaptbreak; 605264790Sbaptcase 11: 606264790Sbapt#line 58 "calc3.y" 607264790Sbapt { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 608264790Sbaptbreak; 609264790Sbaptcase 12: 610264790Sbapt#line 60 "calc3.y" 611264790Sbapt { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 612264790Sbaptbreak; 613264790Sbaptcase 13: 614264790Sbapt#line 62 "calc3.y" 615264790Sbapt { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 616264790Sbaptbreak; 617264790Sbaptcase 14: 618264790Sbapt#line 64 "calc3.y" 619264790Sbapt { yyval = - yystack.l_mark[0]; } 620264790Sbaptbreak; 621264790Sbaptcase 15: 622264790Sbapt#line 66 "calc3.y" 623264790Sbapt { yyval = regs[yystack.l_mark[0]]; } 624264790Sbaptbreak; 625264790Sbaptcase 17: 626264790Sbapt#line 71 "calc3.y" 627264790Sbapt { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } 628264790Sbaptbreak; 629264790Sbaptcase 18: 630264790Sbapt#line 73 "calc3.y" 631264790Sbapt { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } 632264790Sbaptbreak; 633264790Sbapt#line 634 "calc3.tab.c" 634264790Sbapt } 635264790Sbapt yystack.s_mark -= yym; 636264790Sbapt yystate = *yystack.s_mark; 637264790Sbapt yystack.l_mark -= yym; 638264790Sbapt yym = yylhs[yyn]; 639264790Sbapt if (yystate == 0 && yym == 0) 640264790Sbapt { 641264790Sbapt#if YYDEBUG 642264790Sbapt if (yydebug) 643264790Sbapt printf("%sdebug: after reduction, shifting from state 0 to\ 644264790Sbapt state %d\n", YYPREFIX, YYFINAL); 645264790Sbapt#endif 646264790Sbapt yystate = YYFINAL; 647264790Sbapt *++yystack.s_mark = YYFINAL; 648264790Sbapt *++yystack.l_mark = yyval; 649264790Sbapt if (yychar < 0) 650264790Sbapt { 651264790Sbapt if ((yychar = YYLEX) < 0) yychar = YYEOF; 652264790Sbapt#if YYDEBUG 653264790Sbapt if (yydebug) 654264790Sbapt { 655264790Sbapt yys = yyname[YYTRANSLATE(yychar)]; 656264790Sbapt printf("%sdebug: state %d, reading %d (%s)\n", 657264790Sbapt YYPREFIX, YYFINAL, yychar, yys); 658264790Sbapt } 659264790Sbapt#endif 660264790Sbapt } 661264790Sbapt if (yychar == YYEOF) goto yyaccept; 662264790Sbapt goto yyloop; 663264790Sbapt } 664264790Sbapt if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && 665264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == yystate) 666264790Sbapt yystate = yytable[yyn]; 667264790Sbapt else 668264790Sbapt yystate = yydgoto[yym]; 669264790Sbapt#if YYDEBUG 670264790Sbapt if (yydebug) 671264790Sbapt printf("%sdebug: after reduction, shifting from state %d \ 672264790Sbaptto state %d\n", YYPREFIX, *yystack.s_mark, yystate); 673264790Sbapt#endif 674264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 675264790Sbapt { 676264790Sbapt goto yyoverflow; 677264790Sbapt } 678264790Sbapt *++yystack.s_mark = (YYINT) yystate; 679264790Sbapt *++yystack.l_mark = yyval; 680264790Sbapt goto yyloop; 681264790Sbapt 682264790Sbaptyyoverflow: 683264790Sbapt YYERROR_CALL("yacc stack overflow"); 684264790Sbapt 685264790Sbaptyyabort: 686264790Sbapt yyfreestack(&yystack); 687264790Sbapt return (1); 688264790Sbapt 689264790Sbaptyyaccept: 690264790Sbapt yyfreestack(&yystack); 691264790Sbapt return (0); 692264790Sbapt} 693