1264790Sbapt/* original parser id follows */ 2264790Sbapt/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ 3319297Sdelphij/* (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#undef YYBTYACC 17264790Sbapt#define YYBTYACC 0 18264790Sbapt#define YYDEBUGSTR YYPREFIX "debug" 19264790Sbapt 20264790Sbapt#ifndef yyparse 21264790Sbapt#define yyparse calc2_parse 22264790Sbapt#endif /* yyparse */ 23264790Sbapt 24264790Sbapt#ifndef yylex 25264790Sbapt#define yylex calc2_lex 26264790Sbapt#endif /* yylex */ 27264790Sbapt 28264790Sbapt#ifndef yyerror 29264790Sbapt#define yyerror calc2_error 30264790Sbapt#endif /* yyerror */ 31264790Sbapt 32264790Sbapt#ifndef yychar 33264790Sbapt#define yychar calc2_char 34264790Sbapt#endif /* yychar */ 35264790Sbapt 36264790Sbapt#ifndef yyval 37264790Sbapt#define yyval calc2_val 38264790Sbapt#endif /* yyval */ 39264790Sbapt 40264790Sbapt#ifndef yylval 41264790Sbapt#define yylval calc2_lval 42264790Sbapt#endif /* yylval */ 43264790Sbapt 44264790Sbapt#ifndef yydebug 45264790Sbapt#define yydebug calc2_debug 46264790Sbapt#endif /* yydebug */ 47264790Sbapt 48264790Sbapt#ifndef yynerrs 49264790Sbapt#define yynerrs calc2_nerrs 50264790Sbapt#endif /* yynerrs */ 51264790Sbapt 52264790Sbapt#ifndef yyerrflag 53264790Sbapt#define yyerrflag calc2_errflag 54264790Sbapt#endif /* yyerrflag */ 55264790Sbapt 56264790Sbapt#ifndef yylhs 57264790Sbapt#define yylhs calc2_lhs 58264790Sbapt#endif /* yylhs */ 59264790Sbapt 60264790Sbapt#ifndef yylen 61264790Sbapt#define yylen calc2_len 62264790Sbapt#endif /* yylen */ 63264790Sbapt 64264790Sbapt#ifndef yydefred 65264790Sbapt#define yydefred calc2_defred 66264790Sbapt#endif /* yydefred */ 67264790Sbapt 68264790Sbapt#ifndef yystos 69264790Sbapt#define yystos calc2_stos 70264790Sbapt#endif /* yystos */ 71264790Sbapt 72264790Sbapt#ifndef yydgoto 73264790Sbapt#define yydgoto calc2_dgoto 74264790Sbapt#endif /* yydgoto */ 75264790Sbapt 76264790Sbapt#ifndef yysindex 77264790Sbapt#define yysindex calc2_sindex 78264790Sbapt#endif /* yysindex */ 79264790Sbapt 80264790Sbapt#ifndef yyrindex 81264790Sbapt#define yyrindex calc2_rindex 82264790Sbapt#endif /* yyrindex */ 83264790Sbapt 84264790Sbapt#ifndef yygindex 85264790Sbapt#define yygindex calc2_gindex 86264790Sbapt#endif /* yygindex */ 87264790Sbapt 88264790Sbapt#ifndef yytable 89264790Sbapt#define yytable calc2_table 90264790Sbapt#endif /* yytable */ 91264790Sbapt 92264790Sbapt#ifndef yycheck 93264790Sbapt#define yycheck calc2_check 94264790Sbapt#endif /* yycheck */ 95264790Sbapt 96264790Sbapt#ifndef yyname 97264790Sbapt#define yyname calc2_name 98264790Sbapt#endif /* yyname */ 99264790Sbapt 100264790Sbapt#ifndef yyrule 101264790Sbapt#define yyrule calc2_rule 102264790Sbapt#endif /* yyrule */ 103264790Sbapt 104264790Sbapt#if YYBTYACC 105264790Sbapt 106264790Sbapt#ifndef yycindex 107264790Sbapt#define yycindex calc2_cindex 108264790Sbapt#endif /* yycindex */ 109264790Sbapt 110264790Sbapt#ifndef yyctable 111264790Sbapt#define yyctable calc2_ctable 112264790Sbapt#endif /* yyctable */ 113264790Sbapt 114264790Sbapt#endif /* YYBTYACC */ 115264790Sbapt 116264790Sbapt#define YYPREFIX "calc2_" 117264790Sbapt 118264790Sbapt#define YYPURE 0 119264790Sbapt 120264790Sbapt#line 7 "calc2.y" 121264790Sbapt# include <stdio.h> 122264790Sbapt# include <ctype.h> 123264790Sbapt 124264790Sbapt#ifdef YYBISON 125264790Sbapt#define YYLEX_PARAM base 126264790Sbapt#define YYLEX_DECL() yylex(int *YYLEX_PARAM) 127264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 128264790Sbaptint YYLEX_DECL(); 129264790Sbaptstatic void YYERROR_DECL(); 130264790Sbapt#endif 131264790Sbapt 132264790Sbapt#line 133 "calc2.tab.c" 133264790Sbapt 134264790Sbapt#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) 135264790Sbapt/* Default: YYSTYPE is the semantic value type. */ 136264790Sbapttypedef int YYSTYPE; 137264790Sbapt# define YYSTYPE_IS_DECLARED 1 138264790Sbapt#endif 139264790Sbapt 140264790Sbapt/* compatibility with bison */ 141264790Sbapt#ifdef YYPARSE_PARAM 142264790Sbapt/* compatibility with FreeBSD */ 143264790Sbapt# ifdef YYPARSE_PARAM_TYPE 144264790Sbapt# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) 145264790Sbapt# else 146264790Sbapt# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) 147264790Sbapt# endif 148264790Sbapt#else 149272655Sbapt# define YYPARSE_DECL() yyparse(int regs[26], int *base) 150264790Sbapt#endif 151264790Sbapt 152264790Sbapt/* Parameters sent to lex. */ 153264790Sbapt#ifdef YYLEX_PARAM 154264790Sbapt# define YYLEX_DECL() yylex(void *YYLEX_PARAM) 155264790Sbapt# define YYLEX yylex(YYLEX_PARAM) 156264790Sbapt#else 157272655Sbapt# define YYLEX_DECL() yylex(int *base) 158264790Sbapt# define YYLEX yylex(base) 159264790Sbapt#endif 160264790Sbapt 161264790Sbapt/* Parameters sent to yyerror. */ 162264790Sbapt#ifndef YYERROR_DECL 163272655Sbapt#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) 164264790Sbapt#endif 165264790Sbapt#ifndef YYERROR_CALL 166264790Sbapt#define YYERROR_CALL(msg) yyerror(regs, base, msg) 167264790Sbapt#endif 168264790Sbapt 169264790Sbaptextern int YYPARSE_DECL(); 170264790Sbapt 171264790Sbapt#define DIGIT 257 172264790Sbapt#define LETTER 258 173264790Sbapt#define UMINUS 259 174264790Sbapt#define YYERRCODE 256 175264790Sbapttypedef short YYINT; 176264790Sbaptstatic const YYINT calc2_lhs[] = { -1, 177264790Sbapt 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 178264790Sbapt 2, 2, 2, 2, 2, 2, 3, 3, 179264790Sbapt}; 180264790Sbaptstatic const YYINT calc2_len[] = { 2, 181264790Sbapt 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 182264790Sbapt 3, 3, 3, 2, 1, 1, 1, 2, 183264790Sbapt}; 184264790Sbaptstatic const YYINT calc2_defred[] = { 1, 185264790Sbapt 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 186264790Sbapt 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 187264790Sbapt 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 188264790Sbapt 10, 11, 189264790Sbapt}; 190319297Sdelphij#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) 191264790Sbaptstatic const YYINT calc2_stos[] = { 0, 192264790Sbapt 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 193264790Sbapt 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 194264790Sbapt 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 195264790Sbapt 263, 263, 196264790Sbapt}; 197319297Sdelphij#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ 198264790Sbaptstatic const YYINT calc2_dgoto[] = { 1, 199264790Sbapt 7, 8, 9, 200264790Sbapt}; 201264790Sbaptstatic const YYINT calc2_sindex[] = { 0, 202264790Sbapt -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, 203264790Sbapt -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, 204264790Sbapt -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 205264790Sbapt 0, 0, 206264790Sbapt}; 207264790Sbaptstatic const YYINT calc2_rindex[] = { 0, 208264790Sbapt 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 209264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210264790Sbapt 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 211264790Sbapt 0, 0, 212264790Sbapt}; 213264790Sbapt#if YYBTYACC 214264790Sbaptstatic const YYINT calc2_cindex[] = { 0, 215264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 217264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218264790Sbapt 0, 0, 219264790Sbapt}; 220264790Sbapt#endif 221264790Sbaptstatic const YYINT calc2_gindex[] = { 0, 222264790Sbapt 0, 65, 0, 223264790Sbapt}; 224264790Sbapt#define YYTABLESIZE 220 225264790Sbaptstatic const YYINT calc2_table[] = { 6, 226264790Sbapt 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 227264790Sbapt 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 228264790Sbapt 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 229264790Sbapt 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 230264790Sbapt 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 231264790Sbapt 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 232264790Sbapt 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 233264790Sbapt 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 234264790Sbapt 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 235264790Sbapt 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 236264790Sbapt 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 237264790Sbapt 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 238264790Sbapt 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 239264790Sbapt 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 240264790Sbapt 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 241264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246264790Sbapt 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247264790Sbapt 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, 248264790Sbapt}; 249264790Sbaptstatic const YYINT calc2_check[] = { 40, 250264790Sbapt 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 251264790Sbapt 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, 252264790Sbapt -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, 253264790Sbapt -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, 254264790Sbapt -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 255264790Sbapt 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, 256264790Sbapt -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 257264790Sbapt 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 258264790Sbapt 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, 259264790Sbapt -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, 260264790Sbapt -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, 261264790Sbapt -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, 262264790Sbapt -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, 263264790Sbapt -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, 264264790Sbapt -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, 265264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 266264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 267264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 268264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 269264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 270264790Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 271264790Sbapt -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, 272264790Sbapt}; 273272655Sbapt#if YYBTYACC 274272655Sbaptstatic const YYINT calc2_ctable[] = { -1, 275272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 276272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 277272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 278272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 281272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 282272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 284272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 285272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 287272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 288272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 290272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 291272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 292272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 293272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 295272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 296272655Sbapt -1, -1, -1, -1, -1, -1, -1, -1, -1, 297272655Sbapt}; 298272655Sbapt#endif 299264790Sbapt#define YYFINAL 1 300264790Sbapt#ifndef YYDEBUG 301264790Sbapt#define YYDEBUG 0 302264790Sbapt#endif 303264790Sbapt#define YYMAXTOKEN 259 304264790Sbapt#define YYUNDFTOKEN 265 305264790Sbapt#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) 306264790Sbapt#if YYDEBUG 307264790Sbaptstatic const char *const calc2_name[] = { 308264790Sbapt 309264790Sbapt"$end",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,0,0,0, 310264790Sbapt0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 311264790Sbapt0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 312264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 313264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 314264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 315264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 316264790Sbapt0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", 317264790Sbapt"illegal-symbol", 318264790Sbapt}; 319264790Sbaptstatic const char *const calc2_rule[] = { 320264790Sbapt"$accept : list", 321264790Sbapt"list :", 322264790Sbapt"list : list stat '\\n'", 323264790Sbapt"list : list error '\\n'", 324264790Sbapt"stat : expr", 325264790Sbapt"stat : LETTER '=' expr", 326264790Sbapt"expr : '(' expr ')'", 327264790Sbapt"expr : expr '+' expr", 328264790Sbapt"expr : expr '-' expr", 329264790Sbapt"expr : expr '*' expr", 330264790Sbapt"expr : expr '/' expr", 331264790Sbapt"expr : expr '%' expr", 332264790Sbapt"expr : expr '&' expr", 333264790Sbapt"expr : expr '|' expr", 334264790Sbapt"expr : '-' expr", 335264790Sbapt"expr : LETTER", 336264790Sbapt"expr : number", 337264790Sbapt"number : DIGIT", 338264790Sbapt"number : number DIGIT", 339264790Sbapt 340264790Sbapt}; 341264790Sbapt#endif 342264790Sbapt 343264790Sbaptint yydebug; 344264790Sbaptint yynerrs; 345264790Sbapt 346264790Sbaptint yyerrflag; 347264790Sbaptint yychar; 348264790SbaptYYSTYPE yyval; 349264790SbaptYYSTYPE yylval; 350264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 351264790SbaptYYLTYPE yyloc; /* position returned by actions */ 352264790SbaptYYLTYPE yylloc; /* position from the lexer */ 353264790Sbapt#endif 354264790Sbapt 355264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 356264790Sbapt#ifndef YYLLOC_DEFAULT 357264790Sbapt#define YYLLOC_DEFAULT(loc, rhs, n) \ 358264790Sbaptdo \ 359264790Sbapt{ \ 360264790Sbapt if (n == 0) \ 361264790Sbapt { \ 362264790Sbapt (loc).first_line = ((rhs)[-1]).last_line; \ 363264790Sbapt (loc).first_column = ((rhs)[-1]).last_column; \ 364264790Sbapt (loc).last_line = ((rhs)[-1]).last_line; \ 365264790Sbapt (loc).last_column = ((rhs)[-1]).last_column; \ 366264790Sbapt } \ 367264790Sbapt else \ 368264790Sbapt { \ 369264790Sbapt (loc).first_line = ((rhs)[ 0 ]).first_line; \ 370264790Sbapt (loc).first_column = ((rhs)[ 0 ]).first_column; \ 371264790Sbapt (loc).last_line = ((rhs)[n-1]).last_line; \ 372264790Sbapt (loc).last_column = ((rhs)[n-1]).last_column; \ 373264790Sbapt } \ 374264790Sbapt} while (0) 375264790Sbapt#endif /* YYLLOC_DEFAULT */ 376264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 377264790Sbapt#if YYBTYACC 378264790Sbapt 379264790Sbapt#ifndef YYLVQUEUEGROWTH 380264790Sbapt#define YYLVQUEUEGROWTH 32 381264790Sbapt#endif 382264790Sbapt#endif /* YYBTYACC */ 383264790Sbapt 384264790Sbapt/* define the initial stack-sizes */ 385264790Sbapt#ifdef YYSTACKSIZE 386264790Sbapt#undef YYMAXDEPTH 387264790Sbapt#define YYMAXDEPTH YYSTACKSIZE 388264790Sbapt#else 389264790Sbapt#ifdef YYMAXDEPTH 390264790Sbapt#define YYSTACKSIZE YYMAXDEPTH 391264790Sbapt#else 392264790Sbapt#define YYSTACKSIZE 10000 393264790Sbapt#define YYMAXDEPTH 10000 394264790Sbapt#endif 395264790Sbapt#endif 396264790Sbapt 397264790Sbapt#ifndef YYINITSTACKSIZE 398264790Sbapt#define YYINITSTACKSIZE 200 399264790Sbapt#endif 400264790Sbapt 401264790Sbapttypedef struct { 402264790Sbapt unsigned stacksize; 403319297Sdelphij YYINT *s_base; 404319297Sdelphij YYINT *s_mark; 405319297Sdelphij YYINT *s_last; 406264790Sbapt YYSTYPE *l_base; 407264790Sbapt YYSTYPE *l_mark; 408264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 409264790Sbapt YYLTYPE *p_base; 410264790Sbapt YYLTYPE *p_mark; 411264790Sbapt#endif 412264790Sbapt} YYSTACKDATA; 413264790Sbapt#if YYBTYACC 414264790Sbapt 415264790Sbaptstruct YYParseState_s 416264790Sbapt{ 417264790Sbapt struct YYParseState_s *save; /* Previously saved parser state */ 418264790Sbapt YYSTACKDATA yystack; /* saved parser stack */ 419264790Sbapt int state; /* saved parser state */ 420264790Sbapt int errflag; /* saved error recovery status */ 421264790Sbapt int lexeme; /* saved index of the conflict lexeme in the lexical queue */ 422264790Sbapt YYINT ctry; /* saved index in yyctable[] for this conflict */ 423264790Sbapt}; 424264790Sbapttypedef struct YYParseState_s YYParseState; 425264790Sbapt#endif /* YYBTYACC */ 426264790Sbapt/* variables for the parser stack */ 427264790Sbaptstatic YYSTACKDATA yystack; 428264790Sbapt#if YYBTYACC 429264790Sbapt 430264790Sbapt/* Current parser state */ 431264790Sbaptstatic YYParseState *yyps = 0; 432264790Sbapt 433264790Sbapt/* yypath != NULL: do the full parse, starting at *yypath parser state. */ 434264790Sbaptstatic YYParseState *yypath = 0; 435264790Sbapt 436264790Sbapt/* Base of the lexical value queue */ 437264790Sbaptstatic YYSTYPE *yylvals = 0; 438264790Sbapt 439264790Sbapt/* Current position at lexical value queue */ 440264790Sbaptstatic YYSTYPE *yylvp = 0; 441264790Sbapt 442264790Sbapt/* End position of lexical value queue */ 443264790Sbaptstatic YYSTYPE *yylve = 0; 444264790Sbapt 445264790Sbapt/* The last allocated position at the lexical value queue */ 446264790Sbaptstatic YYSTYPE *yylvlim = 0; 447264790Sbapt 448264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 449264790Sbapt/* Base of the lexical position queue */ 450264790Sbaptstatic YYLTYPE *yylpsns = 0; 451264790Sbapt 452264790Sbapt/* Current position at lexical position queue */ 453264790Sbaptstatic YYLTYPE *yylpp = 0; 454264790Sbapt 455264790Sbapt/* End position of lexical position queue */ 456264790Sbaptstatic YYLTYPE *yylpe = 0; 457264790Sbapt 458264790Sbapt/* The last allocated position at the lexical position queue */ 459264790Sbaptstatic YYLTYPE *yylplim = 0; 460264790Sbapt#endif 461264790Sbapt 462264790Sbapt/* Current position at lexical token queue */ 463319297Sdelphijstatic YYINT *yylexp = 0; 464264790Sbapt 465319297Sdelphijstatic YYINT *yylexemes = 0; 466264790Sbapt#endif /* YYBTYACC */ 467264790Sbapt#line 73 "calc2.y" 468264790Sbapt /* start of programs */ 469264790Sbapt 470264790Sbapt#ifdef YYBYACC 471264790Sbaptextern int YYLEX_DECL(); 472264790Sbapt#endif 473264790Sbapt 474264790Sbaptint 475264790Sbaptmain (void) 476264790Sbapt{ 477264790Sbapt int regs[26]; 478264790Sbapt int base = 10; 479264790Sbapt 480264790Sbapt while(!feof(stdin)) { 481264790Sbapt yyparse(regs, &base); 482264790Sbapt } 483264790Sbapt return 0; 484264790Sbapt} 485264790Sbapt 486264790Sbapt#define UNUSED(x) ((void)(x)) 487264790Sbapt 488264790Sbaptstatic void 489264790SbaptYYERROR_DECL() 490264790Sbapt{ 491264790Sbapt UNUSED(regs); /* %parse-param regs is not actually used here */ 492264790Sbapt UNUSED(base); /* %parse-param base is not actually used here */ 493264790Sbapt fprintf(stderr, "%s\n", s); 494264790Sbapt} 495264790Sbapt 496264790Sbaptint 497264790SbaptYYLEX_DECL() 498264790Sbapt{ 499264790Sbapt /* lexical analysis routine */ 500264790Sbapt /* returns LETTER for a lower case letter, yylval = 0 through 25 */ 501264790Sbapt /* return DIGIT for a digit, yylval = 0 through 9 */ 502264790Sbapt /* all other characters are returned immediately */ 503264790Sbapt 504264790Sbapt int c; 505264790Sbapt 506264790Sbapt while( (c=getchar()) == ' ' ) { /* skip blanks */ } 507264790Sbapt 508264790Sbapt /* c is now nonblank */ 509264790Sbapt 510264790Sbapt if( islower( c )) { 511264790Sbapt yylval = c - 'a'; 512264790Sbapt return ( LETTER ); 513264790Sbapt } 514264790Sbapt if( isdigit( c )) { 515264790Sbapt yylval = (c - '0') % (*base); 516264790Sbapt return ( DIGIT ); 517264790Sbapt } 518264790Sbapt return( c ); 519264790Sbapt} 520319297Sdelphij#line 521 "calc2.tab.c" 521264790Sbapt 522264790Sbapt/* For use in generated program */ 523264790Sbapt#define yydepth (int)(yystack.s_mark - yystack.s_base) 524264790Sbapt#if YYBTYACC 525264790Sbapt#define yytrial (yyps->save) 526264790Sbapt#endif /* YYBTYACC */ 527264790Sbapt 528264790Sbapt#if YYDEBUG 529319297Sdelphij#include <stdio.h> /* needed for printf */ 530264790Sbapt#endif 531264790Sbapt 532319297Sdelphij#include <stdlib.h> /* needed for malloc, etc */ 533319297Sdelphij#include <string.h> /* needed for memset */ 534264790Sbapt 535264790Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */ 536264790Sbaptstatic int yygrowstack(YYSTACKDATA *data) 537264790Sbapt{ 538264790Sbapt int i; 539264790Sbapt unsigned newsize; 540319297Sdelphij YYINT *newss; 541264790Sbapt YYSTYPE *newvs; 542264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 543264790Sbapt YYLTYPE *newps; 544264790Sbapt#endif 545264790Sbapt 546264790Sbapt if ((newsize = data->stacksize) == 0) 547264790Sbapt newsize = YYINITSTACKSIZE; 548264790Sbapt else if (newsize >= YYMAXDEPTH) 549264790Sbapt return YYENOMEM; 550264790Sbapt else if ((newsize *= 2) > YYMAXDEPTH) 551264790Sbapt newsize = YYMAXDEPTH; 552264790Sbapt 553264790Sbapt i = (int) (data->s_mark - data->s_base); 554319297Sdelphij newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); 555264790Sbapt if (newss == 0) 556264790Sbapt return YYENOMEM; 557264790Sbapt 558264790Sbapt data->s_base = newss; 559264790Sbapt data->s_mark = newss + i; 560264790Sbapt 561264790Sbapt newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); 562264790Sbapt if (newvs == 0) 563264790Sbapt return YYENOMEM; 564264790Sbapt 565264790Sbapt data->l_base = newvs; 566264790Sbapt data->l_mark = newvs + i; 567264790Sbapt 568264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 569264790Sbapt newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); 570264790Sbapt if (newps == 0) 571264790Sbapt return YYENOMEM; 572264790Sbapt 573264790Sbapt data->p_base = newps; 574264790Sbapt data->p_mark = newps + i; 575264790Sbapt#endif 576264790Sbapt 577264790Sbapt data->stacksize = newsize; 578264790Sbapt data->s_last = data->s_base + newsize - 1; 579264790Sbapt 580264790Sbapt#if YYDEBUG 581264790Sbapt if (yydebug) 582264790Sbapt fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); 583264790Sbapt#endif 584264790Sbapt return 0; 585264790Sbapt} 586264790Sbapt 587264790Sbapt#if YYPURE || defined(YY_NO_LEAKS) 588264790Sbaptstatic void yyfreestack(YYSTACKDATA *data) 589264790Sbapt{ 590264790Sbapt free(data->s_base); 591264790Sbapt free(data->l_base); 592264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 593264790Sbapt free(data->p_base); 594264790Sbapt#endif 595264790Sbapt memset(data, 0, sizeof(*data)); 596264790Sbapt} 597264790Sbapt#else 598264790Sbapt#define yyfreestack(data) /* nothing */ 599264790Sbapt#endif /* YYPURE || defined(YY_NO_LEAKS) */ 600264790Sbapt#if YYBTYACC 601264790Sbapt 602264790Sbaptstatic YYParseState * 603264790SbaptyyNewState(unsigned size) 604264790Sbapt{ 605264790Sbapt YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); 606264790Sbapt if (p == NULL) return NULL; 607264790Sbapt 608264790Sbapt p->yystack.stacksize = size; 609264790Sbapt if (size == 0) 610264790Sbapt { 611264790Sbapt p->yystack.s_base = NULL; 612264790Sbapt p->yystack.l_base = NULL; 613264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 614264790Sbapt p->yystack.p_base = NULL; 615264790Sbapt#endif 616264790Sbapt return p; 617264790Sbapt } 618319297Sdelphij p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); 619264790Sbapt if (p->yystack.s_base == NULL) return NULL; 620264790Sbapt p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); 621264790Sbapt if (p->yystack.l_base == NULL) return NULL; 622264790Sbapt memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); 623264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 624264790Sbapt p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); 625264790Sbapt if (p->yystack.p_base == NULL) return NULL; 626264790Sbapt memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); 627264790Sbapt#endif 628264790Sbapt 629264790Sbapt return p; 630264790Sbapt} 631264790Sbapt 632264790Sbaptstatic void 633264790SbaptyyFreeState(YYParseState *p) 634264790Sbapt{ 635264790Sbapt yyfreestack(&p->yystack); 636264790Sbapt free(p); 637264790Sbapt} 638264790Sbapt#endif /* YYBTYACC */ 639264790Sbapt 640264790Sbapt#define YYABORT goto yyabort 641264790Sbapt#define YYREJECT goto yyabort 642264790Sbapt#define YYACCEPT goto yyaccept 643264790Sbapt#define YYERROR goto yyerrlab 644264790Sbapt#if YYBTYACC 645264790Sbapt#define YYVALID do { if (yyps->save) goto yyvalid; } while(0) 646264790Sbapt#define YYVALID_NESTED do { if (yyps->save && \ 647264790Sbapt yyps->save->save == 0) goto yyvalid; } while(0) 648264790Sbapt#endif /* YYBTYACC */ 649264790Sbapt 650264790Sbaptint 651264790SbaptYYPARSE_DECL() 652264790Sbapt{ 653264790Sbapt int yym, yyn, yystate, yyresult; 654264790Sbapt#if YYBTYACC 655264790Sbapt int yynewerrflag; 656264790Sbapt YYParseState *yyerrctx = NULL; 657264790Sbapt#endif /* YYBTYACC */ 658264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 659264790Sbapt YYLTYPE yyerror_loc_range[2]; /* position of error start & end */ 660264790Sbapt#endif 661264790Sbapt#if YYDEBUG 662264790Sbapt const char *yys; 663264790Sbapt 664264790Sbapt if ((yys = getenv("YYDEBUG")) != 0) 665264790Sbapt { 666264790Sbapt yyn = *yys; 667264790Sbapt if (yyn >= '0' && yyn <= '9') 668264790Sbapt yydebug = yyn - '0'; 669264790Sbapt } 670264790Sbapt if (yydebug) 671264790Sbapt fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); 672264790Sbapt#endif 673264790Sbapt 674264790Sbapt#if YYBTYACC 675264790Sbapt yyps = yyNewState(0); if (yyps == 0) goto yyenomem; 676264790Sbapt yyps->save = 0; 677264790Sbapt#endif /* YYBTYACC */ 678319297Sdelphij yym = 0; 679319297Sdelphij yyn = 0; 680264790Sbapt yynerrs = 0; 681264790Sbapt yyerrflag = 0; 682264790Sbapt yychar = YYEMPTY; 683264790Sbapt yystate = 0; 684264790Sbapt 685264790Sbapt#if YYPURE 686264790Sbapt memset(&yystack, 0, sizeof(yystack)); 687264790Sbapt#endif 688264790Sbapt 689264790Sbapt if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 690264790Sbapt yystack.s_mark = yystack.s_base; 691264790Sbapt yystack.l_mark = yystack.l_base; 692264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 693264790Sbapt yystack.p_mark = yystack.p_base; 694264790Sbapt#endif 695264790Sbapt yystate = 0; 696264790Sbapt *yystack.s_mark = 0; 697264790Sbapt 698264790Sbaptyyloop: 699264790Sbapt if ((yyn = yydefred[yystate]) != 0) goto yyreduce; 700264790Sbapt if (yychar < 0) 701264790Sbapt { 702264790Sbapt#if YYBTYACC 703264790Sbapt do { 704264790Sbapt if (yylvp < yylve) 705264790Sbapt { 706264790Sbapt /* we're currently re-reading tokens */ 707264790Sbapt yylval = *yylvp++; 708264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 709264790Sbapt yylloc = *yylpp++; 710264790Sbapt#endif 711264790Sbapt yychar = *yylexp++; 712264790Sbapt break; 713264790Sbapt } 714264790Sbapt if (yyps->save) 715264790Sbapt { 716264790Sbapt /* in trial mode; save scanner results for future parse attempts */ 717264790Sbapt if (yylvp == yylvlim) 718264790Sbapt { /* Enlarge lexical value queue */ 719272655Sbapt size_t p = (size_t) (yylvp - yylvals); 720272655Sbapt size_t s = (size_t) (yylvlim - yylvals); 721264790Sbapt 722264790Sbapt s += YYLVQUEUEGROWTH; 723319297Sdelphij if ((yylexemes = realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; 724319297Sdelphij if ((yylvals = realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; 725264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 726319297Sdelphij if ((yylpsns = realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; 727264790Sbapt#endif 728264790Sbapt yylvp = yylve = yylvals + p; 729264790Sbapt yylvlim = yylvals + s; 730264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 731264790Sbapt yylpp = yylpe = yylpsns + p; 732264790Sbapt yylplim = yylpsns + s; 733264790Sbapt#endif 734264790Sbapt yylexp = yylexemes + p; 735264790Sbapt } 736319297Sdelphij *yylexp = (YYINT) YYLEX; 737264790Sbapt *yylvp++ = yylval; 738264790Sbapt yylve++; 739264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 740264790Sbapt *yylpp++ = yylloc; 741264790Sbapt yylpe++; 742264790Sbapt#endif 743264790Sbapt yychar = *yylexp++; 744264790Sbapt break; 745264790Sbapt } 746264790Sbapt /* normal operation, no conflict encountered */ 747264790Sbapt#endif /* YYBTYACC */ 748264790Sbapt yychar = YYLEX; 749264790Sbapt#if YYBTYACC 750264790Sbapt } while (0); 751264790Sbapt#endif /* YYBTYACC */ 752264790Sbapt if (yychar < 0) yychar = YYEOF; 753264790Sbapt#if YYDEBUG 754264790Sbapt if (yydebug) 755264790Sbapt { 756319297Sdelphij if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 757264790Sbapt fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", 758264790Sbapt YYDEBUGSTR, yydepth, yystate, yychar, yys); 759264790Sbapt#ifdef YYSTYPE_TOSTRING 760264790Sbapt#if YYBTYACC 761264790Sbapt if (!yytrial) 762264790Sbapt#endif /* YYBTYACC */ 763264790Sbapt fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); 764264790Sbapt#endif 765264790Sbapt fputc('\n', stderr); 766264790Sbapt } 767264790Sbapt#endif 768264790Sbapt } 769264790Sbapt#if YYBTYACC 770264790Sbapt 771264790Sbapt /* Do we have a conflict? */ 772264790Sbapt if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && 773264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 774264790Sbapt { 775264790Sbapt YYINT ctry; 776264790Sbapt 777264790Sbapt if (yypath) 778264790Sbapt { 779264790Sbapt YYParseState *save; 780264790Sbapt#if YYDEBUG 781264790Sbapt if (yydebug) 782264790Sbapt fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", 783264790Sbapt YYDEBUGSTR, yydepth, yystate); 784264790Sbapt#endif 785264790Sbapt /* Switch to the next conflict context */ 786264790Sbapt save = yypath; 787264790Sbapt yypath = save->save; 788264790Sbapt save->save = NULL; 789264790Sbapt ctry = save->ctry; 790264790Sbapt if (save->state != yystate) YYABORT; 791264790Sbapt yyFreeState(save); 792264790Sbapt 793264790Sbapt } 794264790Sbapt else 795264790Sbapt { 796264790Sbapt 797264790Sbapt /* Unresolved conflict - start/continue trial parse */ 798264790Sbapt YYParseState *save; 799264790Sbapt#if YYDEBUG 800264790Sbapt if (yydebug) 801264790Sbapt { 802264790Sbapt fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); 803264790Sbapt if (yyps->save) 804264790Sbapt fputs("ALREADY in conflict, continuing trial parse.\n", stderr); 805264790Sbapt else 806264790Sbapt fputs("Starting trial parse.\n", stderr); 807264790Sbapt } 808264790Sbapt#endif 809264790Sbapt save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 810264790Sbapt if (save == NULL) goto yyenomem; 811264790Sbapt save->save = yyps->save; 812264790Sbapt save->state = yystate; 813264790Sbapt save->errflag = yyerrflag; 814264790Sbapt save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); 815319297Sdelphij memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 816264790Sbapt save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); 817272655Sbapt memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 818264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 819264790Sbapt save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); 820272655Sbapt memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 821264790Sbapt#endif 822264790Sbapt ctry = yytable[yyn]; 823264790Sbapt if (yyctable[ctry] == -1) 824264790Sbapt { 825264790Sbapt#if YYDEBUG 826264790Sbapt if (yydebug && yychar >= YYEOF) 827264790Sbapt fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); 828264790Sbapt#endif 829264790Sbapt ctry++; 830264790Sbapt } 831264790Sbapt save->ctry = ctry; 832264790Sbapt if (yyps->save == NULL) 833264790Sbapt { 834264790Sbapt /* If this is a first conflict in the stack, start saving lexemes */ 835264790Sbapt if (!yylexemes) 836264790Sbapt { 837319297Sdelphij yylexemes = malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); 838264790Sbapt if (yylexemes == NULL) goto yyenomem; 839264790Sbapt yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); 840264790Sbapt if (yylvals == NULL) goto yyenomem; 841264790Sbapt yylvlim = yylvals + YYLVQUEUEGROWTH; 842264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 843264790Sbapt yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); 844264790Sbapt if (yylpsns == NULL) goto yyenomem; 845264790Sbapt yylplim = yylpsns + YYLVQUEUEGROWTH; 846264790Sbapt#endif 847264790Sbapt } 848264790Sbapt if (yylvp == yylve) 849264790Sbapt { 850264790Sbapt yylvp = yylve = yylvals; 851264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 852264790Sbapt yylpp = yylpe = yylpsns; 853264790Sbapt#endif 854264790Sbapt yylexp = yylexemes; 855264790Sbapt if (yychar >= YYEOF) 856264790Sbapt { 857264790Sbapt *yylve++ = yylval; 858264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 859264790Sbapt *yylpe++ = yylloc; 860264790Sbapt#endif 861319297Sdelphij *yylexp = (YYINT) yychar; 862264790Sbapt yychar = YYEMPTY; 863264790Sbapt } 864264790Sbapt } 865264790Sbapt } 866264790Sbapt if (yychar >= YYEOF) 867264790Sbapt { 868264790Sbapt yylvp--; 869264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 870264790Sbapt yylpp--; 871264790Sbapt#endif 872264790Sbapt yylexp--; 873264790Sbapt yychar = YYEMPTY; 874264790Sbapt } 875272655Sbapt save->lexeme = (int) (yylvp - yylvals); 876264790Sbapt yyps->save = save; 877264790Sbapt } 878264790Sbapt if (yytable[yyn] == ctry) 879264790Sbapt { 880264790Sbapt#if YYDEBUG 881264790Sbapt if (yydebug) 882264790Sbapt fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 883264790Sbapt YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); 884264790Sbapt#endif 885264790Sbapt if (yychar < 0) 886264790Sbapt { 887264790Sbapt yylvp++; 888264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 889264790Sbapt yylpp++; 890264790Sbapt#endif 891264790Sbapt yylexp++; 892264790Sbapt } 893264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) 894264790Sbapt goto yyoverflow; 895264790Sbapt yystate = yyctable[ctry]; 896319297Sdelphij *++yystack.s_mark = (YYINT) yystate; 897264790Sbapt *++yystack.l_mark = yylval; 898264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 899264790Sbapt *++yystack.p_mark = yylloc; 900264790Sbapt#endif 901264790Sbapt yychar = YYEMPTY; 902264790Sbapt if (yyerrflag > 0) --yyerrflag; 903264790Sbapt goto yyloop; 904264790Sbapt } 905264790Sbapt else 906264790Sbapt { 907264790Sbapt yyn = yyctable[ctry]; 908264790Sbapt goto yyreduce; 909264790Sbapt } 910264790Sbapt } /* End of code dealing with conflicts */ 911264790Sbapt#endif /* YYBTYACC */ 912264790Sbapt if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && 913264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 914264790Sbapt { 915264790Sbapt#if YYDEBUG 916264790Sbapt if (yydebug) 917264790Sbapt fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", 918264790Sbapt YYDEBUGSTR, yydepth, yystate, yytable[yyn]); 919264790Sbapt#endif 920264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 921264790Sbapt yystate = yytable[yyn]; 922264790Sbapt *++yystack.s_mark = yytable[yyn]; 923264790Sbapt *++yystack.l_mark = yylval; 924264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 925264790Sbapt *++yystack.p_mark = yylloc; 926264790Sbapt#endif 927264790Sbapt yychar = YYEMPTY; 928264790Sbapt if (yyerrflag > 0) --yyerrflag; 929264790Sbapt goto yyloop; 930264790Sbapt } 931264790Sbapt if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && 932264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) 933264790Sbapt { 934264790Sbapt yyn = yytable[yyn]; 935264790Sbapt goto yyreduce; 936264790Sbapt } 937264790Sbapt if (yyerrflag != 0) goto yyinrecovery; 938264790Sbapt#if YYBTYACC 939264790Sbapt 940264790Sbapt yynewerrflag = 1; 941264790Sbapt goto yyerrhandler; 942319297Sdelphij goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 943264790Sbapt 944264790Sbaptyyerrlab: 945319297Sdelphij /* explicit YYERROR from an action -- pop the rhs of the rule reduced 946319297Sdelphij * before looking for error recovery */ 947319297Sdelphij yystack.s_mark -= yym; 948319297Sdelphij yystate = *yystack.s_mark; 949319297Sdelphij yystack.l_mark -= yym; 950319297Sdelphij#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 951319297Sdelphij yystack.p_mark -= yym; 952319297Sdelphij#endif 953319297Sdelphij 954264790Sbapt yynewerrflag = 0; 955264790Sbaptyyerrhandler: 956264790Sbapt while (yyps->save) 957264790Sbapt { 958264790Sbapt int ctry; 959264790Sbapt YYParseState *save = yyps->save; 960264790Sbapt#if YYDEBUG 961264790Sbapt if (yydebug) 962264790Sbapt fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", 963264790Sbapt YYDEBUGSTR, yydepth, yystate, yyps->save->state, 964264790Sbapt (int)(yylvp - yylvals - yyps->save->lexeme)); 965264790Sbapt#endif 966264790Sbapt /* Memorize most forward-looking error state in case it's really an error. */ 967264790Sbapt if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) 968264790Sbapt { 969264790Sbapt /* Free old saved error context state */ 970264790Sbapt if (yyerrctx) yyFreeState(yyerrctx); 971264790Sbapt /* Create and fill out new saved error context state */ 972264790Sbapt yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); 973264790Sbapt if (yyerrctx == NULL) goto yyenomem; 974264790Sbapt yyerrctx->save = yyps->save; 975264790Sbapt yyerrctx->state = yystate; 976264790Sbapt yyerrctx->errflag = yyerrflag; 977264790Sbapt yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); 978319297Sdelphij memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 979264790Sbapt yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); 980272655Sbapt memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 981264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 982264790Sbapt yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); 983272655Sbapt memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 984264790Sbapt#endif 985272655Sbapt yyerrctx->lexeme = (int) (yylvp - yylvals); 986264790Sbapt } 987264790Sbapt yylvp = yylvals + save->lexeme; 988264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 989264790Sbapt yylpp = yylpsns + save->lexeme; 990264790Sbapt#endif 991264790Sbapt yylexp = yylexemes + save->lexeme; 992264790Sbapt yychar = YYEMPTY; 993264790Sbapt yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); 994319297Sdelphij memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 995264790Sbapt yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); 996272655Sbapt memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 997264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 998264790Sbapt yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); 999272655Sbapt memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1000264790Sbapt#endif 1001264790Sbapt ctry = ++save->ctry; 1002264790Sbapt yystate = save->state; 1003264790Sbapt /* We tried shift, try reduce now */ 1004264790Sbapt if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; 1005264790Sbapt yyps->save = save->save; 1006264790Sbapt save->save = NULL; 1007264790Sbapt yyFreeState(save); 1008264790Sbapt 1009264790Sbapt /* Nothing left on the stack -- error */ 1010264790Sbapt if (!yyps->save) 1011264790Sbapt { 1012264790Sbapt#if YYDEBUG 1013264790Sbapt if (yydebug) 1014264790Sbapt fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", 1015264790Sbapt YYPREFIX, yydepth); 1016264790Sbapt#endif 1017264790Sbapt /* Restore state as it was in the most forward-advanced error */ 1018264790Sbapt yylvp = yylvals + yyerrctx->lexeme; 1019264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1020264790Sbapt yylpp = yylpsns + yyerrctx->lexeme; 1021264790Sbapt#endif 1022264790Sbapt yylexp = yylexemes + yyerrctx->lexeme; 1023264790Sbapt yychar = yylexp[-1]; 1024264790Sbapt yylval = yylvp[-1]; 1025264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1026264790Sbapt yylloc = yylpp[-1]; 1027264790Sbapt#endif 1028264790Sbapt yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); 1029319297Sdelphij memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 1030264790Sbapt yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); 1031272655Sbapt memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1032264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1033264790Sbapt yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); 1034272655Sbapt memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1035264790Sbapt#endif 1036264790Sbapt yystate = yyerrctx->state; 1037264790Sbapt yyFreeState(yyerrctx); 1038264790Sbapt yyerrctx = NULL; 1039264790Sbapt } 1040264790Sbapt yynewerrflag = 1; 1041264790Sbapt } 1042264790Sbapt if (yynewerrflag == 0) goto yyinrecovery; 1043264790Sbapt#endif /* YYBTYACC */ 1044264790Sbapt 1045264790Sbapt YYERROR_CALL("syntax error"); 1046264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1047264790Sbapt yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */ 1048264790Sbapt#endif 1049264790Sbapt 1050264790Sbapt#if !YYBTYACC 1051319297Sdelphij goto yyerrlab; /* redundant goto avoids 'unused label' warning */ 1052264790Sbaptyyerrlab: 1053264790Sbapt#endif 1054264790Sbapt ++yynerrs; 1055264790Sbapt 1056264790Sbaptyyinrecovery: 1057264790Sbapt if (yyerrflag < 3) 1058264790Sbapt { 1059264790Sbapt yyerrflag = 3; 1060264790Sbapt for (;;) 1061264790Sbapt { 1062264790Sbapt if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && 1063264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) 1064264790Sbapt { 1065264790Sbapt#if YYDEBUG 1066264790Sbapt if (yydebug) 1067264790Sbapt fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", 1068264790Sbapt YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); 1069264790Sbapt#endif 1070264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1071264790Sbapt yystate = yytable[yyn]; 1072264790Sbapt *++yystack.s_mark = yytable[yyn]; 1073264790Sbapt *++yystack.l_mark = yylval; 1074264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1075264790Sbapt /* lookahead position is error end position */ 1076264790Sbapt yyerror_loc_range[1] = yylloc; 1077264790Sbapt YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ 1078264790Sbapt *++yystack.p_mark = yyloc; 1079264790Sbapt#endif 1080264790Sbapt goto yyloop; 1081264790Sbapt } 1082264790Sbapt else 1083264790Sbapt { 1084264790Sbapt#if YYDEBUG 1085264790Sbapt if (yydebug) 1086264790Sbapt fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", 1087264790Sbapt YYDEBUGSTR, yydepth, *yystack.s_mark); 1088264790Sbapt#endif 1089264790Sbapt if (yystack.s_mark <= yystack.s_base) goto yyabort; 1090264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1091264790Sbapt /* the current TOS position is the error start position */ 1092264790Sbapt yyerror_loc_range[0] = *yystack.p_mark; 1093264790Sbapt#endif 1094264790Sbapt#if defined(YYDESTRUCT_CALL) 1095264790Sbapt#if YYBTYACC 1096264790Sbapt if (!yytrial) 1097264790Sbapt#endif /* YYBTYACC */ 1098264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1099264790Sbapt YYDESTRUCT_CALL("error: discarding state", 1100264790Sbapt yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); 1101264790Sbapt#else 1102264790Sbapt YYDESTRUCT_CALL("error: discarding state", 1103264790Sbapt yystos[*yystack.s_mark], yystack.l_mark); 1104264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1105264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */ 1106264790Sbapt --yystack.s_mark; 1107264790Sbapt --yystack.l_mark; 1108264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1109264790Sbapt --yystack.p_mark; 1110264790Sbapt#endif 1111264790Sbapt } 1112264790Sbapt } 1113264790Sbapt } 1114264790Sbapt else 1115264790Sbapt { 1116264790Sbapt if (yychar == YYEOF) goto yyabort; 1117264790Sbapt#if YYDEBUG 1118264790Sbapt if (yydebug) 1119264790Sbapt { 1120319297Sdelphij if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1121264790Sbapt fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", 1122264790Sbapt YYDEBUGSTR, yydepth, yystate, yychar, yys); 1123264790Sbapt } 1124264790Sbapt#endif 1125264790Sbapt#if defined(YYDESTRUCT_CALL) 1126264790Sbapt#if YYBTYACC 1127264790Sbapt if (!yytrial) 1128264790Sbapt#endif /* YYBTYACC */ 1129264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1130264790Sbapt YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); 1131264790Sbapt#else 1132264790Sbapt YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); 1133264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1134264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */ 1135264790Sbapt yychar = YYEMPTY; 1136264790Sbapt goto yyloop; 1137264790Sbapt } 1138264790Sbapt 1139264790Sbaptyyreduce: 1140264790Sbapt yym = yylen[yyn]; 1141264790Sbapt#if YYDEBUG 1142264790Sbapt if (yydebug) 1143264790Sbapt { 1144264790Sbapt fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", 1145264790Sbapt YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); 1146264790Sbapt#ifdef YYSTYPE_TOSTRING 1147264790Sbapt#if YYBTYACC 1148264790Sbapt if (!yytrial) 1149264790Sbapt#endif /* YYBTYACC */ 1150264790Sbapt if (yym > 0) 1151264790Sbapt { 1152264790Sbapt int i; 1153264790Sbapt fputc('<', stderr); 1154264790Sbapt for (i = yym; i > 0; i--) 1155264790Sbapt { 1156264790Sbapt if (i != yym) fputs(", ", stderr); 1157264790Sbapt fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], 1158264790Sbapt yystack.l_mark[1-i]), stderr); 1159264790Sbapt } 1160264790Sbapt fputc('>', stderr); 1161264790Sbapt } 1162264790Sbapt#endif 1163264790Sbapt fputc('\n', stderr); 1164264790Sbapt } 1165264790Sbapt#endif 1166264790Sbapt if (yym > 0) 1167264790Sbapt yyval = yystack.l_mark[1-yym]; 1168264790Sbapt else 1169264790Sbapt memset(&yyval, 0, sizeof yyval); 1170264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1171264790Sbapt 1172264790Sbapt /* Perform position reduction */ 1173264790Sbapt memset(&yyloc, 0, sizeof(yyloc)); 1174264790Sbapt#if YYBTYACC 1175264790Sbapt if (!yytrial) 1176264790Sbapt#endif /* YYBTYACC */ 1177264790Sbapt { 1178264790Sbapt YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym); 1179264790Sbapt /* just in case YYERROR is invoked within the action, save 1180264790Sbapt the start of the rhs as the error start position */ 1181264790Sbapt yyerror_loc_range[0] = yystack.p_mark[1-yym]; 1182264790Sbapt } 1183264790Sbapt#endif 1184264790Sbapt 1185264790Sbapt switch (yyn) 1186264790Sbapt { 1187264790Sbaptcase 3: 1188264790Sbapt#line 35 "calc2.y" 1189264790Sbapt { yyerrok ; } 1190264790Sbaptbreak; 1191264790Sbaptcase 4: 1192264790Sbapt#line 39 "calc2.y" 1193264790Sbapt { printf("%d\n",yystack.l_mark[0]);} 1194264790Sbaptbreak; 1195264790Sbaptcase 5: 1196264790Sbapt#line 41 "calc2.y" 1197264790Sbapt { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } 1198264790Sbaptbreak; 1199264790Sbaptcase 6: 1200264790Sbapt#line 45 "calc2.y" 1201264790Sbapt { yyval = yystack.l_mark[-1]; } 1202264790Sbaptbreak; 1203264790Sbaptcase 7: 1204264790Sbapt#line 47 "calc2.y" 1205264790Sbapt { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } 1206264790Sbaptbreak; 1207264790Sbaptcase 8: 1208264790Sbapt#line 49 "calc2.y" 1209264790Sbapt { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } 1210264790Sbaptbreak; 1211264790Sbaptcase 9: 1212264790Sbapt#line 51 "calc2.y" 1213264790Sbapt { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } 1214264790Sbaptbreak; 1215264790Sbaptcase 10: 1216264790Sbapt#line 53 "calc2.y" 1217264790Sbapt { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } 1218264790Sbaptbreak; 1219264790Sbaptcase 11: 1220264790Sbapt#line 55 "calc2.y" 1221264790Sbapt { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } 1222264790Sbaptbreak; 1223264790Sbaptcase 12: 1224264790Sbapt#line 57 "calc2.y" 1225264790Sbapt { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } 1226264790Sbaptbreak; 1227264790Sbaptcase 13: 1228264790Sbapt#line 59 "calc2.y" 1229264790Sbapt { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } 1230264790Sbaptbreak; 1231264790Sbaptcase 14: 1232264790Sbapt#line 61 "calc2.y" 1233264790Sbapt { yyval = - yystack.l_mark[0]; } 1234264790Sbaptbreak; 1235264790Sbaptcase 15: 1236264790Sbapt#line 63 "calc2.y" 1237264790Sbapt { yyval = regs[yystack.l_mark[0]]; } 1238264790Sbaptbreak; 1239264790Sbaptcase 17: 1240264790Sbapt#line 68 "calc2.y" 1241264790Sbapt { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } 1242264790Sbaptbreak; 1243264790Sbaptcase 18: 1244264790Sbapt#line 70 "calc2.y" 1245264790Sbapt { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } 1246264790Sbaptbreak; 1247319297Sdelphij#line 1248 "calc2.tab.c" 1248264790Sbapt default: 1249264790Sbapt break; 1250264790Sbapt } 1251264790Sbapt yystack.s_mark -= yym; 1252264790Sbapt yystate = *yystack.s_mark; 1253264790Sbapt yystack.l_mark -= yym; 1254264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1255264790Sbapt yystack.p_mark -= yym; 1256264790Sbapt#endif 1257264790Sbapt yym = yylhs[yyn]; 1258264790Sbapt if (yystate == 0 && yym == 0) 1259264790Sbapt { 1260264790Sbapt#if YYDEBUG 1261264790Sbapt if (yydebug) 1262264790Sbapt { 1263264790Sbapt fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1264264790Sbapt#ifdef YYSTYPE_TOSTRING 1265264790Sbapt#if YYBTYACC 1266264790Sbapt if (!yytrial) 1267264790Sbapt#endif /* YYBTYACC */ 1268264790Sbapt fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); 1269264790Sbapt#endif 1270264790Sbapt fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); 1271264790Sbapt } 1272264790Sbapt#endif 1273264790Sbapt yystate = YYFINAL; 1274264790Sbapt *++yystack.s_mark = YYFINAL; 1275264790Sbapt *++yystack.l_mark = yyval; 1276264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1277264790Sbapt *++yystack.p_mark = yyloc; 1278264790Sbapt#endif 1279264790Sbapt if (yychar < 0) 1280264790Sbapt { 1281264790Sbapt#if YYBTYACC 1282264790Sbapt do { 1283264790Sbapt if (yylvp < yylve) 1284264790Sbapt { 1285264790Sbapt /* we're currently re-reading tokens */ 1286264790Sbapt yylval = *yylvp++; 1287264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1288264790Sbapt yylloc = *yylpp++; 1289264790Sbapt#endif 1290264790Sbapt yychar = *yylexp++; 1291264790Sbapt break; 1292264790Sbapt } 1293264790Sbapt if (yyps->save) 1294264790Sbapt { 1295264790Sbapt /* in trial mode; save scanner results for future parse attempts */ 1296264790Sbapt if (yylvp == yylvlim) 1297264790Sbapt { /* Enlarge lexical value queue */ 1298272655Sbapt size_t p = (size_t) (yylvp - yylvals); 1299272655Sbapt size_t s = (size_t) (yylvlim - yylvals); 1300264790Sbapt 1301264790Sbapt s += YYLVQUEUEGROWTH; 1302319297Sdelphij if ((yylexemes = realloc(yylexemes, s * sizeof(YYINT))) == NULL) 1303264790Sbapt goto yyenomem; 1304319297Sdelphij if ((yylvals = realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) 1305264790Sbapt goto yyenomem; 1306264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1307319297Sdelphij if ((yylpsns = realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) 1308264790Sbapt goto yyenomem; 1309264790Sbapt#endif 1310264790Sbapt yylvp = yylve = yylvals + p; 1311264790Sbapt yylvlim = yylvals + s; 1312264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1313264790Sbapt yylpp = yylpe = yylpsns + p; 1314264790Sbapt yylplim = yylpsns + s; 1315264790Sbapt#endif 1316264790Sbapt yylexp = yylexemes + p; 1317264790Sbapt } 1318319297Sdelphij *yylexp = (YYINT) YYLEX; 1319264790Sbapt *yylvp++ = yylval; 1320264790Sbapt yylve++; 1321264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1322264790Sbapt *yylpp++ = yylloc; 1323264790Sbapt yylpe++; 1324264790Sbapt#endif 1325264790Sbapt yychar = *yylexp++; 1326264790Sbapt break; 1327264790Sbapt } 1328264790Sbapt /* normal operation, no conflict encountered */ 1329264790Sbapt#endif /* YYBTYACC */ 1330264790Sbapt yychar = YYLEX; 1331264790Sbapt#if YYBTYACC 1332264790Sbapt } while (0); 1333264790Sbapt#endif /* YYBTYACC */ 1334264790Sbapt if (yychar < 0) yychar = YYEOF; 1335264790Sbapt#if YYDEBUG 1336264790Sbapt if (yydebug) 1337264790Sbapt { 1338319297Sdelphij if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 1339319297Sdelphij fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", 1340264790Sbapt YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); 1341264790Sbapt } 1342264790Sbapt#endif 1343264790Sbapt } 1344264790Sbapt if (yychar == YYEOF) goto yyaccept; 1345264790Sbapt goto yyloop; 1346264790Sbapt } 1347264790Sbapt if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && 1348264790Sbapt yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) 1349264790Sbapt yystate = yytable[yyn]; 1350264790Sbapt else 1351264790Sbapt yystate = yydgoto[yym]; 1352264790Sbapt#if YYDEBUG 1353264790Sbapt if (yydebug) 1354264790Sbapt { 1355264790Sbapt fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); 1356264790Sbapt#ifdef YYSTYPE_TOSTRING 1357264790Sbapt#if YYBTYACC 1358264790Sbapt if (!yytrial) 1359264790Sbapt#endif /* YYBTYACC */ 1360264790Sbapt fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); 1361264790Sbapt#endif 1362264790Sbapt fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); 1363264790Sbapt } 1364264790Sbapt#endif 1365264790Sbapt if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; 1366319297Sdelphij *++yystack.s_mark = (YYINT) yystate; 1367264790Sbapt *++yystack.l_mark = yyval; 1368264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1369264790Sbapt *++yystack.p_mark = yyloc; 1370264790Sbapt#endif 1371264790Sbapt goto yyloop; 1372264790Sbapt#if YYBTYACC 1373264790Sbapt 1374264790Sbapt /* Reduction declares that this path is valid. Set yypath and do a full parse */ 1375264790Sbaptyyvalid: 1376264790Sbapt if (yypath) YYABORT; 1377264790Sbapt while (yyps->save) 1378264790Sbapt { 1379264790Sbapt YYParseState *save = yyps->save; 1380264790Sbapt yyps->save = save->save; 1381264790Sbapt save->save = yypath; 1382264790Sbapt yypath = save; 1383264790Sbapt } 1384264790Sbapt#if YYDEBUG 1385264790Sbapt if (yydebug) 1386264790Sbapt fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", 1387264790Sbapt YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); 1388264790Sbapt#endif 1389264790Sbapt if (yyerrctx) 1390264790Sbapt { 1391264790Sbapt yyFreeState(yyerrctx); 1392264790Sbapt yyerrctx = NULL; 1393264790Sbapt } 1394264790Sbapt yylvp = yylvals + yypath->lexeme; 1395264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1396264790Sbapt yylpp = yylpsns + yypath->lexeme; 1397264790Sbapt#endif 1398264790Sbapt yylexp = yylexemes + yypath->lexeme; 1399264790Sbapt yychar = YYEMPTY; 1400264790Sbapt yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); 1401319297Sdelphij memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); 1402264790Sbapt yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); 1403272655Sbapt memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); 1404264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1405264790Sbapt yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); 1406272655Sbapt memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); 1407264790Sbapt#endif 1408264790Sbapt yystate = yypath->state; 1409264790Sbapt goto yyloop; 1410264790Sbapt#endif /* YYBTYACC */ 1411264790Sbapt 1412264790Sbaptyyoverflow: 1413264790Sbapt YYERROR_CALL("yacc stack overflow"); 1414264790Sbapt#if YYBTYACC 1415264790Sbapt goto yyabort_nomem; 1416264790Sbaptyyenomem: 1417264790Sbapt YYERROR_CALL("memory exhausted"); 1418264790Sbaptyyabort_nomem: 1419264790Sbapt#endif /* YYBTYACC */ 1420264790Sbapt yyresult = 2; 1421264790Sbapt goto yyreturn; 1422264790Sbapt 1423264790Sbaptyyabort: 1424264790Sbapt yyresult = 1; 1425264790Sbapt goto yyreturn; 1426264790Sbapt 1427264790Sbaptyyaccept: 1428264790Sbapt#if YYBTYACC 1429264790Sbapt if (yyps->save) goto yyvalid; 1430264790Sbapt#endif /* YYBTYACC */ 1431264790Sbapt yyresult = 0; 1432264790Sbapt 1433264790Sbaptyyreturn: 1434264790Sbapt#if defined(YYDESTRUCT_CALL) 1435264790Sbapt if (yychar != YYEOF && yychar != YYEMPTY) 1436264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1437264790Sbapt YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); 1438264790Sbapt#else 1439264790Sbapt YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); 1440264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1441264790Sbapt 1442264790Sbapt { 1443264790Sbapt YYSTYPE *pv; 1444264790Sbapt#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) 1445264790Sbapt YYLTYPE *pp; 1446264790Sbapt 1447264790Sbapt for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) 1448264790Sbapt YYDESTRUCT_CALL("cleanup: discarding state", 1449264790Sbapt yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); 1450264790Sbapt#else 1451264790Sbapt for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) 1452264790Sbapt YYDESTRUCT_CALL("cleanup: discarding state", 1453264790Sbapt yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); 1454264790Sbapt#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ 1455264790Sbapt } 1456264790Sbapt#endif /* defined(YYDESTRUCT_CALL) */ 1457264790Sbapt 1458264790Sbapt#if YYBTYACC 1459264790Sbapt if (yyerrctx) 1460264790Sbapt { 1461264790Sbapt yyFreeState(yyerrctx); 1462264790Sbapt yyerrctx = NULL; 1463264790Sbapt } 1464264790Sbapt while (yyps) 1465264790Sbapt { 1466264790Sbapt YYParseState *save = yyps; 1467264790Sbapt yyps = save->save; 1468264790Sbapt save->save = NULL; 1469264790Sbapt yyFreeState(save); 1470264790Sbapt } 1471264790Sbapt while (yypath) 1472264790Sbapt { 1473264790Sbapt YYParseState *save = yypath; 1474264790Sbapt yypath = save->save; 1475264790Sbapt save->save = NULL; 1476264790Sbapt yyFreeState(save); 1477264790Sbapt } 1478264790Sbapt#endif /* YYBTYACC */ 1479264790Sbapt yyfreestack(&yystack); 1480264790Sbapt return (yyresult); 1481264790Sbapt} 1482