/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line
-/* This file comes from bison-@bison_version@. */
-
/* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+ Copyright 1984, 1989, 1990, 2000 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
# define YYSTACK_ALLOC malloc
#endif
-/* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
-
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
Once GCC version 2 has supplanted version 1, this can go. */
#define YYFAIL goto yyerrlab
#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(Token, Value) \
+#define YYBACKUP(Token, Value) \
do \
if (yychar == YYEMPTY && yylen == 1) \
{ \
#define YYTERROR 1
#define YYERRCODE 256
-#ifndef YYPURE
-# define YYLEX yylex ()
+
+/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+ are run).
+
+ When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+ first token. By default, to implement support for ranges, extend
+ its range to the last symbol. */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Last) \
+ Current.last_line = Last.last_line; \
+ Current.last_column = Last.last_column;
#endif
-#ifdef YYPURE
-# ifdef YYLSP_NEEDED
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#if YYPURE
+# if YYLSP_NEEDED
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
# else
# define YYLEX yylex (&yylval)
# endif
# endif /* !YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here. */
-
-#ifndef YYPURE
-/* The lookahead symbol. */
-int yychar;
-
-/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval;
-
-# ifdef YYLSP_NEEDED
-/* Location data for the lookahead symbol. */
-YYLTYPE yylloc;
-# endif
-
-/* Number of parse errors so far. */
-int yynerrs;
-#endif /* !YYPURE */
+#else /* !YYPURE */
+# define YYLEX yylex ()
+#endif /* !YYPURE */
+/* Enable debugging if requested. */
#if YYDEBUG
-int yydebug; /* nonzero means print parse trace */
-
- /* [The following comment makes no sense to me. Could someone
- clarify it? --akim] Since this is uninitialized, it does not
- stop multiple parsers from coexisting. */
-#else
- /* To avoid crippling this file with `#if YYDEBUG', define `yydebug'
- as `0', so that the `if (yydebug)' be removed as dead code. */
-# define yydebug 0
-#endif
-
-/* YYINITDEPTH indicates the initial size of the parser's stacks */
-
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ fprintf Args; \
+} while (0)
+/* Nonzero means print parse trace. [The following comment makes no
+ sense to me. Could someone clarify it? --akim] Since this is
+ uninitialized, it does not stop multiple parsers from coexisting.
+ */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+#endif /* !YYDEBUG */
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
-/* YYMAXDEPTH is the maximum size the stacks can grow to
- (effective only if the built-in stack extension method is used). */
-
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used). */
#if YYMAXDEPTH == 0
# undef YYMAXDEPTH
#endif
of type size_t, but it can handle unsigned int. */
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
-# define __yy_memcpy(To,From,Count) __builtin_memcpy (To,From,Count)
+# define __yy_memcpy(To, From, Count) __builtin_memcpy (To, From, Count)
#else /* not GNU C or C++ */
# ifndef __cplusplus
# endif
#endif
+/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+ variables are global, or local to YYPARSE. */
+
+#define _YY_DECL_VARIABLES \
+/* The lookahead symbol. */ \
+int yychar; \
+ \
+/* The semantic value of the lookahead symbol. */ \
+YYSTYPE yylval; \
+ \
+/* Number of parse errors so far. */ \
+int yynerrs;
+
+#if YYLSP_NEEDED
+# define YY_DECL_VARIABLES \
+_YY_DECL_VARIABLES \
+ \
+/* Location data for the lookahead symbol. */ \
+YYLTYPE yylloc;
+#else
+# define YY_DECL_VARIABLES \
+_YY_DECL_VARIABLES
+#endif
+
+
+/* If nonreentrant, generate the variables here. */
+
+#if !YYPURE
+YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
int
yyparse (YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL
{
+ /* If reentrant, generate the variables here. */
+#if YYPURE
+ YY_DECL_VARIABLES
+#endif /* !YYPURE */
+
register int yystate;
register int yyn;
/* Number of tokens to shift before error messages enabled. */
YYSTYPE *yyvs = yyvsa;
register YYSTYPE *yyvsp;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
/* The location stack. */
YYLTYPE yylsa[YYINITDEPTH];
YYLTYPE *yyls = yylsa;
YYLTYPE *yylsp;
#endif
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
#else
# define YYPOPSTACK (yyvsp--, yyssp--)
int yystacksize = YYINITDEPTH;
int yyfree_stacks = 0;
-#ifdef YYPURE
- int yychar;
- YYSTYPE yylval;
- int yynerrs;
-# ifdef YYLSP_NEEDED
- YYLTYPE yylloc;
-# endif
-#endif
-
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
-# ifdef YYLSP_NEEDED
+# if YYLSP_NEEDED
YYLTYPE yyloc;
# endif
rule. */
int yylen;
- if (yydebug)
- fprintf (stderr, "Starting parse\n");
+ YYDPRINTF ((stderr, "Starting parse\n"));
yystate = 0;
yyerrstatus = 0;
yyssp = yyss - 1;
yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
yylsp = yyls;
#endif
*/
YYSTYPE *yyvs1 = yyvs;
short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
YYLTYPE *yyls1 = yyls;
#endif
int size = yyssp - yyss + 1;
#ifdef yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
-# ifdef YYLSP_NEEDED
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. */
+# if YYLSP_NEEDED
/* This used to be a conditional around just the two extra args,
but that might be undefined if yyoverflow is a macro. */
yyoverflow ("parser stack overflow",
# endif
yyss = yyss1; yyvs = yyvs1;
-# ifdef YYLSP_NEEDED
+# if YYLSP_NEEDED
yyls = yyls1;
# endif
#else /* no yyoverflow */
{
free (yyss);
free (yyvs);
-# ifdef YYLSP_NEEDED
+# if YYLSP_NEEDED
free (yyls);
# endif
}
yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
__yy_memcpy ((char *)yyvs, (char *)yyvs1,
size * (unsigned int) sizeof (*yyvsp));
-# ifdef YYLSP_NEEDED
+# if YYLSP_NEEDED
yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
__yy_memcpy ((char *)yyls, (char *)yyls1,
size * (unsigned int) sizeof (*yylsp));
yyssp = yyss + size - 1;
yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
yylsp = yyls + size - 1;
#endif
- if (yydebug)
- fprintf (stderr, "Stack size increased to %d\n", yystacksize);
+ YYDPRINTF ((stderr, "Stack size increased to %d\n", yystacksize));
if (yyssp >= yyss + yystacksize - 1)
YYABORT;
}
- if (yydebug)
- fprintf (stderr, "Entering state %d\n", yystate);
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
goto yybackup;
if (yychar == YYEMPTY)
{
- if (yydebug)
- fprintf (stderr, "Reading a token: ");
+ YYDPRINTF ((stderr, "Reading a token: "));
yychar = YYLEX;
}
yychar1 = 0;
yychar = YYEOF; /* Don't call YYLEX any more */
- if (yydebug)
- fprintf (stderr, "Now at end of input.\n");
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
}
else
{
YYACCEPT;
/* Shift the lookahead token. */
-#if YYDEBUG
- if (yydebug)
- fprintf (stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]));
/* Discard the token being shifted unless it is eof. */
if (yychar != YYEOF)
yychar = YYEMPTY;
*++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
yyreduce:
/* yyn is the number of a rule to reduce with. */
yylen = yyr2[yyn];
- /* Implement default value of the action:
- `{dollar}{dollar} = {dollar}1'. */
- if (yylen > 0)
- yyval = yyvsp[1-yylen];
-#ifdef YYLSP_NEEDED
- /* Implement default location. If the rhs is empty, extend YYLOC to
- YYLLOC, which corresponds to the current token, otherwise
- implement `@{dollar} = Starts at @1, ends at @YYLEN'. */
- if (yylen > 0)
- {
- yyloc = yylsp[1-yylen];
- yyloc.last_line = yylsp[0].last_line;
- yyloc.last_column = yylsp[0].last_column;
- }
- else
- {
- yyloc.last_line = yylsp[0].last_line;
- yyloc.last_column = yylsp[0].last_column;
- yyloc.text = 0;
- }
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to the semantic value of
+ the lookahead token. This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+#if YYLSP_NEEDED
+ /* Similarly for the default location. Let the user run additional
+ commands if for instance locations are ranges. */
+ yyloc = yylsp[1-yylen];
+ YYLLOC_DEFAULT (yyloc, yylsp[0]);
#endif
#if YYDEBUG
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
}
#endif
-$ /* The action file replaces this line marked with this dollarsign. */
+%% actions /* The action file replaces this line. */
#line
\f
yyvsp -= yylen;
yyssp -= yylen;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
yylsp -= yylen;
#endif
+#if YYDEBUG
if (yydebug)
{
short *ssp1 = yyss - 1;
fprintf (stderr, " %d", *++ssp1);
fprintf (stderr, "\n");
}
+#endif
*++yyvsp = yyval;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
*++yylsp = yyloc;
#endif
count = 0;
/* Start X at -yyn if nec to avoid negative indexes in yycheck. */
for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof (yytname) / sizeof (char *)); x++)
+ x < (int) (sizeof (yytname) / sizeof (char *)); x++)
if (yycheck[x + yyn] == x)
size += strlen (yytname[x]) + 15, count++;
size += strlen ("parse error, unexpected `") + 1;
{
count = 0;
for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof (yytname) / sizeof (char *)); x++)
+ x < (int) (sizeof (yytname) / sizeof (char *)); x++)
if (yycheck[x + yyn] == x)
{
strcat (msg, count == 0 ? ", expecting `" : " or `");
/* return failure if at end of input */
if (yychar == YYEOF)
YYABORT;
-#if YYDEBUG
- if (yydebug)
- fprintf (stderr, "Discarding token %d (%s).\n",
- yychar, yytname[yychar1]);
-#endif
+ YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+ yychar, yytname[yychar1]));
yychar = YYEMPTY;
}
YYABORT;
yyvsp--;
yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
yylsp--;
#endif
+#if YYDEBUG
if (yydebug)
{
short *ssp1 = yyss - 1;
fprintf (stderr, " %d", *++ssp1);
fprintf (stderr, "\n");
}
-
+#endif
/*--------------.
| yyerrhandle. |
if (yyn == YYFINAL)
YYACCEPT;
- if (yydebug)
- fprintf (stderr, "Shifting error token, ");
+ YYDPRINTF ((stderr, "Shifting error token, "));
*++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
{
free (yyss);
free (yyvs);
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
free (yyls);
#endif
}
{
free (yyss);
free (yyvs);
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
free (yyls);
#endif
}