1 m4_divert(-1) -*- C
-*-
4 # GLR skeleton for Bison
5 # Copyright (C) 2002 Free Software Foundation, Inc.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
23 ## ---------------- ##
25 ## ---------------- ##
28 m4_define_default([b4_stack_depth_max
], [10000])
29 m4_define_default([b4_stack_depth_init
], [200])
32 m4_define_default([b4_location_type
], [yyltype
])
36 ## ------------------------ ##
37 ## Pure/impure interfaces. ##
38 ## ------------------------ ##
43 # Accumule in b4_lex_param all the yylex arguments.
44 # Yes, this is quite ugly...
45 m4_define([b4_lex_param
],
46 m4_dquote(b4_pure_if([[[[YYSTYPE
*]], [[yylvalp]]][]dnl
47 b4_location_if([, [[YYLTYPE
*], [yyllocp
]]])])dnl
48 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
)))
53 m4_define([b4_user_formals
],
54 [m4_ifset([b4_parse_param
], [, b4_c_ansi_formals(b4_parse_param
)])])
59 # Arguments passed to yyerror: user args plus yylloc.
60 m4_define([b4_yyerror_args
],
61 [b4_pure_if([b4_location_if([yylocp
, ])])dnl
62 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
67 # Same as above, but on the lookahead, hence yyllocp instead of yylocp.
68 m4_define([b4_lyyerror_args
],
69 [b4_pure_if([b4_location_if([yyllocp
, ])])dnl
70 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
75 # Arguments needed by yyerror: user args plus yylloc.
76 m4_define([b4_pure_args
],
77 [b4_pure_if([b4_location_if([, yylocp
])])[]b4_user_args
])
82 # Arguments passed to yyerror: user formals plus yyllocp.
83 m4_define([b4_pure_formals
],
84 [b4_pure_if([b4_location_if([, YYLTYPE
*yylocp
])])[]b4_user_formals
])
89 # Same as above, but on the lookahead, hence yyllocp instead of yylocp.
90 m4_define([b4_lpure_args
],
91 [b4_pure_if([b4_location_if([, yyllocp
])])[]b4_user_args
])
96 # Same as above, but on the lookahead, hence yyllocp instead of yylocp.
97 m4_define([b4_lpure_formals
],
98 [b4_pure_if([b4_location_if([YYLTYPE
*yyllocp
])])[]b4_user_formals
])
101 ## ----------------- ##
102 ## Semantic Values. ##
103 ## ----------------- ##
106 # b4_lhs_value([TYPE])
107 # --------------------
108 # Expansion of $<TYPE>$.
109 m4_define([b4_lhs_value
],
110 [(*yyvalp
)[]m4_ifval([$
1], [.$
1])])
113 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
114 # --------------------------------------
115 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
117 m4_define([b4_rhs_value
],
118 [yyvsp@
{m4_eval([$
2 - $
1])@
}.yystate
.yysemantics
.yysval
[]m4_ifval([$
3], [.$
3])])
129 m4_define([b4_lhs_location
],
133 # b4_rhs_location(RULE-LENGTH, NUM)
134 # ---------------------------------
135 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
137 m4_define([b4_rhs_location
],
138 [yyvsp@
{m4_eval([$
2 - $
1])@
}.yystate
.yyloc
])
141 # We do want M4 expansion after # for CPP macros.
144 @output @output_parser_name@
145 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
147 /* This is the parser code for GLR (Generalized LR) parser. */
157 m4_if(b4_prefix
[], [yy
], [],
158 [/* If NAME_PREFIX is specified substitute the variables and functions
160 #define yyparse b4_prefix[]parse
161 #define yylex b4_prefix[]lex
162 #define yyerror b4_prefix[]error
163 #define yylval b4_prefix[]lval
164 #define yychar b4_prefix[]char
165 #define yydebug b4_prefix[]debug
166 #define yynerrs b4_prefix[]nerrs
167 b4_location_if([#define yylloc b4_prefix[]lloc])])
169 b4_token_defines(b4_tokens
)
171 /* Copy the first part of user declarations. */
174 /* Enabling traces. */
176 # define YYDEBUG ]b4_debug[
179 /* Enabling verbose error messages. */
180 #ifdef YYERROR_VERBOSE
181 # undef YYERROR_VERBOSE
182 # define YYERROR_VERBOSE 1
184 # define YYERROR_VERBOSE ]b4_error_verbose[
188 ]m4_ifdef([b4_stype
],
189 [b4_syncline([b4_stype_line
], [b4_filename
])
190 typedef union b4_stype yystype
;
191 /* Line __line__ of __file__. */
192 b4_syncline([@oline@
], [@ofile@
])],
193 [typedef int yystype
;])[
194 # define YYSTYPE yystype
195 # define YYSTYPE_IS_TRIVIAL 1
199 typedef struct yyltype
206 # define YYLTYPE ]b4_location_type[
207 # define YYLTYPE_IS_TRIVIAL 1
210 /* Default (constant) values used for initialization for null
211 right-hand sides. Unlike the standard bison.simple template,
212 here we set the default values of $$ and $@@ to zeroed-out
213 values. Since the default value of these quantities is undefined,
214 this behavior is technically correct. */
215 static YYSTYPE yyval_default
;
216 static YYLTYPE yyloc_default
;
218 /* Copy the second part of user declarations. */
221 ]/* Line __line__ of __file__. */
222 b4_syncline([@oline@
], [@ofile@
])
224 #if ! defined (__cplusplus)
234 #ifndef __attribute__
235 /* This feature is available in gcc versions 2.5 and later. */
236 # if !defined (__GNUC__) || __GNUC__ < 2 || \
237 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
238 # define __attribute__(Spec) /* empty */
242 #ifndef ATTRIBUTE_UNUSED
243 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
246 /* YYFINAL -- State number of the termination state. */
247 #define YYFINAL ]b4_final_state_number[
248 /* YYLAST -- Last index in YYTABLE. */
249 #define YYLAST ]b4_last[
251 /* YYNTOKENS -- Number of terminals. */
252 #define YYNTOKENS ]b4_tokens_number[
253 /* YYNNTS -- Number of nonterminals. */
254 #define YYNNTS ]b4_nterms_number[
255 /* YYNRULES -- Number of rules. */
256 #define YYNRULES ]b4_rules_number[
257 /* YYNRULES -- Number of states. */
258 #define YYNSTATES ]b4_states_number[
259 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
260 #define YYMAXRHS ]b4_r2_max[
262 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
263 #define YYUNDEFTOK ]b4_undef_token_number[
264 #define YYMAXUTOK ]b4_user_token_number_max[
266 #define YYTRANSLATE(YYX) \
267 ((YYX <= 0) ? YYEOF : \
268 (unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
270 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
271 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
277 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
279 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
284 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
285 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
290 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
291 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
297 #if (YYDEBUG) || YYERROR_VERBOSE
298 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
299 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
300 static const char *const yytname
[] =
305 #define yytname_size ((int) (sizeof (yytname) / sizeof (yytname[0])))
308 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
309 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
314 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
315 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
320 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
321 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
326 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
327 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
332 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
333 doesn't specify something else to do. Zero means the default is an
335 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
340 /* YYPDEFGOTO[NTERM-NUM]. */
341 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
346 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
348 #define YYPACT_NINF ]b4_pact_ninf[
349 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
354 /* YYPGOTO[NTERM-NUM]. */
355 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
360 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
361 positive, shift that token. If negative, reduce the rule which
362 number is the opposite. If zero, do what YYDEFACT says.
363 If YYTABLE_NINF, syntax error. */
364 #define YYTABLE_NINF ]b4_table_ninf[
365 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
370 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
371 list of conflicting reductions corresponding to action entry for
372 state STATE-NUM in yytable. 0 means no conflicts. The list in
373 yyconfl is terminated by a rule number of 0. */
374 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
376 ]b4_conflict_list_heads
[
379 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
380 0, pointed into by YYCONFLP. */
381 ]dnl Do
not use b4_int_type_for here
, since there are places where
382 dnl pointers onto yyconfl are taken
, which type is
"short *".
383 dnl We probably ought to introduce a type
for confl
.
384 [static const short yyconfl
[] =
386 ]b4_conflicting_rules
[
389 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
394 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
395 symbol of state STATE-NUM. */
396 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
402 /* Prevent warning if -Wmissing-prototypes. */
403 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
405 /* Error token number */
408 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
411 #define YYRHSLOC(yyRhs,YYK) (yyRhs[YYK].yystate.yyloc)
413 #ifndef YYLLOC_DEFAULT
414 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
415 yyCurrent.first_line = YYRHSLOC(yyRhs,1).first_line; \
416 yyCurrent.first_column = YYRHSLOC(yyRhs,1).first_column; \
417 yyCurrent.last_line = YYRHSLOC(yyRhs,YYN).last_line; \
418 yyCurrent.last_column = YYRHSLOC(yyRhs,YYN).last_column;
421 /* YYLEX -- calling `yylex' with the right arguments. */
422 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
427 #define yynerrs (yystack->yyerrcnt)
429 #define yychar (yystack->yyrawchar)],
437 static const int YYEOF
= 0;
438 static const int YYEMPTY
= -2;
440 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
443 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
448 #if ! defined (YYFPRINTF)
449 # define YYFPRINTF fprintf
452 # define YYDPRINTF(Args) \
458 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
460 # define YYDSYMPRINT(Args) \
466 # define YYDSYMPRINTF(Title, Token, Value, Location) \
470 YYFPRINTF (stderr, "%s ", Title); \
471 yysymprint (stderr, \
472 Token, Value]b4_location_if([, Location])[); \
473 YYFPRINTF (stderr, "\n"); \
477 /* Nonzero means print parse trace. It is left uninitialized so that
478 multiple parsers can coexist. */
483 /* Avoid empty `if' bodies. */
484 # define YYDPRINTF(Args) {}
485 # define YYDSYMPRINT(Args) {}
486 # define YYDSYMPRINTF(Title, Token, Value, Location) {}
488 #endif /* !YYDEBUG */
490 /* YYINITDEPTH -- initial size of the parser's stacks. */
492 # define YYINITDEPTH ]b4_stack_depth_init[
495 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
496 if the built-in stack extension method is used).
498 Do not make this value too large; the results are undefined if
499 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
500 evaluated with infinite-precision integer arithmetic. */
507 # define YYMAXDEPTH ]b4_stack_depth_max[
510 /* Minimum number of free items on the stack allowed after an
511 allocation. This is to allow allocation and initialization
512 to be completed by functions that call expandGLRStack before the
513 stack is expanded, thus insuring that all necessary pointers get
514 properly redirected to new data. */
517 #if ! defined (YYSTACKEXPANDABLE) \
518 && (! defined (__cplusplus) || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
519 #define YYSTACKEXPANDABLE 1
521 #define YYSTACKEXPANDABLE 0
524 /** State numbers, as in LALR(1) machine */
525 typedef int yyStateNum
;
527 /** Rule numbers, as in LALR(1) machine */
528 typedef int yyRuleNum
;
530 /** Grammar symbol */
531 typedef short yySymbol
;
533 /** Item references, as in LALR(1) machine */
534 typedef short yyItemNum
;
536 typedef struct yyGLRState yyGLRState
;
537 typedef struct yySemanticOption yySemanticOption
;
538 typedef union yyGLRStackItem yyGLRStackItem
;
539 typedef struct yyGLRStack yyGLRStack
;
540 typedef struct yyGLRStateSet yyGLRStateSet
;
545 yyStateNum yylrState
;
549 yySemanticOption
* yyfirstVal
;
555 struct yyGLRStateSet
{
556 yyGLRState
** yystates
;
557 size_t yysize
, yycapacity
;
560 struct yySemanticOption
{
564 yySemanticOption
* yynext
;
567 union yyGLRStackItem
{
569 yySemanticOption yyoption
;
581 jmp_buf yyexception_buffer
;
582 yyGLRStackItem
* yyitems
;
583 yyGLRStackItem
* yynextFree
;
585 yyGLRState
* yysplitPoint
;
586 yyGLRState
* yylastDeleted
;
587 yyGLRStateSet yytops
;
590 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
591 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
592 static void yyfreeGLRStack (yyGLRStack
* yystack
);
595 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
597 yystack
->yyerrflag
= 1;
598 if (yyformat
!= NULL
)
602 va_start (yyap
, yyformat
);
603 vsprintf (yymsg
, yyformat
, yyap
);
604 yyerror (]b4_yyerror_args
[yymsg
);
606 longjmp (yystack
->yyexception_buffer
, 1);
609 #if YYDEBUG || YYERROR_VERBOSE
610 /** A printable representation of TOKEN. Valid until next call to
612 static inline const char*
613 yytokenName (yySymbol yytoken
)
615 return yytname
[yytoken
];
619 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
620 * and top stack item YYVSP. YYLVALP points to place to put semantic
621 * value ($$), and yylocp points to place for location information
622 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
623 * yyerr for YYERROR, yyabort for YYABORT. */
625 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
626 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
, yyGLRStack
* yystack
629 /* Avoid `unused' warnings in there are no $n. */
634 *yyvalp
= yyval_default
;
635 *yylocp
= yyloc_default
;
639 *yyvalp
= yyvsp
[1-yyrhslen
].yystate
.yysemantics
.yysval
;
640 *yylocp
= yyvsp
[1-yyrhslen
].yystate
.yyloc
;
643 # define yyerrok (yystack->yyerrState = 0)
645 # define YYACCEPT return yyaccept
647 # define YYABORT return yyabort
649 # define YYERROR return yyerr
651 # define YYRECOVERING (yystack->yyerrState != 0)
653 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
655 # define YYBACKUP(Token, Value) \
657 yyerror (]b4_yyerror_args["syntax error: cannot back up"); \
675 /* Line __line__ of __file__. */
676 b4_syncline([@oline@
], [@ofile@
])
681 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
683 YYSTYPE yyval
= *yy0
;
684 /* `Use' the arguments. */
695 /* Bison grammar-table manipulation. */
697 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
699 /** Number of symbols composing the right hand side of rule #RULE. */
701 yyrhsLength (yyRuleNum yyrule
)
706 /** Left-hand-side symbol for rule #RULE. */
707 static inline yySymbol
708 yylhsNonterm (yyRuleNum yyrule
)
713 #define yyis_pact_ninf(yystate) \
714 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
716 ((yystate
) == YYPACT_NINF
))[
718 /** True iff LR state STATE has only a default reduction (regardless
721 yyisDefaultedState (yyStateNum yystate
)
723 return yyis_pact_ninf (yypact
[yystate
]);
726 /** The default reduction for STATE, assuming it has one. */
727 static inline yyRuleNum
728 yydefaultAction (yyStateNum yystate
)
730 return yydefact
[yystate
];
733 #define yyis_table_ninf(yyindex) \
734 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
736 ((yyindex
) == YYTABLE_NINF
))[
738 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
740 * R < 0: Reduce on rule -R.
742 * R > 0: Shift to state R.
743 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
744 * conflicting reductions.
747 yygetLRActions (yyStateNum yystate
, int yytoken
,
748 int* yyaction
, const short** yyconflicts
)
750 int yyindex
= yypact
[yystate
] + yytoken
;
751 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
753 *yyaction
= -yydefact
[yystate
];
754 *yyconflicts
= yyconfl
;
756 else if (! yyis_table_ninf (yyindex
))
758 *yyaction
= yytable
[yyindex
];
759 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
764 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
768 static inline yyStateNum
769 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
772 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
773 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
776 return yydefgoto
[yylhs
- YYNTOKENS
];
780 yyisShiftAction (int yyaction
)
786 yyisErrorAction (int yyaction
)
788 return yyaction
== 0;
793 /** True iff the semantic value of the edge leading to STATE is
796 yyhasResolvedValue (yyGLRState
* yystate
)
798 return yystate
->yyresolved
;
802 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
803 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
805 yySemanticOption
* yynewItem
;
806 yynewItem
= &yystack
->yynextFree
->yyoption
;
807 yystack
->yyspaceLeft
-= 1;
808 yystack
->yynextFree
+= 1;
809 yynewItem
->yyisState
= yyfalse
;
810 yynewItem
->yystate
= rhs
;
811 yynewItem
->yyrule
= yyrule
;
812 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
813 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
814 if (yystack
->yyspaceLeft
< YYHEADROOM
)
815 yyexpandGLRStack (yystack
]b4_pure_args
[);
820 /** Initialize SET to a singleton set containing an empty stack. */
822 yyinitStateSet (yyGLRStateSet
* yyset
)
825 yyset
->yycapacity
= 16;
826 yyset
->yystates
= (yyGLRState
**) malloc (16 * sizeof (yyset
->yystates
[0]));
827 yyset
->yystates
[0] = NULL
;
830 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
832 free (yyset
->yystates
);
835 /** Initialize STACK to a single empty stack, with total maximum
836 * capacity for all stacks of SIZE. */
838 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
840 yystack
->yyerrflag
= 0;
841 yystack
->yyerrState
= 0;
843 yystack
->yyspaceLeft
= yysize
;
844 yystack
->yynextFree
= yystack
->yyitems
=
845 (yyGLRStackItem
*) malloc (yysize
* sizeof (yystack
->yynextFree
[0]));
846 yystack
->yysplitPoint
= NULL
;
847 yystack
->yylastDeleted
= NULL
;
848 yyinitStateSet (&yystack
->yytops
);
851 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
852 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
854 /** If STACK is expandable, extend it. WARNING: Pointers into the
855 stack from outside should be considered invalid after this call.
856 We always expand when there are 1 or fewer items left AFTER an
857 allocation, so that we can avoid having external pointers exist
858 across an allocation. */
860 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
862 #if YYSTACKEXPANDABLE
863 yyGLRStack yynewStack
;
864 yyGLRStackItem
* yyp0
, *yyp1
;
865 size_t yysize
, yynewSize
;
867 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
868 if (YYMAXDEPTH
<= yysize
)
869 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
870 yynewSize
= 2*yysize
;
871 if (YYMAXDEPTH
< yynewSize
)
872 yynewSize
= YYMAXDEPTH
;
873 yyinitGLRStack (&yynewStack
, yynewSize
);
874 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
876 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
881 yyGLRState
* yys0
= &yyp0
->yystate
;
882 yyGLRState
* yys1
= &yyp1
->yystate
;
883 if (yys0
->yypred
!= NULL
)
885 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
886 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
887 yys1
->yysemantics
.yyfirstVal
=
888 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
892 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
893 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
894 if (yyv0
->yystate
!= NULL
)
895 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
896 if (yyv0
->yynext
!= NULL
)
897 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
900 if (yystack
->yysplitPoint
!= NULL
)
901 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
902 yystack
->yysplitPoint
, yystate
);
904 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
905 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
906 yystack
->yytops
.yystates
[yyn
] =
907 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
908 yystack
->yytops
.yystates
[yyn
], yystate
);
909 free (yystack
->yyitems
);
910 yystack
->yyitems
= yynewStack
.yyitems
;
911 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
912 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
916 yyFail (yystack
][]b4_lpure_args
[, "parser stack overflow");
921 yyfreeGLRStack (yyGLRStack
* yystack
)
923 free (yystack
->yyitems
);
924 yyfreeStateSet (&yystack
->yytops
);
927 /** Assuming that S is a GLRState somewhere on STACK, update the
928 * splitpoint of STACK, if needed, so that it is at least as deep as
931 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
933 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
934 yystack
->yysplitPoint
= yys
;
937 /** Invalidate stack #K in STACK. */
939 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
941 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
942 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
943 yystack
->yytops
.yystates
[yyk
] = NULL
;
946 /** Undelete the last stack that was marked as deleted. Can only be
947 done once after a deletion, and only when all other stacks have
950 yyundeleteLastStack (yyGLRStack
* yystack
)
952 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
954 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
955 yystack
->yytops
.yysize
= 1;
956 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
957 yystack
->yylastDeleted
= NULL
;
961 yyremoveDeletes (yyGLRStack
* yystack
)
965 while (yyj
< yystack
->yytops
.yysize
)
967 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
970 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
971 yystack
->yytops
.yysize
-= 1;
975 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
977 YYDPRINTF ((stderr
, "Rename stack %d -> %d.\n", yyi
, yyj
));
984 /** Shift to a new state on stack #K of STACK, corresponding to LR state
985 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
987 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
988 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
990 yyGLRStackItem
* yynewItem
;
992 yynewItem
= yystack
->yynextFree
;
993 yystack
->yynextFree
+= 1;
994 yystack
->yyspaceLeft
-= 1;
995 yynewItem
->yystate
.yyisState
= yytrue
;
996 yynewItem
->yystate
.yylrState
= yylrState
;
997 yynewItem
->yystate
.yyposn
= yyposn
;
998 yynewItem
->yystate
.yyresolved
= yytrue
;
999 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1000 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1001 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1002 yynewItem
->yystate
.yyloc
= *yylocp
;
1003 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1004 yyexpandGLRStack (yystack
]b4_pure_args
[);
1007 /** Shift to a new state on stack #K of STACK, to a new state
1008 * corresponding to LR state LRSTATE, at input position POSN, with
1009 * the (unresolved) semantic value of RHS under the action for RULE. */
1011 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1012 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1014 yyGLRStackItem
* yynewItem
;
1016 yynewItem
= yystack
->yynextFree
;
1017 yynewItem
->yystate
.yyisState
= yytrue
;
1018 yynewItem
->yystate
.yylrState
= yylrState
;
1019 yynewItem
->yystate
.yyposn
= yyposn
;
1020 yynewItem
->yystate
.yyresolved
= yyfalse
;
1021 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1022 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1023 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1024 yystack
->yynextFree
+= 1;
1025 yystack
->yyspaceLeft
-= 1;
1026 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1029 /** Pop the symbols consumed by reduction #RULE from the top of stack
1030 * #K of STACK, and perform the appropriate semantic action on their
1031 * semantic values. Assumes that all ambiguities in semantic values
1032 * have been previously resolved. Set *VALP to the resulting value,
1033 * and *LOCP to the computed location (if any). Return value is as
1034 * for userAction. */
1035 static inline YYRESULTTAG
1036 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1037 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1039 int yynrhs
= yyrhsLength (yyrule
);
1041 if (yystack
->yysplitPoint
== NULL
)
1043 /* Standard special case: single stack. */
1044 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1046 yystack
->yynextFree
-= yynrhs
;
1047 yystack
->yyspaceLeft
+= yynrhs
;
1048 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1051 *yyvalp
= yyval_default
;
1052 *yylocp
= yyloc_default
;
1056 *yyvalp
= rhs
[1-yynrhs
].yystate
.yysemantics
.yysval
;
1057 *yylocp
= rhs
[1-yynrhs
].yystate
.yyloc
;
1059 return yyuserAction (yyrule
, yynrhs
, rhs
,
1060 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1066 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1067 for (yyi
= yynrhs
-1, yys
= yystack
->yytops
.yystates
[yyk
]; 0 <= yyi
;
1068 yyi
-= 1, yys
= yys
->yypred
)
1070 assert (yys
->yypred
!= NULL
);
1071 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1072 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1073 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1075 yyupdateSplit (yystack
, yys
);
1076 yystack
->yytops
.yystates
[yyk
] = yys
;
1079 *yyvalp
= yyval_default
;
1080 *yylocp
= yyloc_default
;
1084 *yyvalp
= yyrhsVals
[0].yystate
.yysemantics
.yysval
;
1085 *yylocp
= yyrhsVals
[0].yystate
.yyloc
;
1087 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1088 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1093 # define YY_REDUCE_PRINT(K, Rule)
1095 # define YY_REDUCE_PRINT(K, Rule) \
1098 yy_reduce_print (K, Rule); \
1101 /*----------------------------------------------------------.
1102 | Report that the RULE is going to be reduced on stack #K. |
1103 `----------------------------------------------------------*/
1106 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1109 YYFPRINTF (stderr
, "Reducing stack %d by rule %d (line %d), ",
1110 yyk
, yyrule
- 1, yyrline
[yyrule
]);
1111 /* Print the symbols being reduced, and their result. */
1112 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1113 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1114 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1118 /** Pop items off stack #K of STACK according to grammar rule RULE,
1119 * and push back on the resulting nonterminal symbol. Perform the
1120 * semantic action associated with RULE and store its value with the
1121 * newly pushed state, if FORCEEVAL or if STACK is currently
1122 * unambiguous. Otherwise, store the deferred semantic action with
1123 * the new state. If the new state would have an identical input
1124 * position, LR state, and predecessor to an existing state on the stack,
1125 * it is identified with that existing state, eliminating stack #K from
1126 * the STACK. In this case, the (necessarily deferred) semantic value is
1127 * added to the options for the existing state's semantic value.
1129 static inline YYRESULTTAG
1130 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1131 bool yyforceEval
]b4_pure_formals
[)
1133 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1135 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1140 YY_REDUCE_PRINT (yyk
, yyrule
);
1141 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1142 yyglrShift (yystack
, yyk
,
1143 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1144 yylhsNonterm (yyrule
)),
1145 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1151 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1152 yyStateNum yynewLRState
;
1154 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1158 assert (yys
!= NULL
);
1160 yyupdateSplit (yystack
, yys
);
1161 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1163 "Reduced stack %d by rule #%d; action deferred. "
1164 "Now in state %d.\n",
1165 yyk
, yyrule
-1, yynewLRState
));
1166 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1167 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1169 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1170 yyp
= yystack
->yytops
.yystates
[yyi
];
1171 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1173 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1175 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1176 yymarkStackDeleted (yystack
, yyk
);
1177 YYDPRINTF ((stderr
, "Merging stack %d into stack %d.\n",
1184 yystack
->yytops
.yystates
[yyk
] = yys
;
1185 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1191 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1193 if (yystack
->yysplitPoint
== NULL
)
1196 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1198 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1200 yystack
->yytops
.yycapacity
*= 2;
1201 yystack
->yytops
.yystates
=
1202 (yyGLRState
**) realloc (yystack
->yytops
.yystates
,
1203 yystack
->yytops
.yycapacity
1204 * sizeof (yyGLRState
*));
1206 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1207 = yystack
->yytops
.yystates
[yyk
];
1208 yystack
->yytops
.yysize
+= 1;
1209 return yystack
->yytops
.yysize
-1;
1212 /** True iff Y0 and Y1 represent identical options at the top level.
1213 * That is, they represent the same rule applied to RHS symbols
1214 * that produce the same terminal symbols. */
1216 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1218 if (yyy0
->yyrule
== yyy1
->yyrule
)
1220 yyGLRState
*yys0
, *yys1
;
1222 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1223 yyn
= yyrhsLength (yyy0
->yyrule
);
1225 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1226 if (yys0
->yyposn
!= yys1
->yyposn
)
1234 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1235 * alternative semantic values for the RHS-symbols of Y1 into the
1236 * corresponding semantic value sets of the symbols of Y0. */
1238 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1240 yyGLRState
*yys0
, *yys1
;
1242 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1243 yyn
= yyrhsLength (yyy0
->yyrule
);
1245 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1248 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1250 yySemanticOption
* yyz
;
1251 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1254 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1258 /** Y0 and Y1 represent two possible actions to take in a given
1259 * parsing state; return 0 if no combination is possible,
1260 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1262 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1264 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1265 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1269 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1274 if (p0
== 0 || p1
== 0)
1283 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1284 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1285 YYLTYPE
* yylocp
]b4_user_formals
[);
1288 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1293 assert (yys
->yypred
!= NULL
);
1294 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1297 if (! yys
->yyresolved
)
1299 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1300 &yys
->yysemantics
.yysval
, &yys
->yyloc
1304 yys
->yyresolved
= yytrue
;
1311 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1312 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1314 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1318 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1319 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1320 for (yyi
= yynrhs
-1, yys
= yyopt
->yystate
; 0 <= yyi
;
1321 yyi
-= 1, yys
= yys
->yypred
)
1323 assert (yys
->yypred
!= NULL
);
1324 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1325 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1326 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1328 return yyuserAction (yyopt
->yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1329 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1334 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1336 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1339 yyGLRState
* yystates
[YYMAXRHS
];
1340 yyGLRState yyleftmost_state
;
1342 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1343 yystates
[yyi
] = yys
;
1346 yyleftmost_state
.yyposn
= 0;
1347 yystates
[0] = &yyleftmost_state
;
1352 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1353 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1354 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1357 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
1358 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1359 yyx
->yyrule
, yys
->yyposn
+1, yyx
->yystate
->yyposn
);
1360 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1362 if (yystates
[yyi
]->yyresolved
)
1364 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1365 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1366 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1368 YYFPRINTF (stderr
, "%*s%s <tokens %d .. %d>\n", yyindent
+2, "",
1369 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1370 yystates
[yyi
-1]->yyposn
+1, yystates
[yyi
]->yyposn
);
1373 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1379 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1380 yyGLRStack
* yystack
]b4_pure_formals
[)
1382 /* `Unused' warnings. */
1387 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1388 YYFPRINTF (stderr
, "Option 1,\n");
1389 yyreportTree (yyx0
, 2);
1390 YYFPRINTF (stderr
, "\nOption 2,\n");
1391 yyreportTree (yyx1
, 2);
1392 YYFPRINTF (stderr
, "\n");
1394 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1398 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1399 * actions, and return the result. */
1401 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1402 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1404 yySemanticOption
* yybest
;
1405 yySemanticOption
* yyp
;
1408 yybest
= yyoptionList
;
1410 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1412 if (yyidenticalOptions (yybest
, yyp
))
1413 yymergeOptionSets (yybest
, yyp
);
1415 switch (yypreference (yybest
, yyp
))
1418 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1434 int yyprec
= yydprec
[yybest
->yyrule
];
1435 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1436 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1438 if (yyprec
== yydprec
[yyp
->yyrule
])
1442 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1443 *yyvalp
= yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1449 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1453 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1455 if (yystack
->yysplitPoint
!= NULL
)
1460 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1461 yys
!= yystack
->yysplitPoint
;
1462 yys
= yys
->yypred
, yyn
+= 1)
1464 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1471 yycompressStack (yyGLRStack
* yystack
)
1473 yyGLRState
* yyp
, *yyq
, *yyr
;
1475 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1478 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1479 yyp
!= yystack
->yysplitPoint
;
1480 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1483 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1484 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1485 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1486 yystack
->yysplitPoint
= NULL
;
1487 yystack
->yylastDeleted
= NULL
;
1491 yystack
->yynextFree
->yystate
= *yyr
;
1493 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1494 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1495 yystack
->yynextFree
+= 1;
1496 yystack
->yyspaceLeft
-= 1;
1501 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1502 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1506 const short* yyconflicts
;
1508 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1510 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1512 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1513 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1515 assert (yystate
!= YYFINAL
);
1516 if (yyisDefaultedState (yystate
))
1518 yyrule
= yydefaultAction (yystate
);
1521 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1522 yymarkStackDeleted (yystack
, yyk
);
1525 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1529 if (*yytokenp
== YYEMPTY
)
1531 YYDPRINTF ((stderr
, "Reading a token: "));
1533 *yytokenp
= YYTRANSLATE (yychar
);
1534 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1536 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1538 while (*yyconflicts
!= 0)
1540 int yynewStack
= yysplitStack (yystack
, yyk
);
1541 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1543 YYCHK (yyglrReduce (yystack
, yynewStack
,
1544 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1545 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1546 yylvalp
, yyllocp
]b4_user_args
[));
1550 if (yyisShiftAction (yyaction
))
1552 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1553 yytokenName (*yytokenp
), yyk
));
1554 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1555 *yylvalp
, yyllocp
]b4_user_args
[);
1556 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1557 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1560 else if (yyisErrorAction (yyaction
))
1562 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1563 yymarkStackDeleted (yystack
, yyk
);
1567 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1574 yyreportParseError (yyGLRStack
* yystack
,
1575 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1577 /* `Unused' warnings. */
1581 if (yystack
->yyerrState
== 0)
1584 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1585 int yyn
, yyx
, yycount
;
1587 const char* yyprefix
;
1590 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1591 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1594 /* Start YYX at -YYN if negative to avoid negative indexes in
1596 yysize
= sizeof ("syntax error, unexpected ")
1597 + strlen (yytokenName (*yytokenp
));
1598 yyprefix
= ", expecting ";
1599 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
&& yycount
<= 5;
1601 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1602 yysize
+= strlen (yytokenName (yyx
)) + strlen (yyprefix
),
1603 yycount
+= 1, yyprefix
= " or ";
1604 yymsg
= yyp
= (char*) malloc (yysize
);
1605 sprintf (yyp
, "syntax error, unexpected %s",
1606 yytokenName (*yytokenp
));
1607 yyp
+= strlen (yyp
);
1610 yyprefix
= ", expecting ";
1611 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
; yyx
+= 1)
1612 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1614 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1615 yyp
+= strlen (yyp
);
1619 yyerror (]b4_lyyerror_args
[yymsg
);
1624 yyerror (]b4_lyyerror_args
["syntax error");
1629 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1630 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1631 value, and location of the lookahead. */
1633 yyrecoverParseError (yyGLRStack
* yystack
,
1634 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1636 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1640 if (yystack
->yyerrState
== 0)
1641 yystack
->yyerrState
= 3;
1642 else if (yystack
->yyerrState
== 3)
1643 /* We just shifted the error token and (perhaps) took some
1644 reductions. Skip tokens until we can proceed. */
1647 if (*yytokenp
== YYEOF
)
1649 /* Now pop stack until we find a state that shifts the
1651 while (yystack
->yytops
.yystates
[0] != NULL
)
1653 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1654 YYDSYMPRINTF ("Error: popping",
1655 yystos
[yys
->yylrState
],
1656 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1657 yydestruct (yystos
[yys
->yylrState
],
1658 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1659 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1660 yystack
->yynextFree
-= 1;
1661 yystack
->yyspaceLeft
+= 1;
1663 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1665 if (*yytokenp
!= YYEMPTY
)
1667 YYDSYMPRINTF ("Error: discarding", *yytokenp
, yylvalp
, yyllocp
);
1668 yydestruct (*yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1670 YYDPRINTF ((stderr
, "Reading a token: "));
1672 *yytokenp
= YYTRANSLATE (yychar
);
1673 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1674 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1675 if (yyis_pact_ninf (yyj
))
1676 /* Something's not right; we shouldn't be here. */
1677 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1679 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1681 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1684 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1688 /* Reduce to one stack. */
1689 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1690 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1692 if (yyk
>= yystack
->yytops
.yysize
)
1693 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1694 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1695 yymarkStackDeleted (yystack
, yyk
);
1696 yyremoveDeletes (yystack
);
1697 yycompressStack (yystack
);
1699 /* Now pop stack until we find a state that shifts the error token. */
1700 while (yystack
->yytops
.yystates
[0] != NULL
)
1702 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1703 yyj
= yypact
[yys
->yylrState
];
1704 if (! yyis_pact_ninf (yyj
))
1707 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1708 && yyisShiftAction (yytable
[yyj
]))
1710 YYDPRINTF ((stderr
, "Shifting error token, "));
1711 yyglrShift (yystack
, 0, yytable
[yyj
],
1712 yys
->yyposn
, *yylvalp
, yyllocp
]b4_user_args
[);
1716 YYDSYMPRINTF ("Error: popping",
1717 yystos
[yys
->yylrState
],
1718 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1719 yydestruct (yystos
[yys
->yylrState
],
1720 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1721 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1722 yystack
->yynextFree
-= 1;
1723 yystack
->yyspaceLeft
+= 1;
1725 if (yystack
->yytops
.yystates
[0] == NULL
)
1726 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1729 #define YYCHK1(YYE) \
1735 yystack.yyerrflag = 1; \
1738 yystack.yyerrflag = 0; \
1741 goto yyuser_error; \
1750 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1760 #define yychar (yystack.yyrawchar)
1763 YYSTYPE
* const yylvalp
= &yylval
;
1764 YYLTYPE
* const yyllocp
= &yylloc
;
1766 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1767 yystack
.yytokenp
= &yytoken
;
1769 YYDPRINTF ((stderr
, "Starting parse\n"));
1771 if (setjmp (yystack
.yyexception_buffer
) != 0)
1774 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1780 /* For efficiency, we have two loops, the first of which is
1781 specialized to deterministic operation (single stack, no
1782 potential ambiguity). */
1788 const short* yyconflicts
;
1790 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1791 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1792 if (yystate
== YYFINAL
)
1794 if (yyisDefaultedState (yystate
))
1796 yyrule
= yydefaultAction (yystate
);
1799 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1802 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1806 if (yytoken
== YYEMPTY
)
1808 YYDPRINTF ((stderr
, "Reading a token: "));
1810 yytoken
= YYTRANSLATE (yychar
);
1811 YYDSYMPRINTF ("Next token is", yytoken
, yylvalp
, yyllocp
);
1813 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1814 if (*yyconflicts
!= 0)
1816 if (yyisShiftAction (yyaction
))
1818 YYDPRINTF ((stderr
, "Shifting token %s, ",
1819 yytokenName (yytoken
)));
1820 if (yytoken
!= YYEOF
)
1823 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1824 yylval
, yyllocp
]b4_user_args
[);
1825 if (0 < yystack
.yyerrState
)
1826 yystack
.yyerrState
-= 1;
1828 else if (yyisErrorAction (yyaction
))
1830 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1834 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1841 int yyn
= yystack
.yytops
.yysize
;
1842 for (yys
= 0; yys
< yyn
; yys
+= 1)
1843 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1844 yylvalp
, yyllocp
]b4_user_args
[));
1847 yyremoveDeletes (&yystack
);
1848 if (yystack
.yytops
.yysize
== 0)
1850 yyundeleteLastStack (&yystack
);
1851 if (yystack
.yytops
.yysize
== 0)
1852 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1853 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1854 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1855 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1858 else if (yystack
.yytops
.yysize
== 1)
1860 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1861 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1862 yycompressStack (&yystack
);
1868 yyrecoverParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1869 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1874 yyfreeGLRStack (&yystack
);
1875 return yystack
.yyerrflag
;
1878 /* DEBUGGING ONLY */
1879 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1880 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1883 yy_yypstack (yyGLRState
* yys
)
1887 yy_yypstack (yys
->yypred
);
1888 fprintf (stderr
, " -> ");
1890 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1894 yypstates (yyGLRState
* yyst
)
1897 fprintf (stderr
, "<null>");
1900 fprintf (stderr
, "\n");
1904 yypstack (yyGLRStack
* yystack
, int yyk
)
1906 yypstates (yystack
->yytops
.yystates
[yyk
]);
1909 #define YYINDEX(YYX) \
1910 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1914 yypdumpstack (yyGLRStack
* yystack
)
1916 yyGLRStackItem
* yyp
;
1918 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1920 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1923 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1924 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1925 (unsigned long) yyp
->yystate
.yyposn
,
1926 (long) YYINDEX (yyp
->yystate
.yypred
));
1927 if (! yyp
->yystate
.yyresolved
)
1928 fprintf (stderr
, ", firstVal: %ld",
1929 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1933 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1934 yyp
->yyoption
.yyrule
,
1935 (long) YYINDEX (yyp
->yyoption
.yystate
),
1936 (long) YYINDEX (yyp
->yyoption
.yynext
));
1938 fprintf (stderr
, "\n");
1940 fprintf (stderr
, "Tops:");
1941 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1942 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1943 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1944 fprintf (stderr
, "\n");
1949 m4_if(b4_defines_flag
, 0, [],
1950 [@output @output_header_name@
1951 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
1953 b4_token_defines(b4_tokens
)
1956 m4_ifdef([b4_stype
],
1957 [b4_syncline([b4_stype_line
], [b4_filename
])
1958 typedef union b4_stype yystype
;
1959 /* Line __line__ of __file__. */
1960 b4_syncline([@oline@
], [@ofile@
])],
1961 [typedef int yystype
;])
1962 # define YYSTYPE yystype
1963 # define YYSTYPE_IS_TRIVIAL 1
1967 [extern YYSTYPE b4_prefix
[]lval
;])
1971 typedef struct yyltype
1978 # define YYLTYPE yyltype
1982 [extern YYLTYPE b4_prefix
[]lloc
;])