/* -*-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. */
+#else /* !YYPURE */
+# define YYLEX yylex ()
+#endif /* !YYPURE */
-#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 */
/* Enable debugging if requested. */
#if YYDEBUG
# 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
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
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
#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 `");
YYABORT;
yyvsp--;
yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
yylsp--;
#endif
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
}