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