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
])
142 ## ------------------- ##
143 ## Output file names. ##
144 ## ------------------- ##
146 m4_define_default([b4_input_suffix
], [.y
])
148 m4_define_default([b4_output_parser_suffix
],
149 [m4_translit(b4_input_suffix
, [yY
], [cC
])])
151 m4_define_default([b4_output_parser_name
],
152 [b4_output_prefix
[]b4_output_infix
[]b4_output_parser_suffix
[]])
155 m4_define_default([b4_output_header_suffix
],
156 [m4_translit(b4_input_suffix
, [yY
], [hH
])])
158 m4_define_default([b4_output_header_name
],
159 [b4_output_prefix
[]b4_output_infix
[]b4_output_header_suffix
[]])
161 m4_define_default([b4_header_guard
],
162 [m4_bpatsubst(m4_toupper([BISON_
]b4_output_header_name
),
163 [[^ABCDEFGHIJKLMNOPQRSTUVWXYZ
]], [_
])])
166 # We do want M4 expansion after # for CPP macros.
169 #output "b4_output_parser_name"
170 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
172 /* This is the parser code for GLR (Generalized LR) parser. */
182 m4_if(b4_prefix
[], [yy
], [],
183 [/* If NAME_PREFIX is specified substitute the variables and functions
185 #define yyparse b4_prefix[]parse
186 #define yylex b4_prefix[]lex
187 #define yyerror b4_prefix[]error
188 #define yylval b4_prefix[]lval
189 #define yychar b4_prefix[]char
190 #define yydebug b4_prefix[]debug
191 #define yynerrs b4_prefix[]nerrs
192 b4_location_if([#define yylloc b4_prefix[]lloc])])
194 b4_token_defines(b4_tokens
)
196 /* Copy the first part of user declarations. */
199 /* Enabling traces. */
201 # define YYDEBUG ]b4_debug[
204 /* Enabling verbose error messages. */
205 #ifdef YYERROR_VERBOSE
206 # undef YYERROR_VERBOSE
207 # define YYERROR_VERBOSE 1
209 # define YYERROR_VERBOSE ]b4_error_verbose[
213 ]m4_ifdef([b4_stype
],
214 [b4_syncline([b4_stype_line
], [b4_filename
])
215 typedef union b4_stype yystype
;
216 /* Line __line__ of __file__. */
217 b4_syncline([__oline__
], [__ofile__
])],
218 [typedef int yystype
;])[
219 # define YYSTYPE yystype
220 # define YYSTYPE_IS_TRIVIAL 1
224 typedef struct yyltype
231 # define YYLTYPE ]b4_location_type[
232 # define YYLTYPE_IS_TRIVIAL 1
235 /* Default (constant) values used for initialization for null
236 right-hand sides. Unlike the standard bison.simple template,
237 here we set the default values of the $$ and $@ to zeroed-out
238 values. Since the default value of these quantities is undefined,
239 this behavior is technically correct. */
240 static YYSTYPE yyval_default
;
241 static YYLTYPE yyloc_default
;
243 /* Copy the second part of user declarations. */
246 ]/* Line __line__ of __file__. */
247 b4_syncline([__oline__
], [__ofile__
])
249 #if ! defined (__cplusplus)
259 #ifndef __attribute__
260 /* This feature is available in gcc versions 2.5 and later. */
261 # if !defined (__GNUC__) || __GNUC__ < 2 || \
262 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
263 # define __attribute__(Spec) /* empty */
267 #ifndef ATTRIBUTE_UNUSED
268 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
271 #if ! defined (__GNUC__)
275 /* YYFINAL -- State number of the termination state. */
276 #define YYFINAL ]b4_final_state_number[
277 /* YYLAST -- Last index in YYTABLE. */
278 #define YYLAST ]b4_last[
280 /* YYNTOKENS -- Number of terminals. */
281 #define YYNTOKENS ]b4_tokens_number[
282 /* YYNNTS -- Number of nonterminals. */
283 #define YYNNTS ]b4_nterms_number[
284 /* YYNRULES -- Number of rules. */
285 #define YYNRULES ]b4_rules_number[
286 /* YYNRULES -- Number of states. */
287 #define YYNSTATES ]b4_states_number[
288 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
289 #define YYMAXRHS ]b4_r2_max[
291 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
292 #define YYUNDEFTOK ]b4_undef_token_number[
293 #define YYMAXUTOK ]b4_user_token_number_max[
295 #define YYTRANSLATE(YYX) \
296 ((unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
298 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
299 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
305 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
307 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
312 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
313 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
318 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
319 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
325 #if (YYDEBUG) || YYERROR_VERBOSE
326 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
327 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
328 static const char *const yytname
[] =
333 #define yytname_size ((int) (sizeof (yytname) / sizeof (yytname[0])))
336 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
337 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
342 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
343 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
348 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
349 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
354 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
355 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
360 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
361 doesn't specify something else to do. Zero means the default is an
363 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
368 /* YYPDEFGOTO[NTERM-NUM]. */
369 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
374 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
376 #define YYPACT_NINF ]b4_pact_ninf[
377 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
382 /* YYPGOTO[NTERM-NUM]. */
383 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
388 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
389 positive, shift that token. If negative, reduce the rule which
390 number is the opposite. If zero, do what YYDEFACT says.
391 If YYTABLE_NINF, parse error. */
392 #define YYTABLE_NINF ]b4_table_ninf[
393 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
398 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
399 list of conflicting reductions corresponding to action entry for
400 state STATE-NUM in yytable. 0 means no conflicts. The list in
401 yyconfl is terminated by a rule number of 0. */
402 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
404 ]b4_conflict_list_heads
[
407 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
408 0, pointed into by YYCONFLP. */
409 ]dnl Do
not use b4_int_type_for here
, since there are places where
410 dnl pointers onto yyconfl are taken
, which type is
"short *".
411 dnl We probably ought to introduce a type
for confl
.
412 [static const short yyconfl
[] =
414 ]b4_conflicting_rules
[
417 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
423 /* Prevent warning if -Wmissing-prototypes. */
424 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
426 /* Error token number */
429 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
432 #define YYRHSLOC(yyRhs,YYK) (yyRhs[YYK].yystate.yyloc)
434 #ifndef YYLLOC_DEFAULT
435 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
436 yyCurrent.first_line = YYRHSLOC(yyRhs,1).first_line; \
437 yyCurrent.first_column = YYRHSLOC(yyRhs,1).first_column; \
438 yyCurrent.last_line = YYRHSLOC(yyRhs,YYN).last_line; \
439 yyCurrent.last_column = YYRHSLOC(yyRhs,YYN).last_column;
442 /* YYLEX -- calling `yylex' with the right arguments. */
443 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
448 #define yynerrs (yystack->yyerrcnt)
450 #define yychar (yystack->yyrawchar)],
458 static const int YYEOF
= 0;
459 static const int YYEMPTY
= -2;
461 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
464 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
469 #if ! defined (YYFPRINTF)
470 # define YYFPRINTF fprintf
473 # define YYDPRINTF(Args) \
478 /* Nonzero means print parse trace. It is left uninitialized so that
479 multiple parsers can coexist. */
482 /* Avoid empty `if' bodies. */
483 # define YYDPRINTF(Args) {}
484 #endif /* !YYDEBUG */
486 /* YYINITDEPTH -- initial size of the parser's stacks. */
488 # define YYINITDEPTH ]b4_stack_depth_init[
491 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
492 if the built-in stack extension method is used).
494 Do not make this value too large; the results are undefined if
495 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
496 evaluated with infinite-precision integer arithmetic. */
503 # define YYMAXDEPTH ]b4_stack_depth_max[
506 /* Minimum number of free items on the stack allowed after an
507 allocation. This is to allow allocation and initialization
508 to be completed by functions that call expandGLRStack before the
509 stack is expanded, thus insuring that all necessary pointers get
510 properly redirected to new data. */
513 #if ! defined (YYSTACKEXPANDABLE) \
514 && (! defined (__cplusplus) || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
515 #define YYSTACKEXPANDABLE 1
517 #define YYSTACKEXPANDABLE 0
520 /** State numbers, as in LALR(1) machine */
521 typedef int yyStateNum
;
523 /** Rule numbers, as in LALR(1) machine */
524 typedef int yyRuleNum
;
526 /** Grammar symbol */
527 typedef short yySymbol
;
529 /** Item references, as in LALR(1) machine */
530 typedef short yyItemNum
;
532 typedef struct yyGLRState yyGLRState
;
533 typedef struct yySemanticOption yySemanticOption
;
534 typedef union yyGLRStackItem yyGLRStackItem
;
535 typedef struct yyGLRStack yyGLRStack
;
536 typedef struct yyGLRStateSet yyGLRStateSet
;
541 yyStateNum yylrState
;
545 yySemanticOption
* yyfirstVal
;
551 struct yyGLRStateSet
{
552 yyGLRState
** yystates
;
553 size_t yysize
, yycapacity
;
556 struct yySemanticOption
{
560 yySemanticOption
* yynext
;
563 union yyGLRStackItem
{
565 yySemanticOption yyoption
;
577 jmp_buf yyexception_buffer
;
578 yyGLRStackItem
* yyitems
;
579 yyGLRStackItem
* yynextFree
;
581 yyGLRState
* yysplitPoint
;
582 yyGLRState
* yylastDeleted
;
583 yyGLRStateSet yytops
;
586 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
587 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
588 static void yyfreeGLRStack (yyGLRStack
* yystack
);
591 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
593 if (yyformat
!= NULL
)
597 va_start (yyap
, yyformat
);
598 yystack
->yyerrflag
= 1;
599 vsprintf (yymsg
, yyformat
, yyap
);
600 yyerror (]b4_yyerror_args
[yymsg
);
602 longjmp (yystack
->yyexception_buffer
, 1);
605 #if YYDEBUG || YYERROR_VERBOSE
606 /** A printable representation of TOKEN. Valid until next call to
608 static inline const char*
609 yytokenName (yySymbol yytoken
)
611 return yytname
[yytoken
];
615 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
616 * and top stack item YYVSP. YYLVALP points to place to put semantic
617 * value ($$), and yylocp points to place for location information
618 * (@$). Returns yyok for normal return, yyaccept for YYACCEPT,
619 * yyerr for YYERROR, yyabort for YYABORT. */
621 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
622 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
, yyGLRStack
* yystack
625 /* Avoid `unused' warnings in there are no $n. */
630 *yyvalp
= yyval_default
;
631 *yylocp
= yyloc_default
;
635 *yyvalp
= yyvsp
[1-yyrhslen
].yystate
.yysemantics
.yysval
;
636 *yylocp
= yyvsp
[1-yyrhslen
].yystate
.yyloc
;
639 # define yyval (*yyvalp)
641 # define yyerrok (yystack->yyerrState = 0)
643 # define YYACCEPT return yyaccept
645 # define YYABORT return yyabort
647 # define YYERROR return yyerr
649 # define YYRECOVERING (yystack->yyerrState != 0)
651 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
653 # define YYBACKUP(Token, Value) \
655 yyerror (]b4_yyerror_args["syntax error: cannot back up"); \
674 /* Line __line__ of __file__. */
675 b4_syncline([__oline__
], [__ofile__
])
680 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
682 YYSTYPE yyval
= *yy0
;
683 /* `Use' the arguments. */
694 /* Bison grammar-table manipulation. */
696 /** Number of symbols composing the right hand side of rule #RULE. */
698 yyrhsLength (yyRuleNum yyrule
)
703 /** Left-hand-side symbol for rule #RULE. */
704 static inline yySymbol
705 yylhsNonterm (yyRuleNum yyrule
)
710 /** True iff LR state STATE has only a default reduction (regardless
713 yyisDefaultedState (yyStateNum yystate
)
715 return yypact
[yystate
] == YYPACT_NINF
;
718 /** The default reduction for STATE, assuming it has one. */
719 static inline yyRuleNum
720 yydefaultAction (yyStateNum yystate
)
722 return yydefact
[yystate
];
725 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
727 * R < 0: Reduce on rule -R.
729 * R > 0: Shift to state R.
730 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
731 * conflicting reductions.
734 yygetLRActions (yyStateNum yystate
, int yytoken
,
735 int* yyaction
, const short** yyconflicts
)
737 int yyindex
= yypact
[yystate
] + yytoken
;
738 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
740 *yyaction
= -yydefact
[yystate
];
741 *yyconflicts
= yyconfl
;
743 else if (yytable
[yyindex
] != YYTABLE_NINF
)
745 *yyaction
= yytable
[yyindex
];
746 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
751 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
755 static inline yyStateNum
756 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
759 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
760 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
763 return yydefgoto
[yylhs
- YYNTOKENS
];
767 yyisShiftAction (int yyaction
)
773 yyisErrorAction (int yyaction
)
775 return yyaction
== 0;
780 /** True iff the semantic value of the edge leading to STATE is
783 yyhasResolvedValue (yyGLRState
* yystate
)
785 return yystate
->yyresolved
;
789 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
790 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
792 yySemanticOption
* yynewItem
;
793 yynewItem
= &yystack
->yynextFree
->yyoption
;
794 yystack
->yyspaceLeft
-= 1;
795 yystack
->yynextFree
+= 1;
796 yynewItem
->yyisState
= yyfalse
;
797 yynewItem
->yystate
= rhs
;
798 yynewItem
->yyrule
= yyrule
;
799 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
800 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
801 if (yystack
->yyspaceLeft
< YYHEADROOM
)
802 yyexpandGLRStack (yystack
]b4_pure_args
[);
807 /** Initialize SET to a singleton set containing an empty stack. */
809 yyinitStateSet (yyGLRStateSet
* yyset
)
812 yyset
->yycapacity
= 16;
813 yyset
->yystates
= (yyGLRState
**) malloc (16 * sizeof (yyset
->yystates
[0]));
814 yyset
->yystates
[0] = NULL
;
817 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
819 free (yyset
->yystates
);
822 /** Initialize STACK to a single empty stack, with total maximum
823 * capacity for all stacks of SIZE. */
825 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
827 yystack
->yyerrflag
= 0;
828 yystack
->yyerrState
= 0;
830 yystack
->yyspaceLeft
= yysize
;
831 yystack
->yynextFree
= yystack
->yyitems
=
832 (yyGLRStackItem
*) malloc (yysize
* sizeof (yystack
->yynextFree
[0]));
833 yystack
->yysplitPoint
= NULL
;
834 yystack
->yylastDeleted
= NULL
;
835 yyinitStateSet (&yystack
->yytops
);
838 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
839 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
841 /** If STACK is expandable, extend it. WARNING: Pointers into the
842 stack from outside should be considered invalid after this call.
843 We always expand when there are 1 or fewer items left AFTER an
844 allocation, so that we can avoid having external pointers exist
845 across an allocation. */
847 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
849 #if YYSTACKEXPANDABLE
850 yyGLRStack yynewStack
;
851 yyGLRStackItem
* yyp0
, *yyp1
;
852 size_t yysize
, yynewSize
;
854 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
855 if (YYMAXDEPTH
<= yysize
)
856 yyFail (yystack
][]b4_pure_args
[,
857 "parsing stack overflow (%d items)", yysize
);
858 yynewSize
= 2*yysize
;
859 if (YYMAXDEPTH
< yynewSize
)
860 yynewSize
= YYMAXDEPTH
;
861 yyinitGLRStack (&yynewStack
, yynewSize
);
862 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
864 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
869 yyGLRState
* yys0
= &yyp0
->yystate
;
870 yyGLRState
* yys1
= &yyp1
->yystate
;
871 if (yys0
->yypred
!= NULL
)
873 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
874 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
875 yys1
->yysemantics
.yyfirstVal
=
876 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
880 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
881 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
882 if (yyv0
->yystate
!= NULL
)
883 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
884 if (yyv0
->yynext
!= NULL
)
885 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
888 if (yystack
->yysplitPoint
!= NULL
)
889 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
890 yystack
->yysplitPoint
, yystate
);
892 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
893 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
894 yystack
->yytops
.yystates
[yyn
] =
895 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
896 yystack
->yytops
.yystates
[yyn
], yystate
);
897 free (yystack
->yyitems
);
898 yystack
->yyitems
= yynewStack
.yyitems
;
899 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
900 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
904 yyFail (yystack
][]b4_lpure_args
[,
905 "parsing stack overflow (%d items)", yysize
);
910 yyfreeGLRStack (yyGLRStack
* yystack
)
912 free (yystack
->yyitems
);
913 yyfreeStateSet (&yystack
->yytops
);
916 /** Assuming that S is a GLRState somewhere on STACK, update the
917 * splitpoint of STACK, if needed, so that it is at least as deep as
920 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
922 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
923 yystack
->yysplitPoint
= yys
;
926 /** Invalidate stack #K in STACK. */
928 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
930 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
931 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
932 yystack
->yytops
.yystates
[yyk
] = NULL
;
935 /** Undelete the last stack that was marked as deleted. Can only be
936 done once after a deletion, and only when all other stacks have
939 yyundeleteLastStack (yyGLRStack
* yystack
)
941 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
943 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
944 yystack
->yytops
.yysize
= 1;
945 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
946 yystack
->yylastDeleted
= NULL
;
950 yyremoveDeletes (yyGLRStack
* yystack
)
954 while (yyj
< yystack
->yytops
.yysize
)
956 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
959 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
960 yystack
->yytops
.yysize
-= 1;
964 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
966 YYDPRINTF ((stderr
, "Rename stack %d -> %d.\n", yyi
, yyj
));
973 /** Shift to a new state on stack #K of STACK, corresponding to LR state
974 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
976 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
977 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
979 yyGLRStackItem
* yynewItem
;
981 yynewItem
= yystack
->yynextFree
;
982 yystack
->yynextFree
+= 1;
983 yystack
->yyspaceLeft
-= 1;
984 yynewItem
->yystate
.yyisState
= yytrue
;
985 yynewItem
->yystate
.yylrState
= yylrState
;
986 yynewItem
->yystate
.yyposn
= yyposn
;
987 yynewItem
->yystate
.yyresolved
= yytrue
;
988 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
989 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
990 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
991 yynewItem
->yystate
.yyloc
= *yylocp
;
992 if (yystack
->yyspaceLeft
< YYHEADROOM
)
993 yyexpandGLRStack (yystack
]b4_pure_args
[);
996 /** Shift to a new state on stack #K of STACK, to a new state
997 * corresponding to LR state LRSTATE, at input position POSN, with
998 * the (unresolved) semantic value of RHS under the action for RULE. */
1000 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1001 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1003 yyGLRStackItem
* yynewItem
;
1005 yynewItem
= yystack
->yynextFree
;
1006 yynewItem
->yystate
.yyisState
= yytrue
;
1007 yynewItem
->yystate
.yylrState
= yylrState
;
1008 yynewItem
->yystate
.yyposn
= yyposn
;
1009 yynewItem
->yystate
.yyresolved
= yyfalse
;
1010 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1011 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1012 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1013 yystack
->yynextFree
+= 1;
1014 yystack
->yyspaceLeft
-= 1;
1015 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1018 /** Pop the symbols consumed by reduction #RULE from the top of stack
1019 * #K of STACK, and perform the appropriate semantic action on their
1020 * semantic values. Assumes that all ambiguities in semantic values
1021 * have been previously resolved. Set *VALP to the resulting value,
1022 * and *LOCP to the computed location (if any). Return value is as
1023 * for userAction. */
1025 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1026 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1028 int yynrhs
= yyrhsLength (yyrule
);
1030 if (yystack
->yysplitPoint
== NULL
)
1032 /* Standard special case: single stack. */
1033 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1035 yystack
->yynextFree
-= yynrhs
;
1036 yystack
->yyspaceLeft
+= yynrhs
;
1037 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1040 *yyvalp
= yyval_default
;
1041 *yylocp
= yyloc_default
;
1045 *yyvalp
= rhs
[1-yynrhs
].yystate
.yysemantics
.yysval
;
1046 *yylocp
= rhs
[1-yynrhs
].yystate
.yyloc
;
1048 return yyuserAction (yyrule
, yynrhs
, rhs
,
1049 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1055 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1056 for (yyi
= yynrhs
-1, yys
= yystack
->yytops
.yystates
[yyk
]; 0 <= yyi
;
1057 yyi
-= 1, yys
= yys
->yypred
)
1059 assert (yys
->yypred
!= NULL
);
1060 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1061 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1062 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1064 yyupdateSplit (yystack
, yys
);
1065 yystack
->yytops
.yystates
[yyk
] = yys
;
1068 *yyvalp
= yyval_default
;
1069 *yylocp
= yyloc_default
;
1073 *yyvalp
= yyrhsVals
[0].yystate
.yysemantics
.yysval
;
1074 *yylocp
= yyrhsVals
[0].yystate
.yyloc
;
1076 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1077 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1082 # define YY_REDUCE_PRINT(K, Rule)
1084 # define YY_REDUCE_PRINT(K, Rule) \
1087 yy_reduce_print (K, Rule); \
1090 /*----------------------------------------------------------.
1091 | Report that the RULE is going to be reduced on stack #K. |
1092 `----------------------------------------------------------*/
1095 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1098 YYDPRINTF ((stderr
, "Reducing stack %d by rule %d (line %d),",
1099 yyk
, yyrule
- 1, yyrline
[yyrule
]));
1100 /* Print the symbols being reduced, and their result. */
1101 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1102 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1103 YYFPRINTF (stderr
, " -> %s\n", yytokenName (yyr1
[yyrule
]));
1107 /** Pop items off stack #K of STACK according to grammar rule RULE,
1108 * and push back on the resulting nonterminal symbol. Perform the
1109 * semantic action associated with RULE and store its value with the
1110 * newly pushed state, if FORCEEVAL or if STACK is currently
1111 * unambiguous. Otherwise, store the deferred semantic action with
1112 * the new state. If the new state would have an identical input
1113 * position, LR state, and predecessor to an existing state on the stack,
1114 * it is identified with that existing state, eliminating stack #K from
1115 * the STACK. In this case, the (necessarily deferred) semantic value is
1116 * added to the options for the existing state's semantic value.
1118 static inline YYRESULTTAG
1119 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1120 bool yyforceEval
]b4_pure_formals
[)
1122 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1124 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1129 YY_REDUCE_PRINT (yyk
, yyrule
);
1130 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1131 yyglrShift (yystack
, yyk
,
1132 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1133 yylhsNonterm (yyrule
)),
1134 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1135 YYDPRINTF ((stderr
, "Stack %d entering state %d\n",
1136 yyk
, yystack
->yytops
.yystates
[yyk
]->yylrState
));
1142 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1143 yyStateNum yynewLRState
;
1145 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1149 assert (yys
!= NULL
);
1151 yyupdateSplit (yystack
, yys
);
1152 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1154 "Reduced stack %d by rule #%d; action deferred. "
1155 "Now in state %d.\n",
1156 yyk
, yyrule
-1, yynewLRState
));
1157 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1158 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1160 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1161 yyp
= yystack
->yytops
.yystates
[yyi
];
1162 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1164 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1166 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1167 yymarkStackDeleted (yystack
, yyk
);
1168 YYDPRINTF ((stderr
, "Merging stack %d into stack %d.\n",
1175 yystack
->yytops
.yystates
[yyk
] = yys
;
1176 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1182 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1184 if (yystack
->yysplitPoint
== NULL
)
1187 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1189 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1191 yystack
->yytops
.yycapacity
*= 2;
1192 yystack
->yytops
.yystates
=
1193 (yyGLRState
**) realloc (yystack
->yytops
.yystates
,
1194 yystack
->yytops
.yycapacity
1195 * sizeof (yyGLRState
*));
1197 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1198 = yystack
->yytops
.yystates
[yyk
];
1199 yystack
->yytops
.yysize
+= 1;
1200 return yystack
->yytops
.yysize
-1;
1203 /** True iff Y0 and Y1 represent identical options at the top level.
1204 * That is, they represent the same rule applied to RHS symbols
1205 * that produce the same terminal symbols. */
1207 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1209 if (yyy0
->yyrule
== yyy1
->yyrule
)
1211 yyGLRState
*yys0
, *yys1
;
1213 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1214 yyn
= yyrhsLength (yyy0
->yyrule
);
1216 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1217 if (yys0
->yyposn
!= yys1
->yyposn
)
1225 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1226 * alternative semantic values for the RHS-symbols of Y1 into the
1227 * corresponding semantic value sets of the symbols of Y0. */
1229 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1231 yyGLRState
*yys0
, *yys1
;
1233 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1234 yyn
= yyrhsLength (yyy0
->yyrule
);
1236 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1239 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1241 yySemanticOption
* yyz
;
1242 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1245 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1249 /** Y0 and Y1 represent two possible actions to take in a given
1250 * parsing state; return 0 if no combination is possible,
1251 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1253 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1255 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1256 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1260 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1265 if (p0
== 0 || p1
== 0)
1274 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1275 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1276 YYLTYPE
* yylocp
]b4_user_formals
[);
1279 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1284 assert (yys
->yypred
!= NULL
);
1285 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1288 if (! yys
->yyresolved
)
1290 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1291 &yys
->yysemantics
.yysval
, &yys
->yyloc
1295 yys
->yyresolved
= yytrue
;
1302 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1303 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1305 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1309 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1310 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1311 for (yyi
= yynrhs
-1, yys
= yyopt
->yystate
; 0 <= yyi
;
1312 yyi
-= 1, yys
= yys
->yypred
)
1314 assert (yys
->yypred
!= NULL
);
1315 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1316 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1317 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1319 return yyuserAction (yyopt
->yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1320 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1325 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1327 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1330 yyGLRState
* yystates
[YYMAXRHS
];
1331 yyGLRState yyleftmost_state
;
1333 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1334 yystates
[yyi
] = yys
;
1337 yyleftmost_state
.yyposn
= 0;
1338 yystates
[0] = &yyleftmost_state
;
1343 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1344 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1345 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1348 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
1349 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1350 yyx
->yyrule
, yys
->yyposn
+1, yyx
->yystate
->yyposn
);
1351 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1353 if (yystates
[yyi
]->yyresolved
)
1355 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1356 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1357 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1359 YYFPRINTF (stderr
, "%*s%s <tokens %d .. %d>\n", yyindent
+2, "",
1360 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1361 yystates
[yyi
-1]->yyposn
+1, yystates
[yyi
]->yyposn
);
1364 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1370 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1371 yyGLRStack
* yystack
]b4_pure_formals
[)
1373 /* `Unused' warnings. */
1378 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1379 YYFPRINTF (stderr
, "Option 1,\n");
1380 yyreportTree (yyx0
, 2);
1381 YYFPRINTF (stderr
, "\nOption 2,\n");
1382 yyreportTree (yyx1
, 2);
1383 YYFPRINTF (stderr
, "\n");
1385 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1389 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1390 * actions, and return the result. */
1392 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1393 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1395 yySemanticOption
* yybest
;
1396 yySemanticOption
* yyp
;
1399 yybest
= yyoptionList
;
1401 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1403 if (yyidenticalOptions (yybest
, yyp
))
1404 yymergeOptionSets (yybest
, yyp
);
1406 switch (yypreference (yybest
, yyp
))
1409 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1425 int yyprec
= yydprec
[yybest
->yyrule
];
1426 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1427 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1429 if (yyprec
== yydprec
[yyp
->yyrule
])
1433 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1434 *yyvalp
= yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1440 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1444 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1446 if (yystack
->yysplitPoint
!= NULL
)
1451 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1452 yys
!= yystack
->yysplitPoint
;
1453 yys
= yys
->yypred
, yyn
+= 1)
1455 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1462 yycompressStack (yyGLRStack
* yystack
)
1464 yyGLRState
* yyp
, *yyq
, *yyr
;
1466 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1469 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1470 yyp
!= yystack
->yysplitPoint
;
1471 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1474 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1475 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1476 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1477 yystack
->yysplitPoint
= NULL
;
1478 yystack
->yylastDeleted
= NULL
;
1482 yystack
->yynextFree
->yystate
= *yyr
;
1484 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1485 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1486 yystack
->yynextFree
+= 1;
1487 yystack
->yyspaceLeft
-= 1;
1492 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1493 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1497 const short* yyconflicts
;
1499 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1501 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1503 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1505 assert (yystate
!= YYFINAL
);
1506 if (yyisDefaultedState (yystate
))
1508 yyrule
= yydefaultAction (yystate
);
1511 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1512 yymarkStackDeleted (yystack
, yyk
);
1515 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1519 if (*yytokenp
== YYEMPTY
)
1521 YYDPRINTF ((stderr
, "Reading a token: "));
1523 *yytokenp
= YYTRANSLATE(yychar
);
1524 YYDPRINTF ((stderr
, "Next token is %s\n",
1525 yytokenName (*yytokenp
)));
1527 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1529 while (*yyconflicts
!= 0)
1531 int yynewStack
= yysplitStack (yystack
, yyk
);
1532 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1534 YYCHK (yyglrReduce (yystack
, yynewStack
,
1535 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1536 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1537 yylvalp
, yyllocp
]b4_user_args
[));
1541 if (yyisShiftAction (yyaction
))
1543 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1544 yytokenName (*yytokenp
), yyk
));
1545 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1546 *yylvalp
, yyllocp
]b4_user_args
[);
1547 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1548 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1551 else if (yyisErrorAction (yyaction
))
1553 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1554 yymarkStackDeleted (yystack
, yyk
);
1558 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1565 yyreportParseError (yyGLRStack
* yystack
,
1566 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1568 /* `Unused' warnings. */
1572 if (yystack
->yyerrState
== 0)
1575 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1576 int yyn
, yyx
, yycount
;
1578 const char* yyprefix
;
1581 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1582 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1585 /* Start YYX at -YYN if negative to avoid negative indexes in
1587 yysize
= sizeof ("parse error, unexpected ")
1588 + strlen (yytokenName (*yytokenp
));
1589 yyprefix
= ", expecting ";
1590 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
&& yycount
<= 5;
1592 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1593 yysize
+= strlen (yytokenName (yyx
)) + strlen (yyprefix
),
1594 yycount
+= 1, yyprefix
= " or ";
1595 yymsg
= yyp
= (char*) malloc (yysize
);
1596 sprintf (yyp
, "parse error, unexpected %s",
1597 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
)
1639 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1640 if (*yytokenp
!= YYEMPTY
)
1641 YYDPRINTF ((stderr
, "Discarding token %s\n",
1642 yytokenName (*yytokenp
)));
1643 YYDPRINTF ((stderr
, "Reading a token: "));
1645 *yytokenp
= YYTRANSLATE (yychar
);
1646 YYDPRINTF ((stderr
, "Next token is %s\n", yytokenName (*yytokenp
)));
1647 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1648 if (yyj
== YYPACT_NINF
)
1649 /* Something's not right; we shouldn't be here. */
1650 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1652 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1654 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1657 else if (yytable
[yyj
] != 0 && yytable
[yyj
] != YYTABLE_NINF
)
1661 /* Reduce to one stack. */
1662 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1663 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1665 if (yyk
>= yystack
->yytops
.yysize
)
1666 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1667 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1668 yymarkStackDeleted (yystack
, yyk
);
1669 yyremoveDeletes (yystack
);
1670 yycompressStack (yystack
);
1672 /* Now pop stack until we find a state that shifts the error token. */
1673 while (yystack
->yytops
.yystates
[0] != NULL
)
1675 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
] + YYTERROR
;
1676 if (yyj
!= YYPACT_NINF
+ YYTERROR
&& yyj
>= 0 && yyj
<= YYLAST
&&
1677 yycheck
[yyj
] == YYTERROR
&& yyisShiftAction (yytable
[yyj
]))
1679 yyglrShift (yystack
, 0, yytable
[yyj
],
1680 yystack
->yytops
.yystates
[0]->yyposn
,
1681 *yylvalp
, yyllocp
]b4_user_args
[);
1684 yystack
->yytops
.yystates
[0] = yystack
->yytops
.yystates
[0]->yypred
;
1685 yystack
->yynextFree
-= 1;
1686 yystack
->yyspaceLeft
+= 1;
1688 if (yystack
->yytops
.yystates
[0] == NULL
)
1689 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1692 #define YYCHK1(YYE) \
1698 yystack.yyerrflag = 1; \
1701 yystack.yyerrflag = 0; \
1704 goto yyuser_error; \
1713 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1723 #define yychar (yystack.yyrawchar)
1726 YYSTYPE
* const yylvalp
= &yylval
;
1727 YYLTYPE
* const yyllocp
= &yylloc
;
1729 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1730 yystack
.yytokenp
= &yytoken
;
1732 YYDPRINTF ((stderr
, "Starting parse\n"));
1734 if (setjmp (yystack
.yyexception_buffer
) != 0)
1737 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1743 /* For efficiency, we have two loops, the first of which is
1744 specialized to deterministic operation (single stack, no
1745 potential ambiguity). */
1752 const short* yyconflicts
;
1754 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1755 if (yystate
== YYFINAL
)
1757 if (yyisDefaultedState (yystate
))
1759 yyrule
= yydefaultAction (yystate
);
1762 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1765 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1769 if (yytoken
== YYEMPTY
)
1771 YYDPRINTF ((stderr
, "Reading a token: "));
1773 yytoken
= YYTRANSLATE (yychar
);
1774 YYDPRINTF ((stderr
, "Next token is %s\n",
1775 yytokenName (yytoken
)));
1777 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1778 if (*yyconflicts
!= 0)
1780 if (yyisShiftAction (yyaction
))
1782 YYDPRINTF ((stderr
, "Shifting token %s, ",
1783 yytokenName (yytoken
)));
1784 if (yytoken
!= YYEOF
)
1787 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1788 yylval
, yyllocp
]b4_user_args
[);
1789 if (0 < yystack
.yyerrState
)
1790 yystack
.yyerrState
-= 1;
1791 YYDPRINTF ((stderr
, "Entering state %d\n",
1792 yystack
.yytops
.yystates
[0]->yylrState
));
1794 else if (yyisErrorAction (yyaction
))
1796 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1800 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1807 int yyn
= yystack
.yytops
.yysize
;
1808 for (yys
= 0; yys
< yyn
; yys
+= 1)
1809 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1810 yylvalp
, yyllocp
]b4_user_args
[));
1813 yyremoveDeletes (&yystack
);
1814 if (yystack
.yytops
.yysize
== 0)
1816 yyundeleteLastStack (&yystack
);
1817 if (yystack
.yytops
.yysize
== 0)
1818 yyFail (&yystack
][]b4_lpure_args
[, "parse error");
1819 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1820 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1821 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1824 else if (yystack
.yytops
.yysize
== 1)
1826 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1827 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1828 yycompressStack (&yystack
);
1834 yyrecoverParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1835 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1840 yyfreeGLRStack (&yystack
);
1841 return yystack
.yyerrflag
;
1844 /* DEBUGGING ONLY */
1845 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1846 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1849 yy_yypstack (yyGLRState
* yys
)
1853 yy_yypstack (yys
->yypred
);
1854 fprintf (stderr
, " -> ");
1856 fprintf (stderr
, "%d@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1860 yypstates (yyGLRState
* yyst
)
1863 fprintf (stderr
, "<null>");
1866 fprintf (stderr
, "\n");
1870 yypstack (yyGLRStack
* yystack
, int yyk
)
1872 yypstates (yystack
->yytops
.yystates
[yyk
]);
1875 #define YYINDEX(YYX) \
1876 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1880 yypdumpstack (yyGLRStack
* yystack
)
1882 yyGLRStackItem
* yyp
;
1884 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1886 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1889 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1890 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1891 (unsigned long) yyp
->yystate
.yyposn
,
1892 (long) YYINDEX (yyp
->yystate
.yypred
));
1893 if (! yyp
->yystate
.yyresolved
)
1894 fprintf (stderr
, ", firstVal: %ld",
1895 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1899 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1900 yyp
->yyoption
.yyrule
,
1901 (long) YYINDEX (yyp
->yyoption
.yystate
),
1902 (long) YYINDEX (yyp
->yyoption
.yynext
));
1904 fprintf (stderr
, "\n");
1906 fprintf (stderr
, "Tops:");
1907 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1908 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1909 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1910 fprintf (stderr
, "\n");
1915 m4_if(b4_defines_flag
, 0, [],
1916 [#output "b4_output_header_name"
1917 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
1918 #ifndef b4_header_guard
1919 # define b4_header_guard
1921 b4_token_defines(b4_tokens
)
1924 m4_ifdef([b4_stype
],
1925 [b4_syncline([b4_stype_line
], [b4_filename
])
1926 typedef union b4_stype yystype
;
1927 /* Line __line__ of __file__. */
1928 b4_syncline([__oline__
], [__ofile__
])],
1929 [typedef int yystype
;])
1930 # define YYSTYPE yystype
1934 [extern YYSTYPE b4_prefix
[]lval
;])
1938 typedef struct yyltype
1945 # define YYLTYPE yyltype
1949 [extern YYLTYPE b4_prefix
[]lloc
;])
1951 #endif /* not b4_header_guard */