|
@@ -1,7 +1,7 @@
|
|
|
-/* A Bison parser, made by GNU Bison 1.875a. */
|
|
|
+/* A Bison parser, made by GNU Bison 1.875d. */
|
|
|
|
|
|
/* Skeleton parser for Yacc-like parsing with Bison,
|
|
|
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
|
|
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 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
|
|
@@ -237,18 +237,25 @@ new_exp_3 (enum operator op, struct expression *bexp,
|
|
|
|
|
|
#if ! defined (yyoverflow) || YYERROR_VERBOSE
|
|
|
|
|
|
+# ifndef YYFREE
|
|
|
+# define YYFREE free
|
|
|
+# endif
|
|
|
+# ifndef YYMALLOC
|
|
|
+# define YYMALLOC malloc
|
|
|
+# endif
|
|
|
+
|
|
|
/* The parser invokes alloca or malloc; define the necessary symbols. */
|
|
|
|
|
|
-# if YYSTACK_USE_ALLOCA
|
|
|
-# define YYSTACK_ALLOC alloca
|
|
|
+# ifdef YYSTACK_USE_ALLOCA
|
|
|
+# if YYSTACK_USE_ALLOCA
|
|
|
+# define YYSTACK_ALLOC alloca
|
|
|
+# endif
|
|
|
# else
|
|
|
-# ifndef YYSTACK_USE_ALLOCA
|
|
|
-# if defined (alloca) || defined (_ALLOCA_H)
|
|
|
-# define YYSTACK_ALLOC alloca
|
|
|
-# else
|
|
|
-# ifdef __GNUC__
|
|
|
-# define YYSTACK_ALLOC __builtin_alloca
|
|
|
-# endif
|
|
|
+# if defined (alloca) || defined (_ALLOCA_H)
|
|
|
+# define YYSTACK_ALLOC alloca
|
|
|
+# else
|
|
|
+# ifdef __GNUC__
|
|
|
+# define YYSTACK_ALLOC __builtin_alloca
|
|
|
# endif
|
|
|
# endif
|
|
|
# endif
|
|
@@ -261,20 +268,20 @@ new_exp_3 (enum operator op, struct expression *bexp,
|
|
|
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
|
|
|
# define YYSIZE_T size_t
|
|
|
# endif
|
|
|
-# define YYSTACK_ALLOC malloc
|
|
|
-# define YYSTACK_FREE free
|
|
|
+# define YYSTACK_ALLOC YYMALLOC
|
|
|
+# define YYSTACK_FREE YYFREE
|
|
|
# endif
|
|
|
#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
|
|
|
|
|
|
|
|
|
#if (! defined (yyoverflow) \
|
|
|
&& (! defined (__cplusplus) \
|
|
|
- || (YYSTYPE_IS_TRIVIAL)))
|
|
|
+ || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
|
|
|
|
|
|
/* A type that is properly aligned for any stack member. */
|
|
|
union yyalloc
|
|
|
{
|
|
|
- short yyss;
|
|
|
+ short int yyss;
|
|
|
YYSTYPE yyvs;
|
|
|
};
|
|
|
|
|
@@ -284,13 +291,13 @@ union yyalloc
|
|
|
/* The size of an array large to enough to hold all stacks, each with
|
|
|
N elements. */
|
|
|
# define YYSTACK_BYTES(N) \
|
|
|
- ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
|
|
|
+ ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
|
|
|
+ YYSTACK_GAP_MAXIMUM)
|
|
|
|
|
|
/* Copy COUNT objects from FROM to TO. The source and destination do
|
|
|
not overlap. */
|
|
|
# ifndef YYCOPY
|
|
|
-# if 1 < __GNUC__
|
|
|
+# if defined (__GNUC__) && 1 < __GNUC__
|
|
|
# define YYCOPY(To, From, Count) \
|
|
|
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
|
|
|
# else
|
|
@@ -326,7 +333,7 @@ union yyalloc
|
|
|
#if defined (__STDC__) || defined (__cplusplus)
|
|
|
typedef signed char yysigned_char;
|
|
|
#else
|
|
|
- typedef short yysigned_char;
|
|
|
+ typedef short int yysigned_char;
|
|
|
#endif
|
|
|
|
|
|
/* YYFINAL -- State number of the termination state. */
|
|
@@ -414,8 +421,8 @@ static const unsigned char yyrline[] =
|
|
|
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
|
|
static const char *const yytname[] =
|
|
|
{
|
|
|
- "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
|
|
|
- "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
|
|
|
+ "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
|
|
|
+ "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
|
|
|
"$accept", "start", "exp", 0
|
|
|
};
|
|
|
#endif
|
|
@@ -423,7 +430,7 @@ static const char *const yytname[] =
|
|
|
# ifdef YYPRINT
|
|
|
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
|
|
|
token YYLEX-NUM. */
|
|
|
-static const unsigned short yytoknum[] =
|
|
|
+static const unsigned short int yytoknum[] =
|
|
|
{
|
|
|
0, 256, 257, 63, 124, 38, 258, 259, 260, 261,
|
|
|
33, 262, 58, 110, 40, 41
|
|
@@ -533,7 +540,7 @@ static const unsigned char yystos[] =
|
|
|
|
|
|
#define YYACCEPT goto yyacceptlab
|
|
|
#define YYABORT goto yyabortlab
|
|
|
-#define YYERROR goto yyerrlab1
|
|
|
+#define YYERROR goto yyerrorlab
|
|
|
|
|
|
|
|
|
/* Like YYERROR except do call yyerror. This remains here temporarily
|
|
@@ -568,11 +575,11 @@ while (0)
|
|
|
are run). */
|
|
|
|
|
|
#ifndef YYLLOC_DEFAULT
|
|
|
-# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
|
|
- Current.first_line = Rhs[1].first_line; \
|
|
|
- Current.first_column = Rhs[1].first_column; \
|
|
|
- Current.last_line = Rhs[N].last_line; \
|
|
|
- Current.last_column = Rhs[N].last_column;
|
|
|
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
|
|
+ ((Current).first_line = (Rhs)[1].first_line, \
|
|
|
+ (Current).first_column = (Rhs)[1].first_column, \
|
|
|
+ (Current).last_line = (Rhs)[N].last_line, \
|
|
|
+ (Current).last_column = (Rhs)[N].last_column)
|
|
|
#endif
|
|
|
|
|
|
/* YYLEX -- calling `yylex' with the right arguments. */
|
|
@@ -616,17 +623,17 @@ do { \
|
|
|
|
|
|
/*------------------------------------------------------------------.
|
|
|
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
|
|
|
-| TOP (cinluded). |
|
|
|
+| TOP (included). |
|
|
|
`------------------------------------------------------------------*/
|
|
|
|
|
|
#if defined (__STDC__) || defined (__cplusplus)
|
|
|
static void
|
|
|
-yy_stack_print (short *bottom, short *top)
|
|
|
+yy_stack_print (short int *bottom, short int *top)
|
|
|
#else
|
|
|
static void
|
|
|
yy_stack_print (bottom, top)
|
|
|
- short *bottom;
|
|
|
- short *top;
|
|
|
+ short int *bottom;
|
|
|
+ short int *top;
|
|
|
#endif
|
|
|
{
|
|
|
YYFPRINTF (stderr, "Stack now");
|
|
@@ -656,9 +663,9 @@ yy_reduce_print (yyrule)
|
|
|
#endif
|
|
|
{
|
|
|
int yyi;
|
|
|
- unsigned int yylineno = yyrline[yyrule];
|
|
|
+ unsigned int yylno = yyrline[yyrule];
|
|
|
YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
|
|
|
- yyrule - 1, yylineno);
|
|
|
+ yyrule - 1, yylno);
|
|
|
/* Print the symbols being reduced, and their result. */
|
|
|
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
|
|
|
YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
|
|
@@ -695,7 +702,7 @@ int yydebug;
|
|
|
SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
|
|
|
evaluated with infinite-precision integer arithmetic. */
|
|
|
|
|
|
-#if YYMAXDEPTH == 0
|
|
|
+#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
|
|
|
# undef YYMAXDEPTH
|
|
|
#endif
|
|
|
|
|
@@ -893,9 +900,9 @@ int yynerrs;
|
|
|
to reallocate them elsewhere. */
|
|
|
|
|
|
/* The state stack. */
|
|
|
- short yyssa[YYINITDEPTH];
|
|
|
- short *yyss = yyssa;
|
|
|
- register short *yyssp;
|
|
|
+ short int yyssa[YYINITDEPTH];
|
|
|
+ short int *yyss = yyssa;
|
|
|
+ register short int *yyssp;
|
|
|
|
|
|
/* The semantic value stack. */
|
|
|
YYSTYPE yyvsa[YYINITDEPTH];
|
|
@@ -932,6 +939,7 @@ int yynerrs;
|
|
|
yyssp = yyss;
|
|
|
yyvsp = yyvs;
|
|
|
|
|
|
+
|
|
|
goto yysetstate;
|
|
|
|
|
|
/*------------------------------------------------------------.
|
|
@@ -957,7 +965,7 @@ int yynerrs;
|
|
|
these so that the &'s don't force the real ones into
|
|
|
memory. */
|
|
|
YYSTYPE *yyvs1 = yyvs;
|
|
|
- short *yyss1 = yyss;
|
|
|
+ short int *yyss1 = yyss;
|
|
|
|
|
|
|
|
|
/* Each stack pointer address is followed by the size of the
|
|
@@ -985,7 +993,7 @@ int yynerrs;
|
|
|
yystacksize = YYMAXDEPTH;
|
|
|
|
|
|
{
|
|
|
- short *yyss1 = yyss;
|
|
|
+ short int *yyss1 = yyss;
|
|
|
union yyalloc *yyptr =
|
|
|
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
|
|
|
if (! yyptr)
|
|
@@ -1207,8 +1215,8 @@ yyreduce:
|
|
|
|
|
|
}
|
|
|
|
|
|
-/* Line 999 of yacc.c. */
|
|
|
-#line 1212 "plural.c"
|
|
|
+/* Line 1010 of yacc.c. */
|
|
|
+#line 1220 "plural.c"
|
|
|
|
|
|
yyvsp -= yylen;
|
|
|
yyssp -= yylen;
|
|
@@ -1249,18 +1257,33 @@ yyerrlab:
|
|
|
{
|
|
|
YYSIZE_T yysize = 0;
|
|
|
int yytype = YYTRANSLATE (yychar);
|
|
|
+ const char* yyprefix;
|
|
|
char *yymsg;
|
|
|
- int yyx, yycount;
|
|
|
+ int yyx;
|
|
|
|
|
|
- yycount = 0;
|
|
|
/* Start YYX at -YYN if negative to avoid negative indexes in
|
|
|
YYCHECK. */
|
|
|
- for (yyx = yyn < 0 ? -yyn : 0;
|
|
|
- yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
|
|
|
+ int yyxbegin = yyn < 0 ? -yyn : 0;
|
|
|
+
|
|
|
+ /* Stay within bounds of both yycheck and yytname. */
|
|
|
+ int yychecklim = YYLAST - yyn;
|
|
|
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
|
|
|
+ int yycount = 0;
|
|
|
+
|
|
|
+ yyprefix = ", expecting ";
|
|
|
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
|
|
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
|
|
- yysize += yystrlen (yytname[yyx]) + 15, yycount++;
|
|
|
- yysize += yystrlen ("syntax error, unexpected ") + 1;
|
|
|
- yysize += yystrlen (yytname[yytype]);
|
|
|
+ {
|
|
|
+ yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
|
|
|
+ yycount += 1;
|
|
|
+ if (yycount == 5)
|
|
|
+ {
|
|
|
+ yysize = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ yysize += (sizeof ("syntax error, unexpected ")
|
|
|
+ + yystrlen (yytname[yytype]));
|
|
|
yymsg = (char *) YYSTACK_ALLOC (yysize);
|
|
|
if (yymsg != 0)
|
|
|
{
|
|
@@ -1269,16 +1292,13 @@ yyerrlab:
|
|
|
|
|
|
if (yycount < 5)
|
|
|
{
|
|
|
- yycount = 0;
|
|
|
- for (yyx = yyn < 0 ? -yyn : 0;
|
|
|
- yyx < (int) (sizeof (yytname) / sizeof (char *));
|
|
|
- yyx++)
|
|
|
+ yyprefix = ", expecting ";
|
|
|
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
|
|
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
|
|
{
|
|
|
- const char *yyq = ! yycount ? ", expecting " : " or ";
|
|
|
- yyp = yystpcpy (yyp, yyq);
|
|
|
+ yyp = yystpcpy (yyp, yyprefix);
|
|
|
yyp = yystpcpy (yyp, yytname[yyx]);
|
|
|
- yycount++;
|
|
|
+ yyprefix = " or ";
|
|
|
}
|
|
|
}
|
|
|
yyerror (yymsg);
|
|
@@ -1299,25 +1319,27 @@ yyerrlab:
|
|
|
/* If just tried and failed to reuse lookahead token after an
|
|
|
error, discard it. */
|
|
|
|
|
|
- /* Return failure if at end of input. */
|
|
|
- if (yychar == YYEOF)
|
|
|
+ if (yychar <= YYEOF)
|
|
|
{
|
|
|
- /* Pop the error token. */
|
|
|
- YYPOPSTACK;
|
|
|
- /* Pop the rest of the stack. */
|
|
|
- while (yyss < yyssp)
|
|
|
- {
|
|
|
- YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
|
|
|
- yydestruct (yystos[*yyssp], yyvsp);
|
|
|
- YYPOPSTACK;
|
|
|
- }
|
|
|
- YYABORT;
|
|
|
+ /* If at end of input, pop the error token,
|
|
|
+ then the rest of the stack, then return failure. */
|
|
|
+ if (yychar == YYEOF)
|
|
|
+ for (;;)
|
|
|
+ {
|
|
|
+ YYPOPSTACK;
|
|
|
+ if (yyssp == yyss)
|
|
|
+ YYABORT;
|
|
|
+ YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
|
|
|
+ yydestruct (yystos[*yyssp], yyvsp);
|
|
|
+ }
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
|
|
|
+ yydestruct (yytoken, &yylval);
|
|
|
+ yychar = YYEMPTY;
|
|
|
|
|
|
- YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
|
|
|
- yydestruct (yytoken, &yylval);
|
|
|
- yychar = YYEMPTY;
|
|
|
-
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* Else will try to reuse lookahead token after shifting the error
|
|
@@ -1325,9 +1347,27 @@ yyerrlab:
|
|
|
goto yyerrlab1;
|
|
|
|
|
|
|
|
|
-/*----------------------------------------------------.
|
|
|
-| yyerrlab1 -- error raised explicitly by an action. |
|
|
|
-`----------------------------------------------------*/
|
|
|
+/*---------------------------------------------------.
|
|
|
+| yyerrorlab -- error raised explicitly by YYERROR. |
|
|
|
+`---------------------------------------------------*/
|
|
|
+yyerrorlab:
|
|
|
+
|
|
|
+#ifdef __GNUC__
|
|
|
+ /* Pacify GCC when the user code never invokes YYERROR and the label
|
|
|
+ yyerrorlab therefore never appears in user code. */
|
|
|
+ if (0)
|
|
|
+ goto yyerrorlab;
|
|
|
+#endif
|
|
|
+
|
|
|
+ yyvsp -= yylen;
|
|
|
+ yyssp -= yylen;
|
|
|
+ yystate = *yyssp;
|
|
|
+ goto yyerrlab1;
|
|
|
+
|
|
|
+
|
|
|
+/*-------------------------------------------------------------.
|
|
|
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
|
|
|
+`-------------------------------------------------------------*/
|
|
|
yyerrlab1:
|
|
|
yyerrstatus = 3; /* Each real token shifted decrements this. */
|
|
|
|
|
@@ -1351,9 +1391,8 @@ yyerrlab1:
|
|
|
|
|
|
YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
|
|
|
yydestruct (yystos[yystate], yyvsp);
|
|
|
- yyvsp--;
|
|
|
- yystate = *--yyssp;
|
|
|
-
|
|
|
+ YYPOPSTACK;
|
|
|
+ yystate = *yyssp;
|
|
|
YY_STACK_PRINT (yyss, yyssp);
|
|
|
}
|
|
|
|