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