#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
typedef struct YYLTYPE
{
+]b4_location_if([
int first_line;
int first_column;
int last_line;
int last_column;
+],[
+ char yydummy;
+])[
} YYLTYPE;
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
]/* Line __line__ of glr.c. */
b4_syncline([@oline@], [@ofile@])
[
+#ifndef YYFREE
+# define YYFREE free
+#endif
+#ifndef YYMALLOC
+# define YYMALLOC malloc
+#endif
+#ifndef YYREALLOC
+# define YYREALLOC realloc
+#endif
+
#ifdef __cplusplus
typedef bool yybool;
#else
#define YYNSTATES ]b4_states_number[
/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
#define YYMAXRHS ]b4_r2_max[
+/* YYMAXLEFT -- Maximum number of symbols to the left of a handle
+ accessed by $0, $-1, etc., in any rule. */
+#define YYMAXLEFT ]b4_max_left_semantic_context[
/* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
#define YYUNDEFTOK ]b4_undef_token_number[
#define YYMAXUTOK ]b4_user_token_number_max[
-#define YYTRANSLATE(YYX) \
+#define YYTRANSLATE(YYX) \
((YYX <= 0) ? YYEOF : \
(unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
are run). */
-#define YYRHSLOC(yyRhs,YYK) (yyRhs[YYK].yystate.yyloc)
+]b4_location_if([[
+#define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc)
#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
- yyCurrent.first_line = YYRHSLOC(yyRhs,1).first_line; \
- yyCurrent.first_column = YYRHSLOC(yyRhs,1).first_column; \
- yyCurrent.last_line = YYRHSLOC(yyRhs,YYN).last_line; \
- yyCurrent.last_column = YYRHSLOC(yyRhs,YYN).last_column;
+ ((yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line, \
+ (yyCurrent).first_column = YYRHSLOC(yyRhs, 1).first_column, \
+ (yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line, \
+ (yyCurrent).last_column = YYRHSLOC(yyRhs, YYN).last_column)
+#endif
+]],[
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) ((void) 0)
#endif
+])[
+
/* YYLEX -- calling `yylex' with the right arguments. */
#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
#define YYCHK(YYE) \
- do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
+ do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
while (0)
#if YYDEBUG
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
- yysymprint (stderr, \
+ yysymprint (stderr, \
Token, Value]b4_location_if([, Location])[); \
YYFPRINTF (stderr, "\n"); \
} \
#if (! defined (YYSTACKEXPANDABLE) \
&& (! defined (__cplusplus) \
- || (]b4_location_if([YYLTYPE_IS_TRIVIAL && ])[YYSTYPE_IS_TRIVIAL)))
+ || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
+ && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
#define YYSTACKEXPANDABLE 1
#else
#define YYSTACKEXPANDABLE 0
/** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
* at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
- * containing the pointer to the next state in the chain. Assumes
- * YYLOW1 < YYLOW0. For convenience, returns YYLOW1. */
-static int
-yyfill (yyGLRStackItem* yyvsp, int yylow0, int yylow1)
+ * containing the pointer to the next state in the chain. Assumes
+ * YYLOW1 < YYLOW0. */
+static void yyfillin (yyGLRStackItem *, int, int) ATTRIBUTE_UNUSED;
+static void
+yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
{
yyGLRState* s;
int i;
- s = yyvsp[yylow0].yystate.yypred;
+ s = yyvsp[yylow0].yystate.yypred;
for (i = yylow0-1; i >= yylow1; i -= 1)
{
if (! s->yyresolved)
yyvsp[i].yystate.yyloc = s->yyloc;
s = yyvsp[i].yystate.yypred = s->yypred;
}
+}
+
+/* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
+ YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
+ For convenience, always return YYLOW1. */
+static inline int yyfill (yyGLRStackItem *, int *, int, yybool)
+ ATTRIBUTE_UNUSED;
+static inline int
+yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
+{
+ if (!yynormal && yylow1 < *yylow)
+ {
+ yyfillin (yyvsp, *yylow, yylow1);
+ *yylow = yylow1;
+ }
return yylow1;
}
YYSTYPE* yyvalp, YYLTYPE* yylocp, yyGLRStack* yystack
]b4_user_formals[)
{
- int yynormal = (yystack->yysplitPoint == NULL);
+ yybool yynormal ATTRIBUTE_UNUSED = (yystack->yysplitPoint == NULL);
int yylow;
- if (yyrhslen == 0)
- {
- *yyvalp = yyval_default;
- *yylocp = yyloc_default;
- }
- else
- {
- *yyvalp = yyvsp[1-yyrhslen].yystate.yysemantics.yysval;
- *yylocp = yyvsp[1-yyrhslen].yystate.yyloc;
- }
# undef yyerrok
# define yyerrok (yystack->yyerrState = 0)
# undef YYACCEPT
# undef YYABORT
# define YYABORT return yyabort
# undef YYERROR
-# define YYERROR return yyerr
+# define YYERROR return yyerrok, yyerr
# undef YYRECOVERING
# define YYRECOVERING (yystack->yyerrState != 0)
# undef yyclearin
# define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
# undef YYFILL
-# define YYFILL(N) \
- ((yynormal || yylow <= (N)) ? (N) : (yylow = yyfill (yyvsp, yylow, N)))
+# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
# undef YYBACKUP
# define YYBACKUP(Token, Value) \
- do { \
- yyerror (]b4_yyerror_args["syntax error: cannot back up"); \
- YYERROR; \
- } while (0)
+ return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \
+ yyerrok, yyerr
+
+ yylow = 1;
+ if (yyrhslen == 0)
+ {
+ *yyvalp = yyval_default;
+ *yylocp = yyloc_default;
+ }
+ else
+ {
+ *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;
+ YYLLOC_DEFAULT (*yylocp, yyvsp - yyrhslen, yyrhslen);
+ }
]
- yylow = 1;
- switch (yyn)
- {
- b4_actions
- }
+ switch (yyn)
+ {
+ b4_actions
+ }
- return yyok;
+ return yyok;
# undef yyerrok
# undef YYABORT
# undef YYACCEPT
{
yyset->yysize = 1;
yyset->yycapacity = 16;
- yyset->yystates = (yyGLRState**) malloc (16 * sizeof (yyset->yystates[0]));
+ yyset->yystates = YYMALLOC (16 * sizeof yyset->yystates[0]);
yyset->yystates[0] = NULL;
}
static void yyfreeStateSet (yyGLRStateSet* yyset)
{
- free (yyset->yystates);
+ YYFREE (yyset->yystates);
}
/** Initialize STACK to a single empty stack, with total maximum
yynerrs = 0;
yystack->yyspaceLeft = yysize;
yystack->yynextFree = yystack->yyitems =
- (yyGLRStackItem*) malloc (yysize * sizeof (yystack->yynextFree[0]));
+ YYMALLOC (yysize * sizeof yystack->yynextFree[0]);
yystack->yysplitPoint = NULL;
yystack->yylastDeleted = NULL;
yyinitStateSet (&yystack->yytops);
yystack->yytops.yystates[yyn] =
YYRELOC (yystack->yyitems, yynewStack.yyitems,
yystack->yytops.yystates[yyn], yystate);
- free (yystack->yyitems);
+ YYFREE (yystack->yyitems);
yystack->yyitems = yynewStack.yyitems;
yystack->yynextFree = yynewStack.yynextFree + yysize;
yystack->yyspaceLeft = yynewStack.yyspaceLeft - yysize;
#else
- yyFail (yystack][]b4_lpure_args[, "parser stack overflow");
+ yyFail (yystack][]b4_pure_args[, "parser stack overflow");
#endif
}
static void
yyfreeGLRStack (yyGLRStack* yystack)
{
- free (yystack->yyitems);
+ YYFREE (yystack->yyitems);
yyfreeStateSet (&yystack->yytops);
}
yystack->yytops.yystates[yyj] = yystack->yytops.yystates[yyi];
if (yyj != yyi)
{
- YYDPRINTF ((stderr, "Rename stack %d -> %d.\n", yyi, yyj));
+ YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
+ (unsigned long int) yyi, (unsigned long int) yyj));
}
yyj += 1;
}
}
/** Shift stack #K of YYSTACK, to a new state corresponding to LR
- * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
+ * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
* semantic value of YYRHS under the action for YYRULE. */
static inline void
yyglrShiftDefer (yyGLRStack* yystack, int yyk, yyStateNum yylrState,
* for userAction. */
static inline YYRESULTTAG
yydoAction (yyGLRStack* yystack, int yyk, yyRuleNum yyrule,
- YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
+ YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
{
int yynrhs = yyrhsLength (yyrule);
yystack->yynextFree -= yynrhs;
yystack->yyspaceLeft += yynrhs;
yystack->yytops.yystates[0] = & yystack->yynextFree[-1].yystate;
- if (yynrhs == 0)
- {
- *yyvalp = yyval_default;
- *yylocp = yyloc_default;
- }
- else
- {
- *yyvalp = rhs[1-yynrhs].yystate.yysemantics.yysval;
- *yylocp = rhs[1-yynrhs].yystate.yyloc;
- }
return yyuserAction (yyrule, yynrhs, rhs,
yyvalp, yylocp, yystack]b4_user_args[);
}
{
int yyi;
yyGLRState* yys;
- yyGLRStackItem yyrhsVals[YYMAXRHS+1];
- yys = yyrhsVals[YYMAXRHS].yystate.yypred = yystack->yytops.yystates[yyk];
+ yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
+ yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
+ = yystack->yytops.yystates[yyk];
for (yyi = 0; yyi < yynrhs; yyi += 1)
{
yys = yys->yypred;
}
yyupdateSplit (yystack, yys);
yystack->yytops.yystates[yyk] = yys;
- if (yynrhs == 0)
- {
- *yyvalp = yyval_default;
- *yylocp = yyloc_default;
- }
- else
- {
- *yyvalp = yyrhsVals[1].yystate.yysemantics.yysval;
- *yylocp = yyrhsVals[1].yystate.yyloc;
- }
- return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS - 1,
+ return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
yyvalp, yylocp, yystack]b4_user_args[);
}
}
yy_reduce_print (size_t yyk, yyRuleNum yyrule)
{
int yyi;
- unsigned int yylineno = yyrline[yyrule];
- YYFPRINTF (stderr, "Reducing stack %d by rule %d (line %u), ",
- yyk, yyrule - 1, yylineno);
+ YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu), ",
+ (unsigned long int) yyk, yyrule - 1,
+ (unsigned long int) yyrline[yyrule]);
/* Print the symbols being reduced, and their result. */
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi]));
yyupdateSplit (yystack, yys);
yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
YYDPRINTF ((stderr,
- "Reduced stack %d by rule #%d; action deferred. "
+ "Reduced stack %lu by rule #%d; action deferred. "
"Now in state %d.\n",
- yyk, yyrule-1, yynewLRState));
+ (unsigned long int) yyk, yyrule - 1, yynewLRState));
for (yyi = 0; yyi < yystack->yytops.yysize; yyi += 1)
if (yyi != yyk && yystack->yytops.yystates[yyi] != NULL)
{
{
yyaddDeferredAction (yystack, yyp, yys0, yyrule]b4_pure_args[);
yymarkStackDeleted (yystack, yyk);
- YYDPRINTF ((stderr, "Merging stack %d into stack %d.\n",
- yyk, yyi));
+ YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
+ (unsigned long int) yyk,
+ (unsigned long int) yyi));
return yyok;
}
yyp = yyp->yypred;
{
yystack->yytops.yycapacity *= 2;
yystack->yytops.yystates =
- (yyGLRState**) realloc (yystack->yytops.yystates,
- yystack->yytops.yycapacity
- * sizeof (yyGLRState*));
+ YYREALLOC (yystack->yytops.yystates,
+ (yystack->yytops.yycapacity
+ * sizeof yystack->yytops.yystates[0]));
}
yystack->yytops.yystates[yystack->yytops.yysize]
= yystack->yytops.yystates[yyk];
yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystack,
YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
{
- yyGLRStackItem yyrhsVals[YYMAXRHS+1];
+ yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
int yynrhs;
yynrhs = yyrhsLength (yyopt->yyrule);
YYCHK (yyresolveStates (yyopt->yystate, yynrhs, yystack]b4_user_args[));
- yyrhsVals[YYMAXRHS].yystate.yypred = yyopt->yystate;
- return yyuserAction (yyopt->yyrule, yynrhs, yyrhsVals + YYMAXRHS - 1,
+ yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate;
+ return yyuserAction (yyopt->yyrule, yynrhs,
+ yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
yyvalp, yylocp, yystack]b4_user_args[);
}
yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
yyx->yyrule);
else
- YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
+ YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
- yyx->yyrule, yys->yyposn+1, yyx->yystate->yyposn);
+ yyx->yyrule, (unsigned long int) (yys->yyposn + 1),
+ (unsigned long int) yyx->yystate->yyposn);
for (yyi = 1; yyi <= yynrhs; yyi += 1)
{
if (yystates[yyi]->yyresolved)
YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]));
else
- YYFPRINTF (stderr, "%*s%s <tokens %d .. %d>\n", yyindent+2, "",
+ YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]),
- yystates[yyi-1]->yyposn+1, yystates[yyi]->yyposn);
+ (unsigned long int) (yystates[yyi - 1]->yyposn + 1),
+ (unsigned long int) yystates[yyi]->yyposn);
}
else
yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
#if YYERROR_VERBOSE
yySymbol* const yytokenp = yystack->yytokenp;
int yyn;
- const char* yyprefix;
yyn = yypact[yystack->yytops.yystates[0]->yylrState];
if (YYPACT_NINF < yyn && yyn < YYLAST)
{
size_t yysize = 0;
+ const char* yyprefix;
char* yymsg;
int yyx;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. */
- int yyxbase = yyn < 0 ? -yyn : 0;
+ int yyxbegin = yyn < 0 ? -yyn : 0;
/* Stay within bounds of both yycheck and yytname. */
int yychecklim = YYLAST - yyn;
- int yynsyms = sizeof (yytname) / sizeof (yytname[0]);
- int yyxlim = yychecklim < yynsyms ? yychecklim : yynsyms;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
int yycount = 0;
yyprefix = ", expecting ";
- for (yyx = yyxbase; yyx < yyxlim && yycount < 5; yyx += 1)
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
- yysize += strlen (yytokenName (yyx)) + strlen (yyprefix);
+ yysize += strlen (yyprefix) + strlen (yytokenName (yyx));
yycount += 1;
if (yycount == 5)
{
}
yysize += (sizeof ("syntax error, unexpected ")
+ strlen (yytokenName (*yytokenp)));
- yymsg = (char*) malloc (yysize);
+ yymsg = YYMALLOC (yysize);
if (yymsg != 0)
{
char* yyp = yymsg;
if (yycount < 5)
{
yyprefix = ", expecting ";
- for (yyx = yyxbase; yyx < yyxlim; yyx += 1)
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
{
sprintf (yyp, "%s%s", yyprefix, yytokenName (yyx));
}
}
yyerror (]b4_lyyerror_args[yymsg);
- free (yymsg);
+ YYFREE (yymsg);
}
else
yyerror (]b4_lyyerror_args["syntax error; also virtual memory exhausted");
size_t yyk;
int yyj;
- if (yystack->yyerrState == 0)
- yystack->yyerrState = 3;
- else if (yystack->yyerrState == 3)
+ if (yystack->yyerrState == 3)
/* We just shifted the error token and (perhaps) took some
reductions. Skip tokens until we can proceed. */
while (yytrue)
{
if (*yytokenp == YYEOF)
{
- /* Now pop stack until we find a state that shifts the
- error token. */
+ /* Now pop stack until empty and fail. */
while (yystack->yytops.yystates[0] != NULL)
{
yyGLRState *yys = yystack->yytops.yystates[0];
YYDSYMPRINTF ("Next token is", *yytokenp, yylvalp, yyllocp);
yyj = yypact[yystack->yytops.yystates[0]->yylrState];
if (yyis_pact_ninf (yyj))
- /* Something's not right; we shouldn't be here. */
- yyFail (yystack][]b4_lpure_args[, NULL);
+ return;
yyj += *yytokenp;
if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != *yytokenp)
{
yycompressStack (yystack);
/* Now pop stack until we find a state that shifts the error token. */
+ yystack->yyerrState = 3;
while (yystack->yytops.yystates[0] != NULL)
{
yyGLRState *yys = yystack->yytops.yystates[0];
}
}
YYDSYMPRINTF ("Error: popping",
- yystos[yys->yylrState],
- &yys->yysemantics.yysval, &yys->yyloc);
+ yystos[yys->yylrState],
+ &yys->yysemantics.yysval, &yys->yyloc);
yydestruct (yystos[yys->yylrState],
- &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[);
+ &yys->yysemantics.yysval]b4_location_if([, &yys->yyloc])[);
yystack->yytops.yystates[0] = yys->yypred;
yystack->yynextFree -= 1;
yystack->yyspaceLeft += 1;
yypstates (yystack->yytops.yystates[yyk]);
}
-#define YYINDEX(YYX) \
+#define YYINDEX(YYX) \
((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
b4_pure_if([],
[extern YYSTYPE b4_prefix[]lval;])
-b4_location_if(
-[#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
+#if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
typedef struct YYLTYPE
{
+b4_location_if([
int first_line;
int first_column;
int last_line;
int last_column;
+],[
+ char yydummy;
+])
} YYLTYPE;
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#endif
-m4_if(b4_pure, [0],
+b4_location_if([m4_if(b4_pure, [0],
[extern YYLTYPE b4_prefix[]lloc;])
])
])