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