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 [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 [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 YYSTYPE yyval
= *yy0
;
747 /* `Use' the arguments. */
758 /* Bison grammar-table manipulation. */
760 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
762 /** Number of symbols composing the right hand side of rule #RULE. */
764 yyrhsLength (yyRuleNum yyrule
)
769 /** Left-hand-side symbol for rule #RULE. */
770 static inline yySymbol
771 yylhsNonterm (yyRuleNum yyrule
)
776 #define yyis_pact_ninf(yystate) \
777 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
779 ((yystate
) == YYPACT_NINF
))[
781 /** True iff LR state STATE has only a default reduction (regardless
784 yyisDefaultedState (yyStateNum yystate
)
786 return yyis_pact_ninf (yypact
[yystate
]);
789 /** The default reduction for STATE, assuming it has one. */
790 static inline yyRuleNum
791 yydefaultAction (yyStateNum yystate
)
793 return yydefact
[yystate
];
796 #define yyis_table_ninf(yytable_value) \
797 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
799 ((yytable_value
) == YYTABLE_NINF
))[
801 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
803 * R < 0: Reduce on rule -R.
805 * R > 0: Shift to state R.
806 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
807 * conflicting reductions.
810 yygetLRActions (yyStateNum yystate
, int yytoken
,
811 int* yyaction
, const short** yyconflicts
)
813 int yyindex
= yypact
[yystate
] + yytoken
;
814 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
816 *yyaction
= -yydefact
[yystate
];
817 *yyconflicts
= yyconfl
;
819 else if (! yyis_table_ninf (yytable
[yyindex
]))
821 *yyaction
= yytable
[yyindex
];
822 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
827 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
831 static inline yyStateNum
832 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
835 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
836 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
839 return yydefgoto
[yylhs
- YYNTOKENS
];
843 yyisShiftAction (int yyaction
)
849 yyisErrorAction (int yyaction
)
851 return yyaction
== 0;
857 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
858 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
860 yySemanticOption
* yynewItem
;
861 yynewItem
= &yystack
->yynextFree
->yyoption
;
862 yystack
->yyspaceLeft
-= 1;
863 yystack
->yynextFree
+= 1;
864 yynewItem
->yyisState
= yyfalse
;
865 yynewItem
->yystate
= rhs
;
866 yynewItem
->yyrule
= yyrule
;
867 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
868 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
869 if (yystack
->yyspaceLeft
< YYHEADROOM
)
870 yyexpandGLRStack (yystack
]b4_pure_args
[);
875 /** Initialize SET to a singleton set containing an empty stack. */
877 yyinitStateSet (yyGLRStateSet
* yyset
)
880 yyset
->yycapacity
= 16;
881 yyset
->yystates
= YYMALLOC (16 * sizeof yyset
->yystates
[0]);
882 yyset
->yystates
[0] = NULL
;
885 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
887 YYFREE (yyset
->yystates
);
890 /** Initialize STACK to a single empty stack, with total maximum
891 * capacity for all stacks of SIZE. */
893 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
895 yystack
->yyerrflag
= 0;
896 yystack
->yyerrState
= 0;
898 yystack
->yyspaceLeft
= yysize
;
899 yystack
->yynextFree
= yystack
->yyitems
=
900 YYMALLOC (yysize
* sizeof yystack
->yynextFree
[0]);
901 yystack
->yysplitPoint
= NULL
;
902 yystack
->yylastDeleted
= NULL
;
903 yyinitStateSet (&yystack
->yytops
);
906 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
907 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
909 /** If STACK is expandable, extend it. WARNING: Pointers into the
910 stack from outside should be considered invalid after this call.
911 We always expand when there are 1 or fewer items left AFTER an
912 allocation, so that we can avoid having external pointers exist
913 across an allocation. */
915 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
917 #if YYSTACKEXPANDABLE
918 yyGLRStack yynewStack
;
919 yyGLRStackItem
* yyp0
, *yyp1
;
920 size_t yysize
, yynewSize
;
922 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
923 if (YYMAXDEPTH
<= yysize
)
924 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
925 yynewSize
= 2*yysize
;
926 if (YYMAXDEPTH
< yynewSize
)
927 yynewSize
= YYMAXDEPTH
;
928 yyinitGLRStack (&yynewStack
, yynewSize
);
929 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
931 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
934 if (*(yybool
*) yyp0
)
936 yyGLRState
* yys0
= &yyp0
->yystate
;
937 yyGLRState
* yys1
= &yyp1
->yystate
;
938 if (yys0
->yypred
!= NULL
)
940 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
941 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
942 yys1
->yysemantics
.yyfirstVal
=
943 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
947 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
948 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
949 if (yyv0
->yystate
!= NULL
)
950 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
951 if (yyv0
->yynext
!= NULL
)
952 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
955 if (yystack
->yysplitPoint
!= NULL
)
956 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
957 yystack
->yysplitPoint
, yystate
);
959 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
960 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
961 yystack
->yytops
.yystates
[yyn
] =
962 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
963 yystack
->yytops
.yystates
[yyn
], yystate
);
964 YYFREE (yystack
->yyitems
);
965 yystack
->yyitems
= yynewStack
.yyitems
;
966 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
967 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
971 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
976 yyfreeGLRStack (yyGLRStack
* yystack
)
978 YYFREE (yystack
->yyitems
);
979 yyfreeStateSet (&yystack
->yytops
);
982 /** Assuming that S is a GLRState somewhere on STACK, update the
983 * splitpoint of STACK, if needed, so that it is at least as deep as
986 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
988 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
989 yystack
->yysplitPoint
= yys
;
992 /** Invalidate stack #K in STACK. */
994 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
996 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
997 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
998 yystack
->yytops
.yystates
[yyk
] = NULL
;
1001 /** Undelete the last stack that was marked as deleted. Can only be
1002 done once after a deletion, and only when all other stacks have
1005 yyundeleteLastStack (yyGLRStack
* yystack
)
1007 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
1009 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
1010 yystack
->yytops
.yysize
= 1;
1011 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1012 yystack
->yylastDeleted
= NULL
;
1016 yyremoveDeletes (yyGLRStack
* yystack
)
1020 while (yyj
< yystack
->yytops
.yysize
)
1022 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
1026 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1028 yystack
->yytops
.yysize
-= 1;
1032 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
1035 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1036 (unsigned long int) yyi
, (unsigned long int) yyj
));
1044 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1045 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1047 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
1048 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
1050 yyGLRStackItem
* yynewItem
;
1052 yynewItem
= yystack
->yynextFree
;
1053 yystack
->yynextFree
+= 1;
1054 yystack
->yyspaceLeft
-= 1;
1055 yynewItem
->yystate
.yyisState
= yytrue
;
1056 yynewItem
->yystate
.yylrState
= yylrState
;
1057 yynewItem
->yystate
.yyposn
= yyposn
;
1058 yynewItem
->yystate
.yyresolved
= yytrue
;
1059 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1060 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1061 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1062 yynewItem
->yystate
.yyloc
= *yylocp
;
1063 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1064 yyexpandGLRStack (yystack
]b4_pure_args
[);
1067 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1068 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1069 * semantic value of YYRHS under the action for YYRULE. */
1071 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1072 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1074 yyGLRStackItem
* yynewItem
;
1076 yynewItem
= yystack
->yynextFree
;
1077 yynewItem
->yystate
.yyisState
= yytrue
;
1078 yynewItem
->yystate
.yylrState
= yylrState
;
1079 yynewItem
->yystate
.yyposn
= yyposn
;
1080 yynewItem
->yystate
.yyresolved
= yyfalse
;
1081 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1082 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1083 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1084 yystack
->yynextFree
+= 1;
1085 yystack
->yyspaceLeft
-= 1;
1086 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1089 /** Pop the symbols consumed by reduction #RULE from the top of stack
1090 * #K of STACK, and perform the appropriate semantic action on their
1091 * semantic values. Assumes that all ambiguities in semantic values
1092 * have been previously resolved. Set *VALP to the resulting value,
1093 * and *LOCP to the computed location (if any). Return value is as
1094 * for userAction. */
1095 static inline YYRESULTTAG
1096 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1097 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1099 int yynrhs
= yyrhsLength (yyrule
);
1101 if (yystack
->yysplitPoint
== NULL
)
1103 /* Standard special case: single stack. */
1104 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1105 YYASSERT (yyk
== 0);
1106 yystack
->yynextFree
-= yynrhs
;
1107 yystack
->yyspaceLeft
+= yynrhs
;
1108 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1109 return yyuserAction (yyrule
, yynrhs
, rhs
,
1110 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1116 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1117 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1118 = yystack
->yytops
.yystates
[yyk
];
1119 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1124 yyupdateSplit (yystack
, yys
);
1125 yystack
->yytops
.yystates
[yyk
] = yys
;
1126 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1127 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1132 # define YY_REDUCE_PRINT(K, Rule)
1134 # define YY_REDUCE_PRINT(K, Rule) \
1137 yy_reduce_print (K, Rule); \
1140 /*----------------------------------------------------------.
1141 | Report that the RULE is going to be reduced on stack #K. |
1142 `----------------------------------------------------------*/
1145 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1148 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu), ",
1149 (unsigned long int) yyk
, yyrule
- 1,
1150 (unsigned long int) yyrline
[yyrule
]);
1151 /* Print the symbols being reduced, and their result. */
1152 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1153 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1154 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1158 /** Pop items off stack #K of STACK according to grammar rule RULE,
1159 * and push back on the resulting nonterminal symbol. Perform the
1160 * semantic action associated with RULE and store its value with the
1161 * newly pushed state, if FORCEEVAL or if STACK is currently
1162 * unambiguous. Otherwise, store the deferred semantic action with
1163 * the new state. If the new state would have an identical input
1164 * position, LR state, and predecessor to an existing state on the stack,
1165 * it is identified with that existing state, eliminating stack #K from
1166 * the STACK. In this case, the (necessarily deferred) semantic value is
1167 * added to the options for the existing state's semantic value.
1169 static inline YYRESULTTAG
1170 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1171 yybool yyforceEval
]b4_pure_formals
[)
1173 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1175 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1180 YY_REDUCE_PRINT (yyk
, yyrule
);
1181 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1182 yyglrShift (yystack
, yyk
,
1183 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1184 yylhsNonterm (yyrule
)),
1185 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1191 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1192 yyStateNum yynewLRState
;
1194 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1200 yyupdateSplit (yystack
, yys
);
1201 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1203 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1204 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1205 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1206 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1208 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1209 yyp
= yystack
->yytops
.yystates
[yyi
];
1210 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1212 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1214 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1215 yymarkStackDeleted (yystack
, yyk
);
1216 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1217 (unsigned long int) yyk
,
1218 (unsigned long int) yyi
));
1224 yystack
->yytops
.yystates
[yyk
] = yys
;
1225 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1231 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1233 if (yystack
->yysplitPoint
== NULL
)
1235 YYASSERT (yyk
== 0);
1236 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1238 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1240 yystack
->yytops
.yycapacity
*= 2;
1241 yystack
->yytops
.yystates
=
1242 YYREALLOC (yystack
->yytops
.yystates
,
1243 (yystack
->yytops
.yycapacity
1244 * sizeof yystack
->yytops
.yystates
[0]));
1246 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1247 = yystack
->yytops
.yystates
[yyk
];
1248 yystack
->yytops
.yysize
+= 1;
1249 return yystack
->yytops
.yysize
-1;
1252 /** True iff Y0 and Y1 represent identical options at the top level.
1253 * That is, they represent the same rule applied to RHS symbols
1254 * that produce the same terminal symbols. */
1256 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1258 if (yyy0
->yyrule
== yyy1
->yyrule
)
1260 yyGLRState
*yys0
, *yys1
;
1262 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1263 yyn
= yyrhsLength (yyy0
->yyrule
);
1265 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1266 if (yys0
->yyposn
!= yys1
->yyposn
)
1274 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1275 * alternative semantic values for the RHS-symbols of Y1 into the
1276 * corresponding semantic value sets of the symbols of Y0. */
1278 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1280 yyGLRState
*yys0
, *yys1
;
1282 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1283 yyn
= yyrhsLength (yyy0
->yyrule
);
1285 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1288 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1290 yySemanticOption
* yyz
;
1291 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1294 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1298 /** Y0 and Y1 represent two possible actions to take in a given
1299 * parsing state; return 0 if no combination is possible,
1300 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1302 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1304 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1305 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1309 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1314 if (p0
== 0 || p1
== 0)
1323 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1324 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1325 YYLTYPE
* yylocp
]b4_user_formals
[);
1328 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1333 YYASSERT (yys
->yypred
);
1334 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1337 if (! yys
->yyresolved
)
1339 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1340 &yys
->yysemantics
.yysval
, &yys
->yyloc
1344 yys
->yyresolved
= yytrue
;
1351 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1352 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1354 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1357 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1358 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1359 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;
1360 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1361 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1362 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1367 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1369 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1372 yyGLRState
* yystates
[YYMAXRHS
];
1373 yyGLRState yyleftmost_state
;
1375 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1376 yystates
[yyi
] = yys
;
1379 yyleftmost_state
.yyposn
= 0;
1380 yystates
[0] = &yyleftmost_state
;
1385 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1386 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1387 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1390 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1391 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1392 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1393 (unsigned long int) yyx
->yystate
->yyposn
);
1394 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1396 if (yystates
[yyi
]->yyresolved
)
1398 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1399 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1400 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1402 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1403 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1404 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1405 (unsigned long int) yystates
[yyi
]->yyposn
);
1408 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1414 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1415 yyGLRStack
* yystack
]b4_pure_formals
[)
1417 /* `Unused' warnings. */
1422 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1423 YYFPRINTF (stderr
, "Option 1,\n");
1424 yyreportTree (yyx0
, 2);
1425 YYFPRINTF (stderr
, "\nOption 2,\n");
1426 yyreportTree (yyx1
, 2);
1427 YYFPRINTF (stderr
, "\n");
1429 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1433 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1434 * actions, and return the result. */
1436 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1437 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1439 yySemanticOption
* yybest
;
1440 yySemanticOption
* yyp
;
1443 yybest
= yyoptionList
;
1445 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1447 if (yyidenticalOptions (yybest
, yyp
))
1448 yymergeOptionSets (yybest
, yyp
);
1450 switch (yypreference (yybest
, yyp
))
1453 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1469 int yyprec
= yydprec
[yybest
->yyrule
];
1470 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1471 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1473 if (yyprec
== yydprec
[yyp
->yyrule
])
1477 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1478 *yyvalp
= yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1484 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1488 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1490 if (yystack
->yysplitPoint
!= NULL
)
1495 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1496 yys
!= yystack
->yysplitPoint
;
1497 yys
= yys
->yypred
, yyn
+= 1)
1499 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1506 yycompressStack (yyGLRStack
* yystack
)
1508 yyGLRState
* yyp
, *yyq
, *yyr
;
1510 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1513 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1514 yyp
!= yystack
->yysplitPoint
;
1515 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1518 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1519 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1520 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1521 yystack
->yysplitPoint
= NULL
;
1522 yystack
->yylastDeleted
= NULL
;
1526 yystack
->yynextFree
->yystate
= *yyr
;
1528 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1529 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1530 yystack
->yynextFree
+= 1;
1531 yystack
->yyspaceLeft
-= 1;
1536 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1537 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1541 const short* yyconflicts
;
1543 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1545 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1547 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1548 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1550 YYASSERT (yystate
!= YYFINAL
);
1552 if (yyisDefaultedState (yystate
))
1554 yyrule
= yydefaultAction (yystate
);
1557 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1558 yymarkStackDeleted (yystack
, yyk
);
1561 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1565 if (*yytokenp
== YYEMPTY
)
1567 YYDPRINTF ((stderr
, "Reading a token: "));
1569 *yytokenp
= YYTRANSLATE (yychar
);
1570 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1572 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1574 while (*yyconflicts
!= 0)
1576 int yynewStack
= yysplitStack (yystack
, yyk
);
1577 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1579 YYCHK (yyglrReduce (yystack
, yynewStack
,
1580 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1581 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1582 yylvalp
, yyllocp
]b4_user_args
[));
1586 if (yyisShiftAction (yyaction
))
1588 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1589 yytokenName (*yytokenp
), yyk
));
1590 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1591 *yylvalp
, yyllocp
]b4_user_args
[);
1592 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1593 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1596 else if (yyisErrorAction (yyaction
))
1598 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1599 yymarkStackDeleted (yystack
, yyk
);
1603 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1610 yyreportSyntaxError (yyGLRStack
* yystack
,
1611 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1613 /* `Unused' warnings. */
1617 if (yystack
->yyerrState
== 0)
1620 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1622 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1623 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1626 const char* yyprefix
;
1630 /* Start YYX at -YYN if negative to avoid negative indexes in
1632 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1634 /* Stay within bounds of both yycheck and yytname. */
1635 int yychecklim
= YYLAST
- yyn
;
1636 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1639 yyprefix
= ", expecting ";
1640 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1641 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1643 yysize
+= strlen (yyprefix
) + strlen (yytokenName (yyx
));
1652 yysize
+= (sizeof ("syntax error, unexpected ")
1653 + strlen (yytokenName (*yytokenp
)));
1654 yymsg
= YYMALLOC (yysize
);
1658 sprintf (yyp
, "syntax error, unexpected %s",
1659 yytokenName (*yytokenp
));
1660 yyp
+= strlen (yyp
);
1663 yyprefix
= ", expecting ";
1664 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1665 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1667 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1668 yyp
+= strlen (yyp
);
1672 yyerror (]b4_lyyerror_args
[yymsg
);
1676 yyerror (]b4_lyyerror_args
["syntax error; also virtual memory exhausted");
1679 #endif /* YYERROR_VERBOSE */
1680 yyerror (]b4_lyyerror_args
["syntax error");
1685 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1686 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1687 value, and location of the lookahead. */
1689 yyrecoverSyntaxError (yyGLRStack
* yystack
,
1690 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1692 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1696 if (yystack
->yyerrState
== 3)
1697 /* We just shifted the error token and (perhaps) took some
1698 reductions. Skip tokens until we can proceed. */
1701 if (*yytokenp
== YYEOF
)
1703 /* Now pop stack until empty and fail. */
1704 while (yystack
->yytops
.yystates
[0] != NULL
)
1706 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1707 YYDSYMPRINTF ("Error: popping",
1708 yystos
[yys
->yylrState
],
1709 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1710 yydestruct (yystos
[yys
->yylrState
],
1711 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1712 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1713 yystack
->yynextFree
-= 1;
1714 yystack
->yyspaceLeft
+= 1;
1716 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1718 if (*yytokenp
!= YYEMPTY
)
1720 YYDSYMPRINTF ("Error: discarding", *yytokenp
, yylvalp
, yyllocp
);
1721 yydestruct (*yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1723 YYDPRINTF ((stderr
, "Reading a token: "));
1725 *yytokenp
= YYTRANSLATE (yychar
);
1726 YYDSYMPRINTF ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1727 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1728 if (yyis_pact_ninf (yyj
))
1731 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1733 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1736 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1740 /* Reduce to one stack. */
1741 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1742 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1744 if (yyk
>= yystack
->yytops
.yysize
)
1745 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1746 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1747 yymarkStackDeleted (yystack
, yyk
);
1748 yyremoveDeletes (yystack
);
1749 yycompressStack (yystack
);
1751 /* Now pop stack until we find a state that shifts the error token. */
1752 yystack
->yyerrState
= 3;
1753 while (yystack
->yytops
.yystates
[0] != NULL
)
1755 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1756 yyj
= yypact
[yys
->yylrState
];
1757 if (! yyis_pact_ninf (yyj
))
1760 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1761 && yyisShiftAction (yytable
[yyj
]))
1763 YYDPRINTF ((stderr
, "Shifting error token, "));
1764 yyglrShift (yystack
, 0, yytable
[yyj
],
1765 yys
->yyposn
, *yylvalp
, yyllocp
]b4_user_args
[);
1769 YYDSYMPRINTF ("Error: popping",
1770 yystos
[yys
->yylrState
],
1771 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1772 yydestruct (yystos
[yys
->yylrState
],
1773 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1774 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1775 yystack
->yynextFree
-= 1;
1776 yystack
->yyspaceLeft
+= 1;
1778 if (yystack
->yytops
.yystates
[0] == NULL
)
1779 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1782 #define YYCHK1(YYE) \
1788 yystack.yyerrflag = 1; \
1791 yystack.yyerrflag = 0; \
1794 goto yyuser_error; \
1803 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1813 #define yychar (yystack.yyrawchar)
1816 YYSTYPE
* const yylvalp
= &yylval
;
1817 YYLTYPE
* const yyllocp
= &yylloc
;
1819 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1820 yystack
.yytokenp
= &yytoken
;
1822 YYDPRINTF ((stderr
, "Starting parse\n"));
1824 if (setjmp (yystack
.yyexception_buffer
) != 0)
1827 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1833 /* For efficiency, we have two loops, the first of which is
1834 specialized to deterministic operation (single stack, no
1835 potential ambiguity). */
1841 const short* yyconflicts
;
1843 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1844 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1845 if (yystate
== YYFINAL
)
1847 if (yyisDefaultedState (yystate
))
1849 yyrule
= yydefaultAction (yystate
);
1852 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1855 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1859 if (yytoken
== YYEMPTY
)
1861 YYDPRINTF ((stderr
, "Reading a token: "));
1863 yytoken
= YYTRANSLATE (yychar
);
1864 YYDSYMPRINTF ("Next token is", yytoken
, yylvalp
, yyllocp
);
1866 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1867 if (*yyconflicts
!= 0)
1869 if (yyisShiftAction (yyaction
))
1871 YYDPRINTF ((stderr
, "Shifting token %s, ",
1872 yytokenName (yytoken
)));
1873 if (yytoken
!= YYEOF
)
1876 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1877 yylval
, yyllocp
]b4_user_args
[);
1878 if (0 < yystack
.yyerrState
)
1879 yystack
.yyerrState
-= 1;
1881 else if (yyisErrorAction (yyaction
))
1883 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1887 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1894 int yyn
= yystack
.yytops
.yysize
;
1895 for (yys
= 0; yys
< yyn
; yys
+= 1)
1896 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1897 yylvalp
, yyllocp
]b4_user_args
[));
1900 yyremoveDeletes (&yystack
);
1901 if (yystack
.yytops
.yysize
== 0)
1903 yyundeleteLastStack (&yystack
);
1904 if (yystack
.yytops
.yysize
== 0)
1905 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1906 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1907 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1908 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1911 else if (yystack
.yytops
.yysize
== 1)
1913 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1914 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1915 yycompressStack (&yystack
);
1921 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1922 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1927 yyfreeGLRStack (&yystack
);
1928 return yystack
.yyerrflag
;
1931 /* DEBUGGING ONLY */
1932 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1933 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1936 yy_yypstack (yyGLRState
* yys
)
1940 yy_yypstack (yys
->yypred
);
1941 fprintf (stderr
, " -> ");
1943 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long) yys
->yyposn
);
1947 yypstates (yyGLRState
* yyst
)
1950 fprintf (stderr
, "<null>");
1953 fprintf (stderr
, "\n");
1957 yypstack (yyGLRStack
* yystack
, int yyk
)
1959 yypstates (yystack
->yytops
.yystates
[yyk
]);
1962 #define YYINDEX(YYX) \
1963 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1967 yypdumpstack (yyGLRStack
* yystack
)
1969 yyGLRStackItem
* yyp
;
1971 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1973 fprintf (stderr
, "%3lu. ", (unsigned long) (yyp
- yystack
->yyitems
));
1974 if (*(yybool
*) yyp
)
1976 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1977 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1978 (unsigned long) yyp
->yystate
.yyposn
,
1979 (long) YYINDEX (yyp
->yystate
.yypred
));
1980 if (! yyp
->yystate
.yyresolved
)
1981 fprintf (stderr
, ", firstVal: %ld",
1982 (long) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1986 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1987 yyp
->yyoption
.yyrule
,
1988 (long) YYINDEX (yyp
->yyoption
.yystate
),
1989 (long) YYINDEX (yyp
->yyoption
.yynext
));
1991 fprintf (stderr
, "\n");
1993 fprintf (stderr
, "Tops:");
1994 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1995 fprintf (stderr
, "%lu: %ld; ", (unsigned long) yyi
,
1996 (long) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1997 fprintf (stderr
, "\n");
2002 m4_if(b4_defines_flag
, 0, [],
2003 [@output @output_header_name@
2004 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003])
2006 b4_token_defines(b4_tokens
)
2008 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2009 m4_ifdef([b4_stype
],
2010 [b4_syncline([b4_stype_line
], [b4_filename
])
2011 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
2012 /* Line __line__ of glr.c. */
2013 b4_syncline([@oline@
], [@ofile@
])],
2014 [typedef int YYSTYPE
;])
2015 # define YYSTYPE_IS_DECLARED 1
2016 # define YYSTYPE_IS_TRIVIAL 1
2020 [extern YYSTYPE b4_prefix
[]lval
;])
2022 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2023 typedef struct YYLTYPE
2034 # define YYLTYPE_IS_DECLARED 1
2035 # define YYLTYPE_IS_TRIVIAL 1
2038 b4_location_if([m4_if(b4_pure
, [0],
2039 [extern YYLTYPE b4_prefix
[]lloc
;])