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