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