calc3.tab.c revision 1.1.1.9 1 /* $NetBSD: calc3.tab.c,v 1.1.1.9 2026/01/18 16:39:08 christos Exp $ */
2
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6
7 #define YYBYACC 1
8 #define YYMAJOR 2
9 #define YYMINOR 0
10 #define YYCHECK "yyyymmdd"
11
12 #define YYEMPTY (-1)
13 #define yyclearin (yychar = YYEMPTY)
14 #define yyerrok (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM (-2)
17 #define YYEOF 0
18 #undef YYBTYACC
19 #define YYBTYACC 0
20 #define YYDEBUGSTR YYPREFIX "debug"
21
22 #ifndef yyparse
23 #define yyparse calc3_parse
24 #endif /* yyparse */
25
26 #ifndef yylex
27 #define yylex calc3_lex
28 #endif /* yylex */
29
30 #ifndef yyerror
31 #define yyerror calc3_error
32 #endif /* yyerror */
33
34 #ifndef yychar
35 #define yychar calc3_char
36 #endif /* yychar */
37
38 #ifndef yyval
39 #define yyval calc3_val
40 #endif /* yyval */
41
42 #ifndef yylval
43 #define yylval calc3_lval
44 #endif /* yylval */
45
46 #ifndef yydebug
47 #define yydebug calc3_debug
48 #endif /* yydebug */
49
50 #ifndef yynerrs
51 #define yynerrs calc3_nerrs
52 #endif /* yynerrs */
53
54 #ifndef yyerrflag
55 #define yyerrflag calc3_errflag
56 #endif /* yyerrflag */
57
58 #ifndef yylhs
59 #define yylhs calc3_lhs
60 #endif /* yylhs */
61
62 #ifndef yylen
63 #define yylen calc3_len
64 #endif /* yylen */
65
66 #ifndef yydefred
67 #define yydefred calc3_defred
68 #endif /* yydefred */
69
70 #ifndef yystos
71 #define yystos calc3_stos
72 #endif /* yystos */
73
74 #ifndef yydgoto
75 #define yydgoto calc3_dgoto
76 #endif /* yydgoto */
77
78 #ifndef yysindex
79 #define yysindex calc3_sindex
80 #endif /* yysindex */
81
82 #ifndef yyrindex
83 #define yyrindex calc3_rindex
84 #endif /* yyrindex */
85
86 #ifndef yygindex
87 #define yygindex calc3_gindex
88 #endif /* yygindex */
89
90 #ifndef yytable
91 #define yytable calc3_table
92 #endif /* yytable */
93
94 #ifndef yycheck
95 #define yycheck calc3_check
96 #endif /* yycheck */
97
98 #ifndef yyname
99 #define yyname calc3_name
100 #endif /* yyname */
101
102 #ifndef yyrule
103 #define yyrule calc3_rule
104 #endif /* yyrule */
105
106 #if YYBTYACC
107
108 #ifndef yycindex
109 #define yycindex calc3_cindex
110 #endif /* yycindex */
111
112 #ifndef yyctable
113 #define yyctable calc3_ctable
114 #endif /* yyctable */
115
116 #endif /* YYBTYACC */
117
118 #define YYPREFIX "calc3_"
119
120 #define YYPURE 1
121
122 #line 9 "calc3.y"
123 # include <stdio.h>
124 # include <ctype.h>
125
126 #ifdef YYBISON
127 #define YYSTYPE int
128 #define YYLEX_PARAM base
129 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
130 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
131 int YYLEX_DECL();
132 static void YYERROR_DECL();
133 #endif
134
135 #line 134 "calc3.tab.c"
136
137 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
138 /* Default: YYSTYPE is the semantic value type. */
139 typedef int YYSTYPE;
140 # define YYSTYPE_IS_DECLARED 1
141 #endif
142
143 /* compatibility with bison */
144 #ifdef YYPARSE_PARAM
145 /* compatibility with FreeBSD */
146 # ifdef YYPARSE_PARAM_TYPE
147 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
148 # else
149 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
150 # endif
151 #else
152 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
153 #endif
154
155 /* Parameters sent to lex. */
156 #ifdef YYLEX_PARAM
157 # ifdef YYLEX_PARAM_TYPE
158 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
159 # else
160 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
161 # endif
162 # define YYLEX yylex(&yylval, YYLEX_PARAM)
163 #else
164 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
165 # define YYLEX yylex(&yylval, base)
166 #endif
167
168 /* Parameters sent to yyerror. */
169 #ifndef YYERROR_DECL
170 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
171 #endif
172 #ifndef YYERROR_CALL
173 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
174 #endif
175
176 extern int YYPARSE_DECL();
177
178 #define DIGIT 257
179 #define LETTER 258
180 #define UMINUS 259
181 #define YYERRCODE 256
182 typedef int YYINT;
183 static const YYINT calc3_lhs[] = { -1,
184 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
185 2, 2, 2, 2, 2, 2, 3, 3,
186 };
187 static const YYINT calc3_len[] = { 2,
188 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
189 3, 3, 3, 2, 1, 1, 1, 2,
190 };
191 static const YYINT calc3_defred[] = { 1,
192 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
193 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
194 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
195 10, 11,
196 };
197 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
198 static const YYINT calc3_stos[] = { 0,
199 261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
200 61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
201 47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
202 263, 263,
203 };
204 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
205 static const YYINT calc3_dgoto[] = { 1,
206 7, 8, 9,
207 };
208 static const YYINT calc3_sindex[] = { 0,
209 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
210 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
211 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
212 0, 0,
213 };
214 static const YYINT calc3_rindex[] = { 0,
215 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
217 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
218 0, 0,
219 };
220 #if YYBTYACC
221 static const YYINT calc3_cindex[] = { 0,
222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225 0, 0,
226 };
227 #endif
228 static const YYINT calc3_gindex[] = { 0,
229 0, 65, 0,
230 };
231 #define YYTABLESIZE 220
232 static const YYINT calc3_table[] = { 6,
233 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
234 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
235 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
236 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
237 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
238 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
239 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
240 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
241 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
242 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
243 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
244 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
245 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
246 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
247 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
250 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
251 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
252 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
253 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
254 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
255 };
256 static const YYINT calc3_check[] = { 40,
257 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
258 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
259 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
260 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
261 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
262 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
263 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
264 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
265 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
266 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
267 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
268 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
269 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
270 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
271 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
273 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
274 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
275 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
276 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
277 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
278 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
279 };
280 #if YYBTYACC
281 static const YYINT calc3_ctable[] = { -1,
282 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
284 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
285 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
287 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
288 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
289 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
291 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
292 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
294 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
295 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
296 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
297 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
298 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
299 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
300 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
302 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
303 -1, -1, -1, -1, -1, -1, -1, -1, -1,
304 };
305 #endif
306 #define YYFINAL 1
307 #ifndef YYDEBUG
308 #define YYDEBUG 0
309 #endif
310 #define YYMAXTOKEN 259
311 #define YYUNDFTOKEN 265
312 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
313 #if YYDEBUG
314 #ifndef NULL
315 #define NULL (void*)0
316 #endif
317 static const char *const calc3_name[] = {
318
319 "$end",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'\\n'",NULL,NULL,NULL,NULL,
320 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
321 NULL,NULL,NULL,NULL,NULL,NULL,"'%'","'&'",NULL,"'('","')'","'*'","'+'",NULL,
322 "'-'",NULL,"'/'",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
323 NULL,"'='",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
324 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
325 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
326 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
327 NULL,"'|'",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
328 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
329 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
330 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
331 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
332 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
333 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
334 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
335 NULL,NULL,NULL,NULL,NULL,NULL,"error","DIGIT","LETTER","UMINUS","$accept",
336 "list","stat","expr","number","illegal-symbol",
337 };
338 static const char *const calc3_rule[] = {
339 "$accept : list",
340 "list :",
341 "list : list stat '\\n'",
342 "list : list error '\\n'",
343 "stat : expr",
344 "stat : LETTER '=' expr",
345 "expr : '(' expr ')'",
346 "expr : expr '+' expr",
347 "expr : expr '-' expr",
348 "expr : expr '*' expr",
349 "expr : expr '/' expr",
350 "expr : expr '%' expr",
351 "expr : expr '&' expr",
352 "expr : expr '|' expr",
353 "expr : '-' expr",
354 "expr : LETTER",
355 "expr : number",
356 "number : DIGIT",
357 "number : number DIGIT",
358
359 };
360 #endif
361
362 #if YYDEBUG
363 int yydebug;
364 #endif
365
366 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
367 #ifndef YYLLOC_DEFAULT
368 #define YYLLOC_DEFAULT(loc, rhs, n) \
369 do \
370 { \
371 if (n == 0) \
372 { \
373 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
374 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
375 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
376 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
377 } \
378 else \
379 { \
380 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
381 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
382 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
383 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
384 } \
385 } while (0)
386 #endif /* YYLLOC_DEFAULT */
387 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
388 #if YYBTYACC
389
390 #ifndef YYLVQUEUEGROWTH
391 #define YYLVQUEUEGROWTH 32
392 #endif
393 #endif /* YYBTYACC */
394
395 /* define the initial stack-sizes */
396 #ifdef YYSTACKSIZE
397 #undef YYMAXDEPTH
398 #define YYMAXDEPTH YYSTACKSIZE
399 #else
400 #ifdef YYMAXDEPTH
401 #define YYSTACKSIZE YYMAXDEPTH
402 #else
403 #define YYSTACKSIZE 10000
404 #define YYMAXDEPTH 10000
405 #endif
406 #endif
407
408 #ifndef YYINITSTACKSIZE
409 #define YYINITSTACKSIZE 200
410 #endif
411
412 typedef struct {
413 unsigned stacksize;
414 YYINT *s_base;
415 YYINT *s_mark;
416 YYINT *s_last;
417 YYSTYPE *l_base;
418 YYSTYPE *l_mark;
419 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
420 YYLTYPE *p_base;
421 YYLTYPE *p_mark;
422 #endif
423 } YYSTACKDATA;
424 #if YYBTYACC
425
426 struct YYParseState_s
427 {
428 struct YYParseState_s *save; /* Previously saved parser state */
429 YYSTACKDATA yystack; /* saved parser stack */
430 int state; /* saved parser state */
431 int errflag; /* saved error recovery status */
432 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
433 YYINT ctry; /* saved index in yyctable[] for this conflict */
434 };
435 typedef struct YYParseState_s YYParseState;
436 #endif /* YYBTYACC */
437 #line 76 "calc3.y"
438 /* start of programs */
439
440 #ifdef YYBYACC
441 extern int YYLEX_DECL();
442 #endif
443
444 int
445 main (void)
446 {
447 int regs[26];
448 int base = 10;
449
450 while(!feof(stdin)) {
451 yyparse(regs, &base);
452 }
453 return 0;
454 }
455
456 #define UNUSED(x) ((void)(x))
457
458 static void
459 YYERROR_DECL()
460 {
461 UNUSED(regs); /* %parse-param regs is not actually used here */
462 UNUSED(base); /* %parse-param base is not actually used here */
463 fprintf(stderr, "%s\n", s);
464 }
465
466 int
467 YYLEX_DECL()
468 {
469 /* lexical analysis routine */
470 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
471 /* return DIGIT for a digit, yylval = 0 through 9 */
472 /* all other characters are returned immediately */
473
474 int c;
475
476 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
477
478 /* c is now nonblank */
479
480 if( islower( c )) {
481 *yylval = (c - 'a');
482 return ( LETTER );
483 }
484 if( isdigit( c )) {
485 *yylval = (c - '0') % (*base);
486 return ( DIGIT );
487 }
488 return( c );
489 }
490 #line 489 "calc3.tab.c"
491
492 /* For use in generated program */
493 #define yydepth (int)(yystack.s_mark - yystack.s_base)
494 #if YYBTYACC
495 #define yytrial (yyps->save)
496 #endif /* YYBTYACC */
497
498 #if YYDEBUG
499 #include <stdio.h> /* needed for printf */
500 #endif
501
502 #include <stdlib.h> /* needed for malloc, etc */
503 #include <string.h> /* needed for memset */
504
505 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
506 static int yygrowstack(YYSTACKDATA *data)
507 {
508 int i;
509 unsigned newsize;
510 YYINT *newss;
511 YYSTYPE *newvs;
512 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
513 YYLTYPE *newps;
514 #endif
515
516 if ((newsize = data->stacksize) == 0)
517 newsize = YYINITSTACKSIZE;
518 else if (newsize >= YYMAXDEPTH)
519 return YYENOMEM;
520 else if ((newsize *= 2) > YYMAXDEPTH)
521 newsize = YYMAXDEPTH;
522
523 i = (int) (data->s_mark - data->s_base);
524 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
525 if (newss == NULL)
526 return YYENOMEM;
527
528 data->s_base = newss;
529 data->s_mark = newss + i;
530
531 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
532 if (newvs == NULL)
533 return YYENOMEM;
534
535 data->l_base = newvs;
536 data->l_mark = newvs + i;
537
538 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
539 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
540 if (newps == NULL)
541 return YYENOMEM;
542
543 data->p_base = newps;
544 data->p_mark = newps + i;
545 #endif
546
547 data->stacksize = newsize;
548 data->s_last = data->s_base + newsize - 1;
549
550 #if YYDEBUG
551 if (yydebug)
552 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
553 #endif
554 return 0;
555 }
556
557 #if YYPURE || defined(YY_NO_LEAKS)
558 static void yyfreestack(YYSTACKDATA *data)
559 {
560 free(data->s_base);
561 free(data->l_base);
562 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
563 free(data->p_base);
564 #endif
565 memset(data, 0, sizeof(*data));
566 }
567 #else
568 #define yyfreestack(data) /* nothing */
569 #endif /* YYPURE || defined(YY_NO_LEAKS) */
570 #if YYBTYACC
571
572 static YYParseState *
573 yyNewState(unsigned size)
574 {
575 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
576 if (p == NULL) return NULL;
577
578 p->yystack.stacksize = size;
579 if (size == 0)
580 {
581 p->yystack.s_base = NULL;
582 p->yystack.l_base = NULL;
583 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
584 p->yystack.p_base = NULL;
585 #endif
586 return p;
587 }
588 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
589 if (p->yystack.s_base == NULL) return NULL;
590 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
591 if (p->yystack.l_base == NULL) return NULL;
592 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
593 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
594 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
595 if (p->yystack.p_base == NULL) return NULL;
596 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
597 #endif
598
599 return p;
600 }
601
602 static void
603 yyFreeState(YYParseState *p)
604 {
605 yyfreestack(&p->yystack);
606 free(p);
607 }
608 #endif /* YYBTYACC */
609
610 #define YYABORT goto yyabort
611 #define YYREJECT goto yyabort
612 #define YYACCEPT goto yyaccept
613 #define YYERROR goto yyerrlab
614 #if YYBTYACC
615 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
616 #define YYVALID_NESTED do { if (yyps->save && \
617 yyps->save->save == 0) goto yyvalid; } while(0)
618 #endif /* YYBTYACC */
619
620 int
621 YYPARSE_DECL()
622 {
623 int yyerrflag;
624 int yychar;
625 YYSTYPE yyval;
626 YYSTYPE yylval;
627 int yynerrs;
628
629 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
630 YYLTYPE yyloc; /* position returned by actions */
631 YYLTYPE yylloc; /* position from the lexer */
632 #endif
633
634 /* variables for the parser stack */
635 YYSTACKDATA yystack;
636 #if YYBTYACC
637
638 /* Current parser state */
639 static YYParseState *yyps = NULL;
640
641 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
642 static YYParseState *yypath = NULL;
643
644 /* Base of the lexical value queue */
645 static YYSTYPE *yylvals = NULL;
646
647 /* Current position at lexical value queue */
648 static YYSTYPE *yylvp = NULL;
649
650 /* End position of lexical value queue */
651 static YYSTYPE *yylve = NULL;
652
653 /* The last allocated position at the lexical value queue */
654 static YYSTYPE *yylvlim = NULL;
655
656 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
657 /* Base of the lexical position queue */
658 static YYLTYPE *yylpsns = NULL;
659
660 /* Current position at lexical position queue */
661 static YYLTYPE *yylpp = NULL;
662
663 /* End position of lexical position queue */
664 static YYLTYPE *yylpe = NULL;
665
666 /* The last allocated position at the lexical position queue */
667 static YYLTYPE *yylplim = NULL;
668 #endif
669
670 /* Current position at lexical token queue */
671 static YYINT *yylexp = NULL;
672
673 static YYINT *yylexemes = NULL;
674 #endif /* YYBTYACC */
675 int yym, yyn, yystate, yyresult;
676 #if YYBTYACC
677 int yynewerrflag;
678 YYParseState *yyerrctx = NULL;
679 #endif /* YYBTYACC */
680 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
681 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
682 #endif
683 #if YYDEBUG
684 const char *yys;
685
686 if ((yys = getenv("YYDEBUG")) != NULL)
687 {
688 yyn = *yys;
689 if (yyn >= '0' && yyn <= '9')
690 yydebug = yyn - '0';
691 }
692 if (yydebug)
693 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
694 #endif
695 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
696 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
697 #endif
698
699 yyerrflag = 0;
700 yychar = 0;
701 memset(&yyval, 0, sizeof(yyval));
702 memset(&yylval, 0, sizeof(yylval));
703 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
704 memset(&yyloc, 0, sizeof(yyloc));
705 memset(&yylloc, 0, sizeof(yylloc));
706 #endif
707
708 #if YYBTYACC
709 yyps = yyNewState(0); if (yyps == NULL) goto yyenomem;
710 yyps->save = NULL;
711 #endif /* YYBTYACC */
712 yym = 0;
713 /* yyn is set below */
714 yynerrs = 0;
715 yyerrflag = 0;
716 yychar = YYEMPTY;
717 yystate = 0;
718
719 #if YYPURE
720 memset(&yystack, 0, sizeof(yystack));
721 #endif
722
723 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
724 yystack.s_mark = yystack.s_base;
725 yystack.l_mark = yystack.l_base;
726 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
727 yystack.p_mark = yystack.p_base;
728 #endif
729 yystate = 0;
730 *yystack.s_mark = 0;
731
732 yyloop:
733 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
734 if (yychar < 0)
735 {
736 #if YYBTYACC
737 do {
738 if (yylvp < yylve)
739 {
740 /* we're currently re-reading tokens */
741 yylval = *yylvp++;
742 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
743 yylloc = *yylpp++;
744 #endif
745 yychar = *yylexp++;
746 break;
747 }
748 if (yyps->save)
749 {
750 /* in trial mode; save scanner results for future parse attempts */
751 if (yylvp == yylvlim)
752 { /* Enlarge lexical value queue */
753 size_t p = (size_t) (yylvp - yylvals);
754 size_t s = (size_t) (yylvlim - yylvals);
755
756 s += YYLVQUEUEGROWTH;
757 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
758 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
759 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
760 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
761 #endif
762 yylvp = yylve = yylvals + p;
763 yylvlim = yylvals + s;
764 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
765 yylpp = yylpe = yylpsns + p;
766 yylplim = yylpsns + s;
767 #endif
768 yylexp = yylexemes + p;
769 }
770 *yylexp = (YYINT) YYLEX;
771 *yylvp++ = yylval;
772 yylve++;
773 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
774 *yylpp++ = yylloc;
775 yylpe++;
776 #endif
777 yychar = *yylexp++;
778 break;
779 }
780 /* normal operation, no conflict encountered */
781 #endif /* YYBTYACC */
782 yychar = YYLEX;
783 #if YYBTYACC
784 } while (0);
785 #endif /* YYBTYACC */
786 if (yychar < 0) yychar = YYEOF;
787 #if YYDEBUG
788 if (yydebug)
789 {
790 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
791 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
792 YYDEBUGSTR, yydepth, yystate, yychar, yys);
793 #ifdef YYSTYPE_TOSTRING
794 #if YYBTYACC
795 if (!yytrial)
796 #endif /* YYBTYACC */
797 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
798 #endif
799 fputc('\n', stderr);
800 }
801 #endif
802 }
803 #if YYBTYACC
804
805 /* Do we have a conflict? */
806 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
807 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
808 {
809 YYINT ctry;
810
811 if (yypath)
812 {
813 YYParseState *save;
814 #if YYDEBUG
815 if (yydebug)
816 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
817 YYDEBUGSTR, yydepth, yystate);
818 #endif
819 /* Switch to the next conflict context */
820 save = yypath;
821 yypath = save->save;
822 save->save = NULL;
823 ctry = save->ctry;
824 if (save->state != yystate) YYABORT;
825 yyFreeState(save);
826
827 }
828 else
829 {
830
831 /* Unresolved conflict - start/continue trial parse */
832 YYParseState *save;
833 #if YYDEBUG
834 if (yydebug)
835 {
836 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
837 if (yyps->save)
838 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
839 else
840 fputs("Starting trial parse.\n", stderr);
841 }
842 #endif
843 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
844 if (save == NULL) goto yyenomem;
845 save->save = yyps->save;
846 save->state = yystate;
847 save->errflag = yyerrflag;
848 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
849 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
850 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
851 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
852 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
853 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
854 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
855 #endif
856 ctry = yytable[yyn];
857 if (yyctable[ctry] == -1)
858 {
859 #if YYDEBUG
860 if (yydebug && yychar >= YYEOF)
861 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
862 #endif
863 ctry++;
864 }
865 save->ctry = ctry;
866 if (yyps->save == NULL)
867 {
868 /* If this is a first conflict in the stack, start saving lexemes */
869 if (!yylexemes)
870 {
871 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
872 if (yylexemes == NULL) goto yyenomem;
873 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
874 if (yylvals == NULL) goto yyenomem;
875 yylvlim = yylvals + YYLVQUEUEGROWTH;
876 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
877 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
878 if (yylpsns == NULL) goto yyenomem;
879 yylplim = yylpsns + YYLVQUEUEGROWTH;
880 #endif
881 }
882 if (yylvp == yylve)
883 {
884 yylvp = yylve = yylvals;
885 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
886 yylpp = yylpe = yylpsns;
887 #endif
888 yylexp = yylexemes;
889 if (yychar >= YYEOF)
890 {
891 *yylve++ = yylval;
892 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
893 *yylpe++ = yylloc;
894 #endif
895 *yylexp = (YYINT) yychar;
896 yychar = YYEMPTY;
897 }
898 }
899 }
900 if (yychar >= YYEOF)
901 {
902 yylvp--;
903 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
904 yylpp--;
905 #endif
906 yylexp--;
907 yychar = YYEMPTY;
908 }
909 save->lexeme = (int) (yylvp - yylvals);
910 yyps->save = save;
911 }
912 if (yytable[yyn] == ctry)
913 {
914 #if YYDEBUG
915 if (yydebug)
916 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
917 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
918 #endif
919 if (yychar < 0)
920 {
921 yylvp++;
922 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
923 yylpp++;
924 #endif
925 yylexp++;
926 }
927 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
928 goto yyoverflow;
929 yystate = yyctable[ctry];
930 *++yystack.s_mark = (YYINT) yystate;
931 *++yystack.l_mark = yylval;
932 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
933 *++yystack.p_mark = yylloc;
934 #endif
935 yychar = YYEMPTY;
936 if (yyerrflag > 0) --yyerrflag;
937 goto yyloop;
938 }
939 else
940 {
941 yyn = yyctable[ctry];
942 goto yyreduce;
943 }
944 } /* End of code dealing with conflicts */
945 #endif /* YYBTYACC */
946 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
947 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
948 {
949 #if YYDEBUG
950 if (yydebug)
951 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
952 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
953 #endif
954 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
955 yystate = yytable[yyn];
956 *++yystack.s_mark = yytable[yyn];
957 *++yystack.l_mark = yylval;
958 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
959 *++yystack.p_mark = yylloc;
960 #endif
961 yychar = YYEMPTY;
962 if (yyerrflag > 0) --yyerrflag;
963 goto yyloop;
964 }
965 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
966 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
967 {
968 yyn = yytable[yyn];
969 goto yyreduce;
970 }
971 if (yyerrflag != 0) goto yyinrecovery;
972 #if YYBTYACC
973
974 yynewerrflag = 1;
975 goto yyerrhandler;
976 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
977
978 yyerrlab:
979 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
980 * before looking for error recovery */
981 yystack.s_mark -= yym;
982 yystate = *yystack.s_mark;
983 yystack.l_mark -= yym;
984 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
985 yystack.p_mark -= yym;
986 #endif
987
988 yynewerrflag = 0;
989 yyerrhandler:
990 while (yyps->save)
991 {
992 int ctry;
993 YYParseState *save = yyps->save;
994 #if YYDEBUG
995 if (yydebug)
996 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
997 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
998 (int)(yylvp - yylvals - yyps->save->lexeme));
999 #endif
1000 /* Memorize most forward-looking error state in case it's really an error. */
1001 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1002 {
1003 /* Free old saved error context state */
1004 if (yyerrctx) yyFreeState(yyerrctx);
1005 /* Create and fill out new saved error context state */
1006 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1007 if (yyerrctx == NULL) goto yyenomem;
1008 yyerrctx->save = yyps->save;
1009 yyerrctx->state = yystate;
1010 yyerrctx->errflag = yyerrflag;
1011 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1012 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1013 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1014 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1015 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1016 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1017 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1018 #endif
1019 yyerrctx->lexeme = (int) (yylvp - yylvals);
1020 }
1021 yylvp = yylvals + save->lexeme;
1022 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1023 yylpp = yylpsns + save->lexeme;
1024 #endif
1025 yylexp = yylexemes + save->lexeme;
1026 yychar = YYEMPTY;
1027 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1028 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1029 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1030 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1031 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1032 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1033 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1034 #endif
1035 ctry = ++save->ctry;
1036 yystate = save->state;
1037 /* We tried shift, try reduce now */
1038 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1039 yyps->save = save->save;
1040 save->save = NULL;
1041 yyFreeState(save);
1042
1043 /* Nothing left on the stack -- error */
1044 if (!yyps->save)
1045 {
1046 #if YYDEBUG
1047 if (yydebug)
1048 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1049 YYPREFIX, yydepth);
1050 #endif
1051 /* Restore state as it was in the most forward-advanced error */
1052 yylvp = yylvals + yyerrctx->lexeme;
1053 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1054 yylpp = yylpsns + yyerrctx->lexeme;
1055 #endif
1056 yylexp = yylexemes + yyerrctx->lexeme;
1057 yychar = yylexp[-1];
1058 yylval = yylvp[-1];
1059 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1060 yylloc = yylpp[-1];
1061 #endif
1062 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1063 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1064 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1065 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1066 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1067 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1068 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1069 #endif
1070 yystate = yyerrctx->state;
1071 yyFreeState(yyerrctx);
1072 yyerrctx = NULL;
1073 }
1074 yynewerrflag = 1;
1075 }
1076 if (yynewerrflag == 0) goto yyinrecovery;
1077 #endif /* YYBTYACC */
1078
1079 YYERROR_CALL("syntax error");
1080 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1081 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1082 #endif
1083
1084 #if !YYBTYACC
1085 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1086 yyerrlab:
1087 #endif
1088 ++yynerrs;
1089
1090 yyinrecovery:
1091 if (yyerrflag < 3)
1092 {
1093 yyerrflag = 3;
1094 for (;;)
1095 {
1096 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1097 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1098 {
1099 #if YYDEBUG
1100 if (yydebug)
1101 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1102 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1103 #endif
1104 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1105 yystate = yytable[yyn];
1106 *++yystack.s_mark = yytable[yyn];
1107 *++yystack.l_mark = yylval;
1108 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1109 /* lookahead position is error end position */
1110 yyerror_loc_range[2] = yylloc;
1111 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1112 *++yystack.p_mark = yyloc;
1113 #endif
1114 goto yyloop;
1115 }
1116 else
1117 {
1118 #if YYDEBUG
1119 if (yydebug)
1120 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1121 YYDEBUGSTR, yydepth, *yystack.s_mark);
1122 #endif
1123 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1124 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1125 /* the current TOS position is the error start position */
1126 yyerror_loc_range[1] = *yystack.p_mark;
1127 #endif
1128 #if defined(YYDESTRUCT_CALL)
1129 #if YYBTYACC
1130 if (!yytrial)
1131 #endif /* YYBTYACC */
1132 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1133 YYDESTRUCT_CALL("error: discarding state",
1134 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1135 #else
1136 YYDESTRUCT_CALL("error: discarding state",
1137 yystos[*yystack.s_mark], yystack.l_mark);
1138 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1139 #endif /* defined(YYDESTRUCT_CALL) */
1140 --yystack.s_mark;
1141 --yystack.l_mark;
1142 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1143 --yystack.p_mark;
1144 #endif
1145 }
1146 }
1147 }
1148 else
1149 {
1150 if (yychar == YYEOF) goto yyabort;
1151 #if YYDEBUG
1152 if (yydebug)
1153 {
1154 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1155 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1156 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1157 }
1158 #endif
1159 #if defined(YYDESTRUCT_CALL)
1160 #if YYBTYACC
1161 if (!yytrial)
1162 #endif /* YYBTYACC */
1163 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1164 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1165 #else
1166 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1167 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1168 #endif /* defined(YYDESTRUCT_CALL) */
1169 yychar = YYEMPTY;
1170 goto yyloop;
1171 }
1172
1173 yyreduce:
1174 yym = yylen[yyn];
1175 #if YYDEBUG
1176 if (yydebug)
1177 {
1178 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1179 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1180 #ifdef YYSTYPE_TOSTRING
1181 #if YYBTYACC
1182 if (!yytrial)
1183 #endif /* YYBTYACC */
1184 if (yym > 0)
1185 {
1186 int i;
1187 fputc('<', stderr);
1188 for (i = yym; i > 0; i--)
1189 {
1190 if (i != yym) fputs(", ", stderr);
1191 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1192 yystack.l_mark[1-i]), stderr);
1193 }
1194 fputc('>', stderr);
1195 }
1196 #endif
1197 fputc('\n', stderr);
1198 }
1199 #endif
1200 if (yym > 0)
1201 yyval = yystack.l_mark[1-yym];
1202 else
1203 memset(&yyval, 0, sizeof yyval);
1204 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1205
1206 /* Perform position reduction */
1207 memset(&yyloc, 0, sizeof(yyloc));
1208 #if YYBTYACC
1209 if (!yytrial)
1210 #endif /* YYBTYACC */
1211 {
1212 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1213 /* just in case YYERROR is invoked within the action, save
1214 the start of the rhs as the error start position */
1215 yyerror_loc_range[1] = yystack.p_mark[1-yym];
1216 }
1217 #endif
1218
1219 switch (yyn)
1220 {
1221 case 3:
1222 #line 38 "calc3.y"
1223 { yyerrok ; }
1224 #line 1223 "calc3.tab.c"
1225 break;
1226 case 4:
1227 #line 42 "calc3.y"
1228 { printf("%d\n",yystack.l_mark[0]);}
1229 #line 1228 "calc3.tab.c"
1230 break;
1231 case 5:
1232 #line 44 "calc3.y"
1233 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1234 #line 1233 "calc3.tab.c"
1235 break;
1236 case 6:
1237 #line 48 "calc3.y"
1238 { yyval = yystack.l_mark[-1]; }
1239 #line 1238 "calc3.tab.c"
1240 break;
1241 case 7:
1242 #line 50 "calc3.y"
1243 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1244 #line 1243 "calc3.tab.c"
1245 break;
1246 case 8:
1247 #line 52 "calc3.y"
1248 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1249 #line 1248 "calc3.tab.c"
1250 break;
1251 case 9:
1252 #line 54 "calc3.y"
1253 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1254 #line 1253 "calc3.tab.c"
1255 break;
1256 case 10:
1257 #line 56 "calc3.y"
1258 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1259 #line 1258 "calc3.tab.c"
1260 break;
1261 case 11:
1262 #line 58 "calc3.y"
1263 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1264 #line 1263 "calc3.tab.c"
1265 break;
1266 case 12:
1267 #line 60 "calc3.y"
1268 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1269 #line 1268 "calc3.tab.c"
1270 break;
1271 case 13:
1272 #line 62 "calc3.y"
1273 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1274 #line 1273 "calc3.tab.c"
1275 break;
1276 case 14:
1277 #line 64 "calc3.y"
1278 { yyval = - yystack.l_mark[0]; }
1279 #line 1278 "calc3.tab.c"
1280 break;
1281 case 15:
1282 #line 66 "calc3.y"
1283 { yyval = regs[yystack.l_mark[0]]; }
1284 #line 1283 "calc3.tab.c"
1285 break;
1286 case 17:
1287 #line 71 "calc3.y"
1288 { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
1289 #line 1288 "calc3.tab.c"
1290 break;
1291 case 18:
1292 #line 73 "calc3.y"
1293 { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
1294 #line 1293 "calc3.tab.c"
1295 break;
1296 #line 1295 "calc3.tab.c"
1297 default:
1298 break;
1299 }
1300 yystack.s_mark -= yym;
1301 yystate = *yystack.s_mark;
1302 yystack.l_mark -= yym;
1303 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1304 yystack.p_mark -= yym;
1305 #endif
1306 yym = yylhs[yyn];
1307 if (yystate == 0 && yym == 0)
1308 {
1309 #if YYDEBUG
1310 if (yydebug)
1311 {
1312 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1313 #ifdef YYSTYPE_TOSTRING
1314 #if YYBTYACC
1315 if (!yytrial)
1316 #endif /* YYBTYACC */
1317 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1318 #endif
1319 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1320 }
1321 #endif
1322 yystate = YYFINAL;
1323 *++yystack.s_mark = YYFINAL;
1324 *++yystack.l_mark = yyval;
1325 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1326 *++yystack.p_mark = yyloc;
1327 #endif
1328 if (yychar < 0)
1329 {
1330 #if YYBTYACC
1331 do {
1332 if (yylvp < yylve)
1333 {
1334 /* we're currently re-reading tokens */
1335 yylval = *yylvp++;
1336 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1337 yylloc = *yylpp++;
1338 #endif
1339 yychar = *yylexp++;
1340 break;
1341 }
1342 if (yyps->save)
1343 {
1344 /* in trial mode; save scanner results for future parse attempts */
1345 if (yylvp == yylvlim)
1346 { /* Enlarge lexical value queue */
1347 size_t p = (size_t) (yylvp - yylvals);
1348 size_t s = (size_t) (yylvlim - yylvals);
1349
1350 s += YYLVQUEUEGROWTH;
1351 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1352 goto yyenomem;
1353 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1354 goto yyenomem;
1355 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1356 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1357 goto yyenomem;
1358 #endif
1359 yylvp = yylve = yylvals + p;
1360 yylvlim = yylvals + s;
1361 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1362 yylpp = yylpe = yylpsns + p;
1363 yylplim = yylpsns + s;
1364 #endif
1365 yylexp = yylexemes + p;
1366 }
1367 *yylexp = (YYINT) YYLEX;
1368 *yylvp++ = yylval;
1369 yylve++;
1370 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1371 *yylpp++ = yylloc;
1372 yylpe++;
1373 #endif
1374 yychar = *yylexp++;
1375 break;
1376 }
1377 /* normal operation, no conflict encountered */
1378 #endif /* YYBTYACC */
1379 yychar = YYLEX;
1380 #if YYBTYACC
1381 } while (0);
1382 #endif /* YYBTYACC */
1383 if (yychar < 0) yychar = YYEOF;
1384 #if YYDEBUG
1385 if (yydebug)
1386 {
1387 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1388 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1389 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1390 }
1391 #endif
1392 }
1393 if (yychar == YYEOF) goto yyaccept;
1394 goto yyloop;
1395 }
1396 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1397 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1398 yystate = yytable[yyn];
1399 else
1400 yystate = yydgoto[yym];
1401 #if YYDEBUG
1402 if (yydebug)
1403 {
1404 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1405 #ifdef YYSTYPE_TOSTRING
1406 #if YYBTYACC
1407 if (!yytrial)
1408 #endif /* YYBTYACC */
1409 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1410 #endif
1411 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1412 }
1413 #endif
1414 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1415 *++yystack.s_mark = (YYINT) yystate;
1416 *++yystack.l_mark = yyval;
1417 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1418 *++yystack.p_mark = yyloc;
1419 #endif
1420 goto yyloop;
1421 #if YYBTYACC
1422
1423 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1424 yyvalid:
1425 if (yypath) YYABORT;
1426 while (yyps->save)
1427 {
1428 YYParseState *save = yyps->save;
1429 yyps->save = save->save;
1430 save->save = yypath;
1431 yypath = save;
1432 }
1433 #if YYDEBUG
1434 if (yydebug)
1435 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1436 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1437 #endif
1438 if (yyerrctx)
1439 {
1440 yyFreeState(yyerrctx);
1441 yyerrctx = NULL;
1442 }
1443 yylvp = yylvals + yypath->lexeme;
1444 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1445 yylpp = yylpsns + yypath->lexeme;
1446 #endif
1447 yylexp = yylexemes + yypath->lexeme;
1448 yychar = YYEMPTY;
1449 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1450 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1451 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1452 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1453 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1454 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1455 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1456 #endif
1457 yystate = yypath->state;
1458 goto yyloop;
1459 #endif /* YYBTYACC */
1460
1461 yyoverflow:
1462 YYERROR_CALL("yacc stack overflow");
1463 #if YYBTYACC
1464 goto yyabort_nomem;
1465 yyenomem:
1466 YYERROR_CALL("memory exhausted");
1467 yyabort_nomem:
1468 #endif /* YYBTYACC */
1469 yyresult = 2;
1470 goto yyreturn;
1471
1472 yyabort:
1473 yyresult = 1;
1474 goto yyreturn;
1475
1476 yyaccept:
1477 #if YYBTYACC
1478 if (yyps->save) goto yyvalid;
1479 #endif /* YYBTYACC */
1480 yyresult = 0;
1481
1482 yyreturn:
1483 #if defined(YYDESTRUCT_CALL)
1484 if (yychar != YYEOF && yychar != YYEMPTY)
1485 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1486 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1487 #else
1488 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1489 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1490
1491 {
1492 YYSTYPE *pv;
1493 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1494 YYLTYPE *pp;
1495
1496 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1497 YYDESTRUCT_CALL("cleanup: discarding state",
1498 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1499 #else
1500 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1501 YYDESTRUCT_CALL("cleanup: discarding state",
1502 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1503 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1504 }
1505 #endif /* defined(YYDESTRUCT_CALL) */
1506
1507 #if YYBTYACC
1508 if (yyerrctx)
1509 {
1510 yyFreeState(yyerrctx);
1511 yyerrctx = NULL;
1512 }
1513 while (yyps)
1514 {
1515 YYParseState *save = yyps;
1516 yyps = save->save;
1517 save->save = NULL;
1518 yyFreeState(save);
1519 }
1520 while (yypath)
1521 {
1522 YYParseState *save = yypath;
1523 yypath = save->save;
1524 save->save = NULL;
1525 yyFreeState(save);
1526 }
1527 #endif /* YYBTYACC */
1528 yyfreestack(&yystack);
1529 return (yyresult);
1530 }
1531