1 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 
   3 /* This file comes from bison-@bison_version@.  */
 
   5 /* Skeleton output parser for bison,
 
   6    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
 
   8    This program is free software; you can redistribute it and/or modify
 
   9    it under the terms of the GNU General Public License as published by
 
  10    the Free Software Foundation; either version 2, or (at your option)
 
  13    This program is distributed in the hope that it will be useful,
 
  14    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  16    GNU General Public License for more details.
 
  18    You should have received a copy of the GNU General Public License
 
  19    along with this program; if not, write to the Free Software
 
  20    Foundation, Inc., 59 Temple Place - Suite 330,
 
  21    Boston, MA 02111-1307, USA.  */
 
  23 /* As a special exception, when this file is copied by Bison into a
 
  24    Bison output file, you may use that output file without restriction.
 
  25    This special exception was added by the Free Software Foundation
 
  26    in version 1.24 of Bison.  */
 
  28 /* This is the parser code that is written into each bison parser
 
  29   when the %semantic_parser declaration is not specified in the grammar.
 
  30   It was written by Richard Stallman by simplifying the hairy parser
 
  31   used when %semantic_parser is specified.  */
 
  33 #ifndef YYSTACK_USE_ALLOCA
 
  35 #  define YYSTACK_USE_ALLOCA
 
  36 # else /* alloca not defined */
 
  38 #   define YYSTACK_USE_ALLOCA
 
  39 #   define alloca __builtin_alloca
 
  40 #  else /* not GNU C.  */
 
  41 #   if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
 
  42 #    define YYSTACK_USE_ALLOCA
 
  44 #   else /* not sparc */
 
  45      /* We think this test detects Watcom and Microsoft C.  */
 
  46      /* This used to test MSDOS, but that is a bad idea since that
 
  47         symbol is in the user namespace.  */
 
  48 #    if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
 
  50        /* No need for malloc.h, which pollutes the namespace; instead,
 
  51           just don't use alloca.  */
 
  54 #    else /* not MSDOS, or __TURBOC__ */
 
  56        /* I don't know what this was needed for, but it pollutes the
 
  57           namespace.  So I turned it off.  rms, 2 May 1997.  */
 
  58        /* #include <malloc.h>  */
 
  60 #      define YYSTACK_USE_ALLOCA
 
  61 #     else /* not MSDOS, or __TURBOC__, or _AIX */
 
  63         /* haible@ilog.fr says this works for HPUX 9.05 and up, and on
 
  64            HPUX 10.  Eventually we can turn this on.  */
 
  66 #        define YYSTACK_USE_ALLOCA
 
  67 #        define alloca __builtin_alloca
 
  70 #     endif /* not _AIX */
 
  71 #    endif /* not MSDOS, or __TURBOC__ */
 
  72 #   endif /* not sparc */
 
  73 #  endif /* not GNU C */
 
  74 # endif /* alloca not defined */
 
  75 #endif /* YYSTACK_USE_ALLOCA not defined */
 
  77 #ifdef YYSTACK_USE_ALLOCA
 
  78 # define YYSTACK_ALLOC alloca
 
  80 # define YYSTACK_ALLOC malloc
 
  83 /* Note: there must be only one dollar sign in this file.
 
  84    It is replaced by the list of actions, each action
 
  85    as one case of the switch.  */
 
  87 #define yyerrok         (yyerrstatus = 0)
 
  88 #define yyclearin       (yychar = YYEMPTY)
 
  91 #define YYACCEPT        goto yyacceptlab
 
  92 #define YYABORT         goto yyabortlab
 
  93 #define YYERROR         goto yyerrlab1
 
  94 /* Like YYERROR except do call yyerror.
 
  95    This remains here temporarily to ease the
 
  96    transition to the new meaning of YYERROR, for GCC.
 
  97    Once GCC version 2 has supplanted version 1, this can go.  */
 
  98 #define YYFAIL          goto yyerrlab
 
  99 #define YYRECOVERING()  (!!yyerrstatus)
 
 100 #define YYBACKUP(token, value) \
 
 102   if (yychar == YYEMPTY && yylen == 1)                          \
 
 103     { yychar = (token), yylval = (value);                       \
 
 104       yychar1 = YYTRANSLATE (yychar);                           \
 
 109     { yyerror ("syntax error: cannot back up"); YYERROR; }      \
 
 113 #define YYERRCODE       256
 
 116 # define YYLEX          yylex()
 
 122 #   define YYLEX                yylex(&yylval, &yylloc, YYLEX_PARAM)
 
 124 #   define YYLEX                yylex(&yylval, &yylloc)
 
 126 # else /* not YYLSP_NEEDED */
 
 128 #   define YYLEX                yylex(&yylval, YYLEX_PARAM)
 
 130 #   define YYLEX                yylex(&yylval)
 
 132 # endif /* not YYLSP_NEEDED */
 
 135 /* If nonreentrant, generate the variables here. */
 
 138 /* The lookahead symbol.  */
 
 141 /* The semantic value of the lookahead symbol. */
 
 145 /* Location data for the lookahead symbol.  */
 
 149 /* Number of parse errors so far.  */
 
 151 #endif  /* not YYPURE */
 
 155 int yydebug;                    /*  nonzero means print parse trace     */
 
 157   /* [The following comment makes no sense to me.  Could someone
 
 158      clarify it?  --akim] Since this is uninitialized, it does not
 
 159      stop multiple parsers from coexisting.  */
 
 161   /* To avoid crippling this file with `#if YYDEBUG', define `yydebug'
 
 162      as `0', so that the `if (yydebug)' be removed as dead code.  */
 
 166 /*  YYINITDEPTH indicates the initial size of the parser's stacks       */
 
 169 # define YYINITDEPTH 200
 
 172 /*  YYMAXDEPTH is the maximum size the stacks can grow to
 
 173     (effective only if the built-in stack extension method is used).  */
 
 180 # define YYMAXDEPTH 10000
 
 183 /* Define __yy_memcpy.  Note that the size argument
 
 184    should be passed with type unsigned int, because that is what the non-GCC
 
 185    definitions require.  With GCC, __builtin_memcpy takes an arg
 
 186    of type size_t, but it can handle unsigned int.  */
 
 188 #if __GNUC__ > 1                /* GNU C and GNU C++ define this.  */
 
 189 # define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
 
 190 #else                           /* not GNU C or C++ */
 
 193 /* This is the most reliable way to avoid incompatibilities
 
 194    in available built-in functions on various systems.  */
 
 196 __yy_memcpy (to, from, count)
 
 201   register char *f = from;
 
 202   register char *t = to;
 
 203   register int i = count;
 
 209 # else /* __cplusplus */
 
 211 /* This is the most reliable way to avoid incompatibilities
 
 212    in available built-in functions on various systems.  */
 
 214 __yy_memcpy (char *to, char *from, unsigned int count)
 
 216   register char *t = to;
 
 217   register char *f = from;
 
 218   register int i = count;
 
 229 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
 
 230    into yyparse.  The argument should have type void *.
 
 231    It should actually point to an object.
 
 232    Grammar actions can access the variable by casting it
 
 233    to the proper pointer type.  */
 
 237 #  define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
 
 238 #  define YYPARSE_PARAM_DECL
 
 239 # else /* not __cplusplus */
 
 240 #  define YYPARSE_PARAM_ARG YYPARSE_PARAM
 
 241 #  define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
 
 242 # endif /* not __cplusplus */
 
 243 #else /* not YYPARSE_PARAM */
 
 244 # define YYPARSE_PARAM_ARG
 
 245 # define YYPARSE_PARAM_DECL
 
 246 #endif /* not YYPARSE_PARAM */
 
 248 /* Prevent warning if -Wstrict-prototypes.  */
 
 250 # ifdef YYPARSE_PARAM
 
 251 int yyparse (void *);
 
 258 yyparse(YYPARSE_PARAM_ARG)
 
 261   register int yystate;
 
 263   /* Number of tokens to shift before error messages enabled.  */
 
 265   /* Lookahead token as an internal (translated) token number.  */
 
 268   /* Three stacks and their tools:
 
 269      `yyss': related to states,
 
 270      `yysv': related to semantic values,
 
 271      `yyls': related to locations.
 
 273      Refer to the stacks thru separate pointers, to allow yyoverflow
 
 274      to reallocate them elsewhere.  */
 
 276   /* The state stack. */
 
 277   short yyssa[YYINITDEPTH];
 
 279   register short *yyssp;
 
 281   /* The semantic value stack.  */
 
 282   YYSTYPE yyvsa[YYINITDEPTH];
 
 283   YYSTYPE *yyvs = yyvsa;
 
 284   register YYSTYPE *yyvsp;
 
 287   /* The location stack.  */
 
 288   YYLTYPE yylsa[YYINITDEPTH];
 
 289   YYLTYPE *yyls = yylsa;
 
 294 # define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
 
 296 # define YYPOPSTACK   (yyvsp--, yyssp--)
 
 299   int yystacksize = YYINITDEPTH;
 
 300   int yyfree_stacks = 0;
 
 312   /* The variables used to return semantic value and location from the
 
 319   /* When reducing, the number of symbols on the RHS of the reduced
 
 324     fprintf (stderr, "Starting parse\n");
 
 329   yychar = YYEMPTY;             /* Cause a token to be read.  */
 
 331   /* Initialize stack pointers.
 
 332      Waste one element of value and location stack
 
 333      so that they stay on the same level as the state stack.
 
 334      The wasted elements are never initialized.  */
 
 342 /* Push a new state, which is found in  yystate  .  */
 
 343 /* In all cases, when you get here, the value and location stacks
 
 344    have just been pushed. so pushing a state here evens the stacks.  */
 
 349   if (yyssp >= yyss + yystacksize - 1)
 
 351       /* Give user a chance to reallocate the stack */
 
 352       /* Use copies of these so that the &'s don't force the real ones into memory. */
 
 353       YYSTYPE *yyvs1 = yyvs;
 
 356       YYLTYPE *yyls1 = yyls;
 
 359       /* Get the current used size of the three stacks, in elements.  */
 
 360       int size = yyssp - yyss + 1;
 
 363       /* Each stack pointer address is followed by the size of
 
 364          the data in use in that stack, in bytes.  */
 
 366       /* This used to be a conditional around just the two extra args,
 
 367          but that might be undefined if yyoverflow is a macro.  */
 
 368       yyoverflow ("parser stack overflow",
 
 369                   &yyss1, size * sizeof (*yyssp),
 
 370                   &yyvs1, size * sizeof (*yyvsp),
 
 371                   &yyls1, size * sizeof (*yylsp),
 
 374       yyoverflow ("parser stack overflow",
 
 375                   &yyss1, size * sizeof (*yyssp),
 
 376                   &yyvs1, size * sizeof (*yyvsp),
 
 380       yyss = yyss1; yyvs = yyvs1;
 
 384 #else /* no yyoverflow */
 
 385       /* Extend the stack our own way.  */
 
 386       if (yystacksize >= YYMAXDEPTH)
 
 388           yyerror("parser stack overflow");
 
 400       if (yystacksize > YYMAXDEPTH)
 
 401         yystacksize = YYMAXDEPTH;
 
 402 # ifndef YYSTACK_USE_ALLOCA
 
 405       yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
 
 406       __yy_memcpy ((char *)yyss, (char *)yyss1,
 
 407                    size * (unsigned int) sizeof (*yyssp));
 
 408       yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
 
 409       __yy_memcpy ((char *)yyvs, (char *)yyvs1,
 
 410                    size * (unsigned int) sizeof (*yyvsp));
 
 412       yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
 
 413       __yy_memcpy ((char *)yyls, (char *)yyls1,
 
 414                    size * (unsigned int) sizeof (*yylsp));
 
 416 #endif /* no yyoverflow */
 
 418       yyssp = yyss + size - 1;
 
 419       yyvsp = yyvs + size - 1;
 
 421       yylsp = yyls + size - 1;
 
 425         fprintf (stderr, "Stack size increased to %d\n", yystacksize);
 
 427       if (yyssp >= yyss + yystacksize - 1)
 
 432     fprintf (stderr, "Entering state %d\n", yystate);
 
 437 /* Do appropriate processing given the current state.  */
 
 438 /* Read a lookahead token if we need one and don't already have one.  */
 
 441   /* First try to decide what to do without reference to lookahead token.  */
 
 443   yyn = yypact[yystate];
 
 447   /* Not known => get a lookahead token if don't already have one.  */
 
 449   /* yychar is either YYEMPTY or YYEOF
 
 450      or a valid token in external form.  */
 
 452   if (yychar == YYEMPTY)
 
 455         fprintf (stderr, "Reading a token: ");
 
 459   /* Convert token to internal form (in yychar1) for indexing tables with */
 
 461   if (yychar <= 0)              /* This means end of input. */
 
 464       yychar = YYEOF;           /* Don't call YYLEX any more */
 
 467         fprintf (stderr, "Now at end of input.\n");
 
 471       yychar1 = YYTRANSLATE(yychar);
 
 474      /* We have to keep this `#if YYDEBUG', since we use variables
 
 475         which are defined only if `YYDEBUG' is set.  */
 
 478           fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
 
 479           /* Give the individual parser a way to print the precise
 
 480              meaning of a token, for further debugging info.  */
 
 482           YYPRINT (stderr, yychar, yylval);
 
 484           fprintf (stderr, ")\n");
 
 490   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
 
 495   /* yyn is what to do for this token type in this state.
 
 496      Negative => reduce, -yyn is rule number.
 
 497      Positive => shift, yyn is new state.
 
 498        New state is final state => don't bother to shift,
 
 500      0, or most negative number => error.  */
 
 515   /* Shift the lookahead token.  */
 
 518     fprintf (stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
 
 521   /* Discard the token being shifted unless it is eof.  */
 
 530   /* count tokens shifted since error; after three, turn off error status.  */
 
 531   if (yyerrstatus) yyerrstatus--;
 
 536 /* Do the default action for the current state.  */
 
 539   yyn = yydefact[yystate];
 
 543 /* Do a reduction.  yyn is the number of a rule to reduce with.  */
 
 546   /* Implement default value of the action:
 
 547      `{dollar}{dollar} = {dollar}1'. */
 
 549       yyval = yyvsp[1-yylen];
 
 551   /* Implement default location.  If the rhs is empty, extend YYLOC to
 
 552      YYLLOC, which corresponds to the current token, otherwise
 
 553      implement `@{dollar} = Starts at @1, ends at @YYLEN'.  */
 
 556       yyloc = yylsp[1-yylen];
 
 557       yyloc.last_line = yylsp[0].last_line;
 
 558       yyloc.last_column = yylsp[0].last_column;
 
 562       yyloc.last_line = yylsp[0].last_line;
 
 563       yyloc.last_column = yylsp[0].last_column;
 
 569   /* We have to keep this `#if YYDEBUG', since we use variables which
 
 570      are defined only if `YYDEBUG' is set.  */
 
 575       fprintf (stderr, "Reducing via rule %d (line %d), ",
 
 578       /* Print the symbols being reduced, and their result.  */
 
 579       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
 
 580         fprintf (stderr, "%s ", yytname[yyrhs[i]]);
 
 581       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
 
 584 $   /* the action file gets copied in in place of this dollarsign */
 
 595       short *ssp1 = yyss - 1;
 
 596       fprintf (stderr, "state stack now");
 
 597       while (ssp1 != yyssp)
 
 598         fprintf (stderr, " %d", *++ssp1);
 
 599       fprintf (stderr, "\n");
 
 607   /* Now `shift' the result of the reduction.  Determine what state
 
 608      that goes to, based on the state we popped back to and the rule
 
 609      number reduced by.  */
 
 613   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
 
 614   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
 
 615     yystate = yytable[yystate];
 
 617     yystate = yydefgoto[yyn - YYNTBASE];
 
 621 yyerrlab:   /* here on detecting error */
 
 624     /* If not already recovering from an error, report this error.  */
 
 628 #ifdef YYERROR_VERBOSE
 
 629       yyn = yypact[yystate];
 
 631       if (yyn > YYFLAG && yyn < YYLAST)
 
 638           /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
 
 639           for (x = (yyn < 0 ? -yyn : 0);
 
 640                x < (sizeof(yytname) / sizeof(char *)); x++)
 
 641             if (yycheck[x + yyn] == x)
 
 642               size += strlen(yytname[x]) + 15, count++;
 
 643           size += strlen ("parse error, unexpected `") + 1;
 
 644           size += strlen (yytname[YYTRANSLATE (yychar)]);
 
 645           msg = (char *) malloc (size);
 
 648               strcpy (msg, "parse error, unexpected `");
 
 649               strcat (msg, yytname[YYTRANSLATE (yychar)]);
 
 655                   for (x = (yyn < 0 ? -yyn : 0);
 
 656                        x < (sizeof(yytname) / sizeof(char *)); x++)
 
 657                     if (yycheck[x + yyn] == x)
 
 659                         strcat (msg, count == 0 ? ", expecting `" : " or `");
 
 660                         strcat (msg, yytname[x]);
 
 669             yyerror ("parse error; also virtual memory exceeded");
 
 672 #endif /* YYERROR_VERBOSE */
 
 673         yyerror ("parse error");
 
 677 yyerrlab1:   /* here on error raised explicitly by an action */
 
 679   if (yyerrstatus == 3)
 
 681       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
 
 683       /* return failure if at end of input */
 
 688         fprintf (stderr, "Discarding token %d (%s).\n",
 
 689                  yychar, yytname[yychar1]);
 
 694   /* Else will try to reuse lookahead token
 
 695      after shifting the error token.  */
 
 697   yyerrstatus = 3;              /* Each real token shifted decrements this */
 
 701 yyerrdefault:  /* current state does not do anything special for the error token. */
 
 704   /* This is wrong; only states that explicitly want error tokens
 
 705      should shift them.  */
 
 706   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
 
 707   if (yyn) goto yydefault;
 
 710 yyerrpop:   /* pop the current state because it cannot handle the error token */
 
 712   if (yyssp == yyss) YYABORT;
 
 721       short *ssp1 = yyss - 1;
 
 722       fprintf (stderr, "Error: state stack now");
 
 723       while (ssp1 != yyssp)
 
 724         fprintf (stderr, " %d", *++ssp1);
 
 725       fprintf (stderr, "\n");
 
 730   yyn = yypact[yystate];
 
 735   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
 
 753     fprintf (stderr, "Shifting error token, ");
 
 764   /* YYACCEPT comes here.  */
 
 776   /* YYABORT comes here.  */