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