yaccpar.skel revision 272461
10SN/A/* $Id: yaccpar.skel,v 1.5 2014/04/07 21:51:00 tom Exp $ */
215993Slancea
30SN/A#include "defs.h"
40SN/A
50SN/A/*  If the skeleton is changed, the banner should be changed so that	*/
60SN/A/*  the altered version can be easily distinguished from the original.	*/
72362SN/A/*									*/
80SN/A/*  The #defines included with the banner are there because they are	*/
92362SN/A/*  useful in subsequent code.  The macros #defined in the header or	*/
100SN/A/*  the body either are not useful outside of semantic actions or	*/
110SN/A/*  are conditional.							*/
120SN/A
130SN/A%% banner
140SN/A/* original parser id follows */
150SN/A/* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
160SN/A/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
170SN/A
180SN/A#define YYBYACC 1
190SN/A%% insert VERSION here
200SN/A
212362SN/A#define YYEMPTY        (-1)
222362SN/A#define yyclearin      (yychar = YYEMPTY)
232362SN/A#define yyerrok        (yyerrflag = 0)
240SN/A#define YYRECOVERING() (yyerrflag != 0)
250SN/A#define YYENOMEM       (-2)
260SN/A#define YYEOF          0
270SN/A%% xdecls
280SN/A
290SN/Aextern int YYPARSE_DECL();
300SN/A%% tables
310SN/Aextern YYINT yylhs[];
320SN/Aextern YYINT yylen[];
330SN/Aextern YYINT yydefred[];
340SN/Aextern YYINT yydgoto[];
350SN/Aextern YYINT yysindex[];
360SN/Aextern YYINT yyrindex[];
370SN/Aextern YYINT yygindex[];
380SN/Aextern YYINT yytable[];
390SN/Aextern YYINT yycheck[];
400SN/A
410SN/A#if YYDEBUG
420SN/Aextern char *yyname[];
430SN/Aextern char *yyrule[];
440SN/A#endif
450SN/A%% global_vars
460SN/A
470SN/Aint      yydebug;
480SN/Aint      yynerrs;
490SN/A%% impure_vars
500SN/A
510SN/Aint      yyerrflag;
520SN/Aint      yychar;
530SN/AYYSTYPE  yyval;
540SN/AYYSTYPE  yylval;
550SN/A%% hdr_defs
560SN/A
570SN/A/* define the initial stack-sizes */
580SN/A#ifdef YYSTACKSIZE
598475SN/A#undef YYMAXDEPTH
600SN/A#define YYMAXDEPTH  YYSTACKSIZE
610SN/A#else
620SN/A#ifdef YYMAXDEPTH
6316890Smli#define YYSTACKSIZE YYMAXDEPTH
640SN/A#else
650SN/A#define YYSTACKSIZE 10000
660SN/A#define YYMAXDEPTH  10000
670SN/A#endif
680SN/A#endif
690SN/A
700SN/A#define YYINITSTACKSIZE 200
710SN/A
720SN/Atypedef struct {
730SN/A    unsigned stacksize;
740SN/A    YYINT    *s_base;
750SN/A    YYINT    *s_mark;
760SN/A    YYINT    *s_last;
770SN/A    YYSTYPE  *l_base;
780SN/A    YYSTYPE  *l_mark;
790SN/A} YYSTACKDATA;
800SN/A%% hdr_vars
810SN/A/* variables for the parser stack */
820SN/Astatic YYSTACKDATA yystack;
830SN/A%% body_vars
840SN/A    int      yyerrflag;
850SN/A    int      yychar;
860SN/A    YYSTYPE  yyval;
870SN/A    YYSTYPE  yylval;
880SN/A
890SN/A    /* variables for the parser stack */
900SN/A    YYSTACKDATA yystack;
910SN/A%% body_1
920SN/A
930SN/A#if YYDEBUG
940SN/A#include <stdio.h>		/* needed for printf */
950SN/A#endif
960SN/A
970SN/A#include <stdlib.h>	/* needed for malloc, etc */
980SN/A#include <string.h>	/* needed for memset */
990SN/A
1000SN/A/* allocate initial stack or double stack size, up to YYMAXDEPTH */
1010SN/Astatic int yygrowstack(YYSTACKDATA *data)
1020SN/A{
1030SN/A    int i;
1040SN/A    unsigned newsize;
1050SN/A    YYINT *newss;
1060SN/A    YYSTYPE *newvs;
1070SN/A
1080SN/A    if ((newsize = data->stacksize) == 0)
1090SN/A        newsize = YYINITSTACKSIZE;
1100SN/A    else if (newsize >= YYMAXDEPTH)
1110SN/A        return YYENOMEM;
1120SN/A    else if ((newsize *= 2) > YYMAXDEPTH)
1130SN/A        newsize = YYMAXDEPTH;
1140SN/A
1150SN/A    i = (int) (data->s_mark - data->s_base);
1160SN/A    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
1170SN/A    if (newss == 0)
1180SN/A        return YYENOMEM;
1190SN/A
1200SN/A    data->s_base = newss;
1210SN/A    data->s_mark = newss + i;
1220SN/A
1230SN/A    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1240SN/A    if (newvs == 0)
1250SN/A        return YYENOMEM;
1260SN/A
1270SN/A    data->l_base = newvs;
1280SN/A    data->l_mark = newvs + i;
1290SN/A
1300SN/A    data->stacksize = newsize;
1310SN/A    data->s_last = data->s_base + newsize - 1;
1320SN/A    return 0;
1330SN/A}
1340SN/A
1350SN/A#if YYPURE || defined(YY_NO_LEAKS)
1360SN/Astatic void yyfreestack(YYSTACKDATA *data)
1370SN/A{
1380SN/A    free(data->s_base);
1390SN/A    free(data->l_base);
1400SN/A    memset(data, 0, sizeof(*data));
1410SN/A}
1420SN/A#else
1430SN/A#define yyfreestack(data) /* nothing */
1440SN/A#endif
1450SN/A
1460SN/A#define YYABORT  goto yyabort
1470SN/A#define YYREJECT goto yyabort
1480SN/A#define YYACCEPT goto yyaccept
1490SN/A#define YYERROR  goto yyerrlab
1500SN/A
1510SN/Aint
1520SN/AYYPARSE_DECL()
1530SN/A{
1540SN/A%% body_2
1550SN/A    int yym, yyn, yystate;
1560SN/A#if YYDEBUG
1570SN/A    const char *yys;
1580SN/A
1590SN/A    if ((yys = getenv("YYDEBUG")) != 0)
1600SN/A    {
1610SN/A        yyn = *yys;
1620SN/A        if (yyn >= '0' && yyn <= '9')
1630SN/A            yydebug = yyn - '0';
1640SN/A    }
1650SN/A#endif
1660SN/A
1670SN/A    yynerrs = 0;
1680SN/A    yyerrflag = 0;
1690SN/A    yychar = YYEMPTY;
1700SN/A    yystate = 0;
1710SN/A
1720SN/A#if YYPURE
1730SN/A    memset(&yystack, 0, sizeof(yystack));
1740SN/A#endif
1750SN/A
1760SN/A    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1770SN/A    yystack.s_mark = yystack.s_base;
1780SN/A    yystack.l_mark = yystack.l_base;
1790SN/A    yystate = 0;
1800SN/A    *yystack.s_mark = 0;
1810SN/A
1820SN/Ayyloop:
1830SN/A    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1840SN/A    if (yychar < 0)
1850SN/A    {
1860SN/A        if ((yychar = YYLEX) < 0) yychar = YYEOF;
1870SN/A#if YYDEBUG
1880SN/A        if (yydebug)
1890SN/A        {
1900SN/A            yys = yyname[YYTRANSLATE(yychar)];
1910SN/A            printf("%sdebug: state %d, reading %d (%s)\n",
1920SN/A                    YYPREFIX, yystate, yychar, yys);
1930SN/A        }
1940SN/A#endif
1950SN/A    }
1960SN/A    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
1970SN/A            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
1980SN/A    {
1990SN/A#if YYDEBUG
2000SN/A        if (yydebug)
2010SN/A            printf("%sdebug: state %d, shifting to state %d\n",
2020SN/A                    YYPREFIX, yystate, yytable[yyn]);
2030SN/A#endif
2040SN/A        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
2050SN/A        {
2060SN/A            goto yyoverflow;
2070SN/A        }
2080SN/A        yystate = yytable[yyn];
2090SN/A        *++yystack.s_mark = yytable[yyn];
2100SN/A        *++yystack.l_mark = yylval;
2110SN/A        yychar = YYEMPTY;
2120SN/A        if (yyerrflag > 0)  --yyerrflag;
2130SN/A        goto yyloop;
2140SN/A    }
2150SN/A    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
2160SN/A            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
2170SN/A    {
2180SN/A        yyn = yytable[yyn];
2190SN/A        goto yyreduce;
2200SN/A    }
2210SN/A    if (yyerrflag) goto yyinrecovery;
2220SN/A
2230SN/A    YYERROR_CALL("syntax error");
2240SN/A
2250SN/A    goto yyerrlab;
2260SN/A
2270SN/Ayyerrlab:
2280SN/A    ++yynerrs;
2290SN/A
2300SN/Ayyinrecovery:
2310SN/A    if (yyerrflag < 3)
2320SN/A    {
2330SN/A        yyerrflag = 3;
2340SN/A        for (;;)
2350SN/A        {
2360SN/A            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
2370SN/A                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
2380SN/A            {
2390SN/A#if YYDEBUG
2400SN/A                if (yydebug)
2410SN/A                    printf("%sdebug: state %d, error recovery shifting\
2420SN/A to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
2430SN/A#endif
2440SN/A                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
2450SN/A                {
2460SN/A                    goto yyoverflow;
2470SN/A                }
2480SN/A                yystate = yytable[yyn];
2490SN/A                *++yystack.s_mark = yytable[yyn];
2500SN/A                *++yystack.l_mark = yylval;
2510SN/A                goto yyloop;
2520SN/A            }
2530SN/A            else
2540SN/A            {
2550SN/A#if YYDEBUG
2560SN/A                if (yydebug)
2570SN/A                    printf("%sdebug: error recovery discarding state %d\n",
2580SN/A                            YYPREFIX, *yystack.s_mark);
2590SN/A#endif
2600SN/A                if (yystack.s_mark <= yystack.s_base) goto yyabort;
2610SN/A                --yystack.s_mark;
2620SN/A                --yystack.l_mark;
2630SN/A            }
2640SN/A        }
2650SN/A    }
2660SN/A    else
2670SN/A    {
2680SN/A        if (yychar == YYEOF) goto yyabort;
2690SN/A#if YYDEBUG
2700SN/A        if (yydebug)
2710SN/A        {
2720SN/A            yys = yyname[YYTRANSLATE(yychar)];
2730SN/A            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
2740SN/A                    YYPREFIX, yystate, yychar, yys);
2750SN/A        }
2760SN/A#endif
2770SN/A        yychar = YYEMPTY;
2780SN/A        goto yyloop;
2790SN/A    }
2800SN/A
2810SN/Ayyreduce:
2820SN/A#if YYDEBUG
2830SN/A    if (yydebug)
2840SN/A        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
2850SN/A                YYPREFIX, yystate, yyn, yyrule[yyn]);
2860SN/A#endif
2870SN/A    yym = yylen[yyn];
2880SN/A    if (yym)
2890SN/A        yyval = yystack.l_mark[1-yym];
2900SN/A    else
2910SN/A        memset(&yyval, 0, sizeof yyval);
2920SN/A    switch (yyn)
2930SN/A    {
2940SN/A%% trailer
2950SN/A    }
2960SN/A    yystack.s_mark -= yym;
2970SN/A    yystate = *yystack.s_mark;
2980SN/A    yystack.l_mark -= yym;
29915993Slancea    yym = yylhs[yyn];
3000SN/A    if (yystate == 0 && yym == 0)
3010SN/A    {
3020SN/A#if YYDEBUG
3030SN/A        if (yydebug)
3040SN/A            printf("%sdebug: after reduction, shifting from state 0 to\
3050SN/A state %d\n", YYPREFIX, YYFINAL);
3060SN/A#endif
3070SN/A        yystate = YYFINAL;
3080SN/A        *++yystack.s_mark = YYFINAL;
3090SN/A        *++yystack.l_mark = yyval;
3100SN/A        if (yychar < 0)
3110SN/A        {
3120SN/A            if ((yychar = YYLEX) < 0) yychar = YYEOF;
3130SN/A#if YYDEBUG
3140SN/A            if (yydebug)
3150SN/A            {
3160SN/A                yys = yyname[YYTRANSLATE(yychar)];
3170SN/A                printf("%sdebug: state %d, reading %d (%s)\n",
3180SN/A                        YYPREFIX, YYFINAL, yychar, yys);
3190SN/A            }
3200SN/A#endif
3210SN/A        }
3220SN/A        if (yychar == YYEOF) goto yyaccept;
3230SN/A        goto yyloop;
3240SN/A    }
3250SN/A    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
3260SN/A            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
3270SN/A        yystate = yytable[yyn];
3280SN/A    else
3290SN/A        yystate = yydgoto[yym];
3300SN/A#if YYDEBUG
3310SN/A    if (yydebug)
3320SN/A        printf("%sdebug: after reduction, shifting from state %d \
3330SN/Ato state %d\n", YYPREFIX, *yystack.s_mark, yystate);
3340SN/A#endif
3350SN/A    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
3360SN/A    {
3370SN/A        goto yyoverflow;
3380SN/A    }
3390SN/A    *++yystack.s_mark = (YYINT) yystate;
3400SN/A    *++yystack.l_mark = yyval;
3410SN/A    goto yyloop;
3420SN/A
3430SN/Ayyoverflow:
3440SN/A    YYERROR_CALL("yacc stack overflow");
3450SN/A
3460SN/Ayyabort:
3470SN/A    yyfreestack(&yystack);
3480SN/A    return (1);
3490SN/A
3500SN/Ayyaccept:
3510SN/A    yyfreestack(&yystack);
3520SN/A    return (0);
3530SN/A}
3540SN/A