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 #define yyis_pact_ninf(yystate) \
711 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
713 ((yystate
) == YYPACT_NINF
))[
715 /** True iff LR state STATE has only a default reduction (regardless
718 yyisDefaultedState (yyStateNum yystate
)
720 return yyis_pact_ninf (yypact
[yystate
]);
723 /** The default reduction for STATE, assuming it has one. */
724 static inline yyRuleNum
725 yydefaultAction (yyStateNum yystate
)
727 return yydefact
[yystate
];
730 #define yyis_table_ninf(yyindex) \
731 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
733 ((yyindex
) == YYTABLE_NINF
))[
735 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
737 * R < 0: Reduce on rule -R.
739 * R > 0: Shift to state R.
740 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
741 * conflicting reductions.
744 yygetLRActions (yyStateNum yystate
, int yytoken
,
745 int* yyaction
, const short** yyconflicts
)
747 int yyindex
= yypact
[yystate
] + yytoken
;
748 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
750 *yyaction
= -yydefact
[yystate
];
751 *yyconflicts
= yyconfl
;
753 else if (! yyis_table_ninf (yyindex
))
755 *yyaction
= yytable
[yyindex
];
756 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
761 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
765 static inline yyStateNum
766 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
769 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
770 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
773 return yydefgoto
[yylhs
- YYNTOKENS
];
777 yyisShiftAction (int yyaction
)
783 yyisErrorAction (int yyaction
)
785 return yyaction
== 0;
790 /** True iff the semantic value of the edge leading to STATE is
793 yyhasResolvedValue (yyGLRState
* yystate
)
795 return yystate
->yyresolved
;
799 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
800 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
802 yySemanticOption
* yynewItem
;
803 yynewItem
= &yystack
->yynextFree
->yyoption
;
804 yystack
->yyspaceLeft
-= 1;
805 yystack
->yynextFree
+= 1;
806 yynewItem
->yyisState
= yyfalse
;
807 yynewItem
->yystate
= rhs
;
808 yynewItem
->yyrule
= yyrule
;
809 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
810 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
811 if (yystack
->yyspaceLeft
< YYHEADROOM
)
812 yyexpandGLRStack (yystack
]b4_pure_args
[);
817 /** Initialize SET to a singleton set containing an empty stack. */
819 yyinitStateSet (yyGLRStateSet
* yyset
)
822 yyset
->yycapacity
= 16;
823 yyset
->yystates
= (yyGLRState
**) malloc (16 * sizeof (yyset
->yystates
[0]));
824 yyset
->yystates
[0] = NULL
;
827 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
829 free (yyset
->yystates
);
832 /** Initialize STACK to a single empty stack, with total maximum
833 * capacity for all stacks of SIZE. */
835 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
837 yystack
->yyerrflag
= 0;
838 yystack
->yyerrState
= 0;
840 yystack
->yyspaceLeft
= yysize
;
841 yystack
->yynextFree
= yystack
->yyitems
=
842 (yyGLRStackItem
*) malloc (yysize
* sizeof (yystack
->yynextFree
[0]));
843 yystack
->yysplitPoint
= NULL
;
844 yystack
->yylastDeleted
= NULL
;
845 yyinitStateSet (&yystack
->yytops
);
848 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
849 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
851 /** If STACK is expandable, extend it. WARNING: Pointers into the
852 stack from outside should be considered invalid after this call.
853 We always expand when there are 1 or fewer items left AFTER an
854 allocation, so that we can avoid having external pointers exist
855 across an allocation. */
857 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
859 #if YYSTACKEXPANDABLE
860 yyGLRStack yynewStack
;
861 yyGLRStackItem
* yyp0
, *yyp1
;
862 size_t yysize
, yynewSize
;
864 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
865 if (YYMAXDEPTH
<= yysize
)
866 yyFail (yystack
][]b4_pure_args
[,
867 "parsing stack overflow (%d items)", yysize
);
868 yynewSize
= 2*yysize
;
869 if (YYMAXDEPTH
< yynewSize
)
870 yynewSize
= YYMAXDEPTH
;
871 yyinitGLRStack (&yynewStack
, yynewSize
);
872 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
874 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
879 yyGLRState
* yys0
= &yyp0
->yystate
;
880 yyGLRState
* yys1
= &yyp1
->yystate
;
881 if (yys0
->yypred
!= NULL
)
883 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
884 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
885 yys1
->yysemantics
.yyfirstVal
=
886 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
890 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
891 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
892 if (yyv0
->yystate
!= NULL
)
893 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
894 if (yyv0
->yynext
!= NULL
)
895 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
898 if (yystack
->yysplitPoint
!= NULL
)
899 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
900 yystack
->yysplitPoint
, yystate
);
902 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
903 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
904 yystack
->yytops
.yystates
[yyn
] =
905 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
906 yystack
->yytops
.yystates
[yyn
], yystate
);
907 free (yystack
->yyitems
);
908 yystack
->yyitems
= yynewStack
.yyitems
;
909 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
910 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
914 yyFail (yystack
][]b4_lpure_args
[,
915 "parsing stack overflow (%d items)", yysize
);
920 yyfreeGLRStack (yyGLRStack
* yystack
)
922 free (yystack
->yyitems
);
923 yyfreeStateSet (&yystack
->yytops
);
926 /** Assuming that S is a GLRState somewhere on STACK, update the
927 * splitpoint of STACK, if needed, so that it is at least as deep as
930 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
932 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
933 yystack
->yysplitPoint
= yys
;
936 /** Invalidate stack #K in STACK. */
938 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
940 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
941 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
942 yystack
->yytops
.yystates
[yyk
] = NULL
;
945 /** Undelete the last stack that was marked as deleted. Can only be
946 done once after a deletion, and only when all other stacks have
949 yyundeleteLastStack (yyGLRStack
* yystack
)
951 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
953 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
954 yystack
->yytops
.yysize
= 1;
955 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
956 yystack
->yylastDeleted
= NULL
;
960 yyremoveDeletes (yyGLRStack
* yystack
)
964 while (yyj
< yystack
->yytops
.yysize
)
966 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
969 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
970 yystack
->yytops
.yysize
-= 1;
974 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
976 YYDPRINTF ((stderr
, "Rename stack %d -> %d.\n", yyi
, yyj
));
983 /** Shift to a new state on stack #K of STACK, corresponding to LR state
984 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
986 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
987 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
989 yyGLRStackItem
* yynewItem
;
991 yynewItem
= yystack
->yynextFree
;
992 yystack
->yynextFree
+= 1;
993 yystack
->yyspaceLeft
-= 1;
994 yynewItem
->yystate
.yyisState
= yytrue
;
995 yynewItem
->yystate
.yylrState
= yylrState
;
996 yynewItem
->yystate
.yyposn
= yyposn
;
997 yynewItem
->yystate
.yyresolved
= yytrue
;
998 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
999 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1000 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1001 yynewItem
->yystate
.yyloc
= *yylocp
;
1002 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1003 yyexpandGLRStack (yystack
]b4_pure_args
[);
1006 /** Shift to a new state on stack #K of STACK, to a new state
1007 * corresponding to LR state LRSTATE, at input position POSN, with
1008 * the (unresolved) semantic value of RHS under the action for RULE. */
1010 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1011 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1013 yyGLRStackItem
* yynewItem
;
1015 yynewItem
= yystack
->yynextFree
;
1016 yynewItem
->yystate
.yyisState
= yytrue
;
1017 yynewItem
->yystate
.yylrState
= yylrState
;
1018 yynewItem
->yystate
.yyposn
= yyposn
;
1019 yynewItem
->yystate
.yyresolved
= yyfalse
;
1020 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1021 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1022 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1023 yystack
->yynextFree
+= 1;
1024 yystack
->yyspaceLeft
-= 1;
1025 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1028 /** Pop the symbols consumed by reduction #RULE from the top of stack
1029 * #K of STACK, and perform the appropriate semantic action on their
1030 * semantic values. Assumes that all ambiguities in semantic values
1031 * have been previously resolved. Set *VALP to the resulting value,
1032 * and *LOCP to the computed location (if any). Return value is as
1033 * for userAction. */
1035 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1036 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1038 int yynrhs
= yyrhsLength (yyrule
);
1040 if (yystack
->yysplitPoint
== NULL
)
1042 /* Standard special case: single stack. */
1043 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1045 yystack
->yynextFree
-= yynrhs
;
1046 yystack
->yyspaceLeft
+= yynrhs
;
1047 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1050 *yyvalp
= yyval_default
;
1051 *yylocp
= yyloc_default
;
1055 *yyvalp
= rhs
[1-yynrhs
].yystate
.yysemantics
.yysval
;
1056 *yylocp
= rhs
[1-yynrhs
].yystate
.yyloc
;
1058 return yyuserAction (yyrule
, yynrhs
, rhs
,
1059 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1065 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1066 for (yyi
= yynrhs
-1, yys
= yystack
->yytops
.yystates
[yyk
]; 0 <= yyi
;
1067 yyi
-= 1, yys
= yys
->yypred
)
1069 assert (yys
->yypred
!= NULL
);
1070 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1071 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1072 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1074 yyupdateSplit (yystack
, yys
);
1075 yystack
->yytops
.yystates
[yyk
] = yys
;
1078 *yyvalp
= yyval_default
;
1079 *yylocp
= yyloc_default
;
1083 *yyvalp
= yyrhsVals
[0].yystate
.yysemantics
.yysval
;
1084 *yylocp
= yyrhsVals
[0].yystate
.yyloc
;
1086 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1087 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1092 # define YY_REDUCE_PRINT(K, Rule)
1094 # define YY_REDUCE_PRINT(K, Rule) \
1097 yy_reduce_print (K, Rule); \
1100 /*----------------------------------------------------------.
1101 | Report that the RULE is going to be reduced on stack #K. |
1102 `----------------------------------------------------------*/
1105 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1108 YYDPRINTF ((stderr
, "Reducing stack %d by rule %d (line %d),",
1109 yyk
, yyrule
- 1, yyrline
[yyrule
]));
1110 /* Print the symbols being reduced, and their result. */
1111 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1112 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1113 YYFPRINTF (stderr
, " -> %s\n", yytokenName (yyr1
[yyrule
]));
1117 /** Pop items off stack #K of STACK according to grammar rule RULE,
1118 * and push back on the resulting nonterminal symbol. Perform the
1119 * semantic action associated with RULE and store its value with the
1120 * newly pushed state, if FORCEEVAL or if STACK is currently
1121 * unambiguous. Otherwise, store the deferred semantic action with
1122 * the new state. If the new state would have an identical input
1123 * position, LR state, and predecessor to an existing state on the stack,
1124 * it is identified with that existing state, eliminating stack #K from
1125 * the STACK. In this case, the (necessarily deferred) semantic value is
1126 * added to the options for the existing state's semantic value.
1128 static inline YYRESULTTAG
1129 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1130 bool yyforceEval
]b4_pure_formals
[)
1132 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1134 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1139 YY_REDUCE_PRINT (yyk
, yyrule
);
1140 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1141 yyglrShift (yystack
, yyk
,
1142 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1143 yylhsNonterm (yyrule
)),
1144 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1145 YYDPRINTF ((stderr
, "Stack %d entering state %d\n",
1146 yyk
, yystack
->yytops
.yystates
[yyk
]->yylrState
));
1152 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1153 yyStateNum yynewLRState
;
1155 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1159 assert (yys
!= NULL
);
1161 yyupdateSplit (yystack
, yys
);
1162 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1164 "Reduced stack %d by rule #%d; action deferred. "
1165 "Now in state %d.\n",
1166 yyk
, yyrule
-1, yynewLRState
));
1167 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1168 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1170 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1171 yyp
= yystack
->yytops
.yystates
[yyi
];
1172 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1174 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1176 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1177 yymarkStackDeleted (yystack
, yyk
);
1178 YYDPRINTF ((stderr
, "Merging stack %d into stack %d.\n",
1185 yystack
->yytops
.yystates
[yyk
] = yys
;
1186 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1192 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1194 if (yystack
->yysplitPoint
== NULL
)
1197 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1199 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1201 yystack
->yytops
.yycapacity
*= 2;
1202 yystack
->yytops
.yystates
=
1203 (yyGLRState
**) realloc (yystack
->yytops
.yystates
,
1204 yystack
->yytops
.yycapacity
1205 * sizeof (yyGLRState
*));
1207 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1208 = yystack
->yytops
.yystates
[yyk
];
1209 yystack
->yytops
.yysize
+= 1;
1210 return yystack
->yytops
.yysize
-1;
1213 /** True iff Y0 and Y1 represent identical options at the top level.
1214 * That is, they represent the same rule applied to RHS symbols
1215 * that produce the same terminal symbols. */
1217 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1219 if (yyy0
->yyrule
== yyy1
->yyrule
)
1221 yyGLRState
*yys0
, *yys1
;
1223 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1224 yyn
= yyrhsLength (yyy0
->yyrule
);
1226 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1227 if (yys0
->yyposn
!= yys1
->yyposn
)
1235 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1236 * alternative semantic values for the RHS-symbols of Y1 into the
1237 * corresponding semantic value sets of the symbols of Y0. */
1239 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1241 yyGLRState
*yys0
, *yys1
;
1243 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1244 yyn
= yyrhsLength (yyy0
->yyrule
);
1246 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1249 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1251 yySemanticOption
* yyz
;
1252 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1255 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1259 /** Y0 and Y1 represent two possible actions to take in a given
1260 * parsing state; return 0 if no combination is possible,
1261 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1263 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1265 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1266 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1270 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1275 if (p0
== 0 || p1
== 0)
1284 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1285 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1286 YYLTYPE
* yylocp
]b4_user_formals
[);
1289 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1294 assert (yys
->yypred
!= NULL
);
1295 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1298 if (! yys
->yyresolved
)
1300 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1301 &yys
->yysemantics
.yysval
, &yys
->yyloc
1305 yys
->yyresolved
= yytrue
;
1312 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1313 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1315 yyGLRStackItem yyrhsVals
[YYMAXRHS
];
1319 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1320 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1321 for (yyi
= yynrhs
-1, yys
= yyopt
->yystate
; 0 <= yyi
;
1322 yyi
-= 1, yys
= yys
->yypred
)
1324 assert (yys
->yypred
!= NULL
);
1325 yyrhsVals
[yyi
].yystate
.yyresolved
= yytrue
;
1326 yyrhsVals
[yyi
].yystate
.yysemantics
.yysval
= yys
->yysemantics
.yysval
;
1327 yyrhsVals
[yyi
].yystate
.yyloc
= yys
->yyloc
;
1329 return yyuserAction (yyopt
->yyrule
, yynrhs
, yyrhsVals
+ (yynrhs
-1),
1330 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1335 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1337 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1340 yyGLRState
* yystates
[YYMAXRHS
];
1341 yyGLRState yyleftmost_state
;
1343 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1344 yystates
[yyi
] = yys
;
1347 yyleftmost_state
.yyposn
= 0;
1348 yystates
[0] = &yyleftmost_state
;
1353 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1354 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1355 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1358 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %d .. %d>\n",
1359 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1360 yyx
->yyrule
, yys
->yyposn
+1, yyx
->yystate
->yyposn
);
1361 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1363 if (yystates
[yyi
]->yyresolved
)
1365 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1366 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1367 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1369 YYFPRINTF (stderr
, "%*s%s <tokens %d .. %d>\n", yyindent
+2, "",
1370 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1371 yystates
[yyi
-1]->yyposn
+1, yystates
[yyi
]->yyposn
);
1374 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1380 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1381 yyGLRStack
* yystack
]b4_pure_formals
[)
1383 /* `Unused' warnings. */
1388 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1389 YYFPRINTF (stderr
, "Option 1,\n");
1390 yyreportTree (yyx0
, 2);
1391 YYFPRINTF (stderr
, "\nOption 2,\n");
1392 yyreportTree (yyx1
, 2);
1393 YYFPRINTF (stderr
, "\n");
1395 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1399 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1400 * actions, and return the result. */
1402 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1403 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1405 yySemanticOption
* yybest
;
1406 yySemanticOption
* yyp
;
1409 yybest
= yyoptionList
;
1411 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1413 if (yyidenticalOptions (yybest
, yyp
))
1414 yymergeOptionSets (yybest
, yyp
);
1416 switch (yypreference (yybest
, yyp
))
1419 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1435 int yyprec
= yydprec
[yybest
->yyrule
];
1436 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1437 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1439 if (yyprec
== yydprec
[yyp
->yyrule
])
1443 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1444 *yyvalp
= yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1450 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1454 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1456 if (yystack
->yysplitPoint
!= NULL
)
1461 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1462 yys
!= yystack
->yysplitPoint
;
1463 yys
= yys
->yypred
, yyn
+= 1)
1465 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1472 yycompressStack (yyGLRStack
* yystack
)
1474 yyGLRState
* yyp
, *yyq
, *yyr
;
1476 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1479 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1480 yyp
!= yystack
->yysplitPoint
;
1481 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1484 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1485 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1486 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1487 yystack
->yysplitPoint
= NULL
;
1488 yystack
->yylastDeleted
= NULL
;
1492 yystack
->yynextFree
->yystate
= *yyr
;
1494 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1495 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1496 yystack
->yynextFree
+= 1;
1497 yystack
->yyspaceLeft
-= 1;
1502 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1503 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1507 const short* yyconflicts
;
1509 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1511 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1513 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1515 assert (yystate
!= YYFINAL
);
1516 if (yyisDefaultedState (yystate
))
1518 yyrule
= yydefaultAction (yystate
);
1521 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1522 yymarkStackDeleted (yystack
, yyk
);
1525 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1529 if (*yytokenp
== YYEMPTY
)
1531 YYDPRINTF ((stderr
, "Reading a token: "));
1533 *yytokenp
= YYTRANSLATE(yychar
);
1534 YYDPRINTF ((stderr
, "Next token is %s\n",
1535 yytokenName (*yytokenp
)));
1537 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1539 while (*yyconflicts
!= 0)
1541 int yynewStack
= yysplitStack (yystack
, yyk
);
1542 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1544 YYCHK (yyglrReduce (yystack
, yynewStack
,
1545 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1546 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1547 yylvalp
, yyllocp
]b4_user_args
[));
1551 if (yyisShiftAction (yyaction
))
1553 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1554 yytokenName (*yytokenp
), yyk
));
1555 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1556 *yylvalp
, yyllocp
]b4_user_args
[);
1557 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1558 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1561 else if (yyisErrorAction (yyaction
))
1563 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1564 yymarkStackDeleted (yystack
, yyk
);
1568 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1575 yyreportParseError (yyGLRStack
* yystack
,
1576 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1578 /* `Unused' warnings. */
1582 if (yystack
->yyerrState
== 0)
1585 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1586 int yyn
, yyx
, yycount
;
1588 const char* yyprefix
;
1591 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1592 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1595 /* Start YYX at -YYN if negative to avoid negative indexes in
1597 yysize
= sizeof ("parse error, unexpected ")
1598 + strlen (yytokenName (*yytokenp
));
1599 yyprefix
= ", expecting ";
1600 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
&& yycount
<= 5;
1602 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1603 yysize
+= strlen (yytokenName (yyx
)) + strlen (yyprefix
),
1604 yycount
+= 1, yyprefix
= " or ";
1605 yymsg
= yyp
= (char*) malloc (yysize
);
1606 sprintf (yyp
, "parse error, unexpected %s",
1607 yytokenName (*yytokenp
));
1608 yyp
+= strlen (yyp
);
1611 yyprefix
= ", expecting ";
1612 for (yyx
= yyn
< 0 ? -yyn
: 0; yyx
< yytname_size
; yyx
+= 1)
1613 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1615 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1616 yyp
+= strlen (yyp
);
1620 yyerror (]b4_lyyerror_args
[yymsg
);
1625 yyerror (]b4_lyyerror_args
["parse error");
1630 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1631 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1632 value, and location of the lookahead. */
1634 yyrecoverParseError (yyGLRStack
* yystack
,
1635 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1637 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1641 if (yystack
->yyerrState
== 0)
1642 yystack
->yyerrState
= 3;
1643 else if (yystack
->yyerrState
== 3)
1644 /* We just shifted the error token and (perhaps) took some
1645 reductions. Skip tokens until we can proceed. */
1648 if (*yytokenp
== YYEOF
)
1649 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1650 if (*yytokenp
!= YYEMPTY
)
1651 YYDPRINTF ((stderr
, "Discarding token %s\n",
1652 yytokenName (*yytokenp
)));
1653 YYDPRINTF ((stderr
, "Reading a token: "));
1655 *yytokenp
= YYTRANSLATE (yychar
);
1656 YYDPRINTF ((stderr
, "Next token is %s\n", yytokenName (*yytokenp
)));
1657 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1658 if (yyis_pact_ninf (yyj
))
1659 /* Something's not right; we shouldn't be here. */
1660 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1662 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1664 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1667 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1671 /* Reduce to one stack. */
1672 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1673 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1675 if (yyk
>= yystack
->yytops
.yysize
)
1676 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1677 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1678 yymarkStackDeleted (yystack
, yyk
);
1679 yyremoveDeletes (yystack
);
1680 yycompressStack (yystack
);
1682 /* Now pop stack until we find a state that shifts the error token. */
1683 while (yystack
->yytops
.yystates
[0] != NULL
)
1685 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1686 if (! yyis_pact_ninf (yyj
))
1689 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1690 && yyisShiftAction (yytable
[yyj
]))
1692 yyglrShift (yystack
, 0, yytable
[yyj
],
1693 yystack
->yytops
.yystates
[0]->yyposn
,
1694 *yylvalp
, yyllocp
]b4_user_args
[);
1698 yystack
->yytops
.yystates
[0] = yystack
->yytops
.yystates
[0]->yypred
;
1699 yystack
->yynextFree
-= 1;
1700 yystack
->yyspaceLeft
+= 1;
1702 if (yystack
->yytops
.yystates
[0] == NULL
)
1703 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1706 #define YYCHK1(YYE) \
1712 yystack.yyerrflag = 1; \
1715 yystack.yyerrflag = 0; \
1718 goto yyuser_error; \
1727 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1737 #define yychar (yystack.yyrawchar)
1740 YYSTYPE
* const yylvalp
= &yylval
;
1741 YYLTYPE
* const yyllocp
= &yylloc
;
1743 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1744 yystack
.yytokenp
= &yytoken
;
1746 YYDPRINTF ((stderr
, "Starting parse\n"));
1748 if (setjmp (yystack
.yyexception_buffer
) != 0)
1751 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1757 /* For efficiency, we have two loops, the first of which is
1758 specialized to deterministic operation (single stack, no
1759 potential ambiguity). */
1766 const short* yyconflicts
;
1768 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1769 if (yystate
== YYFINAL
)
1771 if (yyisDefaultedState (yystate
))
1773 yyrule
= yydefaultAction (yystate
);
1776 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1779 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1783 if (yytoken
== YYEMPTY
)
1785 YYDPRINTF ((stderr
, "Reading a token: "));
1787 yytoken
= YYTRANSLATE (yychar
);
1788 YYDPRINTF ((stderr
, "Next token is %s\n",
1789 yytokenName (yytoken
)));
1791 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1792 if (*yyconflicts
!= 0)
1794 if (yyisShiftAction (yyaction
))
1796 YYDPRINTF ((stderr
, "Shifting token %s, ",
1797 yytokenName (yytoken
)));
1798 if (yytoken
!= YYEOF
)
1801 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1802 yylval
, yyllocp
]b4_user_args
[);
1803 if (0 < yystack
.yyerrState
)
1804 yystack
.yyerrState
-= 1;
1805 YYDPRINTF ((stderr
, "Entering state %d\n",
1806 yystack
.yytops
.yystates
[0]->yylrState
));
1808 else if (yyisErrorAction (yyaction
))
1810 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1814 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1821 int yyn
= yystack
.yytops
.yysize
;
1822 for (yys
= 0; yys
< yyn
; yys
+= 1)
1823 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1824 yylvalp
, yyllocp
]b4_user_args
[));
1827 yyremoveDeletes (&yystack
);
1828 if (yystack
.yytops
.yysize
== 0)
1830 yyundeleteLastStack (&yystack
);
1831 if (yystack
.yytops
.yysize
== 0)
1832 yyFail (&yystack
][]b4_lpure_args
[, "parse error");
1833 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1834 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1835 yyreportParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1838 else if (yystack
.yytops
.yysize
== 1)
1840 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1841 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1842 yycompressStack (&yystack
);
1848 yyrecoverParseError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1849 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1854 yyfreeGLRStack (&yystack
);
1855 return yystack
.yyerrflag
;
1858 /* DEBUGGING ONLY */
1859 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1860 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1863 yy_yypstack (yyGLRState
* yys
)
1867 yy_yypstack (yys
->yypred
);
1868 fprintf (stderr
, " -> ");
1870 fprintf (stderr
, "%d@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1874 yypstates (yyGLRState
* yyst
)
1877 fprintf (stderr
, "<null>");
1880 fprintf (stderr
, "\n");
1884 yypstack (yyGLRStack
* yystack
, int yyk
)
1886 yypstates (yystack
->yytops
.yystates
[yyk
]);
1889 #define YYINDEX(YYX) \
1890 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1894 yypdumpstack (yyGLRStack
* yystack
)
1896 yyGLRStackItem
* yyp
;
1898 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1900 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1903 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1904 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1905 (unsigned long) yyp
->yystate
.yyposn
,
1906 (long) YYINDEX (yyp
->yystate
.yypred
));
1907 if (! yyp
->yystate
.yyresolved
)
1908 fprintf (stderr
, ", firstVal: %ld",
1909 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1913 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1914 yyp
->yyoption
.yyrule
,
1915 (long) YYINDEX (yyp
->yyoption
.yystate
),
1916 (long) YYINDEX (yyp
->yyoption
.yynext
));
1918 fprintf (stderr
, "\n");
1920 fprintf (stderr
, "Tops:");
1921 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1922 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1923 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1924 fprintf (stderr
, "\n");
1929 m4_if(b4_defines_flag
, 0, [],
1930 [#output "b4_output_header_name"
1931 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002])
1932 #ifndef b4_header_guard
1933 # define b4_header_guard
1935 b4_token_defines(b4_tokens
)
1938 m4_ifdef([b4_stype
],
1939 [b4_syncline([b4_stype_line
], [b4_filename
])
1940 typedef union b4_stype yystype
;
1941 /* Line __line__ of __file__. */
1942 b4_syncline([__oline__
], [__ofile__
])],
1943 [typedef int yystype
;])
1944 # define YYSTYPE yystype
1948 [extern YYSTYPE b4_prefix
[]lval
;])
1952 typedef struct yyltype
1959 # define YYLTYPE yyltype
1963 [extern YYLTYPE b4_prefix
[]lloc
;])
1965 #endif /* not b4_header_guard */