8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 00:03:02 +01:00
firebird-mirror/extern/btyacc/push.skel
2006-04-19 09:53:27 +00:00

478 lines
12 KiB
Plaintext

%% 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;
}