%% banner /* ** "@(#)push.skel, based on byacc 1.8 (Berkeley) 01/20/91"; */ #define YYBTYACC 1 %% header #define yyclearin (yychar=(-1)) #define yyerrok (yyerrflag=0) /* #ifdef YYSTACKSIZE #ifndef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #endif #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif */ int yydebug; static struct yyparsestate { struct yyparsestate *save; int state; int errflag; short *ssp; YYSTYPE *vsp; YYSTYPE val; short *ss; YYSTYPE *vs; int lexeme; unsigned short stacksize; short ctry; } *yypstate=0, *yypath=0; #define yyerrflag (yypstate->errflag) #define yyssp (yypstate->ssp) #define yyvsp (yypstate->vsp) #define yyval (yypstate->val) #define yyss (yypstate->ss) #define yyvs (yypstate->vs) #define yystacksize (yypstate->stacksize) static YYSTYPE *yylvals=0, *yylvp=0, *yylve=0, *yylvlim=0; static short *yylexemes=0, *yylexp=0; #define YYLEX (yylvpsave) #ifndef __cplusplus #define YYSCOPY(t, f, s) memcpy(t, f, (s)*sizeof(YYSTYPE)) #define YYMORESTACK do { int p = yyssp - yyss; \ yystacksize += 16; \ yyss = (short *)realloc(yyss, yystacksize * sizeof(short)); \ yyvs = (YYSTYPE *)realloc(yyvs, yystacksize * sizeof(YYSTYPE)); \ yyssp = yyss + p; \ yyvsp = yyvs + p; \ } while (0) #else /* C++ */ #define YYSCOPY(to, from, size) do { int _i; \ for (_i = (size)-1; _i >= 0; _i--) \ (to)[_i] = (from)[_i]; \ } while(0) #define YYMORESTACK do { int p = yyssp - yyss; \ short *tss = yyss; YYSTYPE *tvs = yyvs; \ yyss = new short[yystacksize + 16]; \ yyvs = new YYSTYPE[yystacksize + 16]; \ memcpy(yyss, tss, yystacksize * sizeof(short)); \ YYSCOPY(yyvs, tvs, yystacksize); \ yystacksize += 16; \ delete[] tss; \ delete[] tvs; \ yyssp = yyss + p; \ yyvsp = yyvs + p; \ } while (0) #endif /* C++ */ %% body #ifndef YYNEWSTATE #ifdef __oldc static struct yyparsestate *YYNEWSTATE(size) int size; #else static struct yyparsestate *YYNEWSTATE(int size) #endif /* __oldc */ { struct yyparsestate *p; #ifndef __cplusplus p = (struct yyparsestate *)malloc(sizeof(struct yyparsestate)); p->stacksize = size+4; p->ss = (short *)malloc((size+4)*sizeof(short)); p->vs = (YYSTYPE *)malloc((size+4)*sizeof(YYSTYPE)); #else /* C++ */ p = new yyparsestate; p->stacksize = size+4; p->ss = new short[size + 4]; p->vs = new YYSTYPE[size + 4]; #endif /* C++ */ return p; } #endif /* YYNEWSTATE */ #ifndef YYFREESTATE #ifndef __cplusplus #define YYFREESTATE(p) (free((p)->ss), free((p)->vs), free(p)) #else /* C++ */ #define YYFREESTATE(p) (delete[] (p)->ss, delete[] (p)->vs, delete (p)) #endif /* C++ */ #endif /* YYFREESTATE */ static int yyexpand() { int p = yylvp-yylvals; int s = yylvlim-yylvals; s += 16; #ifndef __cplusplus yylvals = (YYSTYPE *)realloc(yylvals, s*sizeof(YYSTYPE)); yylexemes = (short *)realloc(yylexemes, s*sizeof(short)); #else /* C++ */ { short *tl = yylexemes; YYSTYPE *tv = yylvals; yylvals = new YYSTYPE[s]; yylexemes = new short[s]; memcpy(yylexemes, tl, (s-16)*sizeof(short)); YYSCOPY(yylvals, tv, s-16); delete[] tl; delete[] tv; } #endif /* C++ */ yylvp = yylve = yylvals + p; yylvlim = yylvals + s; yylexp = yylexemes + p; return 0; } #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #define YYVALID do { if (yytrial) goto yyvalid; } while(0) #ifdef __cplusplus extern "C" char *getenv(const char *); #else extern char *getenv(); #endif int yyparse(int yychar, YYSTYPE yylval) { int yym, yyn, yystate, yynewerrflag; #if YYDEBUG char *yys; #endif if (yychar < 0) yychar = 0; if (!yypstate) { /* initialize the parser state */ yypstate = YYNEWSTATE(12); yypath = 0; yytrial = 0; yyerrflag = 0; yylvp = yylve = yylvals; yylexp = yylexemes; yyssp = yyss; yyvsp = yyvs; *yyssp = yypstate->state = 0; } yystate = yypstate->state; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("yydebug: state %d, input %d (%s)", yystate, yychar, yys); #ifdef YYDBPR printf("<"); YYDBPR(yylval); printf(">"); #endif printf("\n"); } #endif if (yystate == YYFINAL && yychar == 0) goto yyaccept; if (yytrial) { if (yylvp == yylvlim) yyexpand(); *yylvp++ = yylval; yylve++; *yylexp++ = yychar; } yyloop: if ((yyn = yydefred[yystate])) goto yyreduce; if (yychar < 0) { if (yylvp < yylve) { yylval = *yylvp++; yychar = *yylexp++; } else { yypstate->state = yystate; return 0; } #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("yydebug: state %d, reading %d (%s)", yystate, yychar, yys); #ifdef YYDBPR printf("<"); YYDBPR(yylval); printf(">"); #endif printf("\n"); } #endif } if ((yyn = yycindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { int ctry; struct yyparsestate *save; #if YYDEBUG if (yydebug) printf("yydebug: state %d, conflict%s\n", yystate, yypath ? ", following successful trial parse" : yytrial ? "" : ", starting trial parse"); #endif if (yypath) { save = yypath; yypath = save->save; ctry = save->ctry; if (save->state != yystate) goto yyabort; YYFREESTATE(save); } else { save = YYNEWSTATE(yyssp - yyss); save->save = yypstate->save; save->state = yystate; save->errflag = yypstate->errflag; save->ssp = save->ss + (yyssp - yyss); save->vsp = save->vs + (yyvsp - yyvs); memcpy(save->ss, yyss, (yyssp - yyss + 1)*sizeof(short)); YYSCOPY(save->vs, yyvs, yyssp - yyss + 1); ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= 0) printf("yydebug: backtracking 1 token\n"); #endif ctry++; } save->ctry = ctry; if (!yytrial) { if (!yylexemes) { #ifndef __cplusplus yylexemes = (short *)malloc(16*sizeof(short)); yylvals = (YYSTYPE *)malloc(16*sizeof(YYSTYPE)); #else /* C++ */ yylexemes = new short[16]; yylvals = new YYSTYPE[16]; #endif /* C++ */ yylvlim = yylvals + 16; } if (yylvp == yylve) { yylvp = yylve = yylvals; yylexp = yylexemes; if (yychar >= 0) { *yylve++ = yylval; *yylexp = yychar; yychar = -1; } } } if (yychar >= 0) { yylvp--, yylexp--; yychar = -1; } save->lexeme = yylvp - yylvals; yypstate->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) printf("yydebug: state %d, shifting to state %d\n", yystate, yyctable[ctry]); #endif if (yychar < 0) yylvp++, yylexp++; yychar = -1; if (yyerrflag > 0) --yyerrflag; yystate = yyctable[ctry]; goto yyshift; } else { yyn = yyctable[ctry]; goto yyreduce; } } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("yydebug: state %d, shifting to state %d\n", yystate, yytable[yyn]); #endif yychar = (-1); if (yyerrflag > 0) --yyerrflag; yystate = yytable[yyn]; yyshift: if (yyssp >= yyss + yystacksize - 1) YYMORESTACK; *++yyssp = yystate; *++yyvsp = yylval; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; yynewerrflag = 1; goto yyerrhandler; yyerrlab: yynewerrflag = 0; yyerrhandler: while (yytrial) { int ctry; struct yyparsestate *save; #if YYDEBUG if (yydebug) printf("yydebug: error in state %d, %s state %d, %d tokens\n", yystate, "backtracking to", yypstate->save->state, (int)(yylvp - yylvals - yypstate->save->lexeme)); #endif save = yypstate->save; yylvp = yylvals + save->lexeme; yylexp = yylexemes + save->lexeme; yychar = -1; yyssp = yyss + (save->ssp - save->ss); yyvsp = yyvs + (save->vsp - save->vs); memcpy(yyss, save->ss, (yyssp - yyss + 1) * sizeof(short)); YYSCOPY(yyvs, save->vs, yyvsp - yyvs + 1); ctry = ++save->ctry; yystate = save->state; if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yypstate->save = save->save; YYFREESTATE(save); #if YYDEBUG if (yydebug && !yytrial) printf("yydebug: trial parse failed, entering error mode\n"); #endif yynewerrflag = 1; } if (yynewerrflag) yyerror("syntax error"); yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("yydebug: state %d, error recovery %s state %d\n", *yyssp, "shifting to", yytable[yyn]); #endif yystate = yytable[yyn]; goto yyshift; } else { #if YYDEBUG if (yydebug) printf("yydebug: error recovery discarding state %d\n", *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("yydebug: state %d, error recovery discards token %d (%s)\n", yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { printf("yydebug: state %d, reducing by rule %d (%s)", yystate, yyn, yyrule[yyn]); #ifdef YYDBPR if (yym) { int i; printf("<"); for (i=yym; i>0; i--) { if (i!=yym) printf(", "); YYDBPR(yyvsp[1-i]); } printf(">"); } #endif printf("\n"); } #endif if (yyssp + 1 - yym >= yyss + yystacksize) YYMORESTACK; yyval = yyvsp[1-yym]; switch (yyn) { %% trailer } #if YYDEBUG && defined(YYDBPR) if (yydebug) { printf("yydebug: after reduction, result is "); YYDBPR(yyval); printf("\n"); } #endif yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("yydebug: after reduction, %s from state 0 to state %d\n", "shifting", YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("yydebug: after reduction, %s from state %d to state %d\n", "shifting", *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) YYMORESTACK; *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyvalid: if (yypath) goto yyabort; while (yypstate->save) { struct yyparsestate *save = yypstate->save; yypstate->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) printf("yydebug: trial successful, %s state %d, %d tokens\n", "backtracking to", yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif yychar = -1; yyssp = yyss + (yypath->ssp - yypath->ss); yyvsp = yyvs + (yypath->vsp - yypath->vs); memcpy(yyss, yypath->ss, (yyssp - yyss + 1) * sizeof(short)); YYSCOPY(yyvs, yypath->vs, yyvsp - yyvs + 1); yylvp = yylvals + yypath->lexeme; yylexp = yylexemes + yypath->lexeme; yystate = yypath->state; goto yyloop; yyabort: while (yypstate) { struct yyparsestate *save = yypstate; yypstate = save->save; YYFREESTATE(save); } while (yypath) { struct yyparsestate *save = yypath; yypath = save->save; YYFREESTATE(save); } return -1; yyaccept: if (yytrial) goto yyvalid; while (yypstate) { struct yyparsestate *save = yypstate; yypstate = save->save; YYFREESTATE(save); } while (yypath) { struct yyparsestate *save = yypath; yypath = save->save; YYFREESTATE(save); } return 1; }