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