Commit | Line | Data |
---|---|---|
15637ed4 RG |
1 | #include "defs.h" |
2 | ||
50437753 NW |
3 | /* The definition of yysccsid in the banner should be replaced with */ |
4 | /* a #pragma ident directive if the target C compiler supports */ | |
5 | /* #pragma ident directives. */ | |
15637ed4 RG |
6 | /* */ |
7 | /* If the skeleton is changed, the banner should be changed so that */ | |
50437753 NW |
8 | /* the altered version can be easily distinguished from the original. */ |
9 | /* */ | |
10 | /* The #defines included with the banner are there because they are */ | |
11 | /* useful in subsequent code. The macros #defined in the header or */ | |
12 | /* the body either are not useful outside of semantic actions or */ | |
13 | /* are conditional. */ | |
15637ed4 RG |
14 | |
15 | char *banner[] = | |
16 | { | |
17 | "#ifndef lint", | |
50437753 | 18 | "static char yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\";", |
15637ed4 RG |
19 | "#endif", |
20 | "#define YYBYACC 1", | |
50437753 NW |
21 | "#define YYMAJOR 1", |
22 | "#define YYMINOR 9", | |
23 | "#define yyclearin (yychar=(-1))", | |
24 | "#define yyerrok (yyerrflag=0)", | |
25 | "#define YYRECOVERING (yyerrflag!=0)", | |
15637ed4 RG |
26 | 0 |
27 | }; | |
28 | ||
29 | ||
30 | char *tables[] = | |
31 | { | |
32 | "extern short yylhs[];", | |
33 | "extern short yylen[];", | |
34 | "extern short yydefred[];", | |
35 | "extern short yydgoto[];", | |
36 | "extern short yysindex[];", | |
37 | "extern short yyrindex[];", | |
38 | "extern short yygindex[];", | |
39 | "extern short yytable[];", | |
40 | "extern short yycheck[];", | |
41 | "#if YYDEBUG", | |
42 | "extern char *yyname[];", | |
43 | "extern char *yyrule[];", | |
44 | "#endif", | |
45 | 0 | |
46 | }; | |
47 | ||
48 | ||
49 | char *header[] = | |
50 | { | |
15637ed4 | 51 | "#ifdef YYSTACKSIZE", |
50437753 | 52 | "#undef YYMAXDEPTH", |
15637ed4 | 53 | "#define YYMAXDEPTH YYSTACKSIZE", |
15637ed4 RG |
54 | "#else", |
55 | "#ifdef YYMAXDEPTH", | |
56 | "#define YYSTACKSIZE YYMAXDEPTH", | |
57 | "#else", | |
58 | "#define YYSTACKSIZE 500", | |
59 | "#define YYMAXDEPTH 500", | |
60 | "#endif", | |
61 | "#endif", | |
62 | "int yydebug;", | |
63 | "int yynerrs;", | |
64 | "int yyerrflag;", | |
65 | "int yychar;", | |
66 | "short *yyssp;", | |
67 | "YYSTYPE *yyvsp;", | |
68 | "YYSTYPE yyval;", | |
69 | "YYSTYPE yylval;", | |
70 | "short yyss[YYSTACKSIZE];", | |
71 | "YYSTYPE yyvs[YYSTACKSIZE];", | |
72 | "#define yystacksize YYSTACKSIZE", | |
73 | 0 | |
74 | }; | |
75 | ||
76 | ||
77 | char *body[] = | |
78 | { | |
79 | "#define YYABORT goto yyabort", | |
50437753 | 80 | "#define YYREJECT goto yyabort", |
15637ed4 RG |
81 | "#define YYACCEPT goto yyaccept", |
82 | "#define YYERROR goto yyerrlab", | |
83 | "int", | |
84 | "yyparse()", | |
85 | "{", | |
86 | " register int yym, yyn, yystate;", | |
87 | "#if YYDEBUG", | |
88 | " register char *yys;", | |
89 | " extern char *getenv();", | |
90 | "", | |
91 | " if (yys = getenv(\"YYDEBUG\"))", | |
92 | " {", | |
93 | " yyn = *yys;", | |
94 | " if (yyn >= '0' && yyn <= '9')", | |
95 | " yydebug = yyn - '0';", | |
96 | " }", | |
97 | "#endif", | |
98 | "", | |
99 | " yynerrs = 0;", | |
100 | " yyerrflag = 0;", | |
101 | " yychar = (-1);", | |
102 | "", | |
103 | " yyssp = yyss;", | |
104 | " yyvsp = yyvs;", | |
105 | " *yyssp = yystate = 0;", | |
106 | "", | |
107 | "yyloop:", | |
108 | " if (yyn = yydefred[yystate]) goto yyreduce;", | |
109 | " if (yychar < 0)", | |
110 | " {", | |
111 | " if ((yychar = yylex()) < 0) yychar = 0;", | |
112 | "#if YYDEBUG", | |
113 | " if (yydebug)", | |
114 | " {", | |
115 | " yys = 0;", | |
116 | " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", | |
117 | " if (!yys) yys = \"illegal-symbol\";", | |
50437753 NW |
118 | " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", |
119 | " YYPREFIX, yystate, yychar, yys);", | |
15637ed4 RG |
120 | " }", |
121 | "#endif", | |
122 | " }", | |
123 | " if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&", | |
124 | " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)", | |
125 | " {", | |
126 | "#if YYDEBUG", | |
127 | " if (yydebug)", | |
50437753 NW |
128 | " printf(\"%sdebug: state %d, shifting to state %d\\n\",", |
129 | " YYPREFIX, yystate, yytable[yyn]);", | |
15637ed4 RG |
130 | "#endif", |
131 | " if (yyssp >= yyss + yystacksize - 1)", | |
132 | " {", | |
133 | " goto yyoverflow;", | |
134 | " }", | |
135 | " *++yyssp = yystate = yytable[yyn];", | |
136 | " *++yyvsp = yylval;", | |
137 | " yychar = (-1);", | |
138 | " if (yyerrflag > 0) --yyerrflag;", | |
139 | " goto yyloop;", | |
140 | " }", | |
141 | " if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&", | |
142 | " yyn <= YYTABLESIZE && yycheck[yyn] == yychar)", | |
143 | " {", | |
144 | " yyn = yytable[yyn];", | |
145 | " goto yyreduce;", | |
146 | " }", | |
147 | " if (yyerrflag) goto yyinrecovery;", | |
148 | "#ifdef lint", | |
149 | " goto yynewerror;", | |
150 | "#endif", | |
151 | "yynewerror:", | |
152 | " yyerror(\"syntax error\");", | |
153 | "#ifdef lint", | |
154 | " goto yyerrlab;", | |
155 | "#endif", | |
156 | "yyerrlab:", | |
157 | " ++yynerrs;", | |
158 | "yyinrecovery:", | |
159 | " if (yyerrflag < 3)", | |
160 | " {", | |
161 | " yyerrflag = 3;", | |
162 | " for (;;)", | |
163 | " {", | |
164 | " if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&", | |
165 | " yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)", | |
166 | " {", | |
167 | "#if YYDEBUG", | |
168 | " if (yydebug)", | |
50437753 NW |
169 | " printf(\"%sdebug: state %d, error recovery shifting\\", |
170 | " to state %d\\n\", YYPREFIX, *yyssp, yytable[yyn]);", | |
15637ed4 RG |
171 | "#endif", |
172 | " if (yyssp >= yyss + yystacksize - 1)", | |
173 | " {", | |
174 | " goto yyoverflow;", | |
175 | " }", | |
176 | " *++yyssp = yystate = yytable[yyn];", | |
177 | " *++yyvsp = yylval;", | |
178 | " goto yyloop;", | |
179 | " }", | |
180 | " else", | |
181 | " {", | |
182 | "#if YYDEBUG", | |
183 | " if (yydebug)", | |
50437753 | 184 | " printf(\"%sdebug: error recovery discarding state %d\ |
15637ed4 | 185 | \\n\",", |
50437753 | 186 | " YYPREFIX, *yyssp);", |
15637ed4 RG |
187 | "#endif", |
188 | " if (yyssp <= yyss) goto yyabort;", | |
189 | " --yyssp;", | |
190 | " --yyvsp;", | |
191 | " }", | |
192 | " }", | |
193 | " }", | |
194 | " else", | |
195 | " {", | |
196 | " if (yychar == 0) goto yyabort;", | |
197 | "#if YYDEBUG", | |
198 | " if (yydebug)", | |
199 | " {", | |
200 | " yys = 0;", | |
201 | " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", | |
202 | " if (!yys) yys = \"illegal-symbol\";", | |
50437753 | 203 | " printf(\"%sdebug: state %d, error recovery discards token %d\ |
15637ed4 | 204 | (%s)\\n\",", |
50437753 | 205 | " YYPREFIX, yystate, yychar, yys);", |
15637ed4 RG |
206 | " }", |
207 | "#endif", | |
208 | " yychar = (-1);", | |
209 | " goto yyloop;", | |
210 | " }", | |
211 | "yyreduce:", | |
212 | "#if YYDEBUG", | |
213 | " if (yydebug)", | |
50437753 NW |
214 | " printf(\"%sdebug: state %d, reducing by rule %d (%s)\\n\",", |
215 | " YYPREFIX, yystate, yyn, yyrule[yyn]);", | |
15637ed4 RG |
216 | "#endif", |
217 | " yym = yylen[yyn];", | |
218 | " yyval = yyvsp[1-yym];", | |
219 | " switch (yyn)", | |
220 | " {", | |
221 | 0 | |
222 | }; | |
223 | ||
224 | ||
225 | char *trailer[] = | |
226 | { | |
227 | " }", | |
228 | " yyssp -= yym;", | |
229 | " yystate = *yyssp;", | |
230 | " yyvsp -= yym;", | |
231 | " yym = yylhs[yyn];", | |
232 | " if (yystate == 0 && yym == 0)", | |
233 | " {", | |
234 | "#if YYDEBUG", | |
235 | " if (yydebug)", | |
50437753 NW |
236 | " printf(\"%sdebug: after reduction, shifting from state 0 to\\", |
237 | " state %d\\n\", YYPREFIX, YYFINAL);", | |
15637ed4 RG |
238 | "#endif", |
239 | " yystate = YYFINAL;", | |
240 | " *++yyssp = YYFINAL;", | |
241 | " *++yyvsp = yyval;", | |
242 | " if (yychar < 0)", | |
243 | " {", | |
244 | " if ((yychar = yylex()) < 0) yychar = 0;", | |
245 | "#if YYDEBUG", | |
246 | " if (yydebug)", | |
247 | " {", | |
248 | " yys = 0;", | |
249 | " if (yychar <= YYMAXTOKEN) yys = yyname[yychar];", | |
250 | " if (!yys) yys = \"illegal-symbol\";", | |
50437753 NW |
251 | " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", |
252 | " YYPREFIX, YYFINAL, yychar, yys);", | |
15637ed4 RG |
253 | " }", |
254 | "#endif", | |
255 | " }", | |
256 | " if (yychar == 0) goto yyaccept;", | |
257 | " goto yyloop;", | |
258 | " }", | |
259 | " if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&", | |
260 | " yyn <= YYTABLESIZE && yycheck[yyn] == yystate)", | |
261 | " yystate = yytable[yyn];", | |
262 | " else", | |
263 | " yystate = yydgoto[yym];", | |
264 | "#if YYDEBUG", | |
265 | " if (yydebug)", | |
50437753 NW |
266 | " printf(\"%sdebug: after reduction, shifting from state %d \\", |
267 | "to state %d\\n\", YYPREFIX, *yyssp, yystate);", | |
15637ed4 RG |
268 | "#endif", |
269 | " if (yyssp >= yyss + yystacksize - 1)", | |
270 | " {", | |
271 | " goto yyoverflow;", | |
272 | " }", | |
273 | " *++yyssp = yystate;", | |
274 | " *++yyvsp = yyval;", | |
275 | " goto yyloop;", | |
276 | "yyoverflow:", | |
277 | " yyerror(\"yacc stack overflow\");", | |
278 | "yyabort:", | |
279 | " return (1);", | |
280 | "yyaccept:", | |
281 | " return (0);", | |
282 | "}", | |
283 | 0 | |
284 | }; | |
285 | ||
286 | ||
287 | write_section(section) | |
288 | char *section[]; | |
289 | { | |
50437753 | 290 | register int c; |
15637ed4 | 291 | register int i; |
50437753 NW |
292 | register char *s; |
293 | register FILE *f; | |
15637ed4 | 294 | |
50437753 NW |
295 | f = code_file; |
296 | for (i = 0; s = section[i]; ++i) | |
15637ed4 RG |
297 | { |
298 | ++outline; | |
50437753 NW |
299 | while (c = *s) |
300 | { | |
301 | putc(c, f); | |
302 | ++s; | |
303 | } | |
304 | putc('\n', f); | |
15637ed4 RG |
305 | } |
306 | } |