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