Style(9) cleanup.
[dragonfly.git] / usr.bin / yacc / skeleton.c
1 /*
2  * Copyright (c) 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Robert Paul Corbett.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed by the University of
19  *      California, Berkeley and its contributors.
20  * 4. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  * @(#)skeleton.c       5.8 (Berkeley) 4/29/95
37  *
38  * $FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28.2.1 2001/07/19 05:46:39 peter Exp $
39  * $DragonFly: src/usr.bin/yacc/skeleton.c,v 1.4 2004/04/07 20:43:24 cpressey Exp $
40  */
41
42 #include "defs.h"
43
44 /*  The definition of yysccsid in the banner should be replaced with    */
45 /*  a #pragma ident directive if the target C compiler supports         */
46 /*  #pragma ident directives.                                           */
47 /*                                                                      */
48 /*  If the skeleton is changed, the banner should be changed so that    */
49 /*  the altered version can be easily distinguished from the original.  */
50 /*                                                                      */
51 /*  The #defines included with the banner are there because they are    */
52 /*  useful in subsequent code.  The macros #defined in the header or    */
53 /*  the body either are not useful outside of semantic actions or       */
54 /*  are conditional.                                                    */
55
56 char *banner[] =
57 {
58     "#include <stdlib.h>",
59     "#define YYBYACC 1",
60     "#define YYMAJOR 1",
61     "#define YYMINOR 9",
62     "#define YYLEX yylex()",
63     "#define YYEMPTY -1",
64     "#define yyclearin (yychar=(YYEMPTY))",
65     "#define yyerrok (yyerrflag=0)",
66     "#define YYRECOVERING() (yyerrflag!=0)",
67     "#if defined(__cplusplus) || __STDC__",
68     "static int yygrowstack(void);",
69     "#else",
70     "static int yygrowstack();",
71     "#endif",
72     0
73 };
74
75
76 char *tables[] =
77 {
78     "extern const short yylhs[];",
79     "extern const short yylen[];",
80     "extern const short yydefred[];",
81     "extern const short yydgoto[];",
82     "extern const short yysindex[];",
83     "extern const short yyrindex[];",
84     "extern const short yygindex[];",
85     "extern const short yytable[];",
86     "extern const short yycheck[];",
87     "#if YYDEBUG",
88     "extern char *yyname[];",
89     "extern char *yyrule[];",
90     "#endif",
91     0
92 };
93
94
95 char *header[] =
96 {
97     "#if YYDEBUG",
98     "#include <stdio.h>",
99     "#endif",
100     "#ifdef YYSTACKSIZE",
101     "#undef YYMAXDEPTH",
102     "#define YYMAXDEPTH YYSTACKSIZE",
103     "#else",
104     "#ifdef YYMAXDEPTH",
105     "#define YYSTACKSIZE YYMAXDEPTH",
106     "#else",
107     "#define YYSTACKSIZE 10000",
108     "#define YYMAXDEPTH 10000",
109     "#endif",
110     "#endif",
111     "#define YYINITSTACKSIZE 200",
112     "int yydebug;",
113     "int yynerrs;",
114     "int yyerrflag;",
115     "int yychar;",
116     "short *yyssp;",
117     "YYSTYPE *yyvsp;",
118     "YYSTYPE yyval;",
119     "YYSTYPE yylval;",
120     "short *yyss;",
121     "short *yysslim;",
122     "YYSTYPE *yyvs;",
123     "int yystacksize;",
124     0
125 };
126
127
128 char *body[] =
129 {
130     "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
131     "static int yygrowstack()",
132     "{",
133     "    int newsize, i;",
134     "    short *newss;",
135     "    YYSTYPE *newvs;",
136     "",
137     "    if ((newsize = yystacksize) == 0)",
138     "        newsize = YYINITSTACKSIZE;",
139     "    else if (newsize >= YYMAXDEPTH)",
140     "        return -1;",
141     "    else if ((newsize *= 2) > YYMAXDEPTH)",
142     "        newsize = YYMAXDEPTH;",
143     "    i = yyssp - yyss;",
144     "    newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :",
145     "      (short *)malloc(newsize * sizeof *newss);",
146     "    if (newss == NULL)",
147     "        return -1;",
148     "    yyss = newss;",
149     "    yyssp = newss + i;",
150     "    newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :",
151     "      (YYSTYPE *)malloc(newsize * sizeof *newvs);",
152     "    if (newvs == NULL)",
153     "        return -1;",
154     "    yyvs = newvs;",
155     "    yyvsp = newvs + i;",
156     "    yystacksize = newsize;",
157     "    yysslim = yyss + newsize - 1;",
158     "    return 0;",
159     "}",
160     "",
161     "#define YYABORT goto yyabort",
162     "#define YYREJECT goto yyabort",
163     "#define YYACCEPT goto yyaccept",
164     "#define YYERROR goto yyerrlab",
165     "",
166     "#ifndef YYPARSE_PARAM",
167     "#if defined(__cplusplus) || __STDC__",
168     "#define YYPARSE_PARAM_ARG void",
169     "#define YYPARSE_PARAM_DECL",
170     "#else      /* ! ANSI-C/C++ */",
171     "#define YYPARSE_PARAM_ARG",
172     "#define YYPARSE_PARAM_DECL",
173     "#endif     /* ANSI-C/C++ */",
174     "#else      /* YYPARSE_PARAM */",
175     "#ifndef YYPARSE_PARAM_TYPE",
176     "#define YYPARSE_PARAM_TYPE void *",
177     "#endif",
178     "#if defined(__cplusplus) || __STDC__",
179     "#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM",
180     "#define YYPARSE_PARAM_DECL",
181     "#else      /* ! ANSI-C/C++ */",
182     "#define YYPARSE_PARAM_ARG YYPARSE_PARAM",
183     "#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;",
184     "#endif     /* ANSI-C/C++ */",
185     "#endif     /* ! YYPARSE_PARAM */",
186     "",
187     "int",
188     "yyparse (YYPARSE_PARAM_ARG)",
189     "    YYPARSE_PARAM_DECL",
190     "{",
191     "    int yym, yyn, yystate;",
192     "#if YYDEBUG",
193     "    const char *yys;",
194     "",
195     "    if ((yys = getenv(\"YYDEBUG\")))",
196     "    {",
197     "        yyn = *yys;",
198     "        if (yyn >= '0' && yyn <= '9')",
199     "            yydebug = yyn - '0';",
200     "    }",
201     "#endif",
202     "",
203     "    yynerrs = 0;",
204     "    yyerrflag = 0;",
205     "    yychar = (-1);",
206     "",
207     "    if (yyss == NULL && yygrowstack()) goto yyoverflow;",
208     "    yyssp = yyss;",
209     "    yyvsp = yyvs;",
210     "    *yyssp = yystate = 0;",
211     "",
212     "yyloop:",
213     "    if ((yyn = yydefred[yystate])) goto yyreduce;",
214     "    if (yychar < 0)",
215     "    {",
216     "        if ((yychar = yylex()) < 0) yychar = 0;",
217     "#if YYDEBUG",
218     "        if (yydebug)",
219     "        {",
220     "            yys = 0;",
221     "            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
222     "            if (!yys) yys = \"illegal-symbol\";",
223     "            printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
224     "                    YYPREFIX, yystate, yychar, yys);",
225     "        }",
226     "#endif",
227     "    }",
228     "    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
229     "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
230     "    {",
231     "#if YYDEBUG",
232     "        if (yydebug)",
233     "            printf(\"%sdebug: state %d, shifting to state %d\\n\",",
234     "                    YYPREFIX, yystate, yytable[yyn]);",
235     "#endif",
236     "        if (yyssp >= yysslim && yygrowstack())",
237     "        {",
238     "            goto yyoverflow;",
239     "        }",
240     "        *++yyssp = yystate = yytable[yyn];",
241     "        *++yyvsp = yylval;",
242     "        yychar = (-1);",
243     "        if (yyerrflag > 0)  --yyerrflag;",
244     "        goto yyloop;",
245     "    }",
246     "    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
247     "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
248     "    {",
249     "        yyn = yytable[yyn];",
250     "        goto yyreduce;",
251     "    }",
252     "    if (yyerrflag) goto yyinrecovery;",
253     "#if defined(lint) || defined(__GNUC__)",
254     "    goto yynewerror;",
255     "#endif",
256     "yynewerror:",
257     "    yyerror(\"syntax error\");",
258     "#if defined(lint) || defined(__GNUC__)",
259     "    goto yyerrlab;",
260     "#endif",
261     "yyerrlab:",
262     "    ++yynerrs;",
263     "yyinrecovery:",
264     "    if (yyerrflag < 3)",
265     "    {",
266     "        yyerrflag = 3;",
267     "        for (;;)",
268     "        {",
269     "            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&",
270     "                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
271     "            {",
272     "#if YYDEBUG",
273     "                if (yydebug)",
274     "                    printf(\"%sdebug: state %d, error recovery shifting\\",
275     " to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);",
276     "#endif",
277     "                if (yyssp >= yysslim && yygrowstack())",
278     "                {",
279     "                    goto yyoverflow;",
280     "                }",
281     "                *++yyssp = yystate = yytable[yyn];",
282     "                *++yyvsp = yylval;",
283     "                goto yyloop;",
284     "            }",
285     "            else",
286     "            {",
287     "#if YYDEBUG",
288     "                if (yydebug)",
289     "                    printf(\"%sdebug: error recovery discarding state %d\
290 \\n\",",
291     "                            YYPREFIX, *yyssp);",
292     "#endif",
293     "                if (yyssp <= yyss) goto yyabort;",
294     "                --yyssp;",
295     "                --yyvsp;",
296     "            }",
297     "        }",
298     "    }",
299     "    else",
300     "    {",
301     "        if (yychar == 0) goto yyabort;",
302     "#if YYDEBUG",
303     "        if (yydebug)",
304     "        {",
305     "            yys = 0;",
306     "            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
307     "            if (!yys) yys = \"illegal-symbol\";",
308     "            printf(\"%sdebug: state %d, error recovery discards token %d\
309  (%s)\\n\",",
310     "                    YYPREFIX, yystate, yychar, yys);",
311     "        }",
312     "#endif",
313     "        yychar = (-1);",
314     "        goto yyloop;",
315     "    }",
316     "yyreduce:",
317     "#if YYDEBUG",
318     "    if (yydebug)",
319     "        printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",",
320     "                YYPREFIX, yystate, yyn, yyrule[yyn]);",
321     "#endif",
322     "    yym = yylen[yyn];",
323     "    yyval = yyvsp[1-yym];",
324     "    switch (yyn)",
325     "    {",
326     0
327 };
328
329
330 char *trailer[] =
331 {
332     "    }",
333     "    yyssp -= yym;",
334     "    yystate = *yyssp;",
335     "    yyvsp -= yym;",
336     "    yym = yylhs[yyn];",
337     "    if (yystate == 0 && yym == 0)",
338     "    {",
339     "#if YYDEBUG",
340     "        if (yydebug)",
341     "            printf(\"%sdebug: after reduction, shifting from state 0 to\\",
342     " state %d\\n\", YYPREFIX, YYFINAL);",
343     "#endif",
344     "        yystate = YYFINAL;",
345     "        *++yyssp = YYFINAL;",
346     "        *++yyvsp = yyval;",
347     "        if (yychar < 0)",
348     "        {",
349     "            if ((yychar = yylex()) < 0) yychar = 0;",
350     "#if YYDEBUG",
351     "            if (yydebug)",
352     "            {",
353     "                yys = 0;",
354     "                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
355     "                if (!yys) yys = \"illegal-symbol\";",
356     "                printf(\"%sdebug: state %d, reading %d (%s)\\n\",",
357     "                        YYPREFIX, YYFINAL, yychar, yys);",
358     "            }",
359     "#endif",
360     "        }",
361     "        if (yychar == 0) goto yyaccept;",
362     "        goto yyloop;",
363     "    }",
364     "    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
365     "            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
366     "        yystate = yytable[yyn];",
367     "    else",
368     "        yystate = yydgoto[yym];",
369     "#if YYDEBUG",
370     "    if (yydebug)",
371     "        printf(\"%sdebug: after reduction, shifting from state %d \\",
372     "to state %d\\n\", YYPREFIX, *yyssp, yystate);",
373     "#endif",
374     "    if (yyssp >= yysslim && yygrowstack())",
375     "    {",
376     "        goto yyoverflow;",
377     "    }",
378     "    *++yyssp = yystate;",
379     "    *++yyvsp = yyval;",
380     "    goto yyloop;",
381     "yyoverflow:",
382     "    yyerror(\"yacc stack overflow\");",
383     "yyabort:",
384     "    return (1);",
385     "yyaccept:",
386     "    return (0);",
387     "}",
388     0
389 };
390
391
392 void
393 write_section(char **section)
394 {
395     int c;
396     int i;
397     char *s;
398     FILE *f;
399
400     f = code_file;
401     for (i = 0; (s = section[i]); ++i)
402     {
403         ++outline;
404         while ((c = *s))
405         {
406             putc(c, f);
407             ++s;
408         }
409         putc('\n', f);
410     }
411 }