xref: /freebsd/contrib/byacc/yaccpar.c (revision 8e022d3cdea10ee1039a632f670c27fd93f65625)
10c8de5b0SBaptiste Daroussin /* This file generated automatically using
22aca18c7SJung-uk Kim  * @Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp @
30c8de5b0SBaptiste Daroussin  */
40c8de5b0SBaptiste Daroussin 
5*8e022d3cSDag-Erling Smørgrav /* @Id: yaccpar.skel,v 1.11 2021/06/19 20:45:25 tom Exp @ */
60c8de5b0SBaptiste Daroussin 
70c8de5b0SBaptiste Daroussin #include "defs.h"
80c8de5b0SBaptiste Daroussin 
90c8de5b0SBaptiste Daroussin /*  If the skeleton is changed, the banner should be changed so that	*/
100c8de5b0SBaptiste Daroussin /*  the altered version can be easily distinguished from the original.	*/
110c8de5b0SBaptiste Daroussin /*									*/
120c8de5b0SBaptiste Daroussin /*  The #defines included with the banner are there because they are	*/
130c8de5b0SBaptiste Daroussin /*  useful in subsequent code.  The macros #defined in the header or	*/
140c8de5b0SBaptiste Daroussin /*  the body either are not useful outside of semantic actions or	*/
150c8de5b0SBaptiste Daroussin /*  are conditional.							*/
160c8de5b0SBaptiste Daroussin 
170c8de5b0SBaptiste Daroussin const char *const banner[] =
180c8de5b0SBaptiste Daroussin {
190c8de5b0SBaptiste Daroussin     "/* original parser id follows */",
200c8de5b0SBaptiste Daroussin     "/* yysccsid[] = \"@(#)yaccpar	1.9 (Berkeley) 02/21/93\" */",
210c8de5b0SBaptiste Daroussin     "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */",
220c8de5b0SBaptiste Daroussin     "",
230c8de5b0SBaptiste Daroussin     "#define YYBYACC 1",
240c8de5b0SBaptiste Daroussin     CONCAT1("#define YYMAJOR ", YYMAJOR),
250c8de5b0SBaptiste Daroussin     CONCAT1("#define YYMINOR ", YYMINOR),
260c8de5b0SBaptiste Daroussin #ifdef YYPATCH
270c8de5b0SBaptiste Daroussin     CONCAT1("#define YYPATCH ", YYPATCH),
280c8de5b0SBaptiste Daroussin #endif
290c8de5b0SBaptiste Daroussin     "",
300c8de5b0SBaptiste Daroussin     "#define YYEMPTY        (-1)",
310c8de5b0SBaptiste Daroussin     "#define yyclearin      (yychar = YYEMPTY)",
320c8de5b0SBaptiste Daroussin     "#define yyerrok        (yyerrflag = 0)",
330c8de5b0SBaptiste Daroussin     "#define YYRECOVERING() (yyerrflag != 0)",
340c8de5b0SBaptiste Daroussin     "#define YYENOMEM       (-2)",
350c8de5b0SBaptiste Daroussin     "#define YYEOF          0",
360c8de5b0SBaptiste Daroussin     0
370c8de5b0SBaptiste Daroussin };
380c8de5b0SBaptiste Daroussin 
390c8de5b0SBaptiste Daroussin const char *const xdecls[] =
400c8de5b0SBaptiste Daroussin {
410c8de5b0SBaptiste Daroussin     "",
420c8de5b0SBaptiste Daroussin     "extern int YYPARSE_DECL();",
430c8de5b0SBaptiste Daroussin     0
440c8de5b0SBaptiste Daroussin };
450c8de5b0SBaptiste Daroussin 
460c8de5b0SBaptiste Daroussin const char *const tables[] =
470c8de5b0SBaptiste Daroussin {
480c8de5b0SBaptiste Daroussin     "extern YYINT yylhs[];",
490c8de5b0SBaptiste Daroussin     "extern YYINT yylen[];",
500c8de5b0SBaptiste Daroussin     "extern YYINT yydefred[];",
510c8de5b0SBaptiste Daroussin     "extern YYINT yydgoto[];",
520c8de5b0SBaptiste Daroussin     "extern YYINT yysindex[];",
530c8de5b0SBaptiste Daroussin     "extern YYINT yyrindex[];",
540c8de5b0SBaptiste Daroussin     "extern YYINT yygindex[];",
550c8de5b0SBaptiste Daroussin     "extern YYINT yytable[];",
560c8de5b0SBaptiste Daroussin     "extern YYINT yycheck[];",
570c8de5b0SBaptiste Daroussin     "",
58c5b5d71aSJung-uk Kim     "#if YYDEBUG || defined(yytname)",
590c8de5b0SBaptiste Daroussin     "extern char *yyname[];",
60c5b5d71aSJung-uk Kim     "#endif",
61c5b5d71aSJung-uk Kim     "#if YYDEBUG",
620c8de5b0SBaptiste Daroussin     "extern char *yyrule[];",
630c8de5b0SBaptiste Daroussin     "#endif",
640c8de5b0SBaptiste Daroussin     0
650c8de5b0SBaptiste Daroussin };
660c8de5b0SBaptiste Daroussin 
670c8de5b0SBaptiste Daroussin const char *const global_vars[] =
680c8de5b0SBaptiste Daroussin {
690c8de5b0SBaptiste Daroussin     "",
70b53bb29fSJung-uk Kim     "#if YYDEBUG",
710c8de5b0SBaptiste Daroussin     "int      yydebug;",
72b53bb29fSJung-uk Kim     "#endif",
730c8de5b0SBaptiste Daroussin     0
740c8de5b0SBaptiste Daroussin };
750c8de5b0SBaptiste Daroussin 
760c8de5b0SBaptiste Daroussin const char *const impure_vars[] =
770c8de5b0SBaptiste Daroussin {
780c8de5b0SBaptiste Daroussin     "",
790c8de5b0SBaptiste Daroussin     "int      yyerrflag;",
800c8de5b0SBaptiste Daroussin     "int      yychar;",
810c8de5b0SBaptiste Daroussin     "YYSTYPE  yyval;",
820c8de5b0SBaptiste Daroussin     "YYSTYPE  yylval;",
83b53bb29fSJung-uk Kim     "int      yynerrs;",
840c8de5b0SBaptiste Daroussin     0
850c8de5b0SBaptiste Daroussin };
860c8de5b0SBaptiste Daroussin 
870c8de5b0SBaptiste Daroussin const char *const hdr_defs[] =
880c8de5b0SBaptiste Daroussin {
890c8de5b0SBaptiste Daroussin     "",
900c8de5b0SBaptiste Daroussin     "/* define the initial stack-sizes */",
910c8de5b0SBaptiste Daroussin     "#ifdef YYSTACKSIZE",
920c8de5b0SBaptiste Daroussin     "#undef YYMAXDEPTH",
930c8de5b0SBaptiste Daroussin     "#define YYMAXDEPTH  YYSTACKSIZE",
940c8de5b0SBaptiste Daroussin     "#else",
950c8de5b0SBaptiste Daroussin     "#ifdef YYMAXDEPTH",
960c8de5b0SBaptiste Daroussin     "#define YYSTACKSIZE YYMAXDEPTH",
970c8de5b0SBaptiste Daroussin     "#else",
980c8de5b0SBaptiste Daroussin     "#define YYSTACKSIZE 10000",
990c8de5b0SBaptiste Daroussin     "#define YYMAXDEPTH  10000",
1000c8de5b0SBaptiste Daroussin     "#endif",
1010c8de5b0SBaptiste Daroussin     "#endif",
1020c8de5b0SBaptiste Daroussin     "",
1030c8de5b0SBaptiste Daroussin     "#define YYINITSTACKSIZE 200",
1040c8de5b0SBaptiste Daroussin     "",
1050c8de5b0SBaptiste Daroussin     "typedef struct {",
1060c8de5b0SBaptiste Daroussin     "    unsigned stacksize;",
1070c8de5b0SBaptiste Daroussin     "    YYINT    *s_base;",
1080c8de5b0SBaptiste Daroussin     "    YYINT    *s_mark;",
1090c8de5b0SBaptiste Daroussin     "    YYINT    *s_last;",
1100c8de5b0SBaptiste Daroussin     "    YYSTYPE  *l_base;",
1110c8de5b0SBaptiste Daroussin     "    YYSTYPE  *l_mark;",
1120c8de5b0SBaptiste Daroussin     "} YYSTACKDATA;",
1130c8de5b0SBaptiste Daroussin     0
1140c8de5b0SBaptiste Daroussin };
1150c8de5b0SBaptiste Daroussin 
1160c8de5b0SBaptiste Daroussin const char *const hdr_vars[] =
1170c8de5b0SBaptiste Daroussin {
1180c8de5b0SBaptiste Daroussin     "/* variables for the parser stack */",
1190c8de5b0SBaptiste Daroussin     "static YYSTACKDATA yystack;",
1200c8de5b0SBaptiste Daroussin     0
1210c8de5b0SBaptiste Daroussin };
1220c8de5b0SBaptiste Daroussin 
1230c8de5b0SBaptiste Daroussin const char *const body_vars[] =
1240c8de5b0SBaptiste Daroussin {
1250c8de5b0SBaptiste Daroussin     "    int      yyerrflag;",
1260c8de5b0SBaptiste Daroussin     "    int      yychar;",
1270c8de5b0SBaptiste Daroussin     "    YYSTYPE  yyval;",
1280c8de5b0SBaptiste Daroussin     "    YYSTYPE  yylval;",
129b53bb29fSJung-uk Kim     "    int      yynerrs;",
1300c8de5b0SBaptiste Daroussin     "",
1310c8de5b0SBaptiste Daroussin     "    /* variables for the parser stack */",
1320c8de5b0SBaptiste Daroussin     "    YYSTACKDATA yystack;",
1330c8de5b0SBaptiste Daroussin     0
1340c8de5b0SBaptiste Daroussin };
1350c8de5b0SBaptiste Daroussin 
1360c8de5b0SBaptiste Daroussin const char *const body_1[] =
1370c8de5b0SBaptiste Daroussin {
1380c8de5b0SBaptiste Daroussin     "",
1390c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
1400c8de5b0SBaptiste Daroussin     "#include <stdio.h>	/* needed for printf */",
1410c8de5b0SBaptiste Daroussin     "#endif",
1420c8de5b0SBaptiste Daroussin     "",
1430c8de5b0SBaptiste Daroussin     "#include <stdlib.h>	/* needed for malloc, etc */",
1440c8de5b0SBaptiste Daroussin     "#include <string.h>	/* needed for memset */",
1450c8de5b0SBaptiste Daroussin     "",
1460c8de5b0SBaptiste Daroussin     "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
1470c8de5b0SBaptiste Daroussin     "static int yygrowstack(YYSTACKDATA *data)",
1480c8de5b0SBaptiste Daroussin     "{",
1490c8de5b0SBaptiste Daroussin     "    int i;",
1500c8de5b0SBaptiste Daroussin     "    unsigned newsize;",
1510c8de5b0SBaptiste Daroussin     "    YYINT *newss;",
1520c8de5b0SBaptiste Daroussin     "    YYSTYPE *newvs;",
1530c8de5b0SBaptiste Daroussin     "",
1540c8de5b0SBaptiste Daroussin     "    if ((newsize = data->stacksize) == 0)",
1550c8de5b0SBaptiste Daroussin     "        newsize = YYINITSTACKSIZE;",
1560c8de5b0SBaptiste Daroussin     "    else if (newsize >= YYMAXDEPTH)",
1570c8de5b0SBaptiste Daroussin     "        return YYENOMEM;",
1580c8de5b0SBaptiste Daroussin     "    else if ((newsize *= 2) > YYMAXDEPTH)",
1590c8de5b0SBaptiste Daroussin     "        newsize = YYMAXDEPTH;",
1600c8de5b0SBaptiste Daroussin     "",
1610c8de5b0SBaptiste Daroussin     "    i = (int) (data->s_mark - data->s_base);",
1620c8de5b0SBaptiste Daroussin     "    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));",
16380f31432SJung-uk Kim     "    if (newss == NULL)",
1640c8de5b0SBaptiste Daroussin     "        return YYENOMEM;",
1650c8de5b0SBaptiste Daroussin     "",
1660c8de5b0SBaptiste Daroussin     "    data->s_base = newss;",
1670c8de5b0SBaptiste Daroussin     "    data->s_mark = newss + i;",
1680c8de5b0SBaptiste Daroussin     "",
1690c8de5b0SBaptiste Daroussin     "    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));",
17080f31432SJung-uk Kim     "    if (newvs == NULL)",
1710c8de5b0SBaptiste Daroussin     "        return YYENOMEM;",
1720c8de5b0SBaptiste Daroussin     "",
1730c8de5b0SBaptiste Daroussin     "    data->l_base = newvs;",
1740c8de5b0SBaptiste Daroussin     "    data->l_mark = newvs + i;",
1750c8de5b0SBaptiste Daroussin     "",
1760c8de5b0SBaptiste Daroussin     "    data->stacksize = newsize;",
1770c8de5b0SBaptiste Daroussin     "    data->s_last = data->s_base + newsize - 1;",
1780c8de5b0SBaptiste Daroussin     "    return 0;",
1790c8de5b0SBaptiste Daroussin     "}",
1800c8de5b0SBaptiste Daroussin     "",
1810c8de5b0SBaptiste Daroussin     "#if YYPURE || defined(YY_NO_LEAKS)",
1820c8de5b0SBaptiste Daroussin     "static void yyfreestack(YYSTACKDATA *data)",
1830c8de5b0SBaptiste Daroussin     "{",
1840c8de5b0SBaptiste Daroussin     "    free(data->s_base);",
1850c8de5b0SBaptiste Daroussin     "    free(data->l_base);",
1860c8de5b0SBaptiste Daroussin     "    memset(data, 0, sizeof(*data));",
1870c8de5b0SBaptiste Daroussin     "}",
1880c8de5b0SBaptiste Daroussin     "#else",
1890c8de5b0SBaptiste Daroussin     "#define yyfreestack(data) /* nothing */",
1900c8de5b0SBaptiste Daroussin     "#endif",
1910c8de5b0SBaptiste Daroussin     "",
1920c8de5b0SBaptiste Daroussin     "#define YYABORT  goto yyabort",
1930c8de5b0SBaptiste Daroussin     "#define YYREJECT goto yyabort",
1940c8de5b0SBaptiste Daroussin     "#define YYACCEPT goto yyaccept",
1950c8de5b0SBaptiste Daroussin     "#define YYERROR  goto yyerrlab",
1960c8de5b0SBaptiste Daroussin     "",
1970c8de5b0SBaptiste Daroussin     "int",
1980c8de5b0SBaptiste Daroussin     "YYPARSE_DECL()",
1990c8de5b0SBaptiste Daroussin     "{",
2000c8de5b0SBaptiste Daroussin     0
2010c8de5b0SBaptiste Daroussin };
2020c8de5b0SBaptiste Daroussin 
2030c8de5b0SBaptiste Daroussin const char *const body_2[] =
2040c8de5b0SBaptiste Daroussin {
2050c8de5b0SBaptiste Daroussin     "    int yym, yyn, yystate;",
2060c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
2070c8de5b0SBaptiste Daroussin     "    const char *yys;",
2080c8de5b0SBaptiste Daroussin     "",
20980f31432SJung-uk Kim     "    if ((yys = getenv(\"YYDEBUG\")) != NULL)",
2100c8de5b0SBaptiste Daroussin     "    {",
2110c8de5b0SBaptiste Daroussin     "        yyn = *yys;",
2120c8de5b0SBaptiste Daroussin     "        if (yyn >= '0' && yyn <= '9')",
2130c8de5b0SBaptiste Daroussin     "            yydebug = yyn - '0';",
2140c8de5b0SBaptiste Daroussin     "    }",
2150c8de5b0SBaptiste Daroussin     "#endif",
2160c8de5b0SBaptiste Daroussin     "",
2172aca18c7SJung-uk Kim     0
2182aca18c7SJung-uk Kim };
2192aca18c7SJung-uk Kim 
2206166fdceSJung-uk Kim const char *const init_vars[] =
2216166fdceSJung-uk Kim {
2226166fdceSJung-uk Kim     "    memset(&yyval,  0, sizeof(yyval));",
2236166fdceSJung-uk Kim     "    memset(&yylval, 0, sizeof(yylval));",
2246166fdceSJung-uk Kim     "",
2256166fdceSJung-uk Kim     0
2266166fdceSJung-uk Kim };
2276166fdceSJung-uk Kim 
2282aca18c7SJung-uk Kim const char *const body_3[] =
2292aca18c7SJung-uk Kim {
230*8e022d3cSDag-Erling Smørgrav     "    /* yym is set below */",
231*8e022d3cSDag-Erling Smørgrav     "    /* yyn is set below */",
2320c8de5b0SBaptiste Daroussin     "    yynerrs = 0;",
2330c8de5b0SBaptiste Daroussin     "    yyerrflag = 0;",
2340c8de5b0SBaptiste Daroussin     "    yychar = YYEMPTY;",
2350c8de5b0SBaptiste Daroussin     "    yystate = 0;",
2360c8de5b0SBaptiste Daroussin     "",
2370c8de5b0SBaptiste Daroussin     "#if YYPURE",
2380c8de5b0SBaptiste Daroussin     "    memset(&yystack, 0, sizeof(yystack));",
2390c8de5b0SBaptiste Daroussin     "#endif",
2400c8de5b0SBaptiste Daroussin     "",
2410c8de5b0SBaptiste Daroussin     "    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
2420c8de5b0SBaptiste Daroussin     "    yystack.s_mark = yystack.s_base;",
2430c8de5b0SBaptiste Daroussin     "    yystack.l_mark = yystack.l_base;",
2440c8de5b0SBaptiste Daroussin     "    yystate = 0;",
2450c8de5b0SBaptiste Daroussin     "    *yystack.s_mark = 0;",
2460c8de5b0SBaptiste Daroussin     "",
2470c8de5b0SBaptiste Daroussin     "yyloop:",
2480c8de5b0SBaptiste Daroussin     "    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
2490c8de5b0SBaptiste Daroussin     "    if (yychar < 0)",
2500c8de5b0SBaptiste Daroussin     "    {",
251c5b5d71aSJung-uk Kim     "        yychar = YYLEX;",
252c5b5d71aSJung-uk Kim     "        if (yychar < 0) yychar = YYEOF;",
2530c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
2540c8de5b0SBaptiste Daroussin     "        if (yydebug)",
2550c8de5b0SBaptiste Daroussin     "        {",
256c5b5d71aSJung-uk Kim     "            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
2570c8de5b0SBaptiste Daroussin     "            printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
2580c8de5b0SBaptiste Daroussin     "                    YYPREFIX, yystate, yychar, yys);",
2590c8de5b0SBaptiste Daroussin     "        }",
2600c8de5b0SBaptiste Daroussin     "#endif",
2610c8de5b0SBaptiste Daroussin     "    }",
262c5b5d71aSJung-uk Kim     "    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
263c5b5d71aSJung-uk Kim     "            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
2640c8de5b0SBaptiste Daroussin     "    {",
2650c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
2660c8de5b0SBaptiste Daroussin     "        if (yydebug)",
2670c8de5b0SBaptiste Daroussin     "            printf(\"%sdebug: state %d, shifting to state %d\\n\",",
2680c8de5b0SBaptiste Daroussin     "                    YYPREFIX, yystate, yytable[yyn]);",
2690c8de5b0SBaptiste Daroussin     "#endif",
270c5b5d71aSJung-uk Kim     "        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
2710c8de5b0SBaptiste Daroussin     "        yystate = yytable[yyn];",
2720c8de5b0SBaptiste Daroussin     "        *++yystack.s_mark = yytable[yyn];",
2730c8de5b0SBaptiste Daroussin     "        *++yystack.l_mark = yylval;",
2740c8de5b0SBaptiste Daroussin     "        yychar = YYEMPTY;",
2750c8de5b0SBaptiste Daroussin     "        if (yyerrflag > 0)  --yyerrflag;",
2760c8de5b0SBaptiste Daroussin     "        goto yyloop;",
2770c8de5b0SBaptiste Daroussin     "    }",
278c5b5d71aSJung-uk Kim     "    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
279c5b5d71aSJung-uk Kim     "            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
2800c8de5b0SBaptiste Daroussin     "    {",
2810c8de5b0SBaptiste Daroussin     "        yyn = yytable[yyn];",
2820c8de5b0SBaptiste Daroussin     "        goto yyreduce;",
2830c8de5b0SBaptiste Daroussin     "    }",
284c5b5d71aSJung-uk Kim     "    if (yyerrflag != 0) goto yyinrecovery;",
2850c8de5b0SBaptiste Daroussin     "",
2860c8de5b0SBaptiste Daroussin     "    YYERROR_CALL(\"syntax error\");",
2870c8de5b0SBaptiste Daroussin     "",
288c5b5d71aSJung-uk Kim     "    goto yyerrlab; /* redundant goto avoids 'unused label' warning */",
2890c8de5b0SBaptiste Daroussin     "yyerrlab:",
2900c8de5b0SBaptiste Daroussin     "    ++yynerrs;",
2910c8de5b0SBaptiste Daroussin     "",
2920c8de5b0SBaptiste Daroussin     "yyinrecovery:",
2930c8de5b0SBaptiste Daroussin     "    if (yyerrflag < 3)",
2940c8de5b0SBaptiste Daroussin     "    {",
2950c8de5b0SBaptiste Daroussin     "        yyerrflag = 3;",
2960c8de5b0SBaptiste Daroussin     "        for (;;)",
2970c8de5b0SBaptiste Daroussin     "        {",
298c5b5d71aSJung-uk Kim     "            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&",
299c5b5d71aSJung-uk Kim     "                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)",
3000c8de5b0SBaptiste Daroussin     "            {",
3010c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3020c8de5b0SBaptiste Daroussin     "                if (yydebug)",
3030c8de5b0SBaptiste Daroussin     "                    printf(\"%sdebug: state %d, error recovery shifting\\",
3040c8de5b0SBaptiste Daroussin     " to state %d\\n\", YYPREFIX, *yystack.s_mark, yytable[yyn]);",
3050c8de5b0SBaptiste Daroussin     "#endif",
306c5b5d71aSJung-uk Kim     "                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
3070c8de5b0SBaptiste Daroussin     "                yystate = yytable[yyn];",
3080c8de5b0SBaptiste Daroussin     "                *++yystack.s_mark = yytable[yyn];",
3090c8de5b0SBaptiste Daroussin     "                *++yystack.l_mark = yylval;",
3100c8de5b0SBaptiste Daroussin     "                goto yyloop;",
3110c8de5b0SBaptiste Daroussin     "            }",
3120c8de5b0SBaptiste Daroussin     "            else",
3130c8de5b0SBaptiste Daroussin     "            {",
3140c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3150c8de5b0SBaptiste Daroussin     "                if (yydebug)",
3160c8de5b0SBaptiste Daroussin     "                    printf(\"%sdebug: error recovery discarding state %d\\n\",",
3170c8de5b0SBaptiste Daroussin     "                            YYPREFIX, *yystack.s_mark);",
3180c8de5b0SBaptiste Daroussin     "#endif",
3190c8de5b0SBaptiste Daroussin     "                if (yystack.s_mark <= yystack.s_base) goto yyabort;",
3200c8de5b0SBaptiste Daroussin     "                --yystack.s_mark;",
3210c8de5b0SBaptiste Daroussin     "                --yystack.l_mark;",
3220c8de5b0SBaptiste Daroussin     "            }",
3230c8de5b0SBaptiste Daroussin     "        }",
3240c8de5b0SBaptiste Daroussin     "    }",
3250c8de5b0SBaptiste Daroussin     "    else",
3260c8de5b0SBaptiste Daroussin     "    {",
3270c8de5b0SBaptiste Daroussin     "        if (yychar == YYEOF) goto yyabort;",
3280c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3290c8de5b0SBaptiste Daroussin     "        if (yydebug)",
3300c8de5b0SBaptiste Daroussin     "        {",
331c5b5d71aSJung-uk Kim     "            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
3320c8de5b0SBaptiste Daroussin     "            printf(\"%sdebug: state %d, error recovery discards token %d (%s)\\n\",",
3330c8de5b0SBaptiste Daroussin     "                    YYPREFIX, yystate, yychar, yys);",
3340c8de5b0SBaptiste Daroussin     "        }",
3350c8de5b0SBaptiste Daroussin     "#endif",
3360c8de5b0SBaptiste Daroussin     "        yychar = YYEMPTY;",
3370c8de5b0SBaptiste Daroussin     "        goto yyloop;",
3380c8de5b0SBaptiste Daroussin     "    }",
3390c8de5b0SBaptiste Daroussin     "",
3400c8de5b0SBaptiste Daroussin     "yyreduce:",
3410c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3420c8de5b0SBaptiste Daroussin     "    if (yydebug)",
3430c8de5b0SBaptiste Daroussin     "        printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
3440c8de5b0SBaptiste Daroussin     "                YYPREFIX, yystate, yyn, yyrule[yyn]);",
3450c8de5b0SBaptiste Daroussin     "#endif",
3460c8de5b0SBaptiste Daroussin     "    yym = yylen[yyn];",
347c5b5d71aSJung-uk Kim     "    if (yym > 0)",
3480c8de5b0SBaptiste Daroussin     "        yyval = yystack.l_mark[1-yym];",
3490c8de5b0SBaptiste Daroussin     "    else",
3500c8de5b0SBaptiste Daroussin     "        memset(&yyval, 0, sizeof yyval);",
351c5b5d71aSJung-uk Kim     "",
3520c8de5b0SBaptiste Daroussin     "    switch (yyn)",
3530c8de5b0SBaptiste Daroussin     "    {",
3540c8de5b0SBaptiste Daroussin     0
3550c8de5b0SBaptiste Daroussin };
3560c8de5b0SBaptiste Daroussin 
3570c8de5b0SBaptiste Daroussin const char *const trailer[] =
3580c8de5b0SBaptiste Daroussin {
3590c8de5b0SBaptiste Daroussin     "    }",
3600c8de5b0SBaptiste Daroussin     "    yystack.s_mark -= yym;",
3610c8de5b0SBaptiste Daroussin     "    yystate = *yystack.s_mark;",
3620c8de5b0SBaptiste Daroussin     "    yystack.l_mark -= yym;",
3630c8de5b0SBaptiste Daroussin     "    yym = yylhs[yyn];",
3640c8de5b0SBaptiste Daroussin     "    if (yystate == 0 && yym == 0)",
3650c8de5b0SBaptiste Daroussin     "    {",
3660c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3670c8de5b0SBaptiste Daroussin     "        if (yydebug)",
3680c8de5b0SBaptiste Daroussin     "            printf(\"%sdebug: after reduction, shifting from state 0 to\\",
3690c8de5b0SBaptiste Daroussin     " state %d\\n\", YYPREFIX, YYFINAL);",
3700c8de5b0SBaptiste Daroussin     "#endif",
3710c8de5b0SBaptiste Daroussin     "        yystate = YYFINAL;",
3720c8de5b0SBaptiste Daroussin     "        *++yystack.s_mark = YYFINAL;",
3730c8de5b0SBaptiste Daroussin     "        *++yystack.l_mark = yyval;",
3740c8de5b0SBaptiste Daroussin     "        if (yychar < 0)",
3750c8de5b0SBaptiste Daroussin     "        {",
376c5b5d71aSJung-uk Kim     "            yychar = YYLEX;",
377c5b5d71aSJung-uk Kim     "            if (yychar < 0) yychar = YYEOF;",
3780c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3790c8de5b0SBaptiste Daroussin     "            if (yydebug)",
3800c8de5b0SBaptiste Daroussin     "            {",
381c5b5d71aSJung-uk Kim     "                if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
3820c8de5b0SBaptiste Daroussin     "                printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
3830c8de5b0SBaptiste Daroussin     "                        YYPREFIX, YYFINAL, yychar, yys);",
3840c8de5b0SBaptiste Daroussin     "            }",
3850c8de5b0SBaptiste Daroussin     "#endif",
3860c8de5b0SBaptiste Daroussin     "        }",
3870c8de5b0SBaptiste Daroussin     "        if (yychar == YYEOF) goto yyaccept;",
3880c8de5b0SBaptiste Daroussin     "        goto yyloop;",
3890c8de5b0SBaptiste Daroussin     "    }",
390c5b5d71aSJung-uk Kim     "    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&",
391c5b5d71aSJung-uk Kim     "            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)",
3920c8de5b0SBaptiste Daroussin     "        yystate = yytable[yyn];",
3930c8de5b0SBaptiste Daroussin     "    else",
3940c8de5b0SBaptiste Daroussin     "        yystate = yydgoto[yym];",
3950c8de5b0SBaptiste Daroussin     "#if YYDEBUG",
3960c8de5b0SBaptiste Daroussin     "    if (yydebug)",
3970c8de5b0SBaptiste Daroussin     "        printf(\"%sdebug: after reduction, shifting from state %d \\",
3980c8de5b0SBaptiste Daroussin     "to state %d\\n\", YYPREFIX, *yystack.s_mark, yystate);",
3990c8de5b0SBaptiste Daroussin     "#endif",
400c5b5d71aSJung-uk Kim     "    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
4010c8de5b0SBaptiste Daroussin     "    *++yystack.s_mark = (YYINT) yystate;",
4020c8de5b0SBaptiste Daroussin     "    *++yystack.l_mark = yyval;",
4030c8de5b0SBaptiste Daroussin     "    goto yyloop;",
4040c8de5b0SBaptiste Daroussin     "",
4050c8de5b0SBaptiste Daroussin     "yyoverflow:",
4060c8de5b0SBaptiste Daroussin     "    YYERROR_CALL(\"yacc stack overflow\");",
4070c8de5b0SBaptiste Daroussin     "",
4080c8de5b0SBaptiste Daroussin     "yyabort:",
4090c8de5b0SBaptiste Daroussin     "    yyfreestack(&yystack);",
4100c8de5b0SBaptiste Daroussin     "    return (1);",
4110c8de5b0SBaptiste Daroussin     "",
4120c8de5b0SBaptiste Daroussin     "yyaccept:",
4130c8de5b0SBaptiste Daroussin     "    yyfreestack(&yystack);",
4140c8de5b0SBaptiste Daroussin     "    return (0);",
4150c8de5b0SBaptiste Daroussin     "}",
4160c8de5b0SBaptiste Daroussin     0
4170c8de5b0SBaptiste Daroussin };
4180c8de5b0SBaptiste Daroussin 
4190c8de5b0SBaptiste Daroussin void
write_section(FILE * fp,const char * const section[])4200c8de5b0SBaptiste Daroussin write_section(FILE * fp, const char *const section[])
4210c8de5b0SBaptiste Daroussin {
4220c8de5b0SBaptiste Daroussin     int i;
4230c8de5b0SBaptiste Daroussin     const char *s;
4240c8de5b0SBaptiste Daroussin 
4250c8de5b0SBaptiste Daroussin     for (i = 0; (s = section[i]) != 0; ++i)
4260c8de5b0SBaptiste Daroussin     {
4270c8de5b0SBaptiste Daroussin 	if (fp == code_file)
4280c8de5b0SBaptiste Daroussin 	    ++outline;
4290c8de5b0SBaptiste Daroussin 	fprintf(fp, "%s\n", s);
4300c8de5b0SBaptiste Daroussin     }
4310c8de5b0SBaptiste Daroussin }
432