xref: /freebsd/contrib/byacc/btyaccpar.c (revision 2e3f49888ec8851bafb22011533217487764fdb0)
1 /* This file generated automatically using
2  * @Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp @
3  */
4 
5 /* @Id: btyaccpar.skel,v 1.12 2021/06/19 20:46:31 tom Exp @ */
6 
7 #include "defs.h"
8 
9 /*  If the skeleton is changed, the banner should be changed so that	*/
10 /*  the altered version can be easily distinguished from the original.	*/
11 /*									*/
12 /*  The #defines included with the banner are there because they are	*/
13 /*  useful in subsequent code.  The macros #defined in the header or	*/
14 /*  the body either are not useful outside of semantic actions or	*/
15 /*  are conditional.							*/
16 
17 const char *const banner[] =
18 {
19     "/* original parser id follows */",
20     "/* yysccsid[] = \"@(#)yaccpar	1.9 (Berkeley) 02/21/93\" */",
21     "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */",
22     "",
23     "#define YYBYACC 1",
24     CONCAT1("#define YYMAJOR ", YYMAJOR),
25     CONCAT1("#define YYMINOR ", YYMINOR),
26 #ifdef YYPATCH
27     CONCAT1("#define YYPATCH ", YYPATCH),
28 #endif
29     "",
30     "#define YYEMPTY        (-1)",
31     "#define yyclearin      (yychar = YYEMPTY)",
32     "#define yyerrok        (yyerrflag = 0)",
33     "#define YYRECOVERING() (yyerrflag != 0)",
34     "#define YYENOMEM       (-2)",
35     "#define YYEOF          0",
36     0
37 };
38 
39 const char *const xdecls[] =
40 {
41     "",
42     "extern int YYPARSE_DECL();",
43     0
44 };
45 
46 const char *const tables[] =
47 {
48     "extern const YYINT yylhs[];",
49     "extern const YYINT yylen[];",
50     "extern const YYINT yydefred[];",
51     "extern const YYINT yystos[];",
52     "extern const YYINT yydgoto[];",
53     "extern const YYINT yysindex[];",
54     "extern const YYINT yyrindex[];",
55 #if defined(YYBTYACC)
56     "#if YYBTYACC",
57     "extern const YYINT yycindex[];",
58     "#endif /* YYBTYACC */",
59 #endif			/* defined(YYBTYACC) */
60     "extern const YYINT yygindex[];",
61     "extern const YYINT yytable[];",
62     "extern const YYINT yycheck[];",
63 #if defined(YYBTYACC)
64     "#if YYBTYACC",
65     "extern const YYINT yyctable[];",
66     "#endif /* YYBTYACC */",
67 #endif			/* defined(YYBTYACC) */
68     "",
69     "#if YYDEBUG || defined(yytname)",
70     "extern const char *const yyname[];",
71     "#endif",
72     "#if YYDEBUG",
73     "extern const char *const yyrule[];",
74     "#endif",
75     0
76 };
77 
78 const char *const global_vars[] =
79 {
80     "",
81     "#if YYDEBUG",
82     "int      yydebug;",
83     "#endif",
84     0
85 };
86 
87 const char *const impure_vars[] =
88 {
89     "",
90     "int      yyerrflag;",
91     "int      yychar;",
92     "YYSTYPE  yyval;",
93     "YYSTYPE  yylval;",
94     "int      yynerrs;",
95     "",
96     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
97     "YYLTYPE  yyloc; /* position returned by actions */",
98     "YYLTYPE  yylloc; /* position from the lexer */",
99     "#endif",
100     0
101 };
102 
103 const char *const hdr_defs[] =
104 {
105     "",
106     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
107     "#ifndef YYLLOC_DEFAULT",
108     "#define YYLLOC_DEFAULT(loc, rhs, n) \\",
109     "do \\",
110     "{ \\",
111     "    if (n == 0) \\",
112     "    { \\",
113     "        (loc).first_line   = YYRHSLOC(rhs, 0).last_line; \\",
114     "        (loc).first_column = YYRHSLOC(rhs, 0).last_column; \\",
115     "        (loc).last_line    = YYRHSLOC(rhs, 0).last_line; \\",
116     "        (loc).last_column  = YYRHSLOC(rhs, 0).last_column; \\",
117     "    } \\",
118     "    else \\",
119     "    { \\",
120     "        (loc).first_line   = YYRHSLOC(rhs, 1).first_line; \\",
121     "        (loc).first_column = YYRHSLOC(rhs, 1).first_column; \\",
122     "        (loc).last_line    = YYRHSLOC(rhs, n).last_line; \\",
123     "        (loc).last_column  = YYRHSLOC(rhs, n).last_column; \\",
124     "    } \\",
125     "} while (0)",
126     "#endif /* YYLLOC_DEFAULT */",
127     "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */",
128 #if defined(YYBTYACC)
129     "#if YYBTYACC",
130     "",
131     "#ifndef YYLVQUEUEGROWTH",
132     "#define YYLVQUEUEGROWTH 32",
133     "#endif",
134     "#endif /* YYBTYACC */",
135 #endif			/* defined(YYBTYACC) */
136     "",
137     "/* define the initial stack-sizes */",
138     "#ifdef YYSTACKSIZE",
139     "#undef YYMAXDEPTH",
140     "#define YYMAXDEPTH  YYSTACKSIZE",
141     "#else",
142     "#ifdef YYMAXDEPTH",
143     "#define YYSTACKSIZE YYMAXDEPTH",
144     "#else",
145     "#define YYSTACKSIZE 10000",
146     "#define YYMAXDEPTH  10000",
147     "#endif",
148     "#endif",
149     "",
150     "#ifndef YYINITSTACKSIZE",
151     "#define YYINITSTACKSIZE 200",
152     "#endif",
153     "",
154     "typedef struct {",
155     "    unsigned stacksize;",
156     "    YYINT    *s_base;",
157     "    YYINT    *s_mark;",
158     "    YYINT    *s_last;",
159     "    YYSTYPE  *l_base;",
160     "    YYSTYPE  *l_mark;",
161     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
162     "    YYLTYPE  *p_base;",
163     "    YYLTYPE  *p_mark;",
164     "#endif",
165     "} YYSTACKDATA;",
166 #if defined(YYBTYACC)
167     "#if YYBTYACC",
168     "",
169     "struct YYParseState_s",
170     "{",
171     "    struct YYParseState_s *save;    /* Previously saved parser state */",
172     "    YYSTACKDATA            yystack; /* saved parser stack */",
173     "    int                    state;   /* saved parser state */",
174     "    int                    errflag; /* saved error recovery status */",
175     "    int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */",
176     "    YYINT                  ctry;    /* saved index in yyctable[] for this conflict */",
177     "};",
178     "typedef struct YYParseState_s YYParseState;",
179     "#endif /* YYBTYACC */",
180 #endif			/* defined(YYBTYACC) */
181     0
182 };
183 
184 const char *const hdr_vars[] =
185 {
186     "/* variables for the parser stack */",
187     "static YYSTACKDATA yystack;",
188 #if defined(YYBTYACC)
189     "#if YYBTYACC",
190     "",
191     "/* Current parser state */",
192     "static YYParseState *yyps = 0;",
193     "",
194     "/* yypath != NULL: do the full parse, starting at *yypath parser state. */",
195     "static YYParseState *yypath = 0;",
196     "",
197     "/* Base of the lexical value queue */",
198     "static YYSTYPE *yylvals = 0;",
199     "",
200     "/* Current position at lexical value queue */",
201     "static YYSTYPE *yylvp = 0;",
202     "",
203     "/* End position of lexical value queue */",
204     "static YYSTYPE *yylve = 0;",
205     "",
206     "/* The last allocated position at the lexical value queue */",
207     "static YYSTYPE *yylvlim = 0;",
208     "",
209     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
210     "/* Base of the lexical position queue */",
211     "static YYLTYPE *yylpsns = 0;",
212     "",
213     "/* Current position at lexical position queue */",
214     "static YYLTYPE *yylpp = 0;",
215     "",
216     "/* End position of lexical position queue */",
217     "static YYLTYPE *yylpe = 0;",
218     "",
219     "/* The last allocated position at the lexical position queue */",
220     "static YYLTYPE *yylplim = 0;",
221     "#endif",
222     "",
223     "/* Current position at lexical token queue */",
224     "static YYINT  *yylexp = 0;",
225     "",
226     "static YYINT  *yylexemes = 0;",
227     "#endif /* YYBTYACC */",
228 #endif			/* defined(YYBTYACC) */
229     0
230 };
231 
232 const char *const body_vars[] =
233 {
234     "    int      yyerrflag;",
235     "    int      yychar;",
236     "    YYSTYPE  yyval;",
237     "    YYSTYPE  yylval;",
238     "    int      yynerrs;",
239     "",
240     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
241     "    YYLTYPE  yyloc; /* position returned by actions */",
242     "    YYLTYPE  yylloc; /* position from the lexer */",
243     "#endif",
244     "",
245     "    /* variables for the parser stack */",
246     "    YYSTACKDATA yystack;",
247 #if defined(YYBTYACC)
248     "#if YYBTYACC",
249     "",
250     "    /* Current parser state */",
251     "    static YYParseState *yyps = 0;",
252     "",
253     "    /* yypath != NULL: do the full parse, starting at *yypath parser state. */",
254     "    static YYParseState *yypath = 0;",
255     "",
256     "    /* Base of the lexical value queue */",
257     "    static YYSTYPE *yylvals = 0;",
258     "",
259     "    /* Current position at lexical value queue */",
260     "    static YYSTYPE *yylvp = 0;",
261     "",
262     "    /* End position of lexical value queue */",
263     "    static YYSTYPE *yylve = 0;",
264     "",
265     "    /* The last allocated position at the lexical value queue */",
266     "    static YYSTYPE *yylvlim = 0;",
267     "",
268     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
269     "    /* Base of the lexical position queue */",
270     "    static YYLTYPE *yylpsns = 0;",
271     "",
272     "    /* Current position at lexical position queue */",
273     "    static YYLTYPE *yylpp = 0;",
274     "",
275     "    /* End position of lexical position queue */",
276     "    static YYLTYPE *yylpe = 0;",
277     "",
278     "    /* The last allocated position at the lexical position queue */",
279     "    static YYLTYPE *yylplim = 0;",
280     "#endif",
281     "",
282     "    /* Current position at lexical token queue */",
283     "    static YYINT  *yylexp = 0;",
284     "",
285     "    static YYINT  *yylexemes = 0;",
286     "#endif /* YYBTYACC */",
287 #endif			/* defined(YYBTYACC) */
288     0
289 };
290 
291 const char *const body_1[] =
292 {
293     "",
294     "/* For use in generated program */",
295     "#define yydepth (int)(yystack.s_mark - yystack.s_base)",
296 #if defined(YYBTYACC)
297     "#if YYBTYACC",
298     "#define yytrial (yyps->save)",
299     "#endif /* YYBTYACC */",
300 #endif			/* defined(YYBTYACC) */
301     "",
302     "#if YYDEBUG",
303     "#include <stdio.h>	/* needed for printf */",
304     "#endif",
305     "",
306     "#include <stdlib.h>	/* needed for malloc, etc */",
307     "#include <string.h>	/* needed for memset */",
308     "",
309     "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
310     "static int yygrowstack(YYSTACKDATA *data)",
311     "{",
312     "    int i;",
313     "    unsigned newsize;",
314     "    YYINT *newss;",
315     "    YYSTYPE *newvs;",
316     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
317     "    YYLTYPE *newps;",
318     "#endif",
319     "",
320     "    if ((newsize = data->stacksize) == 0)",
321     "        newsize = YYINITSTACKSIZE;",
322     "    else if (newsize >= YYMAXDEPTH)",
323     "        return YYENOMEM;",
324     "    else if ((newsize *= 2) > YYMAXDEPTH)",
325     "        newsize = YYMAXDEPTH;",
326     "",
327     "    i = (int) (data->s_mark - data->s_base);",
328     "    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));",
329     "    if (newss == NULL)",
330     "        return YYENOMEM;",
331     "",
332     "    data->s_base = newss;",
333     "    data->s_mark = newss + i;",
334     "",
335     "    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));",
336     "    if (newvs == NULL)",
337     "        return YYENOMEM;",
338     "",
339     "    data->l_base = newvs;",
340     "    data->l_mark = newvs + i;",
341     "",
342     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
343     "    newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));",
344     "    if (newps == NULL)",
345     "        return YYENOMEM;",
346     "",
347     "    data->p_base = newps;",
348     "    data->p_mark = newps + i;",
349     "#endif",
350     "",
351     "    data->stacksize = newsize;",
352     "    data->s_last = data->s_base + newsize - 1;",
353     "",
354     "#if YYDEBUG",
355     "    if (yydebug)",
356     "        fprintf(stderr, \"%sdebug: stack size increased to %d\\n\", YYPREFIX, newsize);",
357     "#endif",
358     "    return 0;",
359     "}",
360     "",
361     "#if YYPURE || defined(YY_NO_LEAKS)",
362     "static void yyfreestack(YYSTACKDATA *data)",
363     "{",
364     "    free(data->s_base);",
365     "    free(data->l_base);",
366     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
367     "    free(data->p_base);",
368     "#endif",
369     "    memset(data, 0, sizeof(*data));",
370     "}",
371     "#else",
372     "#define yyfreestack(data) /* nothing */",
373     "#endif /* YYPURE || defined(YY_NO_LEAKS) */",
374 #if defined(YYBTYACC)
375     "#if YYBTYACC",
376     "",
377     "static YYParseState *",
378     "yyNewState(unsigned size)",
379     "{",
380     "    YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));",
381     "    if (p == NULL) return NULL;",
382     "",
383     "    p->yystack.stacksize = size;",
384     "    if (size == 0)",
385     "    {",
386     "        p->yystack.s_base = NULL;",
387     "        p->yystack.l_base = NULL;",
388     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
389     "        p->yystack.p_base = NULL;",
390     "#endif",
391     "        return p;",
392     "    }",
393     "    p->yystack.s_base    = (YYINT *) malloc(size * sizeof(YYINT));",
394     "    if (p->yystack.s_base == NULL) return NULL;",
395     "    p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));",
396     "    if (p->yystack.l_base == NULL) return NULL;",
397     "    memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));",
398     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
399     "    p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));",
400     "    if (p->yystack.p_base == NULL) return NULL;",
401     "    memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));",
402     "#endif",
403     "",
404     "    return p;",
405     "}",
406     "",
407     "static void",
408     "yyFreeState(YYParseState *p)",
409     "{",
410     "    yyfreestack(&p->yystack);",
411     "    free(p);",
412     "}",
413     "#endif /* YYBTYACC */",
414 #endif			/* defined(YYBTYACC) */
415     "",
416     "#define YYABORT  goto yyabort",
417     "#define YYREJECT goto yyabort",
418     "#define YYACCEPT goto yyaccept",
419     "#define YYERROR  goto yyerrlab",
420 #if defined(YYBTYACC)
421     "#if YYBTYACC",
422     "#define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)",
423     "#define YYVALID_NESTED do { if (yyps->save && \\",
424     "                                yyps->save->save == 0) goto yyvalid; } while(0)",
425     "#endif /* YYBTYACC */",
426 #endif			/* defined(YYBTYACC) */
427     "",
428     "int",
429     "YYPARSE_DECL()",
430     "{",
431     0
432 };
433 
434 const char *const body_2[] =
435 {
436     "    int yym, yyn, yystate, yyresult;",
437 #if defined(YYBTYACC)
438     "#if YYBTYACC",
439     "    int yynewerrflag;",
440     "    YYParseState *yyerrctx = NULL;",
441     "#endif /* YYBTYACC */",
442 #endif			/* defined(YYBTYACC) */
443     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
444     "    YYLTYPE  yyerror_loc_range[3]; /* position of error start/end (0 unused) */",
445     "#endif",
446     "#if YYDEBUG",
447     "    const char *yys;",
448     "",
449     "    if ((yys = getenv(\"YYDEBUG\")) != NULL)",
450     "    {",
451     "        yyn = *yys;",
452     "        if (yyn >= '0' && yyn <= '9')",
453     "            yydebug = yyn - '0';",
454     "    }",
455     "    if (yydebug)",
456     "        fprintf(stderr, \"%sdebug[<# of symbols on state stack>]\\n\", YYPREFIX);",
457     "#endif",
458     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
459     "    memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));",
460     "#endif",
461     "",
462     0
463 };
464 
465 const char *const init_vars[] =
466 {
467     "    yyerrflag = 0;",
468     "    yychar = 0;",
469     "    memset(&yyval,  0, sizeof(yyval));",
470     "    memset(&yylval, 0, sizeof(yylval));",
471     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
472     "    memset(&yyloc,  0, sizeof(yyloc));",
473     "    memset(&yylloc, 0, sizeof(yylloc));",
474     "#endif",
475     "",
476     0
477 };
478 
479 const char *const body_3[] =
480 {
481 #if defined(YYBTYACC)
482     "#if YYBTYACC",
483     "    yyps = yyNewState(0); if (yyps == 0) goto yyenomem;",
484     "    yyps->save = 0;",
485     "#endif /* YYBTYACC */",
486 #endif			/* defined(YYBTYACC) */
487     "    yym = 0;",
488     "    /* yyn is set below */",
489     "    yynerrs = 0;",
490     "    yyerrflag = 0;",
491     "    yychar = YYEMPTY;",
492     "    yystate = 0;",
493     "",
494     "#if YYPURE",
495     "    memset(&yystack, 0, sizeof(yystack));",
496     "#endif",
497     "",
498     "    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
499     "    yystack.s_mark = yystack.s_base;",
500     "    yystack.l_mark = yystack.l_base;",
501     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
502     "    yystack.p_mark = yystack.p_base;",
503     "#endif",
504     "    yystate = 0;",
505     "    *yystack.s_mark = 0;",
506     "",
507     "yyloop:",
508     "    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;",
509     "    if (yychar < 0)",
510     "    {",
511 #if defined(YYBTYACC)
512     "#if YYBTYACC",
513     "        do {",
514     "        if (yylvp < yylve)",
515     "        {",
516     "            /* we're currently re-reading tokens */",
517     "            yylval = *yylvp++;",
518     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
519     "            yylloc = *yylpp++;",
520     "#endif",
521     "            yychar = *yylexp++;",
522     "            break;",
523     "        }",
524     "        if (yyps->save)",
525     "        {",
526     "            /* in trial mode; save scanner results for future parse attempts */",
527     "            if (yylvp == yylvlim)",
528     "            {   /* Enlarge lexical value queue */",
529     "                size_t p = (size_t) (yylvp - yylvals);",
530     "                size_t s = (size_t) (yylvlim - yylvals);",
531     "",
532     "                s += YYLVQUEUEGROWTH;",
533     "                if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;",
534     "                if ((yylvals   = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;",
535     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
536     "                if ((yylpsns   = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;",
537     "#endif",
538     "                yylvp   = yylve = yylvals + p;",
539     "                yylvlim = yylvals + s;",
540     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
541     "                yylpp   = yylpe = yylpsns + p;",
542     "                yylplim = yylpsns + s;",
543     "#endif",
544     "                yylexp  = yylexemes + p;",
545     "            }",
546     "            *yylexp = (YYINT) YYLEX;",
547     "            *yylvp++ = yylval;",
548     "            yylve++;",
549     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
550     "            *yylpp++ = yylloc;",
551     "            yylpe++;",
552     "#endif",
553     "            yychar = *yylexp++;",
554     "            break;",
555     "        }",
556     "        /* normal operation, no conflict encountered */",
557     "#endif /* YYBTYACC */",
558 #endif			/* defined(YYBTYACC) */
559     "        yychar = YYLEX;",
560 #if defined(YYBTYACC)
561     "#if YYBTYACC",
562     "        } while (0);",
563     "#endif /* YYBTYACC */",
564 #endif			/* defined(YYBTYACC) */
565     "        if (yychar < 0) yychar = YYEOF;",
566     "#if YYDEBUG",
567     "        if (yydebug)",
568     "        {",
569     "            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
570     "            fprintf(stderr, \"%s[%d]: state %d, reading token %d (%s)\",",
571     "                            YYDEBUGSTR, yydepth, yystate, yychar, yys);",
572     "#ifdef YYSTYPE_TOSTRING",
573 #if defined(YYBTYACC)
574     "#if YYBTYACC",
575     "            if (!yytrial)",
576     "#endif /* YYBTYACC */",
577 #endif			/* defined(YYBTYACC) */
578     "                fprintf(stderr, \" <%s>\", YYSTYPE_TOSTRING(yychar, yylval));",
579     "#endif",
580     "            fputc('\\n', stderr);",
581     "        }",
582     "#endif",
583     "    }",
584 #if defined(YYBTYACC)
585     "#if YYBTYACC",
586     "",
587     "    /* Do we have a conflict? */",
588     "    if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
589     "        yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
590     "    {",
591     "        YYINT ctry;",
592     "",
593     "        if (yypath)",
594     "        {",
595     "            YYParseState *save;",
596     "#if YYDEBUG",
597     "            if (yydebug)",
598     "                fprintf(stderr, \"%s[%d]: CONFLICT in state %d: following successful trial parse\\n\",",
599     "                                YYDEBUGSTR, yydepth, yystate);",
600     "#endif",
601     "            /* Switch to the next conflict context */",
602     "            save = yypath;",
603     "            yypath = save->save;",
604     "            save->save = NULL;",
605     "            ctry = save->ctry;",
606     "            if (save->state != yystate) YYABORT;",
607     "            yyFreeState(save);",
608     "",
609     "        }",
610     "        else",
611     "        {",
612     "",
613     "            /* Unresolved conflict - start/continue trial parse */",
614     "            YYParseState *save;",
615     "#if YYDEBUG",
616     "            if (yydebug)",
617     "            {",
618     "                fprintf(stderr, \"%s[%d]: CONFLICT in state %d. \", YYDEBUGSTR, yydepth, yystate);",
619     "                if (yyps->save)",
620     "                    fputs(\"ALREADY in conflict, continuing trial parse.\\n\", stderr);",
621     "                else",
622     "                    fputs(\"Starting trial parse.\\n\", stderr);",
623     "            }",
624     "#endif",
625     "            save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));",
626     "            if (save == NULL) goto yyenomem;",
627     "            save->save            = yyps->save;",
628     "            save->state           = yystate;",
629     "            save->errflag         = yyerrflag;",
630     "            save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);",
631     "            memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));",
632     "            save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);",
633     "            memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));",
634     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
635     "            save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);",
636     "            memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));",
637     "#endif",
638     "            ctry                  = yytable[yyn];",
639     "            if (yyctable[ctry] == -1)",
640     "            {",
641     "#if YYDEBUG",
642     "                if (yydebug && yychar >= YYEOF)",
643     "                    fprintf(stderr, \"%s[%d]: backtracking 1 token\\n\", YYDEBUGSTR, yydepth);",
644     "#endif",
645     "                ctry++;",
646     "            }",
647     "            save->ctry = ctry;",
648     "            if (yyps->save == NULL)",
649     "            {",
650     "                /* If this is a first conflict in the stack, start saving lexemes */",
651     "                if (!yylexemes)",
652     "                {",
653     "                    yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));",
654     "                    if (yylexemes == NULL) goto yyenomem;",
655     "                    yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));",
656     "                    if (yylvals == NULL) goto yyenomem;",
657     "                    yylvlim   = yylvals + YYLVQUEUEGROWTH;",
658     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
659     "                    yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));",
660     "                    if (yylpsns == NULL) goto yyenomem;",
661     "                    yylplim   = yylpsns + YYLVQUEUEGROWTH;",
662     "#endif",
663     "                }",
664     "                if (yylvp == yylve)",
665     "                {",
666     "                    yylvp  = yylve = yylvals;",
667     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
668     "                    yylpp  = yylpe = yylpsns;",
669     "#endif",
670     "                    yylexp = yylexemes;",
671     "                    if (yychar >= YYEOF)",
672     "                    {",
673     "                        *yylve++ = yylval;",
674     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
675     "                        *yylpe++ = yylloc;",
676     "#endif",
677     "                        *yylexp  = (YYINT) yychar;",
678     "                        yychar   = YYEMPTY;",
679     "                    }",
680     "                }",
681     "            }",
682     "            if (yychar >= YYEOF)",
683     "            {",
684     "                yylvp--;",
685     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
686     "                yylpp--;",
687     "#endif",
688     "                yylexp--;",
689     "                yychar = YYEMPTY;",
690     "            }",
691     "            save->lexeme = (int) (yylvp - yylvals);",
692     "            yyps->save   = save;",
693     "        }",
694     "        if (yytable[yyn] == ctry)",
695     "        {",
696     "#if YYDEBUG",
697     "            if (yydebug)",
698     "                fprintf(stderr, \"%s[%d]: state %d, shifting to state %d\\n\",",
699     "                                YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);",
700     "#endif",
701     "            if (yychar < 0)",
702     "            {",
703     "                yylvp++;",
704     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
705     "                yylpp++;",
706     "#endif",
707     "                yylexp++;",
708     "            }",
709     "            if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)",
710     "                goto yyoverflow;",
711     "            yystate = yyctable[ctry];",
712     "            *++yystack.s_mark = (YYINT) yystate;",
713     "            *++yystack.l_mark = yylval;",
714     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
715     "            *++yystack.p_mark = yylloc;",
716     "#endif",
717     "            yychar  = YYEMPTY;",
718     "            if (yyerrflag > 0) --yyerrflag;",
719     "            goto yyloop;",
720     "        }",
721     "        else",
722     "        {",
723     "            yyn = yyctable[ctry];",
724     "            goto yyreduce;",
725     "        }",
726     "    } /* End of code dealing with conflicts */",
727     "#endif /* YYBTYACC */",
728 #endif			/* defined(YYBTYACC) */
729     "    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
730     "            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
731     "    {",
732     "#if YYDEBUG",
733     "        if (yydebug)",
734     "            fprintf(stderr, \"%s[%d]: state %d, shifting to state %d\\n\",",
735     "                            YYDEBUGSTR, yydepth, yystate, yytable[yyn]);",
736     "#endif",
737     "        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
738     "        yystate = yytable[yyn];",
739     "        *++yystack.s_mark = yytable[yyn];",
740     "        *++yystack.l_mark = yylval;",
741     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
742     "        *++yystack.p_mark = yylloc;",
743     "#endif",
744     "        yychar = YYEMPTY;",
745     "        if (yyerrflag > 0)  --yyerrflag;",
746     "        goto yyloop;",
747     "    }",
748     "    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&",
749     "            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)",
750     "    {",
751     "        yyn = yytable[yyn];",
752     "        goto yyreduce;",
753     "    }",
754     "    if (yyerrflag != 0) goto yyinrecovery;",
755 #if defined(YYBTYACC)
756     "#if YYBTYACC",
757     "",
758     "    yynewerrflag = 1;",
759     "    goto yyerrhandler;",
760     "    goto yyerrlab; /* redundant goto avoids 'unused label' warning */",
761     "",
762     "yyerrlab:",
763     "    /* explicit YYERROR from an action -- pop the rhs of the rule reduced",
764     "     * before looking for error recovery */",
765     "    yystack.s_mark -= yym;",
766     "    yystate = *yystack.s_mark;",
767     "    yystack.l_mark -= yym;",
768     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
769     "    yystack.p_mark -= yym;",
770     "#endif",
771     "",
772     "    yynewerrflag = 0;",
773     "yyerrhandler:",
774     "    while (yyps->save)",
775     "    {",
776     "        int ctry;",
777     "        YYParseState *save = yyps->save;",
778     "#if YYDEBUG",
779     "        if (yydebug)",
780     "            fprintf(stderr, \"%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\\n\",",
781     "                            YYDEBUGSTR, yydepth, yystate, yyps->save->state,",
782     "                    (int)(yylvp - yylvals - yyps->save->lexeme));",
783     "#endif",
784     "        /* Memorize most forward-looking error state in case it's really an error. */",
785     "        if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)",
786     "        {",
787     "            /* Free old saved error context state */",
788     "            if (yyerrctx) yyFreeState(yyerrctx);",
789     "            /* Create and fill out new saved error context state */",
790     "            yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));",
791     "            if (yyerrctx == NULL) goto yyenomem;",
792     "            yyerrctx->save           = yyps->save;",
793     "            yyerrctx->state          = yystate;",
794     "            yyerrctx->errflag        = yyerrflag;",
795     "            yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);",
796     "            memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));",
797     "            yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);",
798     "            memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));",
799     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
800     "            yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);",
801     "            memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));",
802     "#endif",
803     "            yyerrctx->lexeme         = (int) (yylvp - yylvals);",
804     "        }",
805     "        yylvp          = yylvals   + save->lexeme;",
806     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
807     "        yylpp          = yylpsns   + save->lexeme;",
808     "#endif",
809     "        yylexp         = yylexemes + save->lexeme;",
810     "        yychar         = YYEMPTY;",
811     "        yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);",
812     "        memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));",
813     "        yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);",
814     "        memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));",
815     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
816     "        yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);",
817     "        memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));",
818     "#endif",
819     "        ctry           = ++save->ctry;",
820     "        yystate        = save->state;",
821     "        /* We tried shift, try reduce now */",
822     "        if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;",
823     "        yyps->save     = save->save;",
824     "        save->save     = NULL;",
825     "        yyFreeState(save);",
826     "",
827     "        /* Nothing left on the stack -- error */",
828     "        if (!yyps->save)",
829     "        {",
830     "#if YYDEBUG",
831     "            if (yydebug)",
832     "                fprintf(stderr, \"%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\\n\",",
833     "                                YYPREFIX, yydepth);",
834     "#endif",
835     "            /* Restore state as it was in the most forward-advanced error */",
836     "            yylvp          = yylvals   + yyerrctx->lexeme;",
837     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
838     "            yylpp          = yylpsns   + yyerrctx->lexeme;",
839     "#endif",
840     "            yylexp         = yylexemes + yyerrctx->lexeme;",
841     "            yychar         = yylexp[-1];",
842     "            yylval         = yylvp[-1];",
843     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
844     "            yylloc         = yylpp[-1];",
845     "#endif",
846     "            yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);",
847     "            memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));",
848     "            yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);",
849     "            memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));",
850     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
851     "            yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);",
852     "            memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));",
853     "#endif",
854     "            yystate        = yyerrctx->state;",
855     "            yyFreeState(yyerrctx);",
856     "            yyerrctx       = NULL;",
857     "        }",
858     "        yynewerrflag = 1;",
859     "    }",
860     "    if (yynewerrflag == 0) goto yyinrecovery;",
861     "#endif /* YYBTYACC */",
862 #endif			/* defined(YYBTYACC) */
863     "",
864     "    YYERROR_CALL(\"syntax error\");",
865     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
866     "    yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */",
867     "#endif",
868     "",
869     "#if !YYBTYACC",
870     "    goto yyerrlab; /* redundant goto avoids 'unused label' warning */",
871     "yyerrlab:",
872     "#endif",
873     "    ++yynerrs;",
874     "",
875     "yyinrecovery:",
876     "    if (yyerrflag < 3)",
877     "    {",
878     "        yyerrflag = 3;",
879     "        for (;;)",
880     "        {",
881     "            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&",
882     "                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)",
883     "            {",
884     "#if YYDEBUG",
885     "                if (yydebug)",
886     "                    fprintf(stderr, \"%s[%d]: state %d, error recovery shifting to state %d\\n\",",
887     "                                    YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);",
888     "#endif",
889     "                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
890     "                yystate = yytable[yyn];",
891     "                *++yystack.s_mark = yytable[yyn];",
892     "                *++yystack.l_mark = yylval;",
893     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
894     "                /* lookahead position is error end position */",
895     "                yyerror_loc_range[2] = yylloc;",
896     "                YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */",
897     "                *++yystack.p_mark = yyloc;",
898     "#endif",
899     "                goto yyloop;",
900     "            }",
901     "            else",
902     "            {",
903     "#if YYDEBUG",
904     "                if (yydebug)",
905     "                    fprintf(stderr, \"%s[%d]: error recovery discarding state %d\\n\",",
906     "                                    YYDEBUGSTR, yydepth, *yystack.s_mark);",
907     "#endif",
908     "                if (yystack.s_mark <= yystack.s_base) goto yyabort;",
909     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
910     "                /* the current TOS position is the error start position */",
911     "                yyerror_loc_range[1] = *yystack.p_mark;",
912     "#endif",
913     "#if defined(YYDESTRUCT_CALL)",
914 #if defined(YYBTYACC)
915     "#if YYBTYACC",
916     "                if (!yytrial)",
917     "#endif /* YYBTYACC */",
918 #endif			/* defined(YYBTYACC) */
919     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
920     "                    YYDESTRUCT_CALL(\"error: discarding state\",",
921     "                                    yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);",
922     "#else",
923     "                    YYDESTRUCT_CALL(\"error: discarding state\",",
924     "                                    yystos[*yystack.s_mark], yystack.l_mark);",
925     "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */",
926     "#endif /* defined(YYDESTRUCT_CALL) */",
927     "                --yystack.s_mark;",
928     "                --yystack.l_mark;",
929     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
930     "                --yystack.p_mark;",
931     "#endif",
932     "            }",
933     "        }",
934     "    }",
935     "    else",
936     "    {",
937     "        if (yychar == YYEOF) goto yyabort;",
938     "#if YYDEBUG",
939     "        if (yydebug)",
940     "        {",
941     "            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
942     "            fprintf(stderr, \"%s[%d]: state %d, error recovery discarding token %d (%s)\\n\",",
943     "                            YYDEBUGSTR, yydepth, yystate, yychar, yys);",
944     "        }",
945     "#endif",
946     "#if defined(YYDESTRUCT_CALL)",
947 #if defined(YYBTYACC)
948     "#if YYBTYACC",
949     "        if (!yytrial)",
950     "#endif /* YYBTYACC */",
951 #endif			/* defined(YYBTYACC) */
952     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
953     "            YYDESTRUCT_CALL(\"error: discarding token\", yychar, &yylval, &yylloc);",
954     "#else",
955     "            YYDESTRUCT_CALL(\"error: discarding token\", yychar, &yylval);",
956     "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */",
957     "#endif /* defined(YYDESTRUCT_CALL) */",
958     "        yychar = YYEMPTY;",
959     "        goto yyloop;",
960     "    }",
961     "",
962     "yyreduce:",
963     "    yym = yylen[yyn];",
964     "#if YYDEBUG",
965     "    if (yydebug)",
966     "    {",
967     "        fprintf(stderr, \"%s[%d]: state %d, reducing by rule %d (%s)\",",
968     "                        YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);",
969     "#ifdef YYSTYPE_TOSTRING",
970 #if defined(YYBTYACC)
971     "#if YYBTYACC",
972     "        if (!yytrial)",
973     "#endif /* YYBTYACC */",
974 #endif			/* defined(YYBTYACC) */
975     "            if (yym > 0)",
976     "            {",
977     "                int i;",
978     "                fputc('<', stderr);",
979     "                for (i = yym; i > 0; i--)",
980     "                {",
981     "                    if (i != yym) fputs(\", \", stderr);",
982     "                    fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],",
983     "                                           yystack.l_mark[1-i]), stderr);",
984     "                }",
985     "                fputc('>', stderr);",
986     "            }",
987     "#endif",
988     "        fputc('\\n', stderr);",
989     "    }",
990     "#endif",
991     "    if (yym > 0)",
992     "        yyval = yystack.l_mark[1-yym];",
993     "    else",
994     "        memset(&yyval, 0, sizeof yyval);",
995     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
996     "",
997     "    /* Perform position reduction */",
998     "    memset(&yyloc, 0, sizeof(yyloc));",
999 #if defined(YYBTYACC)
1000     "#if YYBTYACC",
1001     "    if (!yytrial)",
1002     "#endif /* YYBTYACC */",
1003 #endif			/* defined(YYBTYACC) */
1004     "    {",
1005     "        YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);",
1006     "        /* just in case YYERROR is invoked within the action, save",
1007     "           the start of the rhs as the error start position */",
1008     "        yyerror_loc_range[1] = yystack.p_mark[1-yym];",
1009     "    }",
1010     "#endif",
1011     "",
1012     "    switch (yyn)",
1013     "    {",
1014     0
1015 };
1016 
1017 const char *const trailer[] =
1018 {
1019     "    default:",
1020     "        break;",
1021     "    }",
1022     "    yystack.s_mark -= yym;",
1023     "    yystate = *yystack.s_mark;",
1024     "    yystack.l_mark -= yym;",
1025     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1026     "    yystack.p_mark -= yym;",
1027     "#endif",
1028     "    yym = yylhs[yyn];",
1029     "    if (yystate == 0 && yym == 0)",
1030     "    {",
1031     "#if YYDEBUG",
1032     "        if (yydebug)",
1033     "        {",
1034     "            fprintf(stderr, \"%s[%d]: after reduction, \", YYDEBUGSTR, yydepth);",
1035     "#ifdef YYSTYPE_TOSTRING",
1036 #if defined(YYBTYACC)
1037     "#if YYBTYACC",
1038     "            if (!yytrial)",
1039     "#endif /* YYBTYACC */",
1040 #endif			/* defined(YYBTYACC) */
1041     "                fprintf(stderr, \"result is <%s>, \", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));",
1042     "#endif",
1043     "            fprintf(stderr, \"shifting from state 0 to final state %d\\n\", YYFINAL);",
1044     "        }",
1045     "#endif",
1046     "        yystate = YYFINAL;",
1047     "        *++yystack.s_mark = YYFINAL;",
1048     "        *++yystack.l_mark = yyval;",
1049     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1050     "        *++yystack.p_mark = yyloc;",
1051     "#endif",
1052     "        if (yychar < 0)",
1053     "        {",
1054 #if defined(YYBTYACC)
1055     "#if YYBTYACC",
1056     "            do {",
1057     "            if (yylvp < yylve)",
1058     "            {",
1059     "                /* we're currently re-reading tokens */",
1060     "                yylval = *yylvp++;",
1061     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1062     "                yylloc = *yylpp++;",
1063     "#endif",
1064     "                yychar = *yylexp++;",
1065     "                break;",
1066     "            }",
1067     "            if (yyps->save)",
1068     "            {",
1069     "                /* in trial mode; save scanner results for future parse attempts */",
1070     "                if (yylvp == yylvlim)",
1071     "                {   /* Enlarge lexical value queue */",
1072     "                    size_t p = (size_t) (yylvp - yylvals);",
1073     "                    size_t s = (size_t) (yylvlim - yylvals);",
1074     "",
1075     "                    s += YYLVQUEUEGROWTH;",
1076     "                    if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)",
1077     "                        goto yyenomem;",
1078     "                    if ((yylvals   = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)",
1079     "                        goto yyenomem;",
1080     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1081     "                    if ((yylpsns   = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)",
1082     "                        goto yyenomem;",
1083     "#endif",
1084     "                    yylvp   = yylve = yylvals + p;",
1085     "                    yylvlim = yylvals + s;",
1086     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1087     "                    yylpp   = yylpe = yylpsns + p;",
1088     "                    yylplim = yylpsns + s;",
1089     "#endif",
1090     "                    yylexp  = yylexemes + p;",
1091     "                }",
1092     "                *yylexp = (YYINT) YYLEX;",
1093     "                *yylvp++ = yylval;",
1094     "                yylve++;",
1095     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1096     "                *yylpp++ = yylloc;",
1097     "                yylpe++;",
1098     "#endif",
1099     "                yychar = *yylexp++;",
1100     "                break;",
1101     "            }",
1102     "            /* normal operation, no conflict encountered */",
1103     "#endif /* YYBTYACC */",
1104 #endif			/* defined(YYBTYACC) */
1105     "            yychar = YYLEX;",
1106 #if defined(YYBTYACC)
1107     "#if YYBTYACC",
1108     "            } while (0);",
1109     "#endif /* YYBTYACC */",
1110 #endif			/* defined(YYBTYACC) */
1111     "            if (yychar < 0) yychar = YYEOF;",
1112     "#if YYDEBUG",
1113     "            if (yydebug)",
1114     "            {",
1115     "                if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];",
1116     "                fprintf(stderr, \"%s[%d]: state %d, reading token %d (%s)\\n\",",
1117     "                                YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);",
1118     "            }",
1119     "#endif",
1120     "        }",
1121     "        if (yychar == YYEOF) goto yyaccept;",
1122     "        goto yyloop;",
1123     "    }",
1124     "    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&",
1125     "            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)",
1126     "        yystate = yytable[yyn];",
1127     "    else",
1128     "        yystate = yydgoto[yym];",
1129     "#if YYDEBUG",
1130     "    if (yydebug)",
1131     "    {",
1132     "        fprintf(stderr, \"%s[%d]: after reduction, \", YYDEBUGSTR, yydepth);",
1133     "#ifdef YYSTYPE_TOSTRING",
1134 #if defined(YYBTYACC)
1135     "#if YYBTYACC",
1136     "        if (!yytrial)",
1137     "#endif /* YYBTYACC */",
1138 #endif			/* defined(YYBTYACC) */
1139     "            fprintf(stderr, \"result is <%s>, \", YYSTYPE_TOSTRING(yystos[yystate], yyval));",
1140     "#endif",
1141     "        fprintf(stderr, \"shifting from state %d to state %d\\n\", *yystack.s_mark, yystate);",
1142     "    }",
1143     "#endif",
1144     "    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;",
1145     "    *++yystack.s_mark = (YYINT) yystate;",
1146     "    *++yystack.l_mark = yyval;",
1147     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1148     "    *++yystack.p_mark = yyloc;",
1149     "#endif",
1150     "    goto yyloop;",
1151 #if defined(YYBTYACC)
1152     "#if YYBTYACC",
1153     "",
1154     "    /* Reduction declares that this path is valid. Set yypath and do a full parse */",
1155     "yyvalid:",
1156     "    if (yypath) YYABORT;",
1157     "    while (yyps->save)",
1158     "    {",
1159     "        YYParseState *save = yyps->save;",
1160     "        yyps->save = save->save;",
1161     "        save->save = yypath;",
1162     "        yypath = save;",
1163     "    }",
1164     "#if YYDEBUG",
1165     "    if (yydebug)",
1166     "        fprintf(stderr, \"%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\\n\",",
1167     "                        YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));",
1168     "#endif",
1169     "    if (yyerrctx)",
1170     "    {",
1171     "        yyFreeState(yyerrctx);",
1172     "        yyerrctx = NULL;",
1173     "    }",
1174     "    yylvp          = yylvals + yypath->lexeme;",
1175     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1176     "    yylpp          = yylpsns + yypath->lexeme;",
1177     "#endif",
1178     "    yylexp         = yylexemes + yypath->lexeme;",
1179     "    yychar         = YYEMPTY;",
1180     "    yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);",
1181     "    memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));",
1182     "    yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);",
1183     "    memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));",
1184     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1185     "    yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);",
1186     "    memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));",
1187     "#endif",
1188     "    yystate        = yypath->state;",
1189     "    goto yyloop;",
1190     "#endif /* YYBTYACC */",
1191 #endif			/* defined(YYBTYACC) */
1192     "",
1193     "yyoverflow:",
1194     "    YYERROR_CALL(\"yacc stack overflow\");",
1195 #if defined(YYBTYACC)
1196     "#if YYBTYACC",
1197     "    goto yyabort_nomem;",
1198     "yyenomem:",
1199     "    YYERROR_CALL(\"memory exhausted\");",
1200     "yyabort_nomem:",
1201     "#endif /* YYBTYACC */",
1202 #endif			/* defined(YYBTYACC) */
1203     "    yyresult = 2;",
1204     "    goto yyreturn;",
1205     "",
1206     "yyabort:",
1207     "    yyresult = 1;",
1208     "    goto yyreturn;",
1209     "",
1210     "yyaccept:",
1211 #if defined(YYBTYACC)
1212     "#if YYBTYACC",
1213     "    if (yyps->save) goto yyvalid;",
1214     "#endif /* YYBTYACC */",
1215 #endif			/* defined(YYBTYACC) */
1216     "    yyresult = 0;",
1217     "",
1218     "yyreturn:",
1219     "#if defined(YYDESTRUCT_CALL)",
1220     "    if (yychar != YYEOF && yychar != YYEMPTY)",
1221     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1222     "        YYDESTRUCT_CALL(\"cleanup: discarding token\", yychar, &yylval, &yylloc);",
1223     "#else",
1224     "        YYDESTRUCT_CALL(\"cleanup: discarding token\", yychar, &yylval);",
1225     "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */",
1226     "",
1227     "    {",
1228     "        YYSTYPE *pv;",
1229     "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)",
1230     "        YYLTYPE *pp;",
1231     "",
1232     "        for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)",
1233     "             YYDESTRUCT_CALL(\"cleanup: discarding state\",",
1234     "                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);",
1235     "#else",
1236     "        for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)",
1237     "             YYDESTRUCT_CALL(\"cleanup: discarding state\",",
1238     "                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);",
1239     "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */",
1240     "    }",
1241     "#endif /* defined(YYDESTRUCT_CALL) */",
1242     "",
1243 #if defined(YYBTYACC)
1244     "#if YYBTYACC",
1245     "    if (yyerrctx)",
1246     "    {",
1247     "        yyFreeState(yyerrctx);",
1248     "        yyerrctx = NULL;",
1249     "    }",
1250     "    while (yyps)",
1251     "    {",
1252     "        YYParseState *save = yyps;",
1253     "        yyps = save->save;",
1254     "        save->save = NULL;",
1255     "        yyFreeState(save);",
1256     "    }",
1257     "    while (yypath)",
1258     "    {",
1259     "        YYParseState *save = yypath;",
1260     "        yypath = save->save;",
1261     "        save->save = NULL;",
1262     "        yyFreeState(save);",
1263     "    }",
1264     "#endif /* YYBTYACC */",
1265 #endif			/* defined(YYBTYACC) */
1266     "    yyfreestack(&yystack);",
1267     "    return (yyresult);",
1268     "}",
1269     0
1270 };
1271 
1272 void
1273 write_section(FILE * fp, const char *const section[])
1274 {
1275     int i;
1276     const char *s;
1277 
1278     for (i = 0; (s = section[i]) != 0; ++i)
1279     {
1280 	if (fp == code_file)
1281 	    ++outline;
1282 	fprintf(fp, "%s\n", s);
1283     }
1284 }
1285