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