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