1 m4_divert(-1) -*- C
-*-
3 # GLR skeleton for Bison
4 # Copyright (C) 2002, 2003 Free Software Foundation, Inc.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22 ## ---------------- ##
24 ## ---------------- ##
27 m4_define_default([b4_stack_depth_max
], [10000])
28 m4_define_default([b4_stack_depth_init
], [200])
32 ## ------------------------ ##
33 ## Pure/impure interfaces. ##
34 ## ------------------------ ##
39 # Accumule in b4_lex_param all the yylex arguments.
40 # Yes, this is quite ugly...
41 m4_define([b4_lex_param
],
42 m4_dquote(b4_pure_if([[[[YYSTYPE
*]], [[yylvalp]]][]dnl
43 b4_location_if([, [[YYLTYPE
*], [yyllocp
]]])])dnl
44 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
)))
49 m4_define([b4_user_formals
],
50 [m4_ifset([b4_parse_param
], [, b4_c_ansi_formals(b4_parse_param
)])])
55 # Arguments passed to yyerror: user args plus yylloc.
56 m4_define([b4_yyerror_args
],
57 [b4_pure_if([b4_location_if([yylocp
, ])])dnl
58 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
63 # Same as above, but on the lookahead, hence yyllocp instead of yylocp.
64 m4_define([b4_lyyerror_args
],
65 [b4_pure_if([b4_location_if([yyllocp
, ])])dnl
66 m4_ifset([b4_parse_param
], [b4_c_args(b4_parse_param
), ])])
71 # Arguments needed by yyerror: user args plus yylloc.
72 m4_define([b4_pure_args
],
73 [b4_pure_if([b4_location_if([, yylocp
])])[]b4_user_args
])
78 # Arguments passed to yyerror: user formals plus yyllocp.
79 m4_define([b4_pure_formals
],
80 [b4_pure_if([b4_location_if([, YYLTYPE
*yylocp
])])[]b4_user_formals
])
85 # Same as above, but on the lookahead, hence yyllocp instead of yylocp.
86 m4_define([b4_lpure_args
],
87 [b4_pure_if([b4_location_if([, yyllocp
])])[]b4_user_args
])
92 # Same as above, but on the lookahead, hence yyllocp instead of yylocp.
93 m4_define([b4_lpure_formals
],
94 [b4_pure_if([b4_location_if([YYLTYPE
*yyllocp
])])[]b4_user_formals
])
97 ## ----------------- ##
98 ## Semantic Values. ##
99 ## ----------------- ##
102 # b4_lhs_value([TYPE])
103 # --------------------
104 # Expansion of $<TYPE>$.
105 m4_define([b4_lhs_value
],
106 [(*yyvalp
)[]m4_ifval([$
1], [.$
1])])
109 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
110 # --------------------------------------
111 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
113 m4_define([b4_rhs_value
],
114 [((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (m4_eval([$
2 - $
1]))@
}.yystate
.yysemantics
.yysval
[]m4_ifval([$
3], [.$
3])])
125 m4_define([b4_lhs_location
],
129 # b4_rhs_location(RULE-LENGTH, NUM)
130 # ---------------------------------
131 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
133 m4_define([b4_rhs_location
],
134 [((yyGLRStackItem
const *)yyvsp
)@
{YYFILL (m4_eval([$
2 - $
1]))@
}.yystate
.yyloc
])
136 # We do want M4 expansion after # for CPP macros.
139 @output @output_parser_name@
140 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003])
142 /* This is the parser code for GLR (Generalized LR) parser. */
151 m4_if(b4_prefix
[], [yy
], [],
152 [/* If NAME_PREFIX is specified substitute the variables and functions
154 #define yyparse b4_prefix[]parse
155 #define yylex b4_prefix[]lex
156 #define yyerror b4_prefix[]error
157 #define yylval b4_prefix[]lval
158 #define yychar b4_prefix[]char
159 #define yydebug b4_prefix[]debug
160 #define yynerrs b4_prefix[]nerrs
161 b4_location_if([#define yylloc b4_prefix[]lloc])])
163 b4_token_defines(b4_tokens
)
165 /* Copy the first part of user declarations. */
168 /* Enabling traces. */
170 # define YYDEBUG ]b4_debug[
173 /* Enabling verbose error messages. */
174 #ifdef YYERROR_VERBOSE
175 # undef YYERROR_VERBOSE
176 # define YYERROR_VERBOSE 1
178 # define YYERROR_VERBOSE ]b4_error_verbose[
181 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
182 ]m4_ifdef([b4_stype
],
183 [b4_syncline([b4_stype_line
], [b4_filename
])
184 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
185 /* Line __line__ of glr.c. */
186 b4_syncline([@oline@
], [@ofile@
])],
187 [typedef int YYSTYPE
;])[
188 # define YYSTYPE_IS_DECLARED 1
189 # define YYSTYPE_IS_TRIVIAL 1
192 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
193 typedef struct YYLTYPE
204 # define YYLTYPE_IS_DECLARED 1
205 # define YYLTYPE_IS_TRIVIAL 1
208 /* Default (constant) values used for initialization for null
209 right-hand sides. Unlike the standard yacc.c template,
210 here we set the default values of $$ and $@@ to zeroed-out
211 values. Since the default value of these quantities is undefined,
212 this behavior is technically correct. */
213 static YYSTYPE yyval_default
;
214 static YYLTYPE yyloc_default
;
216 /* Copy the second part of user declarations. */
219 ]/* Line __line__ of glr.c. */
220 b4_syncline([@oline@
], [@ofile@
])
226 # define YYMALLOC malloc
229 # define YYREALLOC realloc
235 typedef unsigned char yybool
;
244 #ifndef __attribute__
245 /* This feature is available in gcc versions 2.5 and later. */
246 # if !defined (__GNUC__) || __GNUC__ < 2 || \
247 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
248 # define __attribute__(Spec) /* empty */
253 # define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
256 #ifndef ATTRIBUTE_UNUSED
257 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
260 /* YYFINAL -- State number of the termination state. */
261 #define YYFINAL ]b4_final_state_number[
262 /* YYLAST -- Last index in YYTABLE. */
263 #define YYLAST ]b4_last[
265 /* YYNTOKENS -- Number of terminals. */
266 #define YYNTOKENS ]b4_tokens_number[
267 /* YYNNTS -- Number of nonterminals. */
268 #define YYNNTS ]b4_nterms_number[
269 /* YYNRULES -- Number of rules. */
270 #define YYNRULES ]b4_rules_number[
271 /* YYNRULES -- Number of states. */
272 #define YYNSTATES ]b4_states_number[
273 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
274 #define YYMAXRHS ]b4_r2_max[
275 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
276 accessed by $0, $-1, etc., in any rule. */
277 #define YYMAXLEFT ]b4_max_left_semantic_context[
279 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
280 #define YYUNDEFTOK ]b4_undef_token_number[
281 #define YYMAXUTOK ]b4_user_token_number_max[
283 #define YYTRANSLATE(YYX) \
284 ((YYX <= 0) ? YYEOF : \
285 (unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
287 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
288 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
294 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
296 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
301 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
302 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
307 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
308 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
314 #if (YYDEBUG) || YYERROR_VERBOSE
315 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
316 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
317 static const char *const yytname
[] =
323 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
324 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
329 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
330 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
335 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
336 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
341 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
342 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
347 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
348 doesn't specify something else to do. Zero means the default is an
350 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
355 /* YYPDEFGOTO[NTERM-NUM]. */
356 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
361 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
363 #define YYPACT_NINF ]b4_pact_ninf[
364 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
369 /* YYPGOTO[NTERM-NUM]. */
370 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
375 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
376 positive, shift that token. If negative, reduce the rule which
377 number is the opposite. If zero, do what YYDEFACT says.
378 If YYTABLE_NINF, syntax error. */
379 #define YYTABLE_NINF ]b4_table_ninf[
380 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
385 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
386 list of conflicting reductions corresponding to action entry for
387 state STATE-NUM in yytable. 0 means no conflicts. The list in
388 yyconfl is terminated by a rule number of 0. */
389 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
391 ]b4_conflict_list_heads
[
394 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
395 0, pointed into by YYCONFLP. */
396 ]dnl Do
not use b4_int_type_for here
, since there are places where
397 dnl pointers onto yyconfl are taken
, which type is
"short *".
398 dnl We probably ought to introduce a type
for confl
.
399 [static const short yyconfl
[] =
401 ]b4_conflicting_rules
[
404 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
409 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
410 symbol of state STATE-NUM. */
411 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
417 /* Prevent warning if -Wmissing-prototypes. */
418 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
420 /* Error token number */
423 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
427 #define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc)
429 #ifndef YYLLOC_DEFAULT
430 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
431 ((yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line, \
432 (yyCurrent).first_column = YYRHSLOC(yyRhs, 1).first_column, \
433 (yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line, \
434 (yyCurrent).last_column = YYRHSLOC(yyRhs, YYN).last_column)
437 #ifndef YYLLOC_DEFAULT
438 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) ((void) 0)
443 /* YYLEX -- calling `yylex' with the right arguments. */
444 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
449 #define yynerrs (yystack->yyerrcnt)
451 #define yychar (yystack->yyrawchar)],
459 static const int YYEOF
= 0;
460 static const int YYEMPTY
= -2;
462 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
465 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
470 #if ! defined (YYFPRINTF)
471 # define YYFPRINTF fprintf
474 # define YYDPRINTF(Args) \
480 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
482 # define YYDSYMPRINT(Args) \
488 # define YYDSYMPRINTF(Title, Token, Value, Location) \
492 YYFPRINTF (stderr, "%s ", Title); \
493 yysymprint (stderr, \
494 Token, Value]b4_location_if([, Location])[); \
495 YYFPRINTF (stderr, "\n"); \
499 /* Nonzero means print parse trace. It is left uninitialized so that
500 multiple parsers can coexist. */
505 /* Avoid empty `if' bodies. */
506 # define YYDPRINTF(Args)
507 # define YYDSYMPRINT(Args)
508 # define YYDSYMPRINTF(Title, Token, Value, Location)
510 #endif /* !YYDEBUG */
512 /* YYINITDEPTH -- initial size of the parser's stacks. */
514 # define YYINITDEPTH ]b4_stack_depth_init[
517 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
518 if the built-in stack extension method is used).
520 Do not make this value too large; the results are undefined if
521 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
522 evaluated with infinite-precision integer arithmetic. */
529 # define YYMAXDEPTH ]b4_stack_depth_max[
532 /* Minimum number of free items on the stack allowed after an
533 allocation. This is to allow allocation and initialization
534 to be completed by functions that call expandGLRStack before the
535 stack is expanded, thus insuring that all necessary pointers get
536 properly redirected to new data. */
539 #if (! defined (YYSTACKEXPANDABLE) \
540 && (! defined (__cplusplus) \
541 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
542 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
543 #define YYSTACKEXPANDABLE 1
545 #define YYSTACKEXPANDABLE 0
548 /** State numbers, as in LALR(1) machine */
549 typedef int yyStateNum
;
551 /** Rule numbers, as in LALR(1) machine */
552 typedef int yyRuleNum
;
554 /** Grammar symbol */
555 typedef short yySymbol
;
557 /** Item references, as in LALR(1) machine */
558 typedef short yyItemNum
;
560 typedef struct yyGLRState yyGLRState
;
561 typedef struct yySemanticOption yySemanticOption
;
562 typedef union yyGLRStackItem yyGLRStackItem
;
563 typedef struct yyGLRStack yyGLRStack
;
564 typedef struct yyGLRStateSet yyGLRStateSet
;
569 yyStateNum yylrState
;
573 yySemanticOption
* yyfirstVal
;
579 struct yyGLRStateSet
{
580 yyGLRState
** yystates
;
581 size_t yysize
, yycapacity
;
584 struct yySemanticOption
{
588 yySemanticOption
* yynext
;
591 union yyGLRStackItem
{
593 yySemanticOption yyoption
;
605 jmp_buf yyexception_buffer
;
606 yyGLRStackItem
* yyitems
;
607 yyGLRStackItem
* yynextFree
;
609 yyGLRState
* yysplitPoint
;
610 yyGLRState
* yylastDeleted
;
611 yyGLRStateSet yytops
;
614 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
615 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
616 static void yyfreeGLRStack (yyGLRStack
* yystack
);
619 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
621 yystack
->yyerrflag
= 1;
622 if (yyformat
!= NULL
)
626 va_start (yyap
, yyformat
);
627 vsprintf (yymsg
, yyformat
, yyap
);
628 yyerror (]b4_yyerror_args
[yymsg
);
630 longjmp (yystack
->yyexception_buffer
, 1);
633 #if YYDEBUG || YYERROR_VERBOSE
634 /** A printable representation of TOKEN. Valid until next call to
636 static inline const char*
637 yytokenName (yySymbol yytoken
)
639 return yytname
[yytoken
];
643 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
644 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
645 * containing the pointer to the next state in the chain. Assumes
646 * YYLOW1 < YYLOW0. */
647 static void yyfillin (yyGLRStackItem
*, int, int) ATTRIBUTE_UNUSED
;
649 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
653 s
= yyvsp
[yylow0
].yystate
.yypred
;
654 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
656 YYASSERT (s
->yyresolved
);
657 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
658 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
659 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
660 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
664 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
665 YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
666 For convenience, always return YYLOW1. */
667 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
670 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
672 if (!yynormal
&& yylow1
< *yylow
)
674 yyfillin (yyvsp
, *yylow
, yylow1
);
680 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
681 * and top stack item YYVSP. YYLVALP points to place to put semantic
682 * value ($$), and yylocp points to place for location information
683 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
684 * yyerr for YYERROR, yyabort for YYABORT. */
686 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
687 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
, yyGLRStack
* yystack
690 yybool yynormal ATTRIBUTE_UNUSED
= (yystack
->yysplitPoint
== NULL
);
694 # define yyerrok (yystack->yyerrState = 0)
696 # define YYACCEPT return yyaccept
698 # define YYABORT return yyabort
700 # define YYERROR return yyerrok, yyerr
702 # define YYRECOVERING (yystack->yyerrState != 0)
704 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
706 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
708 # define YYBACKUP(Token, Value) \
709 return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \
715 *yyvalp
= yyval_default
;
716 *yylocp
= yyloc_default
;
720 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
721 YYLLOC_DEFAULT (*yylocp
, yyvsp
- yyrhslen
, yyrhslen
);
738 /* Line __line__ of glr.c. */
739 b4_syncline([@oline@
], [@ofile@
])
744 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
746 /* `Use' the arguments. */
756 /* Bison grammar-table manipulation. */
758 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
760 /** Number of symbols composing the right hand side of rule #RULE. */
762 yyrhsLength (yyRuleNum yyrule
)
767 /** Left-hand-side symbol for rule #RULE. */
768 static inline yySymbol
769 yylhsNonterm (yyRuleNum yyrule
)
774 #define yyis_pact_ninf(yystate) \
775 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
777 ((yystate
) == YYPACT_NINF
))[
779 /** True iff LR state STATE has only a default reduction (regardless
782 yyisDefaultedState (yyStateNum yystate
)
784 return yyis_pact_ninf (yypact
[yystate
]);
787 /** The default reduction for STATE, assuming it has one. */
788 static inline yyRuleNum
789 yydefaultAction (yyStateNum yystate
)
791 return yydefact
[yystate
];
794 #define yyis_table_ninf(yytable_value) \
795 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
797 ((yytable_value
) == YYTABLE_NINF
))[
799 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
801 * R < 0: Reduce on rule -R.
803 * R > 0: Shift to state R.
804 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
805 * conflicting reductions.
808 yygetLRActions (yyStateNum yystate
, int yytoken
,
809 int* yyaction
, const short** yyconflicts
)
811 int yyindex
= yypact
[yystate
] + yytoken
;
812 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
814 *yyaction
= -yydefact
[yystate
];
815 *yyconflicts
= yyconfl
;
817 else if (! yyis_table_ninf (yytable
[yyindex
]))
819 *yyaction
= yytable
[yyindex
];
820 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
825 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
829 static inline yyStateNum
830 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
833 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
834 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
837 return yydefgoto
[yylhs
- YYNTOKENS
];
841 yyisShiftAction (int yyaction
)
847 yyisErrorAction (int yyaction
)
849 return yyaction
== 0;
855 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
856 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
858 yySemanticOption
* yynewItem
;
859 yynewItem
= &yystack
->yynextFree
->yyoption
;
860 yystack
->yyspaceLeft
-= 1;
861 yystack
->yynextFree
+= 1;
862 yynewItem
->yyisState
= yyfalse
;
863 yynewItem
->yystate
= rhs
;
864 yynewItem
->yyrule
= yyrule
;
865 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
866 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
867 if (yystack
->yyspaceLeft
< YYHEADROOM
)
868 yyexpandGLRStack (yystack
]b4_pure_args
[);
873 /** Initialize SET to a singleton set containing an empty stack. */
875 yyinitStateSet (yyGLRStateSet
* yyset
)
878 yyset
->yycapacity
= 16;
879 yyset
->yystates
= YYMALLOC (16 * sizeof yyset
->yystates
[0]);
880 yyset
->yystates
[0] = NULL
;
883 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
885 YYFREE (yyset
->yystates
);
888 /** Initialize STACK to a single empty stack, with total maximum
889 * capacity for all stacks of SIZE. */
891 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
893 yystack
->yyerrflag
= 0;
894 yystack
->yyerrState
= 0;
896 yystack
->yyspaceLeft
= yysize
;
897 yystack
->yynextFree
= yystack
->yyitems
=
898 YYMALLOC (yysize
* sizeof yystack
->yynextFree
[0]);
899 yystack
->yysplitPoint
= NULL
;
900 yystack
->yylastDeleted
= NULL
;
901 yyinitStateSet (&yystack
->yytops
);
904 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
905 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
907 /** If STACK is expandable, extend it. WARNING: Pointers into the
908 stack from outside should be considered invalid after this call.
909 We always expand when there are 1 or fewer items left AFTER an
910 allocation, so that we can avoid having external pointers exist
911 across an allocation. */
913 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
915 #if YYSTACKEXPANDABLE
916 yyGLRStack yynewStack
;
917 yyGLRStackItem
* yyp0
, *yyp1
;
918 size_t yysize
, yynewSize
;
920 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
921 if (YYMAXDEPTH
<= yysize
)
922 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
923 yynewSize
= 2*yysize
;
924 if (YYMAXDEPTH
< yynewSize
)
925 yynewSize
= YYMAXDEPTH
;
926 yyinitGLRStack (&yynewStack
, yynewSize
);
927 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
929 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
932 if (*(yybool
*) yyp0
)
934 yyGLRState
* yys0
= &yyp0
->yystate
;
935 yyGLRState
* yys1
= &yyp1
->yystate
;
936 if (yys0
->yypred
!= NULL
)
938 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
939 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
940 yys1
->yysemantics
.yyfirstVal
=
941 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
945 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
946 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
947 if (yyv0
->yystate
!= NULL
)
948 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
949 if (yyv0
->yynext
!= NULL
)
950 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
953 if (yystack
->yysplitPoint
!= NULL
)
954 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
955 yystack
->yysplitPoint
, yystate
);
957 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
958 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
959 yystack
->yytops
.yystates
[yyn
] =
960 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
961 yystack
->yytops
.yystates
[yyn
], yystate
);
962 YYFREE (yystack
->yyitems
);
963 yystack
->yyitems
= yynewStack
.yyitems
;
964 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
965 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
969 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
974 yyfreeGLRStack (yyGLRStack
* yystack
)
976 YYFREE (yystack
->yyitems
);
977 yyfreeStateSet (&yystack
->yytops
);
980 /** Assuming that S is a GLRState somewhere on STACK, update the
981 * splitpoint of STACK, if needed, so that it is at least as deep as
984 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
986 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
987 yystack
->yysplitPoint
= yys
;
990 /** Invalidate stack #K in STACK. */
992 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
994 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
995 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
996 yystack
->yytops
.yystates
[yyk
] = NULL
;
999 /** Undelete the last stack that was marked as deleted. Can only be
1000 done once after a deletion, and only when all other stacks have
1003 yyundeleteLastStack (yyGLRStack
* yystack
)
1005 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
1007 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
1008 yystack
->yytops
.yysize
= 1;
1009 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1010 yystack
->yylastDeleted
= NULL
;
1014 yyremoveDeletes (yyGLRStack
* yystack
)
1018 while (yyj
< yystack
->yytops
.yysize
)
1020 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
1024 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1026 yystack
->yytops
.yysize
-= 1;
1030 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
1033 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1034 (unsigned long int) yyi
, (unsigned long int) yyj
));
1042 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1043 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1045 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
1046 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
1048 yyGLRStackItem
* yynewItem
;
1050 yynewItem
= yystack
->yynextFree
;
1051 yystack
->yynextFree
+= 1;
1052 yystack
->yyspaceLeft
-= 1;
1053 yynewItem
->yystate
.yyisState
= yytrue
;
1054 yynewItem
->yystate
.yylrState
= yylrState
;
1055 yynewItem
->yystate
.yyposn
= yyposn
;
1056 yynewItem
->yystate
.yyresolved
= yytrue
;
1057 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1058 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1059 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1060 yynewItem
->yystate
.yyloc
= *yylocp
;
1061 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1062 yyexpandGLRStack (yystack
]b4_pure_args
[);
1065 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1066 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1067 * semantic value of YYRHS under the action for YYRULE. */
1069 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1070 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1072 yyGLRStackItem
* yynewItem
;
1074 yynewItem
= yystack
->yynextFree
;
1075 yynewItem
->yystate
.yyisState
= yytrue
;
1076 yynewItem
->yystate
.yylrState
= yylrState
;
1077 yynewItem
->yystate
.yyposn
= yyposn
;
1078 yynewItem
->yystate
.yyresolved
= yyfalse
;
1079 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1080 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1081 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1082 yystack
->yynextFree
+= 1;
1083 yystack
->yyspaceLeft
-= 1;
1084 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1087 /** Pop the symbols consumed by reduction #RULE from the top of stack
1088 * #K of STACK, and perform the appropriate semantic action on their
1089 * semantic values. Assumes that all ambiguities in semantic values
1090 * have been previously resolved. Set *VALP to the resulting value,
1091 * and *LOCP to the computed location (if any). Return value is as
1092 * for userAction. */
1093 static inline YYRESULTTAG
1094 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1095 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1097 int yynrhs
= yyrhsLength (yyrule
);
1099 if (yystack
->yysplitPoint
== NULL
)
1101 /* Standard special case: single stack. */
1102 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1103 YYASSERT (yyk
== 0);
1104 yystack
->yynextFree
-= yynrhs
;
1105 yystack
->yyspaceLeft
+= yynrhs
;
1106 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1107 return yyuserAction (yyrule
, yynrhs
, rhs
,
1108 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1114 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1115 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1116 = yystack
->yytops
.yystates
[yyk
];
1117 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1122 yyupdateSplit (yystack
, yys
);
1123 yystack
->yytops
.yystates
[yyk
] = yys
;
1124 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1125 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1130 # define YY_REDUCE_PRINT(K, Rule)
1132 # define YY_REDUCE_PRINT(K, Rule) \
1135 yy_reduce_print (K, Rule); \
1138 /*----------------------------------------------------------.
1139 | Report that the RULE is going to be reduced on stack #K. |
1140 `----------------------------------------------------------*/
1143 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1146 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu), ",
1147 (unsigned long int) yyk
, yyrule
- 1,
1148 (unsigned long int) yyrline
[yyrule
]);
1149 /* Print the symbols being reduced, and their result. */
1150 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1151 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1152 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1156 /** Pop items off stack #K of STACK according to grammar rule RULE,
1157 * and push back on the resulting nonterminal symbol. Perform the
1158 * semantic action associated with RULE and store its value with the
1159 * newly pushed state, if FORCEEVAL or if STACK is currently
1160 * unambiguous. Otherwise, store the deferred semantic action with
1161 * the new state. If the new state would have an identical input
1162 * position, LR state, and predecessor to an existing state on the stack,
1163 * it is identified with that existing state, eliminating stack #K from
1164 * the STACK. In this case, the (necessarily deferred) semantic value is
1165 * added to the options for the existing state's semantic value.
1167 static inline YYRESULTTAG
1168 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1169 yybool yyforceEval
]b4_pure_formals
[)
1171 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1173 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1178 YY_REDUCE_PRINT (yyk
, yyrule
);
1179 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1180 yyglrShift (yystack
, yyk
,
1181 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1182 yylhsNonterm (yyrule
)),
1183 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1189 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1190 yyStateNum yynewLRState
;
1192 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1198 yyupdateSplit (yystack
, yys
);
1199 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1201 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1202 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1203 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1204 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1206 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1207 yyp
= yystack
->yytops
.yystates
[yyi
];
1208 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1210 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1212 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1213 yymarkStackDeleted (yystack
, yyk
);
1214 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1215 (unsigned long int) yyk
,
1216 (unsigned long int) yyi
));
1222 yystack
->yytops
.yystates
[yyk
] = yys
;
1223 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1229 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1231 if (yystack
->yysplitPoint
== NULL
)
1233 YYASSERT (yyk
== 0);
1234 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1236 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1238 yystack
->yytops
.yycapacity
*= 2;
1239 yystack
->yytops
.yystates
=
1240 YYREALLOC (yystack
->yytops
.yystates
,
1241 (yystack
->yytops
.yycapacity
1242 * sizeof yystack
->yytops
.yystates
[0]));
1244 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1245 = yystack
->yytops
.yystates
[yyk
];
1246 yystack
->yytops
.yysize
+= 1;
1247 return yystack
->yytops
.yysize
-1;
1250 /** True iff Y0 and Y1 represent identical options at the top level.
1251 * That is, they represent the same rule applied to RHS symbols
1252 * that produce the same terminal symbols. */
1254 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1256 if (yyy0
->yyrule
== yyy1
->yyrule
)
1258 yyGLRState
*yys0
, *yys1
;
1260 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1261 yyn
= yyrhsLength (yyy0
->yyrule
);
1263 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1264 if (yys0
->yyposn
!= yys1
->yyposn
)
1272 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1273 * alternative semantic values for the RHS-symbols of Y1 into the
1274 * corresponding semantic value sets of the symbols of Y0. */
1276 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1278 yyGLRState
*yys0
, *yys1
;
1280 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1281 yyn
= yyrhsLength (yyy0
->yyrule
);
1283 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1286 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1288 yySemanticOption
* yyz
;
1289 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1292 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1296 /** Y0 and Y1 represent two possible actions to take in a given
1297 * parsing state; return 0 if no combination is possible,
1298 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1300 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1302 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1303 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1307 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1312 if (p0
== 0 || p1
== 0)
1321 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1322 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1323 YYLTYPE
* yylocp
]b4_user_formals
[);
1326 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1331 YYASSERT (yys
->yypred
);
1332 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1335 if (! yys
->yyresolved
)
1337 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1338 &yys
->yysemantics
.yysval
, &yys
->yyloc
1342 yys
->yyresolved
= yytrue
;
1349 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1350 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1352 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1355 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1356 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1357 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;
1358 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1359 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1360 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1365 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1367 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1370 yyGLRState
* yystates
[YYMAXRHS
];
1371 yyGLRState yyleftmost_state
;
1373 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1374 yystates
[yyi
] = yys
;
1377 yyleftmost_state
.yyposn
= 0;
1378 yystates
[0] = &yyleftmost_state
;
1383 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1384 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1385 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1388 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1389 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1390 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1391 (unsigned long int) yyx
->yystate
->yyposn
);
1392 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1394 if (yystates
[yyi
]->yyresolved
)
1396 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1397 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1398 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1400 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1401 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1402 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1403 (unsigned long int) yystates
[yyi
]->yyposn
);
1406 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1412 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1413 yyGLRStack
* yystack
]b4_pure_formals
[)
1415 /* `Unused' warnings. */
1420 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1421 YYFPRINTF (stderr
, "Option 1,\n");
1422 yyreportTree (yyx0
, 2);
1423 YYFPRINTF (stderr
, "\nOption 2,\n");
1424 yyreportTree (yyx1
, 2);
1425 YYFPRINTF (stderr
, "\n");
1427 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1431 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1432 * actions, and return the result. */
1434 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1435 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1437 yySemanticOption
* yybest
;
1438 yySemanticOption
* yyp
;
1441 yybest
= yyoptionList
;
1443 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1445 if (yyidenticalOptions (yybest
, yyp
))
1446 yymergeOptionSets (yybest
, yyp
);
1448 switch (yypreference (yybest
, yyp
))
1451 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1467 int yyprec
= yydprec
[yybest
->yyrule
];
1468 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1469 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1471 if (yyprec
== yydprec
[yyp
->yyrule
])
1475 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1476 yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1482 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1486 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1488 if (yystack
->yysplitPoint
!= NULL
)
1493 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1494 yys
!= yystack
->yysplitPoint
;
1495 yys
= yys
->yypred
, yyn
+= 1)
1497 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1504 yycompressStack (yyGLRStack
* yystack
)
1506 yyGLRState
* yyp
, *yyq
, *yyr
;
1508 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1511 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1512 yyp
!= yystack
->yysplitPoint
;
1513 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1516 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1517 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1518 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1519 yystack
->yysplitPoint
= NULL
;
1520 yystack
->yylastDeleted
= NULL
;
1524 yystack
->yynextFree
->yystate
= *yyr
;
1526 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1527 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1528 yystack
->yynextFree
+= 1;
1529 yystack
->yyspaceLeft
-= 1;
1534 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1535 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1539 const short* yyconflicts
;
1541 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1543 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1545 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1546 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1548 YYASSERT (yystate
!= YYFINAL
);
1550 if (yyisDefaultedState (yystate
))
1552 yyrule
= yydefaultAction (yystate
);
1555 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1556 yymarkStackDeleted (yystack
, yyk
);
1559 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1563 if (*yytokenp
== YYEMPTY
)
1565 YYDPRINTF ((stderr
, "Reading a token: "));
1567 *yytokenp
= YYTRANSLATE (yychar
);
1568 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1570 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1572 while (*yyconflicts
!= 0)
1574 int yynewStack
= yysplitStack (yystack
, yyk
);
1575 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1577 YYCHK (yyglrReduce (yystack
, yynewStack
,
1578 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1579 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1580 yylvalp
, yyllocp
]b4_user_args
[));
1584 if (yyisShiftAction (yyaction
))
1586 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1587 yytokenName (*yytokenp
), yyk
));
1588 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1589 *yylvalp
, yyllocp
]b4_user_args
[);
1590 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1591 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1594 else if (yyisErrorAction (yyaction
))
1596 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1597 yymarkStackDeleted (yystack
, yyk
);
1601 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1608 yyreportSyntaxError (yyGLRStack
* yystack
,
1609 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1611 /* `Unused' warnings. */
1615 if (yystack
->yyerrState
== 0)
1618 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1620 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1621 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1624 const char* yyprefix
;
1628 /* Start YYX at -YYN if negative to avoid negative indexes in
1630 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1632 /* Stay within bounds of both yycheck and yytname. */
1633 int yychecklim
= YYLAST
- yyn
;
1634 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1637 yyprefix
= ", expecting ";
1638 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1639 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1641 yysize
+= strlen (yyprefix
) + strlen (yytokenName (yyx
));
1650 yysize
+= (sizeof ("syntax error, unexpected ")
1651 + strlen (yytokenName (*yytokenp
)));
1652 yymsg
= YYMALLOC (yysize
);
1656 sprintf (yyp
, "syntax error, unexpected %s",
1657 yytokenName (*yytokenp
));
1658 yyp
+= strlen (yyp
);
1661 yyprefix
= ", expecting ";
1662 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1663 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1665 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1666 yyp
+= strlen (yyp
);
1670 yyerror (]b4_lyyerror_args
[yymsg
);
1674 yyerror (]b4_lyyerror_args
["syntax error; also virtual memory exhausted");
1677 #endif /* YYERROR_VERBOSE */
1678 yyerror (]b4_lyyerror_args
["syntax error");
1683 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1684 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1685 value, and location of the lookahead. */
1687 yyrecoverSyntaxError (yyGLRStack
* yystack
,
1688 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1690 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1694 if (yystack
->yyerrState
== 3)
1695 /* We just shifted the error token and (perhaps) took some
1696 reductions. Skip tokens until we can proceed. */
1699 if (*yytokenp
== YYEOF
)
1701 /* Now pop stack until empty and fail. */
1702 while (yystack
->yytops
.yystates
[0] != NULL
)
1704 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1705 YYDSYMPRINTF ("Error: popping",
1706 yystos
[yys
->yylrState
],
1707 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1708 yydestruct (yystos
[yys
->yylrState
],
1709 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1710 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1711 yystack
->yynextFree
-= 1;
1712 yystack
->yyspaceLeft
+= 1;
1714 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1716 if (*yytokenp
!= YYEMPTY
)
1718 YYDSYMPRINTF ("Error: discarding", *yytokenp
, yylvalp
, yyllocp
);
1719 yydestruct (*yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1721 YYDPRINTF ((stderr
, "Reading a token: "));
1723 *yytokenp
= YYTRANSLATE (yychar
);
1724 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1725 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1726 if (yyis_pact_ninf (yyj
))
1729 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1731 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1734 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1738 /* Reduce to one stack. */
1739 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1740 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1742 if (yyk
>= yystack
->yytops
.yysize
)
1743 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1744 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1745 yymarkStackDeleted (yystack
, yyk
);
1746 yyremoveDeletes (yystack
);
1747 yycompressStack (yystack
);
1749 /* Now pop stack until we find a state that shifts the error token. */
1750 yystack
->yyerrState
= 3;
1751 while (yystack
->yytops
.yystates
[0] != NULL
)
1753 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1754 yyj
= yypact
[yys
->yylrState
];
1755 if (! yyis_pact_ninf (yyj
))
1758 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1759 && yyisShiftAction (yytable
[yyj
]))
1761 YYDPRINTF ((stderr
, "Shifting error token, "));
1762 yyglrShift (yystack
, 0, yytable
[yyj
],
1763 yys
->yyposn
, *yylvalp
, yyllocp
]b4_user_args
[);
1767 YYDSYMPRINTF ("Error: popping",
1768 yystos
[yys
->yylrState
],
1769 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1770 yydestruct (yystos
[yys
->yylrState
],
1771 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1772 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1773 yystack
->yynextFree
-= 1;
1774 yystack
->yyspaceLeft
+= 1;
1776 if (yystack
->yytops
.yystates
[0] == NULL
)
1777 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1780 #define YYCHK1(YYE) \
1786 yystack.yyerrflag = 1; \
1789 yystack.yyerrflag = 0; \
1792 goto yyuser_error; \
1801 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1811 #define yychar (yystack.yyrawchar)
1814 YYSTYPE
* const yylvalp
= &yylval
;
1815 YYLTYPE
* const yyllocp
= &yylloc
;
1817 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1818 yystack
.yytokenp
= &yytoken
;
1820 YYDPRINTF ((stderr
, "Starting parse\n"));
1822 if (setjmp (yystack
.yyexception_buffer
) != 0)
1825 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1831 /* For efficiency, we have two loops, the first of which is
1832 specialized to deterministic operation (single stack, no
1833 potential ambiguity). */
1839 const short* yyconflicts
;
1841 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1842 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1843 if (yystate
== YYFINAL
)
1845 if (yyisDefaultedState (yystate
))
1847 yyrule
= yydefaultAction (yystate
);
1850 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1853 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1857 if (yytoken
== YYEMPTY
)
1859 YYDPRINTF ((stderr
, "Reading a token: "));
1861 yytoken
= YYTRANSLATE (yychar
);
1862 YYDSYMPRINTF ("Next token is", yytoken
, yylvalp
, yyllocp
);
1864 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1865 if (*yyconflicts
!= 0)
1867 if (yyisShiftAction (yyaction
))
1869 YYDPRINTF ((stderr
, "Shifting token %s, ",
1870 yytokenName (yytoken
)));
1871 if (yytoken
!= YYEOF
)
1874 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1875 yylval
, yyllocp
]b4_user_args
[);
1876 if (0 < yystack
.yyerrState
)
1877 yystack
.yyerrState
-= 1;
1879 else if (yyisErrorAction (yyaction
))
1881 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1885 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1892 int yyn
= yystack
.yytops
.yysize
;
1893 for (yys
= 0; yys
< yyn
; yys
+= 1)
1894 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1895 yylvalp
, yyllocp
]b4_user_args
[));
1898 yyremoveDeletes (&yystack
);
1899 if (yystack
.yytops
.yysize
== 0)
1901 yyundeleteLastStack (&yystack
);
1902 if (yystack
.yytops
.yysize
== 0)
1903 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1904 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1905 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1906 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1909 else if (yystack
.yytops
.yysize
== 1)
1911 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1912 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1913 yycompressStack (&yystack
);
1919 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1920 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1925 yyfreeGLRStack (&yystack
);
1926 return yystack
.yyerrflag
;
1929 /* DEBUGGING ONLY */
1930 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1931 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1934 yy_yypstack (yyGLRState
* yys
)
1938 yy_yypstack (yys
->yypred
);
1939 fprintf (stderr
, " -> ");
1941 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1945 yypstates (yyGLRState
* yyst
)
1948 fprintf (stderr
, "<null>");
1951 fprintf (stderr
, "\n");
1955 yypstack (yyGLRStack
* yystack
, int yyk
)
1957 yypstates (yystack
->yytops
.yystates
[yyk
]);
1960 #define YYINDEX(YYX) \
1961 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1965 yypdumpstack (yyGLRStack
* yystack
)
1967 yyGLRStackItem
* yyp
;
1969 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1971 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1972 if (*(yybool
*) yyp
)
1974 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1975 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1976 (unsigned long) yyp
->yystate
.yyposn
,
1977 (long) YYINDEX (yyp
->yystate
.yypred
));
1978 if (! yyp
->yystate
.yyresolved
)
1979 fprintf (stderr
, ", firstVal: %ld",
1980 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1984 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1985 yyp
->yyoption
.yyrule
,
1986 (long) YYINDEX (yyp
->yyoption
.yystate
),
1987 (long) YYINDEX (yyp
->yyoption
.yynext
));
1989 fprintf (stderr
, "\n");
1991 fprintf (stderr
, "Tops:");
1992 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1993 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1994 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1995 fprintf (stderr
, "\n");
2000 m4_if(b4_defines_flag
, 0, [],
2001 [@output @output_header_name@
2002 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003])
2004 b4_token_defines(b4_tokens
)
2006 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2007 m4_ifdef([b4_stype
],
2008 [b4_syncline([b4_stype_line
], [b4_filename
])
2009 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
2010 /* Line __line__ of glr.c. */
2011 b4_syncline([@oline@
], [@ofile@
])],
2012 [typedef int YYSTYPE
;])
2013 # define YYSTYPE_IS_DECLARED 1
2014 # define YYSTYPE_IS_TRIVIAL 1
2018 [extern YYSTYPE b4_prefix
[]lval
;])
2020 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2021 typedef struct YYLTYPE
2032 # define YYLTYPE_IS_DECLARED 1
2033 # define YYLTYPE_IS_TRIVIAL 1
2036 b4_location_if([m4_if(b4_pure
, [0],
2037 [extern YYLTYPE b4_prefix
[]lloc
;])