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