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