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 /* Nonzero means print parse trace. It is left uninitialized so that
467 multiple parsers can coexist. */
472 /* Avoid empty `if' bodies. */
473 # define YYDPRINTF(Args) {}
474 # define YYDSYMPRINT(Args) {}
476 #endif /* !YYDEBUG */
478 /* YYINITDEPTH -- initial size of the parser's stacks. */
480 # define YYINITDEPTH ]b4_stack_depth_init[
483 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
484 if the built-in stack extension method is used).
486 Do not make this value too large; the results are undefined if
487 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
488 evaluated with infinite-precision integer arithmetic. */
495 # define YYMAXDEPTH ]b4_stack_depth_max[
498 /* Minimum number of free items on the stack allowed after an
499 allocation. This is to allow allocation and initialization
500 to be completed by functions that call expandGLRStack before the
501 stack is expanded, thus insuring that all necessary pointers get
502 properly redirected to new data. */
505 #if ! defined (YYSTACKEXPANDABLE) \
506 && (! defined (__cplusplus) || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
507 #define YYSTACKEXPANDABLE 1
509 #define YYSTACKEXPANDABLE 0
512 /** State numbers, as in LALR(1) machine */
513 typedef int yyStateNum
;
515 /** Rule numbers, as in LALR(1) machine */
516 typedef int yyRuleNum
;
518 /** Grammar symbol */
519 typedef short yySymbol
;
521 /** Item references, as in LALR(1) machine */
522 typedef short yyItemNum
;
524 typedef struct yyGLRState yyGLRState
;
525 typedef struct yySemanticOption yySemanticOption
;
526 typedef union yyGLRStackItem yyGLRStackItem
;
527 typedef struct yyGLRStack yyGLRStack
;
528 typedef struct yyGLRStateSet yyGLRStateSet
;
533 yyStateNum yylrState
;
537 yySemanticOption
* yyfirstVal
;
543 struct yyGLRStateSet
{
544 yyGLRState
** yystates
;
545 size_t yysize
, yycapacity
;
548 struct yySemanticOption
{
552 yySemanticOption
* yynext
;
555 union yyGLRStackItem
{
557 yySemanticOption yyoption
;
569 jmp_buf yyexception_buffer
;
570 yyGLRStackItem
* yyitems
;
571 yyGLRStackItem
* yynextFree
;
573 yyGLRState
* yysplitPoint
;
574 yyGLRState
* yylastDeleted
;
575 yyGLRStateSet yytops
;
578 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
579 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
580 static void yyfreeGLRStack (yyGLRStack
* yystack
);
583 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
585 if (yyformat
!= NULL
)
589 va_start (yyap
, yyformat
);
590 yystack
->yyerrflag
= 1;
591 vsprintf (yymsg
, yyformat
, yyap
);
592 yyerror (]b4_yyerror_args
[yymsg
);
594 longjmp (yystack
->yyexception_buffer
, 1);
597 #if YYDEBUG || YYERROR_VERBOSE
598 /** A printable representation of TOKEN. Valid until next call to
600 static inline const char*
601 yytokenName (yySymbol yytoken
)
603 return yytname
[yytoken
];
607 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
608 * and top stack item YYVSP. YYLVALP points to place to put semantic
609 * value ($$), and yylocp points to place for location information
610 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
611 * yyerr for YYERROR, yyabort for YYABORT. */
613 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
614 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
, yyGLRStack
* yystack
617 /* Avoid `unused' warnings in there are no $n. */
622 *yyvalp
= yyval_default
;
623 *yylocp
= yyloc_default
;
627 *yyvalp
= yyvsp
[1-yyrhslen
].yystate
.yysemantics
.yysval
;
628 *yylocp
= yyvsp
[1-yyrhslen
].yystate
.yyloc
;
631 # define yyerrok (yystack->yyerrState = 0)
633 # define YYACCEPT return yyaccept
635 # define YYABORT return yyabort
637 # define YYERROR return yyerr
639 # define YYRECOVERING (yystack->yyerrState != 0)
641 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
643 # define YYBACKUP(Token, Value) \
645 yyerror (]b4_yyerror_args["syntax error: cannot back up"); \
663 /* Line __line__ of __file__. */
664 b4_syncline([@oline@
], [@ofile@
])
669 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
671 YYSTYPE yyval
= *yy0
;
672 /* `Use' the arguments. */
683 /* Bison grammar-table manipulation. */
685 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
687 /** Number of symbols composing the right hand side of rule #RULE. */
689 yyrhsLength (yyRuleNum yyrule
)
694 /** Left-hand-side symbol for rule #RULE. */
695 static inline yySymbol
696 yylhsNonterm (yyRuleNum yyrule
)
701 #define yyis_pact_ninf(yystate) \
702 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
704 ((yystate
) == YYPACT_NINF
))[
706 /** True iff LR state STATE has only a default reduction (regardless
709 yyisDefaultedState (yyStateNum yystate
)
711 return yyis_pact_ninf (yypact
[yystate
]);
714 /** The default reduction for STATE, assuming it has one. */
715 static inline yyRuleNum
716 yydefaultAction (yyStateNum yystate
)
718 return yydefact
[yystate
];
721 #define yyis_table_ninf(yyindex) \
722 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
724 ((yyindex
) == YYTABLE_NINF
))[
726 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
728 * R < 0: Reduce on rule -R.
730 * R > 0: Shift to state R.
731 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
732 * conflicting reductions.
735 yygetLRActions (yyStateNum yystate
, int yytoken
,
736 int* yyaction
, const short** yyconflicts
)
738 int yyindex
= yypact
[yystate
] + yytoken
;
739 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
741 *yyaction
= -yydefact
[yystate
];
742 *yyconflicts
= yyconfl
;
744 else if (! yyis_table_ninf (yyindex
))
746 *yyaction
= yytable
[yyindex
];
747 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
752 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
756 static inline yyStateNum
757 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
760 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
761 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
764 return yydefgoto
[yylhs
- YYNTOKENS
];
768 yyisShiftAction (int yyaction
)
774 yyisErrorAction (int yyaction
)
776 return yyaction
== 0;
781 /** True iff the semantic value of the edge leading to STATE is
784 yyhasResolvedValue (yyGLRState
* yystate
)
786 return yystate
->yyresolved
;
790 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
791 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
793 yySemanticOption
* yynewItem
;
794 yynewItem
= &yystack
->yynextFree
->yyoption
;
795 yystack
->yyspaceLeft
-= 1;
796 yystack
->yynextFree
+= 1;
797 yynewItem
->yyisState
= yyfalse
;
798 yynewItem
->yystate
= rhs
;
799 yynewItem
->yyrule
= yyrule
;
800 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
801 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
802 if (yystack
->yyspaceLeft
< YYHEADROOM
)
803 yyexpandGLRStack (yystack
]b4_pure_args
[);
808 /** Initialize SET to a singleton set containing an empty stack. */
810 yyinitStateSet (yyGLRStateSet
* yyset
)
813 yyset
->yycapacity
= 16;
814 yyset
->yystates
= (yyGLRState
**) malloc (16 * sizeof (yyset
->yystates
[0]));
815 yyset
->yystates
[0] = NULL
;
818 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
820 free (yyset
->yystates
);
823 /** Initialize STACK to a single empty stack, with total maximum
824 * capacity for all stacks of SIZE. */
826 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
828 yystack
->yyerrflag
= 0;
829 yystack
->yyerrState
= 0;
831 yystack
->yyspaceLeft
= yysize
;
832 yystack
->yynextFree
= yystack
->yyitems
=
833 (yyGLRStackItem
*) malloc (yysize
* sizeof (yystack
->yynextFree
[0]));
834 yystack
->yysplitPoint
= NULL
;
835 yystack
->yylastDeleted
= NULL
;
836 yyinitStateSet (&yystack
->yytops
);
839 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
840 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
842 /** If STACK is expandable, extend it. WARNING: Pointers into the
843 stack from outside should be considered invalid after this call.
844 We always expand when there are 1 or fewer items left AFTER an
845 allocation, so that we can avoid having external pointers exist
846 across an allocation. */
848 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
850 #if YYSTACKEXPANDABLE
851 yyGLRStack yynewStack
;
852 yyGLRStackItem
* yyp0
, *yyp1
;
853 size_t yysize
, yynewSize
;
855 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
856 if (YYMAXDEPTH
<= yysize
)
857 yyFail (yystack
][]b4_pure_args
[,
858 "parsing stack overflow (%d items)", yysize
);
859 yynewSize
= 2*yysize
;
860 if (YYMAXDEPTH
< yynewSize
)
861 yynewSize
= YYMAXDEPTH
;
862 yyinitGLRStack (&yynewStack
, yynewSize
);
863 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
865 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
870 yyGLRState
* yys0
= &yyp0
->yystate
;
871 yyGLRState
* yys1
= &yyp1
->yystate
;
872 if (yys0
->yypred
!= NULL
)
874 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
875 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
876 yys1
->yysemantics
.yyfirstVal
=
877 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
881 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
882 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
883 if (yyv0
->yystate
!= NULL
)
884 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
885 if (yyv0
->yynext
!= NULL
)
886 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
889 if (yystack
->yysplitPoint
!= NULL
)
890 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
891 yystack
->yysplitPoint
, yystate
);
893 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
894 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
895 yystack
->yytops
.yystates
[yyn
] =
896 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
897 yystack
->yytops
.yystates
[yyn
], yystate
);
898 free (yystack
->yyitems
);
899 yystack
->yyitems
= yynewStack
.yyitems
;
900 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
901 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
905 yyFail (yystack
][]b4_lpure_args
[,
906 "parsing stack overflow (%d items)", yysize
);
911 yyfreeGLRStack (yyGLRStack
* yystack
)
913 free (yystack
->yyitems
);
914 yyfreeStateSet (&yystack
->yytops
);
917 /** Assuming that S is a GLRState somewhere on STACK, update the
918 * splitpoint of STACK, if needed, so that it is at least as deep as
921 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
923 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
924 yystack
->yysplitPoint
= yys
;
927 /** Invalidate stack #K in STACK. */
929 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
931 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
932 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
933 yystack
->yytops
.yystates
[yyk
] = NULL
;
936 /** Undelete the last stack that was marked as deleted. Can only be
937 done once after a deletion, and only when all other stacks have
940 yyundeleteLastStack (yyGLRStack
* yystack
)
942 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
944 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
945 yystack
->yytops
.yysize
= 1;
946 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
947 yystack
->yylastDeleted
= NULL
;
951 yyremoveDeletes (yyGLRStack
* yystack
)
955 while (yyj
< yystack
->yytops
.yysize
)
957 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
960 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
961 yystack
->yytops
.yysize
-= 1;
965 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
967 YYDPRINTF ((stderr
, "Rename stack %d -> %d.\n", yyi
, yyj
));
974 /** Shift to a new state on stack #K of STACK, corresponding to LR state
975 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
977 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
978 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
980 yyGLRStackItem
* yynewItem
;
982 yynewItem
= yystack
->yynextFree
;
983 yystack
->yynextFree
+= 1;
984 yystack
->yyspaceLeft
-= 1;
985 yynewItem
->yystate
.yyisState
= yytrue
;
986 yynewItem
->yystate
.yylrState
= yylrState
;
987 yynewItem
->yystate
.yyposn
= yyposn
;
988 yynewItem
->yystate
.yyresolved
= yytrue
;
989 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
990 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
991 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
992 yynewItem
->yystate
.yyloc
= *yylocp
;
993 if (yystack
->yyspaceLeft
< YYHEADROOM
)
994 yyexpandGLRStack (yystack
]b4_pure_args
[);
997 /** Shift to a new state on stack #K of STACK, to a new state
998 * corresponding to LR state LRSTATE, at input position POSN, with
999 * the (unresolved) semantic value of RHS under the action for RULE. */
1001 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1002 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1004 yyGLRStackItem
* yynewItem
;
1006 yynewItem
= yystack
->yynextFree
;
1007 yynewItem
->yystate
.yyisState
= yytrue
;
1008 yynewItem
->yystate
.yylrState
= yylrState
;
1009 yynewItem
->yystate
.yyposn
= yyposn
;
1010 yynewItem
->yystate
.yyresolved
= yyfalse
;
1011 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1012 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1013 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1014 yystack
->yynextFree
+= 1;
1015 yystack
->yyspaceLeft
-= 1;
1016 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1019 /** Pop the symbols consumed by reduction #RULE from the top of stack
1020 * #K of STACK, and perform the appropriate semantic action on their
1021 * semantic values. Assumes that all ambiguities in semantic values
1022 * have been previously resolved. Set *VALP to the resulting value,
1023 * and *LOCP to the computed location (if any). Return value is as
1024 * for userAction. */
1025 static inline YYRESULTTAG
1026 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1027 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1029 int yynrhs
= yyrhsLength (yyrule
);
1031 if (yystack
->yysplitPoint
== NULL
)
1033 /* Standard special case: single stack. */
1034 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1036 yystack
->yynextFree
-= yynrhs
;
1037 yystack
->yyspaceLeft
+= yynrhs
;
1038 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1041 *yyvalp
= yyval_default
;
1042 *yylocp
= yyloc_default
;
1046 *yyvalp
= rhs
[1-yynrhs
].yystate
.yysemantics
.yysval
;
1047 *yylocp
= rhs
[1-yynrhs
].yystate
.yyloc
;
1049 return yyuserAction (yyrule
, yynrhs
, rhs
,
1050 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1056 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1057 for (yyi
= yynrhs
-1, yys
= yystack
->yytops
.yystates
[yyk
]; 0 <= yyi
;
1058 yyi
-= 1, yys
= yys
->yypred
)
1060 assert (yys
->yypred
!= NULL
);
1061 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1062 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1063 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1065 yyupdateSplit (yystack
, yys
);
1066 yystack
->yytops
.yystates
[yyk
] = yys
;
1069 *yyvalp
= yyval_default
;
1070 *yylocp
= yyloc_default
;
1074 *yyvalp
= yyrhsVals
[0].yystate
.yysemantics
.yysval
;
1075 *yylocp
= yyrhsVals
[0].yystate
.yyloc
;
1077 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1078 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1083 # define YY_REDUCE_PRINT(K, Rule)
1085 # define YY_REDUCE_PRINT(K, Rule) \
1088 yy_reduce_print (K, Rule); \
1091 /*----------------------------------------------------------.
1092 | Report that the RULE is going to be reduced on stack #K. |
1093 `----------------------------------------------------------*/
1096 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1099 YYDPRINTF ((stderr
, "Reducing stack %d by rule %d (line %d),",
1100 yyk
, yyrule
- 1, yyrline
[yyrule
]));
1101 /* Print the symbols being reduced, and their result. */
1102 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1103 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1104 YYFPRINTF (stderr
, " -> %s\n", yytokenName (yyr1
[yyrule
]));
1108 /** Pop items off stack #K of STACK according to grammar rule RULE,
1109 * and push back on the resulting nonterminal symbol. Perform the
1110 * semantic action associated with RULE and store its value with the
1111 * newly pushed state, if FORCEEVAL or if STACK is currently
1112 * unambiguous. Otherwise, store the deferred semantic action with
1113 * the new state. If the new state would have an identical input
1114 * position, LR state, and predecessor to an existing state on the stack,
1115 * it is identified with that existing state, eliminating stack #K from
1116 * the STACK. In this case, the (necessarily deferred) semantic value is
1117 * added to the options for the existing state's semantic value.
1119 static inline YYRESULTTAG
1120 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1121 bool yyforceEval
]b4_pure_formals
[)
1123 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1125 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1130 YY_REDUCE_PRINT (yyk
, yyrule
);
1131 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1132 yyglrShift (yystack
, yyk
,
1133 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1134 yylhsNonterm (yyrule
)),
1135 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1136 YYDPRINTF ((stderr
, "Stack %d entering state %d\n",
1137 yyk
, yystack
->yytops
.yystates
[yyk
]->yylrState
));
1143 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1144 yyStateNum yynewLRState
;
1146 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1150 assert (yys
!= NULL
);
1152 yyupdateSplit (yystack
, yys
);
1153 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1155 "Reduced stack %d by rule #%d; action deferred. "
1156 "Now in state %d.\n",
1157 yyk
, yyrule
-1, yynewLRState
));
1158 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1159 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1161 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1162 yyp
= yystack
->yytops
.yystates
[yyi
];
1163 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1165 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1167 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1168 yymarkStackDeleted (yystack
, yyk
);
1169 YYDPRINTF ((stderr
, "Merging stack %d into stack %d.\n",
1176 yystack
->yytops
.yystates
[yyk
] = yys
;
1177 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1183 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1185 if (yystack
->yysplitPoint
== NULL
)
1188 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1190 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1192 yystack
->yytops
.yycapacity
*= 2;
1193 yystack
->yytops
.yystates
=
1194 (yyGLRState
**) realloc (yystack
->yytops
.yystates
,
1195 yystack
->yytops
.yycapacity
1196 * sizeof (yyGLRState
*));
1198 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1199 = yystack
->yytops
.yystates
[yyk
];
1200 yystack
->yytops
.yysize
+= 1;
1201 return yystack
->yytops
.yysize
-1;
1204 /** True iff Y0 and Y1 represent identical options at the top level.
1205 * That is, they represent the same rule applied to RHS symbols
1206 * that produce the same terminal symbols. */
1208 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1210 if (yyy0
->yyrule
== yyy1
->yyrule
)
1212 yyGLRState
*yys0
, *yys1
;
1214 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1215 yyn
= yyrhsLength (yyy0
->yyrule
);
1217 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1218 if (yys0
->yyposn
!= yys1
->yyposn
)
1226 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1227 * alternative semantic values for the RHS-symbols of Y1 into the
1228 * corresponding semantic value sets of the symbols of Y0. */
1230 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1232 yyGLRState
*yys0
, *yys1
;
1234 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1235 yyn
= yyrhsLength (yyy0
->yyrule
);
1237 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1240 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1242 yySemanticOption
* yyz
;
1243 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1246 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1250 /** Y0 and Y1 represent two possible actions to take in a given
1251 * parsing state; return 0 if no combination is possible,
1252 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1254 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1256 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1257 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1261 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1266 if (p0
== 0 || p1
== 0)
1275 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1276 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1277 YYLTYPE
* yylocp
]b4_user_formals
[);
1280 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1285 assert (yys
->yypred
!= NULL
);
1286 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1289 if (! yys
->yyresolved
)
1291 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1292 &yys
->yysemantics
.yysval
, &yys
->yyloc
1296 yys
->yyresolved
= yytrue
;
1303 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1304 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1306 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1310 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1311 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1312 for (yyi
= yynrhs
-1, yys
= yyopt
->yystate
; 0 <= yyi
;
1313 yyi
-= 1, yys
= yys
->yypred
)
1315 assert (yys
->yypred
!= NULL
);
1316 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1317 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1318 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1320 return yyuserAction (yyopt
->yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1321 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1326 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1328 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1331 yyGLRState
* yystates
[YYMAXRHS
];
1332 yyGLRState yyleftmost_state
;
1334 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1335 yystates
[yyi
] = yys
;
1338 yyleftmost_state
.yyposn
= 0;
1339 yystates
[0] = &yyleftmost_state
;
1344 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1345 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1346 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1349 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
1350 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1351 yyx
->yyrule
, yys
->yyposn
+1, yyx
->yystate
->yyposn
);
1352 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1354 if (yystates
[yyi
]->yyresolved
)
1356 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1357 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1358 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1360 YYFPRINTF (stderr
, "%*s%s <tokens %d .. %d>\n", yyindent
+2, "",
1361 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1362 yystates
[yyi
-1]->yyposn
+1, yystates
[yyi
]->yyposn
);
1365 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1371 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1372 yyGLRStack
* yystack
]b4_pure_formals
[)
1374 /* `Unused' warnings. */
1379 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1380 YYFPRINTF (stderr
, "Option 1,\n");
1381 yyreportTree (yyx0
, 2);
1382 YYFPRINTF (stderr
, "\nOption 2,\n");
1383 yyreportTree (yyx1
, 2);
1384 YYFPRINTF (stderr
, "\n");
1386 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1390 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1391 * actions, and return the result. */
1393 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1394 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1396 yySemanticOption
* yybest
;
1397 yySemanticOption
* yyp
;
1400 yybest
= yyoptionList
;
1402 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1404 if (yyidenticalOptions (yybest
, yyp
))
1405 yymergeOptionSets (yybest
, yyp
);
1407 switch (yypreference (yybest
, yyp
))
1410 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1426 int yyprec
= yydprec
[yybest
->yyrule
];
1427 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1428 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1430 if (yyprec
== yydprec
[yyp
->yyrule
])
1434 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1435 *yyvalp
= yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1441 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1445 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1447 if (yystack
->yysplitPoint
!= NULL
)
1452 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1453 yys
!= yystack
->yysplitPoint
;
1454 yys
= yys
->yypred
, yyn
+= 1)
1456 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1463 yycompressStack (yyGLRStack
* yystack
)
1465 yyGLRState
* yyp
, *yyq
, *yyr
;
1467 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1470 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1471 yyp
!= yystack
->yysplitPoint
;
1472 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1475 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1476 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1477 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1478 yystack
->yysplitPoint
= NULL
;
1479 yystack
->yylastDeleted
= NULL
;
1483 yystack
->yynextFree
->yystate
= *yyr
;
1485 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1486 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1487 yystack
->yynextFree
+= 1;
1488 yystack
->yyspaceLeft
-= 1;
1493 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1494 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1498 const short* yyconflicts
;
1500 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1502 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1504 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1506 assert (yystate
!= YYFINAL
);
1507 if (yyisDefaultedState (yystate
))
1509 yyrule
= yydefaultAction (yystate
);
1512 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1513 yymarkStackDeleted (yystack
, yyk
);
1516 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1520 if (*yytokenp
== YYEMPTY
)
1522 YYDPRINTF ((stderr
, "Reading a token: "));
1524 *yytokenp
= YYTRANSLATE (yychar
);
1525 YYDPRINTF ((stderr
, "Next token is %s\n",
1526 yytokenName (*yytokenp
)));
1528 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1530 while (*yyconflicts
!= 0)
1532 int yynewStack
= yysplitStack (yystack
, yyk
);
1533 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1535 YYCHK (yyglrReduce (yystack
, yynewStack
,
1536 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1537 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1538 yylvalp
, yyllocp
]b4_user_args
[));
1542 if (yyisShiftAction (yyaction
))
1544 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1545 yytokenName (*yytokenp
), yyk
));
1546 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1547 *yylvalp
, yyllocp
]b4_user_args
[);
1548 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1549 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1552 else if (yyisErrorAction (yyaction
))
1554 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1555 yymarkStackDeleted (yystack
, yyk
);
1559 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1566 yyreportParseError (yyGLRStack
* yystack
,
1567 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1569 /* `Unused' warnings. */
1573 if (yystack
->yyerrState
== 0)
1576 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1577 int yyn
, yyx
, yycount
;
1579 const char* yyprefix
;
1582 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1583 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1586 /* Start YYX at -YYN if negative to avoid negative indexes in
1588 yysize
= sizeof ("parse error, unexpected ")
1589 + strlen (yytokenName (*yytokenp
));
1590 yyprefix
= ", expecting ";
1591 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
&& yycount
<= 5;
1593 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1594 yysize
+= strlen (yytokenName (yyx
)) + strlen (yyprefix
),
1595 yycount
+= 1, yyprefix
= " or ";
1596 yymsg
= yyp
= (char*) malloc (yysize
);
1597 sprintf (yyp
, "parse error, unexpected %s", yytokenName (*yytokenp
));
1598 yyp
+= strlen (yyp
);
1601 yyprefix
= ", expecting ";
1602 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
; yyx
+= 1)
1603 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1605 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1606 yyp
+= strlen (yyp
);
1610 yyerror (]b4_lyyerror_args
[yymsg
);
1615 yyerror (]b4_lyyerror_args
["parse error");
1620 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1621 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1622 value, and location of the lookahead. */
1624 yyrecoverParseError (yyGLRStack
* yystack
,
1625 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1627 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1631 if (yystack
->yyerrState
== 0)
1632 yystack
->yyerrState
= 3;
1633 else if (yystack
->yyerrState
== 3)
1634 /* We just shifted the error token and (perhaps) took some
1635 reductions. Skip tokens until we can proceed. */
1638 if (*yytokenp
== YYEOF
)
1640 /* Now pop stack until we find a state that shifts the
1642 while (yystack
->yytops
.yystates
[0] != NULL
)
1644 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1645 YYDPRINTF ((stderr
, "Error: popping "));
1646 YYDSYMPRINT ((stderr
,
1647 yystos
[yys
->yylrState
],
1648 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[));
1649 YYDPRINTF ((stderr
, "\n"));
1650 yydestruct (yystos
[yys
->yylrState
],
1651 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1652 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1653 yystack
->yynextFree
-= 1;
1654 yystack
->yyspaceLeft
+= 1;
1656 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1658 if (*yytokenp
!= YYEMPTY
)
1660 YYDPRINTF ((stderr
, "Discarding token %s\n",
1661 yytokenName (*yytokenp
)));
1662 yydestruct (*yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1664 YYDPRINTF ((stderr
, "Reading a token: "));
1666 *yytokenp
= YYTRANSLATE (yychar
);
1667 YYDPRINTF ((stderr
, "Next token is %s\n", yytokenName (*yytokenp
)));
1668 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1669 if (yyis_pact_ninf (yyj
))
1670 /* Something's not right; we shouldn't be here. */
1671 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1673 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1675 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1678 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1682 /* Reduce to one stack. */
1683 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1684 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1686 if (yyk
>= yystack
->yytops
.yysize
)
1687 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1688 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1689 yymarkStackDeleted (yystack
, yyk
);
1690 yyremoveDeletes (yystack
);
1691 yycompressStack (yystack
);
1693 /* Now pop stack until we find a state that shifts the error token. */
1694 while (yystack
->yytops
.yystates
[0] != NULL
)
1696 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1697 yyj
= yypact
[yys
->yylrState
];
1698 if (! yyis_pact_ninf (yyj
))
1701 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1702 && yyisShiftAction (yytable
[yyj
]))
1704 YYDPRINTF ((stderr
, "Shifting error token, "));
1705 yyglrShift (yystack
, 0, yytable
[yyj
],
1706 yys
->yyposn
, *yylvalp
, yyllocp
]b4_user_args
[);
1710 YYDPRINTF ((stderr
, "Error: popping "));
1711 YYDSYMPRINT ((stderr
,
1712 yystos
[yys
->yylrState
],
1713 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[));
1714 YYDPRINTF ((stderr
, "\n"));
1715 yydestruct (yystos
[yys
->yylrState
],
1716 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1717 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1718 yystack
->yynextFree
-= 1;
1719 yystack
->yyspaceLeft
+= 1;
1721 if (yystack
->yytops
.yystates
[0] == NULL
)
1722 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1725 #define YYCHK1(YYE) \
1731 yystack.yyerrflag = 1; \
1734 yystack.yyerrflag = 0; \
1737 goto yyuser_error; \
1746 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1756 #define yychar (yystack.yyrawchar)
1759 YYSTYPE
* const yylvalp
= &yylval
;
1760 YYLTYPE
* const yyllocp
= &yylloc
;
1762 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1763 yystack
.yytokenp
= &yytoken
;
1765 YYDPRINTF ((stderr
, "Starting parse\n"));
1767 if (setjmp (yystack
.yyexception_buffer
) != 0)
1770 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1776 /* For efficiency, we have two loops, the first of which is
1777 specialized to deterministic operation (single stack, no
1778 potential ambiguity). */
1785 const short* yyconflicts
;
1787 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1788 if (yystate
== YYFINAL
)
1790 if (yyisDefaultedState (yystate
))
1792 yyrule
= yydefaultAction (yystate
);
1795 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1798 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1802 if (yytoken
== YYEMPTY
)
1804 YYDPRINTF ((stderr
, "Reading a token: "));
1806 yytoken
= YYTRANSLATE (yychar
);
1807 YYDPRINTF ((stderr
, "Next token is %s\n",
1808 yytokenName (yytoken
)));
1810 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1811 if (*yyconflicts
!= 0)
1813 if (yyisShiftAction (yyaction
))
1815 YYDPRINTF ((stderr
, "Shifting token %s, ",
1816 yytokenName (yytoken
)));
1817 if (yytoken
!= YYEOF
)
1820 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1821 yylval
, yyllocp
]b4_user_args
[);
1822 if (0 < yystack
.yyerrState
)
1823 yystack
.yyerrState
-= 1;
1824 YYDPRINTF ((stderr
, "Entering state %d\n",
1825 yystack
.yytops
.yystates
[0]->yylrState
));
1827 else if (yyisErrorAction (yyaction
))
1829 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1833 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1840 int yyn
= yystack
.yytops
.yysize
;
1841 for (yys
= 0; yys
< yyn
; yys
+= 1)
1842 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1843 yylvalp
, yyllocp
]b4_user_args
[));
1846 yyremoveDeletes (&yystack
);
1847 if (yystack
.yytops
.yysize
== 0)
1849 yyundeleteLastStack (&yystack
);
1850 if (yystack
.yytops
.yysize
== 0)
1851 yyFail (&yystack
][]b4_lpure_args
[, "parse error");
1852 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1853 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1854 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1857 else if (yystack
.yytops
.yysize
== 1)
1859 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1860 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1861 yycompressStack (&yystack
);
1867 yyrecoverParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1868 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1873 yyfreeGLRStack (&yystack
);
1874 return yystack
.yyerrflag
;
1877 /* DEBUGGING ONLY */
1878 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1879 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1882 yy_yypstack (yyGLRState
* yys
)
1886 yy_yypstack (yys
->yypred
);
1887 fprintf (stderr
, " -> ");
1889 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1893 yypstates (yyGLRState
* yyst
)
1896 fprintf (stderr
, "<null>");
1899 fprintf (stderr
, "\n");
1903 yypstack (yyGLRStack
* yystack
, int yyk
)
1905 yypstates (yystack
->yytops
.yystates
[yyk
]);
1908 #define YYINDEX(YYX) \
1909 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1913 yypdumpstack (yyGLRStack
* yystack
)
1915 yyGLRStackItem
* yyp
;
1917 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1919 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1922 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1923 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1924 (unsigned long) yyp
->yystate
.yyposn
,
1925 (long) YYINDEX (yyp
->yystate
.yypred
));
1926 if (! yyp
->yystate
.yyresolved
)
1927 fprintf (stderr
, ", firstVal: %ld",
1928 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1932 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1933 yyp
->yyoption
.yyrule
,
1934 (long) YYINDEX (yyp
->yyoption
.yystate
),
1935 (long) YYINDEX (yyp
->yyoption
.yynext
));
1937 fprintf (stderr
, "\n");
1939 fprintf (stderr
, "Tops:");
1940 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1941 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1942 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1943 fprintf (stderr
, "\n");
1948 m4_if(b4_defines_flag
, 0, [],
1949 [@output @output_header_name@
1950 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
1952 b4_token_defines(b4_tokens
)
1955 m4_ifdef([b4_stype
],
1956 [b4_syncline([b4_stype_line
], [b4_filename
])
1957 typedef union b4_stype yystype
;
1958 /* Line __line__ of __file__. */
1959 b4_syncline([@oline@
], [@ofile@
])],
1960 [typedef int yystype
;])
1961 # define YYSTYPE yystype
1962 # define YYSTYPE_IS_TRIVIAL 1
1966 [extern YYSTYPE b4_prefix
[]lval
;])
1970 typedef struct yyltype
1977 # define YYLTYPE yyltype
1981 [extern YYLTYPE b4_prefix
[]lloc
;])