-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
-#line
-/* This file comes from bison-@bison_version@. */
+/* -*- C -*- */
+
+/* A Bison parser, made from %%filename
+ by GNU bison %%version. */
/* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+ Copyright 1984, 1989, 1990, 2000, 2001 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
It was written by Richard Stallman by simplifying the hairy parser
used when %semantic_parser is specified. */
+#include <stdio.h>
+
+/* If name_prefix is specify substitute the variables and functions
+ names. */
+#define yyparse %%prefix##parse
+#define yylex %%prefix##lex
+#define yyerror %%prefix##error
+#define yylval %%prefix##lval
+#define yychar %%prefix##char
+#define yydebug %%prefix##debug
+#define yynerrs %%prefix##nerrs
+
+/* Copy the user declarations. */
+%%prologue
+
+#ifndef __cplusplus
+# ifndef __STDC__
+# define const
+# endif
+#endif
+
#ifndef YYSTACK_USE_ALLOCA
# ifdef alloca
-# define YYSTACK_USE_ALLOCA
+# define YYSTACK_USE_ALLOCA 1
# else /* alloca not defined */
# ifdef __GNUC__
-# define YYSTACK_USE_ALLOCA
+# define YYSTACK_USE_ALLOCA 1
# define alloca __builtin_alloca
# else /* not GNU C. */
# if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-# define YYSTACK_USE_ALLOCA
+# define YYSTACK_USE_ALLOCA 1
# include <alloca.h>
# else /* not sparc */
/* We think this test detects Watcom and Microsoft C. */
namespace. So I turned it off. rms, 2 May 1997. */
/* #include <malloc.h> */
#pragma alloca
-# define YYSTACK_USE_ALLOCA
+# define YYSTACK_USE_ALLOCA 1
# else /* not MSDOS, or __TURBOC__, or _AIX */
# if 0
/* haible@ilog.fr says this works for HPUX 9.05 and up, and on
HPUX 10. Eventually we can turn this on. */
# ifdef __hpux
-# define YYSTACK_USE_ALLOCA
+# define YYSTACK_USE_ALLOCA 1
# define alloca __builtin_alloca
# endif /* __hpux */
# endif
# endif /* alloca not defined */
#endif /* YYSTACK_USE_ALLOCA not defined */
-#ifdef YYSTACK_USE_ALLOCA
+#if YYSTACK_USE_ALLOCA
# define YYSTACK_ALLOC alloca
#else
# 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 YYBISON 1 /* Identify Bison output. */
+#define YYPURE %%pure /* Identify pure parsers. */
+
+#ifndef YYDEBUG
+# define YYDEBUG %%debug
+#endif
+
+#ifndef YYSTYPE
+# define YYSTYPE %%stype
+#endif
+
+#ifndef YYLTYPE
+typedef struct yyltype
+{
+ int first_line;
+ int first_column;
+ int last_line;
+ int last_column;
+} yyltype;
+# define YYLTYPE %%ltype
+#endif
+
+#ifndef YYERROR_VERBOSE
+# define YYERROR_VERBOSE %%verbose
+#endif
+
+/* Tokens. */
+%%tokendef
+
+#define YYFINAL %%final
+#define YYFLAG %%flag
+#define YYNTBASE %%ntbase
+#define YYLAST %%last
+
+#define YYNTOKENS %%ntokens
+#define YYNNTS %%nnts
+#define YYNRULES %%nrules
+#define YYNSTATES %%nstates
+#define YYMAXUTOK %%maxtok
+
+/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+#define YYTRANSLATE(x) ((unsigned)(x) <= %%maxtok ? yytranslate[x] : %%nsym)
+
+/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+static const char yytranslate[] =
+{
+ %%translate
+};
+
+#if YYDEBUG
+static const short yyprhs[] =
+{
+ %%prhs
+};
+
+static const short yyrhs[] =
+{
+ %%rhs
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const short yyrline[] =
+{
+ %%rline
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE
+/* YYTNME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
+{
+ %%tname
+};
+#endif
+
+/* YYTOKNUM[YYN] -- Index in YYTNAME corresponding to YYLEX. */
+static const short yytoknum[] =
+{
+ %%toknum
+};
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const short yyr1[] =
+{
+ %%r1
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const short yyr2[] =
+{
+ %%r2
+};
+
+/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+ doesn't specify something else to do. Zero means the default is an
+ error. */
+static const short yydefact[] =
+{
+ %%defact
+};
+
+static const short yydefgoto[] =
+{
+ %%defgoto
+};
+
+static const short yypact[] =
+{
+ %%pact
+};
+
+static const short yypgoto[] =
+{
+ %%pgoto
+};
+
+static const short yytable[] =
+{
+ %%table
+};
+
+static const short yycheck[] =
+{
+ %%check
+};
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
+
#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
+#define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1
+
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
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) \
{ \
yychar = (Token); \
- yylval = (Value); \
+ yylval = (Value); \
yychar1 = YYTRANSLATE (yychar); \
YYPOPSTACK; \
goto yybackup; \
} \
else \
{ \
- yyerror ("syntax error: cannot back up"); \
+ yyerror ("syntax error: cannot back up"); \
YYERROR; \
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
+/* 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, Rhs, N) \
+ Current.last_line = Rhs[N].last_line; \
+ Current.last_column = Rhs[N].last_column;
+#endif
-/* YYLEX -- calling `yylex' with the right arguments. */
+/* YYLEX -- calling `yylex' with the right arguments. */
#if YYPURE
-# ifdef YYLSP_NEEDED
+# if YYLSP_NEEDED
# ifdef YYLEX_PARAM
# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
# else
# define YYLEX yylex ()
#endif /* !YYPURE */
-
-/* If nonreentrant, generate the variables here. */
-
-#if !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
# define YYDPRINTF(Args) \
/* YYINITDEPTH -- initial size of the parser's stacks. */
#ifndef YYINITDEPTH
-# define YYINITDEPTH 200
+# define YYINITDEPTH %%initdepth
#endif
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
#endif
#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
+# define YYMAXDEPTH %%maxdepth
#endif
+
\f
+
/* Define __yy_memcpy. Note that the size argument
should be passed with type unsigned int, because that is what the non-GCC
definitions require. With GCC, __builtin_memcpy takes an arg
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
# define __yy_memcpy(To, From, Count) __builtin_memcpy (To, From, Count)
#else /* not GNU C or C++ */
-# ifndef __cplusplus
/* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */
static void
+# ifndef __cplusplus
__yy_memcpy (to, from, count)
char *to;
- char *from;
+ const char *from;
unsigned int count;
-{
- register char *f = from;
- register char *t = to;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
# else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__yy_memcpy (char *to, char *from, unsigned int count)
+__yy_memcpy (char *to, const char *from, unsigned int count)
+# endif
{
+ register const char *f = from;
register char *t = to;
- register char *f = from;
register int i = count;
while (i-- > 0)
*t++ = *f++;
}
-
-# endif
#endif
+
\f
-#line
+
+#line %%line "%%filename"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
# 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. */
Refer to the stacks thru separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
- /* The state stack. */
+ /* The state stack. */
short yyssa[YYINITDEPTH];
short *yyss = yyssa;
register short *yyssp;
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;
-#if YYPURE
- int yychar;
- YYSTYPE yylval;
- int yynerrs;
-# ifdef YYLSP_NEEDED
- YYLTYPE yylloc;
-# endif
-#endif /* !YYPURE */
-
-
/* The variables used to return semantic value and location from the
action routines. */
YYSTYPE yyval;
-# ifdef YYLSP_NEEDED
+# if YYLSP_NEEDED
YYLTYPE yyloc;
# endif
/* When reducing, the number of symbols on the RHS of the reduced
- rule. */
+ rule. */
int yylen;
YYDPRINTF ((stderr, "Starting parse\n"));
so that they stay on the same level as the state stack.
The wasted elements are never initialized. */
- yyssp = yyss - 1;
+ yyssp = yyss;
yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
yylsp = yyls;
#endif
-
+ goto yysetstate;
/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate. |
/* In all cases, when you get here, the value and location stacks
have just been pushed. so pushing a state here evens the stacks.
*/
- *++yyssp = yystate;
+ yyssp++;
+
+yysetstate:
+ *yyssp = yystate;
if (yyssp >= yyss + yystacksize - 1)
{
*/
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
}
yystacksize *= 2;
if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH;
-# ifndef YYSTACK_USE_ALLOCA
+# if !YYSTACK_USE_ALLOCA
yyfree_stacks = 1;
# endif
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
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
goto yybackup;
-
/*-----------.
| yybackup. |
`-----------*/
yychar = YYLEX;
}
- /* Convert token to internal form (in yychar1) for indexing tables with */
+ /* Convert token to internal form (in yychar1) for indexing tables with. */
- if (yychar <= 0) /* This means end of input. */
+ if (yychar <= 0) /* This means end of input. */
{
yychar1 = 0;
- yychar = YYEOF; /* Don't call YYLEX any more */
+ yychar = YYEOF; /* Don't call YYLEX any more. */
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
yychar = YYEMPTY;
*++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
+#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action:
- `{dollar}{dollar} = {dollar}1'.
+ `$$ = $1'.
Otherwise, the following line sets YYVAL to the semantic value of
the lookahead token. This behavior is undocumented and Bison
unconditionally makes the parser a bit smaller, and it avoids a
GCC warning that YYVAL may be used uninitialized. */
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 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 - yylen), yylen);
#endif
#if YYDEBUG
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
}
#endif
-$ /* The action file replaces this line marked with this dollarsign. */
-#line
+ switch (yyn)
+ {
+ %%action /* The action file replaces this line. */
+ }
+#line %%line "%%filename"
\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
{
++yynerrs;
-#ifdef YYERROR_VERBOSE
+#if YYERROR_VERBOSE
yyn = yypact[yystate];
if (yyn > YYFLAG && yyn < YYLAST)
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 `");
- strcat (msg, yytname[x]);
+ strcat (msg, count == 0 ? ", expecting `" : " or `");
+ strcat (msg, yytname[x]);
strcat (msg, "'");
count++;
}
yyerror (msg);
free (msg);
}
- else
+ else
yyerror ("parse error; also virtual memory exceeded");
- }
+ }
else
#endif /* YYERROR_VERBOSE */
- yyerror ("parse error");
+ yyerror ("parse error");
}
goto yyerrlab1;
-/*--------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action |
-`--------------------------------------------------*/
+/*----------------------------------------------------.
+| yyerrlab1 -- error raised explicitly by an action. |
+`----------------------------------------------------*/
yyerrlab1:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
error, discard it. */
- /* return failure if at end of input */
+ /* Return failure if at end of input. */
if (yychar == YYEOF)
YYABORT;
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
/* Else will try to reuse lookahead token after shifting the error
token. */
- yyerrstatus = 3; /* Each real token shifted decrements this */
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
goto yyerrhandle;
/*---------------------------------------------------------------.
| yyerrpop -- pop the current state because it cannot handle the |
-| error token |
+| error token. |
`---------------------------------------------------------------*/
yyerrpop:
if (yyssp == yyss)
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
}
return 1;
}
+
+%%epilogue
+