ok_syntax1.tab.c revision 1.1.1.3.2.1 1 1.1.1.3.2.1 pgoyette /* $NetBSD: ok_syntax1.tab.c,v 1.1.1.3.2.1 2017/03/20 06:52:18 pgoyette 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 christos #define YYMAJOR 1
9 1.1 christos #define YYMINOR 9
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.3.2.1 pgoyette #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 christos int yydebug;
312 1.1 christos int yynerrs;
313 1.1 christos
314 1.1 christos /* define the initial stack-sizes */
315 1.1 christos #ifdef YYSTACKSIZE
316 1.1 christos #undef YYMAXDEPTH
317 1.1 christos #define YYMAXDEPTH YYSTACKSIZE
318 1.1 christos #else
319 1.1 christos #ifdef YYMAXDEPTH
320 1.1 christos #define YYSTACKSIZE YYMAXDEPTH
321 1.1 christos #else
322 1.1 christos #define YYSTACKSIZE 10000
323 1.1 christos #define YYMAXDEPTH 10000
324 1.1 christos #endif
325 1.1 christos #endif
326 1.1 christos
327 1.1 christos #define YYINITSTACKSIZE 200
328 1.1 christos
329 1.1 christos typedef struct {
330 1.1 christos unsigned stacksize;
331 1.1 christos YYINT *s_base;
332 1.1 christos YYINT *s_mark;
333 1.1 christos YYINT *s_last;
334 1.1 christos YYSTYPE *l_base;
335 1.1 christos YYSTYPE *l_mark;
336 1.1 christos } YYSTACKDATA;
337 1.1 christos #line 104 "ok_syntax1.y"
338 1.1 christos /* start of programs */
339 1.1 christos
340 1.1 christos #ifdef YYBYACC
341 1.1 christos extern int YYLEX_DECL();
342 1.1 christos #endif
343 1.1 christos
344 1.1 christos int
345 1.1 christos main (void)
346 1.1 christos {
347 1.1 christos int regs[26];
348 1.1 christos int base = 10;
349 1.1 christos
350 1.1 christos while(!feof(stdin)) {
351 1.1 christos yyparse(regs, &base);
352 1.1 christos }
353 1.1 christos return 0;
354 1.1 christos }
355 1.1 christos
356 1.1 christos #define UNUSED(x) ((void)(x))
357 1.1 christos
358 1.1 christos static void
359 1.1 christos YYERROR_DECL()
360 1.1 christos {
361 1.1 christos UNUSED(regs); /* %parse-param regs is not actually used here */
362 1.1 christos UNUSED(base); /* %parse-param base is not actually used here */
363 1.1 christos fprintf(stderr, "%s\n", s);
364 1.1 christos }
365 1.1 christos
366 1.1 christos int
367 1.1 christos YYLEX_DECL()
368 1.1 christos {
369 1.1 christos /* lexical analysis routine */
370 1.1 christos /* returns LETTER for a lower case letter, yylval = 0 through 25 */
371 1.1 christos /* return DIGIT for a digit, yylval = 0 through 9 */
372 1.1 christos /* all other characters are returned immediately */
373 1.1 christos
374 1.1 christos int c;
375 1.1 christos
376 1.1 christos while( (c=getchar()) == ' ' ) { /* skip blanks */ }
377 1.1 christos
378 1.1 christos /* c is now nonblank */
379 1.1 christos
380 1.1 christos if( islower( c )) {
381 1.1 christos yylval->ival = (c - 'a');
382 1.1 christos return ( LETTER );
383 1.1 christos }
384 1.1 christos if( isdigit( c )) {
385 1.1 christos yylval->ival = (c - '0') % (*base);
386 1.1 christos return ( DIGIT );
387 1.1 christos }
388 1.1 christos return( c );
389 1.1 christos }
390 1.1 christos #line 389 "ok_syntax1.tab.c"
391 1.1 christos
392 1.1 christos #if YYDEBUG
393 1.1.1.3.2.1 pgoyette #include <stdio.h> /* needed for printf */
394 1.1 christos #endif
395 1.1 christos
396 1.1 christos #include <stdlib.h> /* needed for malloc, etc */
397 1.1 christos #include <string.h> /* needed for memset */
398 1.1 christos
399 1.1 christos /* allocate initial stack or double stack size, up to YYMAXDEPTH */
400 1.1 christos static int yygrowstack(YYSTACKDATA *data)
401 1.1 christos {
402 1.1 christos int i;
403 1.1 christos unsigned newsize;
404 1.1 christos YYINT *newss;
405 1.1 christos YYSTYPE *newvs;
406 1.1 christos
407 1.1 christos if ((newsize = data->stacksize) == 0)
408 1.1 christos newsize = YYINITSTACKSIZE;
409 1.1 christos else if (newsize >= YYMAXDEPTH)
410 1.1 christos return YYENOMEM;
411 1.1 christos else if ((newsize *= 2) > YYMAXDEPTH)
412 1.1 christos newsize = YYMAXDEPTH;
413 1.1 christos
414 1.1 christos i = (int) (data->s_mark - data->s_base);
415 1.1 christos newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
416 1.1 christos if (newss == 0)
417 1.1 christos return YYENOMEM;
418 1.1 christos
419 1.1 christos data->s_base = newss;
420 1.1 christos data->s_mark = newss + i;
421 1.1 christos
422 1.1 christos newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
423 1.1 christos if (newvs == 0)
424 1.1 christos return YYENOMEM;
425 1.1 christos
426 1.1 christos data->l_base = newvs;
427 1.1 christos data->l_mark = newvs + i;
428 1.1 christos
429 1.1 christos data->stacksize = newsize;
430 1.1 christos data->s_last = data->s_base + newsize - 1;
431 1.1 christos return 0;
432 1.1 christos }
433 1.1 christos
434 1.1 christos #if YYPURE || defined(YY_NO_LEAKS)
435 1.1 christos static void yyfreestack(YYSTACKDATA *data)
436 1.1 christos {
437 1.1 christos free(data->s_base);
438 1.1 christos free(data->l_base);
439 1.1 christos memset(data, 0, sizeof(*data));
440 1.1 christos }
441 1.1 christos #else
442 1.1 christos #define yyfreestack(data) /* nothing */
443 1.1 christos #endif
444 1.1 christos
445 1.1 christos #define YYABORT goto yyabort
446 1.1 christos #define YYREJECT goto yyabort
447 1.1 christos #define YYACCEPT goto yyaccept
448 1.1 christos #define YYERROR goto yyerrlab
449 1.1 christos
450 1.1 christos int
451 1.1 christos YYPARSE_DECL()
452 1.1 christos {
453 1.1 christos int yyerrflag;
454 1.1 christos int yychar;
455 1.1 christos YYSTYPE yyval;
456 1.1 christos YYSTYPE yylval;
457 1.1 christos
458 1.1 christos /* variables for the parser stack */
459 1.1 christos YYSTACKDATA yystack;
460 1.1 christos int yym, yyn, yystate;
461 1.1 christos #if YYDEBUG
462 1.1 christos const char *yys;
463 1.1 christos
464 1.1 christos if ((yys = getenv("YYDEBUG")) != 0)
465 1.1 christos {
466 1.1 christos yyn = *yys;
467 1.1 christos if (yyn >= '0' && yyn <= '9')
468 1.1 christos yydebug = yyn - '0';
469 1.1 christos }
470 1.1 christos #endif
471 1.1 christos
472 1.1.1.3.2.1 pgoyette yym = 0;
473 1.1.1.3.2.1 pgoyette yyn = 0;
474 1.1 christos yynerrs = 0;
475 1.1 christos yyerrflag = 0;
476 1.1 christos yychar = YYEMPTY;
477 1.1 christos yystate = 0;
478 1.1 christos
479 1.1 christos #if YYPURE
480 1.1 christos memset(&yystack, 0, sizeof(yystack));
481 1.1 christos #endif
482 1.1 christos
483 1.1 christos if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
484 1.1 christos yystack.s_mark = yystack.s_base;
485 1.1 christos yystack.l_mark = yystack.l_base;
486 1.1 christos yystate = 0;
487 1.1 christos *yystack.s_mark = 0;
488 1.1 christos
489 1.1 christos yyloop:
490 1.1 christos if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
491 1.1 christos if (yychar < 0)
492 1.1 christos {
493 1.1.1.3.2.1 pgoyette yychar = YYLEX;
494 1.1.1.3.2.1 pgoyette if (yychar < 0) yychar = YYEOF;
495 1.1 christos #if YYDEBUG
496 1.1 christos if (yydebug)
497 1.1 christos {
498 1.1.1.3.2.1 pgoyette if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
499 1.1 christos printf("%sdebug: state %d, reading %d (%s)\n",
500 1.1 christos YYPREFIX, yystate, yychar, yys);
501 1.1 christos }
502 1.1 christos #endif
503 1.1 christos }
504 1.1.1.3.2.1 pgoyette if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
505 1.1.1.3.2.1 pgoyette yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
506 1.1 christos {
507 1.1 christos #if YYDEBUG
508 1.1 christos if (yydebug)
509 1.1 christos printf("%sdebug: state %d, shifting to state %d\n",
510 1.1 christos YYPREFIX, yystate, yytable[yyn]);
511 1.1 christos #endif
512 1.1.1.3.2.1 pgoyette if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
513 1.1 christos yystate = yytable[yyn];
514 1.1 christos *++yystack.s_mark = yytable[yyn];
515 1.1 christos *++yystack.l_mark = yylval;
516 1.1 christos yychar = YYEMPTY;
517 1.1 christos if (yyerrflag > 0) --yyerrflag;
518 1.1 christos goto yyloop;
519 1.1 christos }
520 1.1.1.3.2.1 pgoyette if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
521 1.1.1.3.2.1 pgoyette yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
522 1.1 christos {
523 1.1 christos yyn = yytable[yyn];
524 1.1 christos goto yyreduce;
525 1.1 christos }
526 1.1.1.3.2.1 pgoyette if (yyerrflag != 0) goto yyinrecovery;
527 1.1 christos
528 1.1 christos YYERROR_CALL("syntax error");
529 1.1 christos
530 1.1.1.3.2.1 pgoyette goto yyerrlab; /* redundant goto avoids 'unused label' warning */
531 1.1 christos yyerrlab:
532 1.1 christos ++yynerrs;
533 1.1 christos
534 1.1 christos yyinrecovery:
535 1.1 christos if (yyerrflag < 3)
536 1.1 christos {
537 1.1 christos yyerrflag = 3;
538 1.1 christos for (;;)
539 1.1 christos {
540 1.1.1.3.2.1 pgoyette if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
541 1.1.1.3.2.1 pgoyette yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
542 1.1 christos {
543 1.1 christos #if YYDEBUG
544 1.1 christos if (yydebug)
545 1.1 christos printf("%sdebug: state %d, error recovery shifting\
546 1.1 christos to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
547 1.1 christos #endif
548 1.1.1.3.2.1 pgoyette if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
549 1.1 christos yystate = yytable[yyn];
550 1.1 christos *++yystack.s_mark = yytable[yyn];
551 1.1 christos *++yystack.l_mark = yylval;
552 1.1 christos goto yyloop;
553 1.1 christos }
554 1.1 christos else
555 1.1 christos {
556 1.1 christos #if YYDEBUG
557 1.1 christos if (yydebug)
558 1.1 christos printf("%sdebug: error recovery discarding state %d\n",
559 1.1 christos YYPREFIX, *yystack.s_mark);
560 1.1 christos #endif
561 1.1 christos if (yystack.s_mark <= yystack.s_base) goto yyabort;
562 1.1 christos --yystack.s_mark;
563 1.1 christos --yystack.l_mark;
564 1.1 christos }
565 1.1 christos }
566 1.1 christos }
567 1.1 christos else
568 1.1 christos {
569 1.1 christos if (yychar == YYEOF) goto yyabort;
570 1.1 christos #if YYDEBUG
571 1.1 christos if (yydebug)
572 1.1 christos {
573 1.1.1.3.2.1 pgoyette if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
574 1.1 christos printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
575 1.1 christos YYPREFIX, yystate, yychar, yys);
576 1.1 christos }
577 1.1 christos #endif
578 1.1 christos yychar = YYEMPTY;
579 1.1 christos goto yyloop;
580 1.1 christos }
581 1.1 christos
582 1.1 christos yyreduce:
583 1.1 christos #if YYDEBUG
584 1.1 christos if (yydebug)
585 1.1 christos printf("%sdebug: state %d, reducing by rule %d (%s)\n",
586 1.1 christos YYPREFIX, yystate, yyn, yyrule[yyn]);
587 1.1 christos #endif
588 1.1 christos yym = yylen[yyn];
589 1.1.1.3.2.1 pgoyette if (yym > 0)
590 1.1 christos yyval = yystack.l_mark[1-yym];
591 1.1 christos else
592 1.1 christos memset(&yyval, 0, sizeof yyval);
593 1.1.1.3.2.1 pgoyette
594 1.1 christos switch (yyn)
595 1.1 christos {
596 1.1 christos case 3:
597 1.1 christos #line 66 "ok_syntax1.y"
598 1.1 christos { yyerrok ; }
599 1.1 christos break;
600 1.1 christos case 4:
601 1.1 christos #line 70 "ok_syntax1.y"
602 1.1 christos { printf("%d\n",yystack.l_mark[0].ival);}
603 1.1 christos break;
604 1.1 christos case 5:
605 1.1 christos #line 72 "ok_syntax1.y"
606 1.1 christos { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
607 1.1 christos break;
608 1.1 christos case 6:
609 1.1 christos #line 76 "ok_syntax1.y"
610 1.1 christos { yyval.ival = yystack.l_mark[-1].ival; }
611 1.1 christos break;
612 1.1 christos case 7:
613 1.1 christos #line 78 "ok_syntax1.y"
614 1.1 christos { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
615 1.1 christos break;
616 1.1 christos case 8:
617 1.1 christos #line 80 "ok_syntax1.y"
618 1.1 christos { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
619 1.1 christos break;
620 1.1 christos case 9:
621 1.1 christos #line 82 "ok_syntax1.y"
622 1.1 christos { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
623 1.1 christos break;
624 1.1 christos case 10:
625 1.1 christos #line 84 "ok_syntax1.y"
626 1.1 christos { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
627 1.1 christos break;
628 1.1 christos case 11:
629 1.1 christos #line 86 "ok_syntax1.y"
630 1.1 christos { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
631 1.1 christos break;
632 1.1 christos case 12:
633 1.1 christos #line 88 "ok_syntax1.y"
634 1.1 christos { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
635 1.1 christos break;
636 1.1 christos case 13:
637 1.1 christos #line 90 "ok_syntax1.y"
638 1.1 christos { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
639 1.1 christos break;
640 1.1 christos case 14:
641 1.1 christos #line 92 "ok_syntax1.y"
642 1.1 christos { yyval.ival = - yystack.l_mark[0].ival; }
643 1.1 christos break;
644 1.1 christos case 15:
645 1.1 christos #line 94 "ok_syntax1.y"
646 1.1 christos { yyval.ival = regs[yystack.l_mark[0].ival]; }
647 1.1 christos break;
648 1.1 christos case 17:
649 1.1 christos #line 99 "ok_syntax1.y"
650 1.1 christos { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
651 1.1 christos break;
652 1.1 christos case 18:
653 1.1 christos #line 101 "ok_syntax1.y"
654 1.1 christos { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
655 1.1 christos break;
656 1.1.1.3.2.1 pgoyette #line 655 "ok_syntax1.tab.c"
657 1.1 christos }
658 1.1 christos yystack.s_mark -= yym;
659 1.1 christos yystate = *yystack.s_mark;
660 1.1 christos yystack.l_mark -= yym;
661 1.1 christos yym = yylhs[yyn];
662 1.1 christos if (yystate == 0 && yym == 0)
663 1.1 christos {
664 1.1 christos #if YYDEBUG
665 1.1 christos if (yydebug)
666 1.1 christos printf("%sdebug: after reduction, shifting from state 0 to\
667 1.1 christos state %d\n", YYPREFIX, YYFINAL);
668 1.1 christos #endif
669 1.1 christos yystate = YYFINAL;
670 1.1 christos *++yystack.s_mark = YYFINAL;
671 1.1 christos *++yystack.l_mark = yyval;
672 1.1 christos if (yychar < 0)
673 1.1 christos {
674 1.1.1.3.2.1 pgoyette yychar = YYLEX;
675 1.1.1.3.2.1 pgoyette if (yychar < 0) yychar = YYEOF;
676 1.1 christos #if YYDEBUG
677 1.1 christos if (yydebug)
678 1.1 christos {
679 1.1.1.3.2.1 pgoyette if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
680 1.1 christos printf("%sdebug: state %d, reading %d (%s)\n",
681 1.1 christos YYPREFIX, YYFINAL, yychar, yys);
682 1.1 christos }
683 1.1 christos #endif
684 1.1 christos }
685 1.1 christos if (yychar == YYEOF) goto yyaccept;
686 1.1 christos goto yyloop;
687 1.1 christos }
688 1.1.1.3.2.1 pgoyette if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
689 1.1.1.3.2.1 pgoyette yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
690 1.1 christos yystate = yytable[yyn];
691 1.1 christos else
692 1.1 christos yystate = yydgoto[yym];
693 1.1 christos #if YYDEBUG
694 1.1 christos if (yydebug)
695 1.1 christos printf("%sdebug: after reduction, shifting from state %d \
696 1.1 christos to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
697 1.1 christos #endif
698 1.1.1.3.2.1 pgoyette if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
699 1.1 christos *++yystack.s_mark = (YYINT) yystate;
700 1.1 christos *++yystack.l_mark = yyval;
701 1.1 christos goto yyloop;
702 1.1 christos
703 1.1 christos yyoverflow:
704 1.1 christos YYERROR_CALL("yacc stack overflow");
705 1.1 christos
706 1.1 christos yyabort:
707 1.1 christos yyfreestack(&yystack);
708 1.1 christos return (1);
709 1.1 christos
710 1.1 christos yyaccept:
711 1.1 christos yyfreestack(&yystack);
712 1.1 christos return (0);
713 1.1 christos }
714