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