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