| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477 |
- %% 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 (yylvp<yylve ? yylval=*yylvp++, *yylexp++ : \
- yytrial ? (yylvp==yylvlim ? yyexpand() : 0), *yylexp = yylex(), \
- *yylvp++ = yylval, yylve++, *yylexp++ \
- : yylex())
- extern int yylex(), yyparse();
- #define yytrial (yypstate->save)
- #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;
- }
|