ok_syntax1.tab.c revision 1.1.1.7 1 1.1.1.3 christos /* $NetBSD: ok_syntax1.tab.c,v 1.1.1.7 2021/02/20 20:30:07 christos Exp $ */
2 1.1.1.3 christos
3 1.1 christos /* original parser id follows */
4 1.1 christos /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 1.1 christos /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6 1.1 christos
7 1.1 christos #define YYBYACC 1
8 1.1.1.7 christos #define YYMAJOR 2
9 1.1.1.7 christos #define YYMINOR 0
10 1.1 christos #define YYCHECK "yyyymmdd"
11 1.1 christos
12 1.1 christos #define YYEMPTY (-1)
13 1.1 christos #define yyclearin (yychar = YYEMPTY)
14 1.1 christos #define yyerrok (yyerrflag = 0)
15 1.1 christos #define YYRECOVERING() (yyerrflag != 0)
16 1.1 christos #define YYENOMEM (-2)
17 1.1 christos #define YYEOF 0
18 1.1 christos
19 1.1 christos #ifndef yyparse
20 1.1 christos #define yyparse ok_syntax1_parse
21 1.1 christos #endif /* yyparse */
22 1.1 christos
23 1.1 christos #ifndef yylex
24 1.1 christos #define yylex ok_syntax1_lex
25 1.1 christos #endif /* yylex */
26 1.1 christos
27 1.1 christos #ifndef yyerror
28 1.1 christos #define yyerror ok_syntax1_error
29 1.1 christos #endif /* yyerror */
30 1.1 christos
31 1.1 christos #ifndef yychar
32 1.1 christos #define yychar ok_syntax1_char
33 1.1 christos #endif /* yychar */
34 1.1 christos
35 1.1 christos #ifndef yyval
36 1.1 christos #define yyval ok_syntax1_val
37 1.1 christos #endif /* yyval */
38 1.1 christos
39 1.1 christos #ifndef yylval
40 1.1 christos #define yylval ok_syntax1_lval
41 1.1 christos #endif /* yylval */
42 1.1 christos
43 1.1 christos #ifndef yydebug
44 1.1 christos #define yydebug ok_syntax1_debug
45 1.1 christos #endif /* yydebug */
46 1.1 christos
47 1.1 christos #ifndef yynerrs
48 1.1 christos #define yynerrs ok_syntax1_nerrs
49 1.1 christos #endif /* yynerrs */
50 1.1 christos
51 1.1 christos #ifndef yyerrflag
52 1.1 christos #define yyerrflag ok_syntax1_errflag
53 1.1 christos #endif /* yyerrflag */
54 1.1 christos
55 1.1 christos #ifndef yylhs
56 1.1 christos #define yylhs ok_syntax1_lhs
57 1.1 christos #endif /* yylhs */
58 1.1 christos
59 1.1 christos #ifndef yylen
60 1.1 christos #define yylen ok_syntax1_len
61 1.1 christos #endif /* yylen */
62 1.1 christos
63 1.1 christos #ifndef yydefred
64 1.1 christos #define yydefred ok_syntax1_defred
65 1.1 christos #endif /* yydefred */
66 1.1 christos
67 1.1 christos #ifndef yydgoto
68 1.1 christos #define yydgoto ok_syntax1_dgoto
69 1.1 christos #endif /* yydgoto */
70 1.1 christos
71 1.1 christos #ifndef yysindex
72 1.1 christos #define yysindex ok_syntax1_sindex
73 1.1 christos #endif /* yysindex */
74 1.1 christos
75 1.1 christos #ifndef yyrindex
76 1.1 christos #define yyrindex ok_syntax1_rindex
77 1.1 christos #endif /* yyrindex */
78 1.1 christos
79 1.1 christos #ifndef yygindex
80 1.1 christos #define yygindex ok_syntax1_gindex
81 1.1 christos #endif /* yygindex */
82 1.1 christos
83 1.1 christos #ifndef yytable
84 1.1 christos #define yytable ok_syntax1_table
85 1.1 christos #endif /* yytable */
86 1.1 christos
87 1.1 christos #ifndef yycheck
88 1.1 christos #define yycheck ok_syntax1_check
89 1.1 christos #endif /* yycheck */
90 1.1 christos
91 1.1 christos #ifndef yyname
92 1.1 christos #define yyname ok_syntax1_name
93 1.1 christos #endif /* yyname */
94 1.1 christos
95 1.1 christos #ifndef yyrule
96 1.1 christos #define yyrule ok_syntax1_rule
97 1.1 christos #endif /* yyrule */
98 1.1 christos #define YYPREFIX "ok_syntax1_"
99 1.1 christos
100 1.1 christos #define YYPURE 1
101 1.1 christos
102 1.1 christos #line 9 "ok_syntax1.y"
103 1.1 christos # include <stdio.h>
104 1.1 christos # include <ctype.h>
105 1.1 christos
106 1.1 christos #ifdef YYBISON
107 1.1 christos #define YYSTYPE int
108 1.1 christos #define YYLEX_PARAM base
109 1.1 christos #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
110 1.1 christos #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
111 1.1 christos int YYLEX_DECL();
112 1.1 christos static void YYERROR_DECL();
113 1.1 christos #endif
114 1.1 christos
115 1.1 christos #ifdef YYSTYPE
116 1.1 christos #undef YYSTYPE_IS_DECLARED
117 1.1 christos #define YYSTYPE_IS_DECLARED 1
118 1.1 christos #endif
119 1.1 christos #ifndef YYSTYPE_IS_DECLARED
120 1.1 christos #define YYSTYPE_IS_DECLARED 1
121 1.1.1.4 christos #line 43 "ok_syntax1.y"
122 1.1 christos typedef union
123 1.1 christos {
124 1.1 christos char * cval;
125 1.1 christos int ival;
126 1.1 christos double dval;
127 1.1 christos } YYSTYPE;
128 1.1 christos #endif /* !YYSTYPE_IS_DECLARED */
129 1.1 christos #line 128 "ok_syntax1.tab.c"
130 1.1 christos
131 1.1 christos /* compatibility with bison */
132 1.1 christos #ifdef YYPARSE_PARAM
133 1.1 christos /* compatibility with FreeBSD */
134 1.1 christos # ifdef YYPARSE_PARAM_TYPE
135 1.1 christos # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
136 1.1 christos # else
137 1.1 christos # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
138 1.1 christos # endif
139 1.1 christos #else
140 1.1 christos # define YYPARSE_DECL() yyparse(int regs[26], int *base)
141 1.1 christos #endif
142 1.1 christos
143 1.1 christos /* Parameters sent to lex. */
144 1.1 christos #ifdef YYLEX_PARAM
145 1.1 christos # ifdef YYLEX_PARAM_TYPE
146 1.1 christos # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
147 1.1 christos # else
148 1.1 christos # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
149 1.1 christos # endif
150 1.1 christos # define YYLEX yylex(&yylval, YYLEX_PARAM)
151 1.1 christos #else
152 1.1 christos # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
153 1.1 christos # define YYLEX yylex(&yylval, base)
154 1.1 christos #endif
155 1.1 christos
156 1.1 christos /* Parameters sent to yyerror. */
157 1.1 christos #ifndef YYERROR_DECL
158 1.1 christos #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
159 1.1 christos #endif
160 1.1 christos #ifndef YYERROR_CALL
161 1.1 christos #define YYERROR_CALL(msg) yyerror(regs, base, msg)
162 1.1 christos #endif
163 1.1 christos
164 1.1 christos extern int YYPARSE_DECL();
165 1.1 christos
166 1.1 christos #define DIGIT 257
167 1.1 christos #define LETTER 258
168 1.1 christos #define OCT1 259
169 1.1 christos #define HEX1 260
170 1.1 christos #define HEX2 261
171 1.1 christos #define HEX3 262
172 1.1 christos #define STR1 263
173 1.1 christos #define STR2 265
174 1.1 christos #define BELL 266
175 1.1 christos #define BS 267
176 1.1 christos #define NL 268
177 1.1 christos #define LF 269
178 1.1 christos #define CR 270
179 1.1 christos #define TAB 271
180 1.1 christos #define VT 272
181 1.1 christos #define UMINUS 273
182 1.1 christos #define YYERRCODE 256
183 1.1 christos typedef short YYINT;
184 1.1 christos static const YYINT ok_syntax1_lhs[] = { -1,
185 1.1 christos 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
186 1.1 christos 2, 2, 2, 2, 2, 2, 3, 3,
187 1.1 christos };
188 1.1 christos static const YYINT ok_syntax1_len[] = { 2,
189 1.1 christos 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
190 1.1 christos 3, 3, 3, 2, 1, 1, 1, 2,
191 1.1 christos };
192 1.1 christos static const YYINT ok_syntax1_defred[] = { 1,
193 1.1 christos 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
194 1.1 christos 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
195 1.1 christos 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
196 1.1 christos 10, 11,
197 1.1 christos };
198 1.1 christos static const YYINT ok_syntax1_dgoto[] = { 1,
199 1.1 christos 7, 8, 9,
200 1.1 christos };
201 1.1 christos static const YYINT ok_syntax1_sindex[] = { 0,
202 1.1 christos -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
203 1.1 christos -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
204 1.1 christos -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
205 1.1 christos 0, 0,
206 1.1 christos };
207 1.1 christos static const YYINT ok_syntax1_rindex[] = { 0,
208 1.1 christos 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
209 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
210 1.1 christos 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
211 1.1 christos 0, 0,
212 1.1 christos };
213 1.1 christos static const YYINT ok_syntax1_gindex[] = { 0,
214 1.1 christos 0, 65, 0,
215 1.1 christos };
216 1.1 christos #define YYTABLESIZE 220
217 1.1 christos static const YYINT ok_syntax1_table[] = { 6,
218 1.1 christos 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
219 1.1 christos 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
220 1.1 christos 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
221 1.1 christos 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
222 1.1 christos 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
223 1.1 christos 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
224 1.1 christos 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
225 1.1 christos 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
226 1.1 christos 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
227 1.1 christos 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
228 1.1 christos 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
229 1.1 christos 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
230 1.1 christos 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
231 1.1 christos 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
232 1.1 christos 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
233 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
234 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
235 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
236 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
237 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
238 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
239 1.1 christos 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
240 1.1 christos };
241 1.1 christos static const YYINT ok_syntax1_check[] = { 40,
242 1.1 christos 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
243 1.1 christos 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
244 1.1 christos -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
245 1.1 christos -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
246 1.1 christos -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
247 1.1 christos 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
248 1.1 christos -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
249 1.1 christos 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
250 1.1 christos 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
251 1.1 christos -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
252 1.1 christos -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
253 1.1 christos -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
254 1.1 christos -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
255 1.1 christos -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
256 1.1 christos -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
257 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
258 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
259 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
260 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
261 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
262 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
263 1.1 christos -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
264 1.1 christos };
265 1.1 christos #define YYFINAL 1
266 1.1 christos #ifndef YYDEBUG
267 1.1 christos #define YYDEBUG 0
268 1.1 christos #endif
269 1.1 christos #define YYMAXTOKEN 273
270 1.1 christos #define YYUNDFTOKEN 279
271 1.1 christos #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
272 1.1 christos #if YYDEBUG
273 1.1 christos static const char *const ok_syntax1_name[] = {
274 1.1 christos
275 1.1 christos "end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'",
276 1.1 christos "'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('",
277 1.1 christos "')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0,
278 1.1 christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,
279 1.1 christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0,
280 1.1 christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
281 1.1 christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
282 1.1 christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
283 1.1 christos "'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1",
284 1.1 christos "\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0,
285 1.1 christos 0,0,0,0,"illegal-symbol",
286 1.1 christos };
287 1.1 christos static const char *const ok_syntax1_rule[] = {
288 1.1 christos "$accept : list",
289 1.1 christos "list :",
290 1.1 christos "list : list stat '\\n'",
291 1.1 christos "list : list error '\\n'",
292 1.1 christos "stat : expr",
293 1.1 christos "stat : LETTER '=' expr",
294 1.1 christos "expr : '(' expr ')'",
295 1.1 christos "expr : expr '+' expr",
296 1.1 christos "expr : expr '-' expr",
297 1.1 christos "expr : expr '*' expr",
298 1.1 christos "expr : expr '/' expr",
299 1.1 christos "expr : expr '%' expr",
300 1.1 christos "expr : expr '&' expr",
301 1.1 christos "expr : expr '|' expr",
302 1.1 christos "expr : '-' expr",
303 1.1 christos "expr : LETTER",
304 1.1 christos "expr : number",
305 1.1 christos "number : DIGIT",
306 1.1 christos "number : number DIGIT",
307 1.1 christos
308 1.1 christos };
309 1.1 christos #endif
310 1.1 christos
311 1.1.1.6 christos #if YYDEBUG
312 1.1 christos int yydebug;
313 1.1.1.6 christos #endif
314 1.1 christos
315 1.1 christos /* define the initial stack-sizes */
316 1.1 christos #ifdef YYSTACKSIZE
317 1.1 christos #undef YYMAXDEPTH
318 1.1 christos #define YYMAXDEPTH YYSTACKSIZE
319 1.1 christos #else
320 1.1 christos #ifdef YYMAXDEPTH
321 1.1 christos #define YYSTACKSIZE YYMAXDEPTH
322 1.1 christos #else
323 1.1 christos #define YYSTACKSIZE 10000
324 1.1 christos #define YYMAXDEPTH 10000
325 1.1 christos #endif
326 1.1 christos #endif
327 1.1 christos
328 1.1 christos #define YYINITSTACKSIZE 200
329 1.1 christos
330 1.1 christos typedef struct {
331 1.1 christos unsigned stacksize;
332 1.1 christos YYINT *s_base;
333 1.1 christos YYINT *s_mark;
334 1.1 christos YYINT *s_last;
335 1.1 christos YYSTYPE *l_base;
336 1.1 christos YYSTYPE *l_mark;
337 1.1 christos } YYSTACKDATA;
338 1.1 christos #line 104 "ok_syntax1.y"
339 1.1 christos /* start of programs */
340 1.1 christos
341 1.1 christos #ifdef YYBYACC
342 1.1 christos extern int YYLEX_DECL();
343 1.1 christos #endif
344 1.1 christos
345 1.1 christos int
346 1.1 christos main (void)
347 1.1 christos {
348 1.1 christos int regs[26];
349 1.1 christos int base = 10;
350 1.1 christos
351 1.1 christos while(!feof(stdin)) {
352 1.1 christos yyparse(regs, &base);
353 1.1 christos }
354 1.1 christos return 0;
355 1.1 christos }
356 1.1 christos
357 1.1 christos #define UNUSED(x) ((void)(x))
358 1.1 christos
359 1.1 christos static void
360 1.1 christos YYERROR_DECL()
361 1.1 christos {
362 1.1 christos UNUSED(regs); /* %parse-param regs is not actually used here */
363 1.1 christos UNUSED(base); /* %parse-param base is not actually used here */
364 1.1 christos fprintf(stderr, "%s\n", s);
365 1.1 christos }
366 1.1 christos
367 1.1 christos int
368 1.1 christos YYLEX_DECL()
369 1.1 christos {
370 1.1 christos /* lexical analysis routine */
371 1.1 christos /* returns LETTER for a lower case letter, yylval = 0 through 25 */
372 1.1 christos /* return DIGIT for a digit, yylval = 0 through 9 */
373 1.1 christos /* all other characters are returned immediately */
374 1.1 christos
375 1.1 christos int c;
376 1.1 christos
377 1.1 christos while( (c=getchar()) == ' ' ) { /* skip blanks */ }
378 1.1 christos
379 1.1 christos /* c is now nonblank */
380 1.1 christos
381 1.1 christos if( islower( c )) {
382 1.1 christos yylval->ival = (c - 'a');
383 1.1 christos return ( LETTER );
384 1.1 christos }
385 1.1 christos if( isdigit( c )) {
386 1.1 christos yylval->ival = (c - '0') % (*base);
387 1.1 christos return ( DIGIT );
388 1.1 christos }
389 1.1 christos return( c );
390 1.1 christos }
391 1.1.1.6 christos #line 390 "ok_syntax1.tab.c"
392 1.1 christos
393 1.1 christos #if YYDEBUG
394 1.1.1.4 christos #include <stdio.h> /* needed for printf */
395 1.1 christos #endif
396 1.1 christos
397 1.1 christos #include <stdlib.h> /* needed for malloc, etc */
398 1.1 christos #include <string.h> /* needed for memset */
399 1.1 christos
400 1.1 christos /* allocate initial stack or double stack size, up to YYMAXDEPTH */
401 1.1 christos static int yygrowstack(YYSTACKDATA *data)
402 1.1 christos {
403 1.1 christos int i;
404 1.1 christos unsigned newsize;
405 1.1 christos YYINT *newss;
406 1.1 christos YYSTYPE *newvs;
407 1.1 christos
408 1.1 christos if ((newsize = data->stacksize) == 0)
409 1.1 christos newsize = YYINITSTACKSIZE;
410 1.1 christos else if (newsize >= YYMAXDEPTH)
411 1.1 christos return YYENOMEM;
412 1.1 christos else if ((newsize *= 2) > YYMAXDEPTH)
413 1.1 christos newsize = YYMAXDEPTH;
414 1.1 christos
415 1.1 christos i = (int) (data->s_mark - data->s_base);
416 1.1 christos newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
417 1.1 christos if (newss == 0)
418 1.1 christos return YYENOMEM;
419 1.1 christos
420 1.1 christos data->s_base = newss;
421 1.1 christos data->s_mark = newss + i;
422 1.1 christos
423 1.1 christos newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
424 1.1 christos if (newvs == 0)
425 1.1 christos return YYENOMEM;
426 1.1 christos
427 1.1 christos data->l_base = newvs;
428 1.1 christos data->l_mark = newvs + i;
429 1.1 christos
430 1.1 christos data->stacksize = newsize;
431 1.1 christos data->s_last = data->s_base + newsize - 1;
432 1.1 christos return 0;
433 1.1 christos }
434 1.1 christos
435 1.1 christos #if YYPURE || defined(YY_NO_LEAKS)
436 1.1 christos static void yyfreestack(YYSTACKDATA *data)
437 1.1 christos {
438 1.1 christos free(data->s_base);
439 1.1 christos free(data->l_base);
440 1.1 christos memset(data, 0, sizeof(*data));
441 1.1 christos }
442 1.1 christos #else
443 1.1 christos #define yyfreestack(data) /* nothing */
444 1.1 christos #endif
445 1.1 christos
446 1.1 christos #define YYABORT goto yyabort
447 1.1 christos #define YYREJECT goto yyabort
448 1.1 christos #define YYACCEPT goto yyaccept
449 1.1 christos #define YYERROR goto yyerrlab
450 1.1 christos
451 1.1 christos int
452 1.1 christos YYPARSE_DECL()
453 1.1 christos {
454 1.1 christos int yyerrflag;
455 1.1 christos int yychar;
456 1.1 christos YYSTYPE yyval;
457 1.1 christos YYSTYPE yylval;
458 1.1.1.6 christos int yynerrs;
459 1.1 christos
460 1.1 christos /* variables for the parser stack */
461 1.1 christos YYSTACKDATA yystack;
462 1.1 christos int yym, yyn, yystate;
463 1.1 christos #if YYDEBUG
464 1.1 christos const char *yys;
465 1.1 christos
466 1.1 christos if ((yys = getenv("YYDEBUG")) != 0)
467 1.1 christos {
468 1.1 christos yyn = *yys;
469 1.1 christos if (yyn >= '0' && yyn <= '9')
470 1.1 christos yydebug = yyn - '0';
471 1.1 christos }
472 1.1 christos #endif
473 1.1 christos
474 1.1.1.5 christos memset(&yyval, 0, sizeof(yyval));
475 1.1.1.5 christos memset(&yylval, 0, sizeof(yylval));
476 1.1.1.5 christos
477 1.1.1.4 christos yym = 0;
478 1.1.1.4 christos yyn = 0;
479 1.1 christos yynerrs = 0;
480 1.1 christos yyerrflag = 0;
481 1.1 christos yychar = YYEMPTY;
482 1.1 christos yystate = 0;
483 1.1 christos
484 1.1 christos #if YYPURE
485 1.1 christos memset(&yystack, 0, sizeof(yystack));
486 1.1 christos #endif
487 1.1 christos
488 1.1 christos if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
489 1.1 christos yystack.s_mark = yystack.s_base;
490 1.1 christos yystack.l_mark = yystack.l_base;
491 1.1 christos yystate = 0;
492 1.1 christos *yystack.s_mark = 0;
493 1.1 christos
494 1.1 christos yyloop:
495 1.1 christos if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
496 1.1 christos if (yychar < 0)
497 1.1 christos {
498 1.1.1.4 christos yychar = YYLEX;
499 1.1.1.4 christos if (yychar < 0) yychar = YYEOF;
500 1.1 christos #if YYDEBUG
501 1.1 christos if (yydebug)
502 1.1 christos {
503 1.1.1.4 christos if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
504 1.1 christos printf("%sdebug: state %d, reading %d (%s)\n",
505 1.1 christos YYPREFIX, yystate, yychar, yys);
506 1.1 christos }
507 1.1 christos #endif
508 1.1 christos }
509 1.1.1.4 christos if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
510 1.1.1.4 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
511 1.1 christos {
512 1.1 christos #if YYDEBUG
513 1.1 christos if (yydebug)
514 1.1 christos printf("%sdebug: state %d, shifting to state %d\n",
515 1.1 christos YYPREFIX, yystate, yytable[yyn]);
516 1.1 christos #endif
517 1.1.1.4 christos if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
518 1.1 christos yystate = yytable[yyn];
519 1.1 christos *++yystack.s_mark = yytable[yyn];
520 1.1 christos *++yystack.l_mark = yylval;
521 1.1 christos yychar = YYEMPTY;
522 1.1 christos if (yyerrflag > 0) --yyerrflag;
523 1.1 christos goto yyloop;
524 1.1 christos }
525 1.1.1.4 christos if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
526 1.1.1.4 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
527 1.1 christos {
528 1.1 christos yyn = yytable[yyn];
529 1.1 christos goto yyreduce;
530 1.1 christos }
531 1.1.1.4 christos if (yyerrflag != 0) goto yyinrecovery;
532 1.1 christos
533 1.1 christos YYERROR_CALL("syntax error");
534 1.1 christos
535 1.1.1.4 christos goto yyerrlab; /* redundant goto avoids 'unused label' warning */
536 1.1 christos yyerrlab:
537 1.1 christos ++yynerrs;
538 1.1 christos
539 1.1 christos yyinrecovery:
540 1.1 christos if (yyerrflag < 3)
541 1.1 christos {
542 1.1 christos yyerrflag = 3;
543 1.1 christos for (;;)
544 1.1 christos {
545 1.1.1.4 christos if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
546 1.1.1.4 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
547 1.1 christos {
548 1.1 christos #if YYDEBUG
549 1.1 christos if (yydebug)
550 1.1 christos printf("%sdebug: state %d, error recovery shifting\
551 1.1 christos to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
552 1.1 christos #endif
553 1.1.1.4 christos if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
554 1.1 christos yystate = yytable[yyn];
555 1.1 christos *++yystack.s_mark = yytable[yyn];
556 1.1 christos *++yystack.l_mark = yylval;
557 1.1 christos goto yyloop;
558 1.1 christos }
559 1.1 christos else
560 1.1 christos {
561 1.1 christos #if YYDEBUG
562 1.1 christos if (yydebug)
563 1.1 christos printf("%sdebug: error recovery discarding state %d\n",
564 1.1 christos YYPREFIX, *yystack.s_mark);
565 1.1 christos #endif
566 1.1 christos if (yystack.s_mark <= yystack.s_base) goto yyabort;
567 1.1 christos --yystack.s_mark;
568 1.1 christos --yystack.l_mark;
569 1.1 christos }
570 1.1 christos }
571 1.1 christos }
572 1.1 christos else
573 1.1 christos {
574 1.1 christos if (yychar == YYEOF) goto yyabort;
575 1.1 christos #if YYDEBUG
576 1.1 christos if (yydebug)
577 1.1 christos {
578 1.1.1.4 christos if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
579 1.1 christos printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
580 1.1 christos YYPREFIX, yystate, yychar, yys);
581 1.1 christos }
582 1.1 christos #endif
583 1.1 christos yychar = YYEMPTY;
584 1.1 christos goto yyloop;
585 1.1 christos }
586 1.1 christos
587 1.1 christos yyreduce:
588 1.1 christos #if YYDEBUG
589 1.1 christos if (yydebug)
590 1.1 christos printf("%sdebug: state %d, reducing by rule %d (%s)\n",
591 1.1 christos YYPREFIX, yystate, yyn, yyrule[yyn]);
592 1.1 christos #endif
593 1.1 christos yym = yylen[yyn];
594 1.1.1.4 christos if (yym > 0)
595 1.1 christos yyval = yystack.l_mark[1-yym];
596 1.1 christos else
597 1.1 christos memset(&yyval, 0, sizeof yyval);
598 1.1.1.4 christos
599 1.1 christos switch (yyn)
600 1.1 christos {
601 1.1 christos case 3:
602 1.1 christos #line 66 "ok_syntax1.y"
603 1.1 christos { yyerrok ; }
604 1.1 christos break;
605 1.1 christos case 4:
606 1.1 christos #line 70 "ok_syntax1.y"
607 1.1 christos { printf("%d\n",yystack.l_mark[0].ival);}
608 1.1 christos break;
609 1.1 christos case 5:
610 1.1 christos #line 72 "ok_syntax1.y"
611 1.1 christos { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
612 1.1 christos break;
613 1.1 christos case 6:
614 1.1 christos #line 76 "ok_syntax1.y"
615 1.1 christos { yyval.ival = yystack.l_mark[-1].ival; }
616 1.1 christos break;
617 1.1 christos case 7:
618 1.1 christos #line 78 "ok_syntax1.y"
619 1.1 christos { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
620 1.1 christos break;
621 1.1 christos case 8:
622 1.1 christos #line 80 "ok_syntax1.y"
623 1.1 christos { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
624 1.1 christos break;
625 1.1 christos case 9:
626 1.1 christos #line 82 "ok_syntax1.y"
627 1.1 christos { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
628 1.1 christos break;
629 1.1 christos case 10:
630 1.1 christos #line 84 "ok_syntax1.y"
631 1.1 christos { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
632 1.1 christos break;
633 1.1 christos case 11:
634 1.1 christos #line 86 "ok_syntax1.y"
635 1.1 christos { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
636 1.1 christos break;
637 1.1 christos case 12:
638 1.1 christos #line 88 "ok_syntax1.y"
639 1.1 christos { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
640 1.1 christos break;
641 1.1 christos case 13:
642 1.1 christos #line 90 "ok_syntax1.y"
643 1.1 christos { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
644 1.1 christos break;
645 1.1 christos case 14:
646 1.1 christos #line 92 "ok_syntax1.y"
647 1.1 christos { yyval.ival = - yystack.l_mark[0].ival; }
648 1.1 christos break;
649 1.1 christos case 15:
650 1.1 christos #line 94 "ok_syntax1.y"
651 1.1 christos { yyval.ival = regs[yystack.l_mark[0].ival]; }
652 1.1 christos break;
653 1.1 christos case 17:
654 1.1 christos #line 99 "ok_syntax1.y"
655 1.1 christos { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
656 1.1 christos break;
657 1.1 christos case 18:
658 1.1 christos #line 101 "ok_syntax1.y"
659 1.1 christos { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
660 1.1 christos break;
661 1.1.1.6 christos #line 660 "ok_syntax1.tab.c"
662 1.1 christos }
663 1.1 christos yystack.s_mark -= yym;
664 1.1 christos yystate = *yystack.s_mark;
665 1.1 christos yystack.l_mark -= yym;
666 1.1 christos yym = yylhs[yyn];
667 1.1 christos if (yystate == 0 && yym == 0)
668 1.1 christos {
669 1.1 christos #if YYDEBUG
670 1.1 christos if (yydebug)
671 1.1 christos printf("%sdebug: after reduction, shifting from state 0 to\
672 1.1 christos state %d\n", YYPREFIX, YYFINAL);
673 1.1 christos #endif
674 1.1 christos yystate = YYFINAL;
675 1.1 christos *++yystack.s_mark = YYFINAL;
676 1.1 christos *++yystack.l_mark = yyval;
677 1.1 christos if (yychar < 0)
678 1.1 christos {
679 1.1.1.4 christos yychar = YYLEX;
680 1.1.1.4 christos if (yychar < 0) yychar = YYEOF;
681 1.1 christos #if YYDEBUG
682 1.1 christos if (yydebug)
683 1.1 christos {
684 1.1.1.4 christos if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
685 1.1 christos printf("%sdebug: state %d, reading %d (%s)\n",
686 1.1 christos YYPREFIX, YYFINAL, yychar, yys);
687 1.1 christos }
688 1.1 christos #endif
689 1.1 christos }
690 1.1 christos if (yychar == YYEOF) goto yyaccept;
691 1.1 christos goto yyloop;
692 1.1 christos }
693 1.1.1.4 christos if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
694 1.1.1.4 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
695 1.1 christos yystate = yytable[yyn];
696 1.1 christos else
697 1.1 christos yystate = yydgoto[yym];
698 1.1 christos #if YYDEBUG
699 1.1 christos if (yydebug)
700 1.1 christos printf("%sdebug: after reduction, shifting from state %d \
701 1.1 christos to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
702 1.1 christos #endif
703 1.1.1.4 christos if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
704 1.1 christos *++yystack.s_mark = (YYINT) yystate;
705 1.1 christos *++yystack.l_mark = yyval;
706 1.1 christos goto yyloop;
707 1.1 christos
708 1.1 christos yyoverflow:
709 1.1 christos YYERROR_CALL("yacc stack overflow");
710 1.1 christos
711 1.1 christos yyabort:
712 1.1 christos yyfreestack(&yystack);
713 1.1 christos return (1);
714 1.1 christos
715 1.1 christos yyaccept:
716 1.1 christos yyfreestack(&yystack);
717 1.1 christos return (0);
718 1.1 christos }
719