#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. */
-%%definitions
+#line %%input_line "%%filename"
+%%prologue
+#line %%line "%%skeleton"
#ifndef __cplusplus
# ifndef __STDC__
# define const
# endif /* alloca not defined */
#endif /* YYSTACK_USE_ALLOCA not defined */
+#ifndef YYSTACK_USE_ALLOCA
+# define YYSTACK_USE_ALLOCA 0
+#endif
+
+/* Realloc WHAT from SIZE to YYSTACKSIZE elements of TYPE.
+ If WHAT was malloc'ed (not the original automatic ARRAY), free it. */
#if YYSTACK_USE_ALLOCA
-# define YYSTACK_ALLOC alloca
+# define YYSTACK_REALLOC(Type, What, Array) \
+do { \
+ Type *old = What; \
+ What = (Type *) alloca (yystacksize * sizeof (Type)); \
+ __yy_memcpy ((char *) What, (char *) old, \
+ (size) * (unsigned int) sizeof (Type)); \
+} while (0)
#else
-# define YYSTACK_ALLOC malloc
+# define YYSTACK_REALLOC(Type, What, Array) \
+do { \
+ Type *old = What; \
+ What = (Type *) malloc (yystacksize * sizeof (Type)); \
+ __yy_memcpy ((char *) What, (char *) old, \
+ (size) * (unsigned int) sizeof (Type)); \
+ yyfree_stacks = 1; \
+ if (old != Array) \
+ free (old); \
+} while (0)
#endif
#define YYBISON 1 /* Identify Bison output. */
# define YYDEBUG %%debug
#endif
+#line %%input_line "%%filename"
#ifndef YYSTYPE
-# define YYSTYPE %%stype
+typedef %%stype yystype;
+# define YYSTYPE yystype
#endif
#ifndef YYLTYPE
# define YYLTYPE %%ltype
#endif
-#ifndef YYERROR_VERBOSE
-# define YYERROR_VERBOSE %%verbose
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
#endif
-/* Tokens. */
+#define YYERROR_VERBOSE %%error_verbose
+
+/* Tokens. */
%%tokendef
#define YYFINAL %%final
#endif
#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
-static const char* const yytname[] =
+/* YYTNME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+static const char *const yytname[] =
{
%%tname
};
};
#define yyerrok (yyerrstatus = 0)
-#define yyclearin (%%yychar = YYEMPTY)
+#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
#define YYBACKUP(Token, Value) \
do \
- if (%%yychar == YYEMPTY && yylen == 1) \
+ if (yychar == YYEMPTY && yylen == 1) \
{ \
- %%yychar = (Token); \
- %%yylval = (Value); \
- yychar1 = YYTRANSLATE (%%yychar); \
+ yychar = (Token); \
+ yylval = (Value); \
+ yychar1 = YYTRANSLATE (yychar); \
YYPOPSTACK; \
goto yybackup; \
} \
else \
{ \
- %%yyerror ("syntax error: cannot back up"); \
+ yyerror ("syntax error: cannot back up"); \
YYERROR; \
} \
while (0)
Current.last_column = Rhs[N].last_column;
#endif
+/* Definition of YYLSP_NEEDED. */
+#define YYLSP_NEEDED %%locations_flag
+
/* YYLEX -- calling `yylex' with the right arguments. */
#if YYPURE
# if YYLSP_NEEDED
# ifdef YYLEX_PARAM
-# define YYLEX %%yylex (&%%yylval, &yylloc, YYLEX_PARAM)
+# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
# else
-# define YYLEX %%yylex (&%%yylval, &yylloc)
+# define YYLEX yylex (&yylval, &yylloc)
# endif
# else /* !YYLSP_NEEDED */
# ifdef YYLEX_PARAM
-# define YYLEX %%yylex (&%%yylval, YYLEX_PARAM)
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
# else
-# define YYLEX %%yylex (&%%yylval)
+# define YYLEX yylex (&yylval)
# endif
# endif /* !YYLSP_NEEDED */
#else /* !YYPURE */
-# define YYLEX %%yylex ()
+# define YYLEX yylex ()
#endif /* !YYPURE */
/* Enable debugging if requested. */
#if YYDEBUG
# define YYDPRINTF(Args) \
do { \
- if (%%yydebug) \
+ 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;
+int yydebug;
#else /* !YYDEBUG */
# define YYDPRINTF(Args)
#endif /* !YYDEBUG */
\f
-#line %%line "%%filename"
+#line %%line "%%skeleton"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
# ifdef YYPARSE_PARAM
-int %%yyparse (void *);
+int yyparse (void *);
# else
-int %%yyparse (void);
+int yyparse (void);
# endif
#endif
#define _YY_DECL_VARIABLES \
/* The lookahead symbol. */ \
-int %%yychar; \
+int yychar; \
\
-/* The semantic value of the lookahead symbol. */ \
-YYSTYPE %%yylval; \
+/* The semantic value of the lookahead symbol. */ \
+YYSTYPE yylval; \
\
/* Number of parse errors so far. */ \
-int %%yynerrs;
+int yynerrs;
#if YYLSP_NEEDED
# define YY_DECL_VARIABLES \
_YY_DECL_VARIABLES
#endif
-/* If nonreentrant, generate the variables here. */
+/* If nonreentrant, generate the variables here. */
#if !YYPURE
YY_DECL_VARIABLES
#endif /* !YYPURE */
int
-%%yyparse (YYPARSE_PARAM_ARG)
+yyparse (YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL
{
- /* If reentrant, generate the variables here. */
+ /* If reentrant, generate the variables here. */
#if YYPURE
YY_DECL_VARIABLES
#endif /* !YYPURE */
/* Three stacks and their tools:
`yyss': related to states,
- `yysv': related to semantic values,
+ `yyvs': related to semantic values,
`yyls': related to locations.
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;
# endif
/* When reducing, the number of symbols on the RHS of the reduced
- rule. */
+ rule. */
int yylen;
YYDPRINTF ((stderr, "Starting parse\n"));
yystate = 0;
yyerrstatus = 0;
- %%yynerrs = 0;
- %%yychar = YYEMPTY; /* Cause a token to be read. */
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
/* Initialize stack pointers.
Waste one element of value and location stack
/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate. |
`------------------------------------------------------------*/
-yynewstate:
+ yynewstate:
/* 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++;
-yysetstate:
+ yysetstate:
*yyssp = yystate;
if (yyssp >= yyss + yystacksize - 1)
{
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into memory.
- */
- YYSTYPE *yyvs1 = yyvs;
- short *yyss1 = yyss;
-#if YYLSP_NEEDED
- YYLTYPE *yyls1 = yyls;
-#endif
-
/* Get the current used size of the three stacks, in elements. */
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. */
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ short *yyss1 = yyss;
+
+ /* 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",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yyls1, size * sizeof (*yylsp),
- &yystacksize);
+ YYLTYPE *yyls1 = yyls;
+ /* 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",
+ &yyss1, size * sizeof (*yyssp),
+ &yyvs1, size * sizeof (*yyvsp),
+ &yyls1, size * sizeof (*yylsp),
+ &yystacksize);
+ yyls = yyls1;
# else
- yyoverflow ("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yystacksize);
-# endif
-
- yyss = yyss1; yyvs = yyvs1;
-# if YYLSP_NEEDED
- yyls = yyls1;
+ yyoverflow ("parser stack overflow",
+ &yyss1, size * sizeof (*yyssp),
+ &yyvs1, size * sizeof (*yyvsp),
+ &yystacksize);
# endif
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
#else /* no yyoverflow */
/* Extend the stack our own way. */
if (yystacksize >= YYMAXDEPTH)
{
- %%yyerror ("parser stack overflow");
+ yyerror ("parser stack overflow");
if (yyfree_stacks)
{
free (yyss);
yystacksize *= 2;
if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH;
-# if !YYSTACK_USE_ALLOCA
- yyfree_stacks = 1;
-# endif
- yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
- __yy_memcpy ((char *)yyss, (char *)yyss1,
- size * (unsigned int) sizeof (*yyssp));
- yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
- __yy_memcpy ((char *)yyvs, (char *)yyvs1,
- size * (unsigned int) sizeof (*yyvsp));
+
+ YYSTACK_REALLOC (short, yyss, yyssa);
+ YYSTACK_REALLOC (YYSTYPE, yyvs, yyvsa);
# if YYLSP_NEEDED
- yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
- __yy_memcpy ((char *)yyls, (char *)yyls1,
- size * (unsigned int) sizeof (*yylsp));
+ YYSTACK_REALLOC (YYLTYPE, yyls, yylsa);
# endif
#endif /* no yyoverflow */
/* yychar is either YYEMPTY or YYEOF
or a valid token in external form. */
- if (%%yychar == YYEMPTY)
+ if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- %%yychar = YYLEX;
+ 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"));
}
else
{
- yychar1 = YYTRANSLATE (%%yychar);
+ yychar1 = YYTRANSLATE (yychar);
#if YYDEBUG
/* We have to keep this `#if YYDEBUG', since we use variables
which are defined only if `YYDEBUG' is set. */
- if (%%yydebug)
+ if (yydebug)
{
- fprintf (stderr, "Next token is %d (%s", %%yychar, yytname[yychar1]);
+ fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
/* Give the individual parser a way to print the precise
meaning of a token, for further debugging info. */
# ifdef YYPRINT
- YYPRINT (stderr, %%yychar, %%yylval);
+ YYPRINT (stderr, yychar, yylval);
# endif
fprintf (stderr, ")\n");
}
YYACCEPT;
/* Shift the lookahead token. */
- YYDPRINTF ((stderr, "Shifting token %d (%s), ", %%yychar, yytname[yychar1]));
+ YYDPRINTF ((stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]));
/* Discard the token being shifted unless it is eof. */
- if (%%yychar != YYEOF)
- %%yychar = YYEMPTY;
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
- *++yyvsp = %%yylval;
+ *++yyvsp = yylval;
#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
#if YYDEBUG
/* We have to keep this `#if YYDEBUG', since we use variables which
are defined only if `YYDEBUG' is set. */
- if (%%yydebug)
+ if (yydebug)
{
int i;
#endif
switch (yyn)
{
- %%action /* The action file replaces this line. */
+ %%action
}
-#line %%line "%%filename"
+#line %%line "%%skeleton"
\f
yyvsp -= yylen;
yyssp -= yylen;
#endif
#if YYDEBUG
- if (%%yydebug)
+ if (yydebug)
{
short *ssp1 = yyss - 1;
fprintf (stderr, "state stack now");
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
- ++%%yynerrs;
+ ++yynerrs;
#if YYERROR_VERBOSE
yyn = yypact[yystate];
int x, count;
count = 0;
- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
- for (x = (yyn < 0 ? -yyn : 0);
+ /* Start X at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ for (x = yyn < 0 ? -yyn : 0;
x < (int) (sizeof (yytname) / sizeof (char *)); x++)
if (yycheck[x + yyn] == x)
size += strlen (yytname[x]) + 15, count++;
- size += strlen ("parse error, unexpected `") + 1;
- size += strlen (yytname[YYTRANSLATE (%%yychar)]);
+ size += strlen ("parse error, unexpected ") + 1;
+ size += strlen (yytname[YYTRANSLATE (yychar)]);
msg = (char *) malloc (size);
if (msg != 0)
{
- strcpy (msg, "parse error, unexpected `");
- strcat (msg, yytname[YYTRANSLATE (%%yychar)]);
- strcat (msg, "'");
+ strcpy (msg, "parse error, unexpected ");
+ strcat (msg, yytname[YYTRANSLATE (yychar)]);
if (count < 5)
{
count = 0;
- for (x = (yyn < 0 ? -yyn : 0);
+ for (x = yyn < 0 ? -yyn : 0;
x < (int) (sizeof (yytname) / sizeof (char *)); x++)
if (yycheck[x + yyn] == x)
{
- strcat (msg, count == 0 ? ", expecting `" : " or `");
+ strcat (msg, count == 0 ? ", expecting " : " or ");
strcat (msg, yytname[x]);
- strcat (msg, "'");
count++;
}
}
- %%yyerror (msg);
+ yyerror (msg);
free (msg);
}
else
- %%yyerror ("parse error; also virtual memory exceeded");
+ yyerror ("parse error; also virtual memory exhausted");
}
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 */
- if (%%yychar == YYEOF)
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
YYABORT;
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
- %%yychar, yytname[yychar1]));
- %%yychar = YYEMPTY;
+ yychar, yytname[yychar1]));
+ yychar = YYEMPTY;
}
/* 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)
#endif
#if YYDEBUG
- if (%%yydebug)
+ if (yydebug)
{
short *ssp1 = yyss - 1;
fprintf (stderr, "Error: state stack now");
YYDPRINTF ((stderr, "Shifting error token, "));
- *++yyvsp = %%yylval;
+ *++yyvsp = yylval;
#if YYLSP_NEEDED
*++yylsp = yylloc;
#endif
return 1;
}
-%%user_code
-
+#line %%input_line "%%filename"
+%%epilogue