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, parse 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 if (yyformat
!= NULL
)
601 va_start (yyap
, yyformat
);
602 yystack
->yyerrflag
= 1;
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
[,
870 "parsing stack overflow (%d items)", yysize
);
871 yynewSize
= 2*yysize
;
872 if (YYMAXDEPTH
< yynewSize
)
873 yynewSize
= YYMAXDEPTH
;
874 yyinitGLRStack (&yynewStack
, yynewSize
);
875 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
877 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
882 yyGLRState
* yys0
= &yyp0
->yystate
;
883 yyGLRState
* yys1
= &yyp1
->yystate
;
884 if (yys0
->yypred
!= NULL
)
886 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
887 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
888 yys1
->yysemantics
.yyfirstVal
=
889 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
893 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
894 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
895 if (yyv0
->yystate
!= NULL
)
896 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
897 if (yyv0
->yynext
!= NULL
)
898 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
901 if (yystack
->yysplitPoint
!= NULL
)
902 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
903 yystack
->yysplitPoint
, yystate
);
905 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
906 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
907 yystack
->yytops
.yystates
[yyn
] =
908 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
909 yystack
->yytops
.yystates
[yyn
], yystate
);
910 free (yystack
->yyitems
);
911 yystack
->yyitems
= yynewStack
.yyitems
;
912 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
913 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
917 yyFail (yystack
][]b4_lpure_args
[,
918 "parsing stack overflow (%d items)", yysize
);
923 yyfreeGLRStack (yyGLRStack
* yystack
)
925 free (yystack
->yyitems
);
926 yyfreeStateSet (&yystack
->yytops
);
929 /** Assuming that S is a GLRState somewhere on STACK, update the
930 * splitpoint of STACK, if needed, so that it is at least as deep as
933 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
935 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
936 yystack
->yysplitPoint
= yys
;
939 /** Invalidate stack #K in STACK. */
941 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
943 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
944 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
945 yystack
->yytops
.yystates
[yyk
] = NULL
;
948 /** Undelete the last stack that was marked as deleted. Can only be
949 done once after a deletion, and only when all other stacks have
952 yyundeleteLastStack (yyGLRStack
* yystack
)
954 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
956 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
957 yystack
->yytops
.yysize
= 1;
958 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
959 yystack
->yylastDeleted
= NULL
;
963 yyremoveDeletes (yyGLRStack
* yystack
)
967 while (yyj
< yystack
->yytops
.yysize
)
969 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
972 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
973 yystack
->yytops
.yysize
-= 1;
977 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
979 YYDPRINTF ((stderr
, "Rename stack %d -> %d.\n", yyi
, yyj
));
986 /** Shift to a new state on stack #K of STACK, corresponding to LR state
987 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
989 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
990 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
992 yyGLRStackItem
* yynewItem
;
994 yynewItem
= yystack
->yynextFree
;
995 yystack
->yynextFree
+= 1;
996 yystack
->yyspaceLeft
-= 1;
997 yynewItem
->yystate
.yyisState
= yytrue
;
998 yynewItem
->yystate
.yylrState
= yylrState
;
999 yynewItem
->yystate
.yyposn
= yyposn
;
1000 yynewItem
->yystate
.yyresolved
= yytrue
;
1001 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1002 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1003 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1004 yynewItem
->yystate
.yyloc
= *yylocp
;
1005 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1006 yyexpandGLRStack (yystack
]b4_pure_args
[);
1009 /** Shift to a new state on stack #K of STACK, to a new state
1010 * corresponding to LR state LRSTATE, at input position POSN, with
1011 * the (unresolved) semantic value of RHS under the action for RULE. */
1013 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1014 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1016 yyGLRStackItem
* yynewItem
;
1018 yynewItem
= yystack
->yynextFree
;
1019 yynewItem
->yystate
.yyisState
= yytrue
;
1020 yynewItem
->yystate
.yylrState
= yylrState
;
1021 yynewItem
->yystate
.yyposn
= yyposn
;
1022 yynewItem
->yystate
.yyresolved
= yyfalse
;
1023 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1024 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1025 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1026 yystack
->yynextFree
+= 1;
1027 yystack
->yyspaceLeft
-= 1;
1028 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1031 /** Pop the symbols consumed by reduction #RULE from the top of stack
1032 * #K of STACK, and perform the appropriate semantic action on their
1033 * semantic values. Assumes that all ambiguities in semantic values
1034 * have been previously resolved. Set *VALP to the resulting value,
1035 * and *LOCP to the computed location (if any). Return value is as
1036 * for userAction. */
1037 static inline YYRESULTTAG
1038 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1039 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1041 int yynrhs
= yyrhsLength (yyrule
);
1043 if (yystack
->yysplitPoint
== NULL
)
1045 /* Standard special case: single stack. */
1046 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1048 yystack
->yynextFree
-= yynrhs
;
1049 yystack
->yyspaceLeft
+= yynrhs
;
1050 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1053 *yyvalp
= yyval_default
;
1054 *yylocp
= yyloc_default
;
1058 *yyvalp
= rhs
[1-yynrhs
].yystate
.yysemantics
.yysval
;
1059 *yylocp
= rhs
[1-yynrhs
].yystate
.yyloc
;
1061 return yyuserAction (yyrule
, yynrhs
, rhs
,
1062 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1068 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1069 for (yyi
= yynrhs
-1, yys
= yystack
->yytops
.yystates
[yyk
]; 0 <= yyi
;
1070 yyi
-= 1, yys
= yys
->yypred
)
1072 assert (yys
->yypred
!= NULL
);
1073 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1074 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1075 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1077 yyupdateSplit (yystack
, yys
);
1078 yystack
->yytops
.yystates
[yyk
] = yys
;
1081 *yyvalp
= yyval_default
;
1082 *yylocp
= yyloc_default
;
1086 *yyvalp
= yyrhsVals
[0].yystate
.yysemantics
.yysval
;
1087 *yylocp
= yyrhsVals
[0].yystate
.yyloc
;
1089 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1090 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1095 # define YY_REDUCE_PRINT(K, Rule)
1097 # define YY_REDUCE_PRINT(K, Rule) \
1100 yy_reduce_print (K, Rule); \
1103 /*----------------------------------------------------------.
1104 | Report that the RULE is going to be reduced on stack #K. |
1105 `----------------------------------------------------------*/
1108 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1111 YYDPRINTF ((stderr
, "Reducing stack %d by rule %d (line %d), ",
1112 yyk
, yyrule
- 1, yyrline
[yyrule
]));
1113 /* Print the symbols being reduced, and their result. */
1114 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1115 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1116 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1120 /** Pop items off stack #K of STACK according to grammar rule RULE,
1121 * and push back on the resulting nonterminal symbol. Perform the
1122 * semantic action associated with RULE and store its value with the
1123 * newly pushed state, if FORCEEVAL or if STACK is currently
1124 * unambiguous. Otherwise, store the deferred semantic action with
1125 * the new state. If the new state would have an identical input
1126 * position, LR state, and predecessor to an existing state on the stack,
1127 * it is identified with that existing state, eliminating stack #K from
1128 * the STACK. In this case, the (necessarily deferred) semantic value is
1129 * added to the options for the existing state's semantic value.
1131 static inline YYRESULTTAG
1132 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1133 bool yyforceEval
]b4_pure_formals
[)
1135 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1137 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1142 YY_REDUCE_PRINT (yyk
, yyrule
);
1143 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1144 yyglrShift (yystack
, yyk
,
1145 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1146 yylhsNonterm (yyrule
)),
1147 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1148 YYDPRINTF ((stderr
, "Stack %d entering state %d\n",
1149 yyk
, yystack
->yytops
.yystates
[yyk
]->yylrState
));
1155 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1156 yyStateNum yynewLRState
;
1158 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1162 assert (yys
!= NULL
);
1164 yyupdateSplit (yystack
, yys
);
1165 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1167 "Reduced stack %d by rule #%d; action deferred. "
1168 "Now in state %d.\n",
1169 yyk
, yyrule
-1, yynewLRState
));
1170 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1171 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1173 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1174 yyp
= yystack
->yytops
.yystates
[yyi
];
1175 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1177 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1179 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1180 yymarkStackDeleted (yystack
, yyk
);
1181 YYDPRINTF ((stderr
, "Merging stack %d into stack %d.\n",
1188 yystack
->yytops
.yystates
[yyk
] = yys
;
1189 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1195 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1197 if (yystack
->yysplitPoint
== NULL
)
1200 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1202 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1204 yystack
->yytops
.yycapacity
*= 2;
1205 yystack
->yytops
.yystates
=
1206 (yyGLRState
**) realloc (yystack
->yytops
.yystates
,
1207 yystack
->yytops
.yycapacity
1208 * sizeof (yyGLRState
*));
1210 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1211 = yystack
->yytops
.yystates
[yyk
];
1212 yystack
->yytops
.yysize
+= 1;
1213 return yystack
->yytops
.yysize
-1;
1216 /** True iff Y0 and Y1 represent identical options at the top level.
1217 * That is, they represent the same rule applied to RHS symbols
1218 * that produce the same terminal symbols. */
1220 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1222 if (yyy0
->yyrule
== yyy1
->yyrule
)
1224 yyGLRState
*yys0
, *yys1
;
1226 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1227 yyn
= yyrhsLength (yyy0
->yyrule
);
1229 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1230 if (yys0
->yyposn
!= yys1
->yyposn
)
1238 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1239 * alternative semantic values for the RHS-symbols of Y1 into the
1240 * corresponding semantic value sets of the symbols of Y0. */
1242 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1244 yyGLRState
*yys0
, *yys1
;
1246 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1247 yyn
= yyrhsLength (yyy0
->yyrule
);
1249 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1252 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1254 yySemanticOption
* yyz
;
1255 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1258 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1262 /** Y0 and Y1 represent two possible actions to take in a given
1263 * parsing state; return 0 if no combination is possible,
1264 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1266 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1268 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1269 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1273 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1278 if (p0
== 0 || p1
== 0)
1287 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1288 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1289 YYLTYPE
* yylocp
]b4_user_formals
[);
1292 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1297 assert (yys
->yypred
!= NULL
);
1298 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1301 if (! yys
->yyresolved
)
1303 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1304 &yys
->yysemantics
.yysval
, &yys
->yyloc
1308 yys
->yyresolved
= yytrue
;
1315 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1316 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1318 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1322 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1323 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1324 for (yyi
= yynrhs
-1, yys
= yyopt
->yystate
; 0 <= yyi
;
1325 yyi
-= 1, yys
= yys
->yypred
)
1327 assert (yys
->yypred
!= NULL
);
1328 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1329 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1330 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1332 return yyuserAction (yyopt
->yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1333 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1338 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1340 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1343 yyGLRState
* yystates
[YYMAXRHS
];
1344 yyGLRState yyleftmost_state
;
1346 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1347 yystates
[yyi
] = yys
;
1350 yyleftmost_state
.yyposn
= 0;
1351 yystates
[0] = &yyleftmost_state
;
1356 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1357 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1358 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1361 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
1362 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1363 yyx
->yyrule
, yys
->yyposn
+1, yyx
->yystate
->yyposn
);
1364 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1366 if (yystates
[yyi
]->yyresolved
)
1368 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1369 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1370 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1372 YYFPRINTF (stderr
, "%*s%s <tokens %d .. %d>\n", yyindent
+2, "",
1373 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1374 yystates
[yyi
-1]->yyposn
+1, yystates
[yyi
]->yyposn
);
1377 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1383 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1384 yyGLRStack
* yystack
]b4_pure_formals
[)
1386 /* `Unused' warnings. */
1391 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1392 YYFPRINTF (stderr
, "Option 1,\n");
1393 yyreportTree (yyx0
, 2);
1394 YYFPRINTF (stderr
, "\nOption 2,\n");
1395 yyreportTree (yyx1
, 2);
1396 YYFPRINTF (stderr
, "\n");
1398 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1402 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1403 * actions, and return the result. */
1405 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1406 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1408 yySemanticOption
* yybest
;
1409 yySemanticOption
* yyp
;
1412 yybest
= yyoptionList
;
1414 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1416 if (yyidenticalOptions (yybest
, yyp
))
1417 yymergeOptionSets (yybest
, yyp
);
1419 switch (yypreference (yybest
, yyp
))
1422 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1438 int yyprec
= yydprec
[yybest
->yyrule
];
1439 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1440 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1442 if (yyprec
== yydprec
[yyp
->yyrule
])
1446 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1447 *yyvalp
= yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1453 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1457 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1459 if (yystack
->yysplitPoint
!= NULL
)
1464 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1465 yys
!= yystack
->yysplitPoint
;
1466 yys
= yys
->yypred
, yyn
+= 1)
1468 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1475 yycompressStack (yyGLRStack
* yystack
)
1477 yyGLRState
* yyp
, *yyq
, *yyr
;
1479 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1482 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1483 yyp
!= yystack
->yysplitPoint
;
1484 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1487 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1488 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1489 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1490 yystack
->yysplitPoint
= NULL
;
1491 yystack
->yylastDeleted
= NULL
;
1495 yystack
->yynextFree
->yystate
= *yyr
;
1497 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1498 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1499 yystack
->yynextFree
+= 1;
1500 yystack
->yyspaceLeft
-= 1;
1505 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1506 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1510 const short* yyconflicts
;
1512 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1514 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1516 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1518 assert (yystate
!= YYFINAL
);
1519 if (yyisDefaultedState (yystate
))
1521 yyrule
= yydefaultAction (yystate
);
1524 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1525 yymarkStackDeleted (yystack
, yyk
);
1528 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1532 if (*yytokenp
== YYEMPTY
)
1534 YYDPRINTF ((stderr
, "Reading a token: "));
1536 *yytokenp
= YYTRANSLATE (yychar
);
1537 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1539 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1541 while (*yyconflicts
!= 0)
1543 int yynewStack
= yysplitStack (yystack
, yyk
);
1544 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1546 YYCHK (yyglrReduce (yystack
, yynewStack
,
1547 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1548 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1549 yylvalp
, yyllocp
]b4_user_args
[));
1553 if (yyisShiftAction (yyaction
))
1555 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1556 yytokenName (*yytokenp
), yyk
));
1557 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1558 *yylvalp
, yyllocp
]b4_user_args
[);
1559 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1560 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1563 else if (yyisErrorAction (yyaction
))
1565 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1566 yymarkStackDeleted (yystack
, yyk
);
1570 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1577 yyreportParseError (yyGLRStack
* yystack
,
1578 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1580 /* `Unused' warnings. */
1584 if (yystack
->yyerrState
== 0)
1587 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1588 int yyn
, yyx
, yycount
;
1590 const char* yyprefix
;
1593 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1594 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1597 /* Start YYX at -YYN if negative to avoid negative indexes in
1599 yysize
= sizeof ("parse error, unexpected ")
1600 + strlen (yytokenName (*yytokenp
));
1601 yyprefix
= ", expecting ";
1602 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
&& yycount
<= 5;
1604 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1605 yysize
+= strlen (yytokenName (yyx
)) + strlen (yyprefix
),
1606 yycount
+= 1, yyprefix
= " or ";
1607 yymsg
= yyp
= (char*) malloc (yysize
);
1608 sprintf (yyp
, "parse error, unexpected %s", yytokenName (*yytokenp
));
1609 yyp
+= strlen (yyp
);
1612 yyprefix
= ", expecting ";
1613 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
; yyx
+= 1)
1614 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1616 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1617 yyp
+= strlen (yyp
);
1621 yyerror (]b4_lyyerror_args
[yymsg
);
1626 yyerror (]b4_lyyerror_args
["parse error");
1631 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1632 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1633 value, and location of the lookahead. */
1635 yyrecoverParseError (yyGLRStack
* yystack
,
1636 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1638 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1642 if (yystack
->yyerrState
== 0)
1643 yystack
->yyerrState
= 3;
1644 else if (yystack
->yyerrState
== 3)
1645 /* We just shifted the error token and (perhaps) took some
1646 reductions. Skip tokens until we can proceed. */
1649 if (*yytokenp
== YYEOF
)
1651 /* Now pop stack until we find a state that shifts the
1653 while (yystack
->yytops
.yystates
[0] != NULL
)
1655 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1656 YYDSYMPRINTF ("Error: popping",
1657 yystos
[yys
->yylrState
],
1658 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1659 yydestruct (yystos
[yys
->yylrState
],
1660 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1661 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1662 yystack
->yynextFree
-= 1;
1663 yystack
->yyspaceLeft
+= 1;
1665 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1667 if (*yytokenp
!= YYEMPTY
)
1669 YYDSYMPRINTF ("Error: discarding", *yytokenp
, yylvalp
, yyllocp
);
1670 yydestruct (*yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1672 YYDPRINTF ((stderr
, "Reading a token: "));
1674 *yytokenp
= YYTRANSLATE (yychar
);
1675 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1676 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1677 if (yyis_pact_ninf (yyj
))
1678 /* Something's not right; we shouldn't be here. */
1679 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1681 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1683 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1686 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1690 /* Reduce to one stack. */
1691 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1692 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1694 if (yyk
>= yystack
->yytops
.yysize
)
1695 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1696 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1697 yymarkStackDeleted (yystack
, yyk
);
1698 yyremoveDeletes (yystack
);
1699 yycompressStack (yystack
);
1701 /* Now pop stack until we find a state that shifts the error token. */
1702 while (yystack
->yytops
.yystates
[0] != NULL
)
1704 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1705 yyj
= yypact
[yys
->yylrState
];
1706 if (! yyis_pact_ninf (yyj
))
1709 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1710 && yyisShiftAction (yytable
[yyj
]))
1712 YYDPRINTF ((stderr
, "Shifting error token, "));
1713 yyglrShift (yystack
, 0, yytable
[yyj
],
1714 yys
->yyposn
, *yylvalp
, yyllocp
]b4_user_args
[);
1715 YYDPRINTF ((stderr
, "Entering state %d\n",
1716 yystack
->yytops
.yystates
[0]->yylrState
));
1720 YYDSYMPRINTF ("Error: popping",
1721 yystos
[yys
->yylrState
],
1722 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1723 yydestruct (yystos
[yys
->yylrState
],
1724 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1725 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1726 yystack
->yynextFree
-= 1;
1727 yystack
->yyspaceLeft
+= 1;
1729 if (yystack
->yytops
.yystates
[0] == NULL
)
1730 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1733 #define YYCHK1(YYE) \
1739 yystack.yyerrflag = 1; \
1742 yystack.yyerrflag = 0; \
1745 goto yyuser_error; \
1754 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1764 #define yychar (yystack.yyrawchar)
1767 YYSTYPE
* const yylvalp
= &yylval
;
1768 YYLTYPE
* const yyllocp
= &yylloc
;
1770 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1771 yystack
.yytokenp
= &yytoken
;
1773 YYDPRINTF ((stderr
, "Starting parse\n"));
1775 if (setjmp (yystack
.yyexception_buffer
) != 0)
1778 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1784 /* For efficiency, we have two loops, the first of which is
1785 specialized to deterministic operation (single stack, no
1786 potential ambiguity). */
1793 const short* yyconflicts
;
1795 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1796 if (yystate
== YYFINAL
)
1798 if (yyisDefaultedState (yystate
))
1800 yyrule
= yydefaultAction (yystate
);
1803 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1806 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1810 if (yytoken
== YYEMPTY
)
1812 YYDPRINTF ((stderr
, "Reading a token: "));
1814 yytoken
= YYTRANSLATE (yychar
);
1815 YYDSYMPRINTF ("Next token is", yytoken
, yylvalp
, yyllocp
);
1817 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1818 if (*yyconflicts
!= 0)
1820 if (yyisShiftAction (yyaction
))
1822 YYDPRINTF ((stderr
, "Shifting token %s, ",
1823 yytokenName (yytoken
)));
1824 if (yytoken
!= YYEOF
)
1827 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1828 yylval
, yyllocp
]b4_user_args
[);
1829 if (0 < yystack
.yyerrState
)
1830 yystack
.yyerrState
-= 1;
1831 YYDPRINTF ((stderr
, "Entering state %d\n",
1832 yystack
.yytops
.yystates
[0]->yylrState
));
1834 else if (yyisErrorAction (yyaction
))
1836 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1840 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1847 int yyn
= yystack
.yytops
.yysize
;
1848 for (yys
= 0; yys
< yyn
; yys
+= 1)
1849 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1850 yylvalp
, yyllocp
]b4_user_args
[));
1853 yyremoveDeletes (&yystack
);
1854 if (yystack
.yytops
.yysize
== 0)
1856 yyundeleteLastStack (&yystack
);
1857 if (yystack
.yytops
.yysize
== 0)
1858 yyFail (&yystack
][]b4_lpure_args
[, "parse error");
1859 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1860 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1861 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1864 else if (yystack
.yytops
.yysize
== 1)
1866 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1867 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1868 yycompressStack (&yystack
);
1874 yyrecoverParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1875 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1880 yyfreeGLRStack (&yystack
);
1881 return yystack
.yyerrflag
;
1884 /* DEBUGGING ONLY */
1885 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1886 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1889 yy_yypstack (yyGLRState
* yys
)
1893 yy_yypstack (yys
->yypred
);
1894 fprintf (stderr
, " -> ");
1896 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1900 yypstates (yyGLRState
* yyst
)
1903 fprintf (stderr
, "<null>");
1906 fprintf (stderr
, "\n");
1910 yypstack (yyGLRStack
* yystack
, int yyk
)
1912 yypstates (yystack
->yytops
.yystates
[yyk
]);
1915 #define YYINDEX(YYX) \
1916 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1920 yypdumpstack (yyGLRStack
* yystack
)
1922 yyGLRStackItem
* yyp
;
1924 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1926 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1929 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1930 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1931 (unsigned long) yyp
->yystate
.yyposn
,
1932 (long) YYINDEX (yyp
->yystate
.yypred
));
1933 if (! yyp
->yystate
.yyresolved
)
1934 fprintf (stderr
, ", firstVal: %ld",
1935 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1939 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1940 yyp
->yyoption
.yyrule
,
1941 (long) YYINDEX (yyp
->yyoption
.yystate
),
1942 (long) YYINDEX (yyp
->yyoption
.yynext
));
1944 fprintf (stderr
, "\n");
1946 fprintf (stderr
, "Tops:");
1947 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1948 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1949 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1950 fprintf (stderr
, "\n");
1955 m4_if(b4_defines_flag
, 0, [],
1956 [@output @output_header_name@
1957 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
1959 b4_token_defines(b4_tokens
)
1962 m4_ifdef([b4_stype
],
1963 [b4_syncline([b4_stype_line
], [b4_filename
])
1964 typedef union b4_stype yystype
;
1965 /* Line __line__ of __file__. */
1966 b4_syncline([@oline@
], [@ofile@
])],
1967 [typedef int yystype
;])
1968 # define YYSTYPE yystype
1969 # define YYSTYPE_IS_TRIVIAL 1
1973 [extern YYSTYPE b4_prefix
[]lval
;])
1977 typedef struct yyltype
1984 # define YYLTYPE yyltype
1988 [extern YYLTYPE b4_prefix
[]lloc
;])