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