1 m4_divert(-1) -*- C
-*-
3 # GLR skeleton for Bison
4 # Copyright (C) 2002, 2003, 2004 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 look-ahead, 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 look-ahead, 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 look-ahead, 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, 2004])
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 #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) value used for initialization for null
209 right-hand sides. Unlike the standard yacc.c template,
210 here we set the default value of $$ to a zeroed-out value.
211 Since the default value is undefined, this behavior is
212 technically correct. */
213 static YYSTYPE yyval_default
;
215 /* Copy the second part of user declarations. */
218 ]/* Line __line__ of glr.c. */
219 b4_syncline([@oline@
], [@ofile@
])
225 # define YYMALLOC malloc
228 # define YYREALLOC realloc
234 typedef unsigned char yybool
;
243 #ifndef __attribute__
244 /* This feature is available in gcc versions 2.5 and later. */
245 # if !defined (__GNUC__) || __GNUC__ < 2 || \
246 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
247 # define __attribute__(Spec) /* empty */
252 # define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
255 #ifndef ATTRIBUTE_UNUSED
256 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
259 /* YYFINAL -- State number of the termination state. */
260 #define YYFINAL ]b4_final_state_number[
261 /* YYLAST -- Last index in YYTABLE. */
262 #define YYLAST ]b4_last[
264 /* YYNTOKENS -- Number of terminals. */
265 #define YYNTOKENS ]b4_tokens_number[
266 /* YYNNTS -- Number of nonterminals. */
267 #define YYNNTS ]b4_nterms_number[
268 /* YYNRULES -- Number of rules. */
269 #define YYNRULES ]b4_rules_number[
270 /* YYNRULES -- Number of states. */
271 #define YYNSTATES ]b4_states_number[
272 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
273 #define YYMAXRHS ]b4_r2_max[
274 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
275 accessed by $0, $-1, etc., in any rule. */
276 #define YYMAXLEFT ]b4_max_left_semantic_context[
278 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
279 #define YYUNDEFTOK ]b4_undef_token_number[
280 #define YYMAXUTOK ]b4_user_token_number_max[
282 #define YYTRANSLATE(YYX) \
283 ((YYX <= 0) ? YYEOF : \
284 (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
286 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
287 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
293 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
295 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
300 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
301 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
306 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
307 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
313 #if (YYDEBUG) || YYERROR_VERBOSE
314 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
315 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
316 static const char *const yytname
[] =
322 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
323 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
328 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
329 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
334 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
335 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
340 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
341 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
346 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
347 doesn't specify something else to do. Zero means the default is an
349 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
354 /* YYPDEFGOTO[NTERM-NUM]. */
355 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
360 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
362 #define YYPACT_NINF ]b4_pact_ninf[
363 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
368 /* YYPGOTO[NTERM-NUM]. */
369 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
374 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
375 positive, shift that token. If negative, reduce the rule which
376 number is the opposite. If zero, do what YYDEFACT says.
377 If YYTABLE_NINF, syntax error. */
378 #define YYTABLE_NINF ]b4_table_ninf[
379 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
384 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
385 list of conflicting reductions corresponding to action entry for
386 state STATE-NUM in yytable. 0 means no conflicts. The list in
387 yyconfl is terminated by a rule number of 0. */
388 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
390 ]b4_conflict_list_heads
[
393 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
394 0, pointed into by YYCONFLP. */
395 ]dnl Do
not use b4_int_type_for here
, since there are places where
396 dnl pointers onto yyconfl are taken
, which type is
"short int *".
397 dnl We probably ought to introduce a type
for confl
.
398 [static const short int yyconfl
[] =
400 ]b4_conflicting_rules
[
403 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
408 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
409 symbol of state STATE-NUM. */
410 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
416 /* Prevent warning if -Wmissing-prototypes. */
417 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
419 /* Error token number */
422 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
423 If N is 0, then set CURRENT to the empty location which ends
424 the previous symbol: RHS[0] (always defined). */
427 #define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
428 #ifndef YYLLOC_DEFAULT
429 # define YYLLOC_DEFAULT(Current, Rhs, N) \
433 (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \
434 (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \
435 (Current).last_line = YYRHSLOC(Rhs, N).last_line; \
436 (Current).last_column = YYRHSLOC(Rhs, N).last_column; \
440 (Current).first_line = (Current).last_line = \
441 YYRHSLOC(Rhs, 0).last_line; \
442 (Current).first_column = (Current).last_column = \
443 YYRHSLOC(Rhs, 0).last_column; \
447 /* YY_LOCATION_PRINT -- Print the location on the stream.
448 This macro was not mandated originally: define only if we know
449 we won't break user code: when these are the locations we know. */
451 # define YY_LOCATION_PRINT(File, Loc) \
452 fprintf (File, "%d.%d-%d.%d", \
453 (Loc).first_line, (Loc).first_column, \
454 (Loc).last_line, (Loc).last_column)
457 #ifndef YYLLOC_DEFAULT
458 # define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
462 #ifndef YY_LOCATION_PRINT
463 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
467 /* YYLEX -- calling `yylex' with the right arguments. */
468 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
473 #define yynerrs (yystack->yyerrcnt)
475 #define yychar (yystack->yyrawchar)],
483 static const int YYEOF
= 0;
484 static const int YYEMPTY
= -2;
486 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
489 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
494 #if ! defined (YYFPRINTF)
495 # define YYFPRINTF fprintf
498 # define YYDPRINTF(Args) \
504 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
506 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
510 YYFPRINTF (stderr, "%s ", Title); \
511 yysymprint (stderr, \
512 Type, Value]b4_location_if([, Location])[); \
513 YYFPRINTF (stderr, "\n"); \
517 /* Nonzero means print parse trace. It is left uninitialized so that
518 multiple parsers can coexist. */
523 # define YYDPRINTF(Args)
524 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
526 #endif /* !YYDEBUG */
528 /* YYINITDEPTH -- initial size of the parser's stacks. */
530 # define YYINITDEPTH ]b4_stack_depth_init[
533 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
534 if the built-in stack extension method is used).
536 Do not make this value too large; the results are undefined if
537 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
538 evaluated with infinite-precision integer arithmetic. */
545 # define YYMAXDEPTH ]b4_stack_depth_max[
548 /* Minimum number of free items on the stack allowed after an
549 allocation. This is to allow allocation and initialization
550 to be completed by functions that call expandGLRStack before the
551 stack is expanded, thus insuring that all necessary pointers get
552 properly redirected to new data. */
555 #if (! defined (YYSTACKEXPANDABLE) \
556 && (! defined (__cplusplus) \
557 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
558 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
559 #define YYSTACKEXPANDABLE 1
561 #define YYSTACKEXPANDABLE 0
564 /** State numbers, as in LALR(1) machine */
565 typedef int yyStateNum
;
567 /** Rule numbers, as in LALR(1) machine */
568 typedef int yyRuleNum
;
570 /** Grammar symbol */
571 typedef short int yySymbol
;
573 /** Item references, as in LALR(1) machine */
574 typedef short int yyItemNum
;
576 typedef struct yyGLRState yyGLRState
;
577 typedef struct yySemanticOption yySemanticOption
;
578 typedef union yyGLRStackItem yyGLRStackItem
;
579 typedef struct yyGLRStack yyGLRStack
;
580 typedef struct yyGLRStateSet yyGLRStateSet
;
585 yyStateNum yylrState
;
589 yySemanticOption
* yyfirstVal
;
595 struct yyGLRStateSet
{
596 yyGLRState
** yystates
;
597 size_t yysize
, yycapacity
;
600 struct yySemanticOption
{
604 yySemanticOption
* yynext
;
607 union yyGLRStackItem
{
609 yySemanticOption yyoption
;
615 ]b4_location_if([[ /* To compute the location of the error token. */
616 yyGLRStackItem yyerror_range
[3];]])[
623 jmp_buf yyexception_buffer
;
624 yyGLRStackItem
* yyitems
;
625 yyGLRStackItem
* yynextFree
;
627 yyGLRState
* yysplitPoint
;
628 yyGLRState
* yylastDeleted
;
629 yyGLRStateSet yytops
;
632 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
633 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
634 static void yyfreeGLRStack (yyGLRStack
* yystack
);
637 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
639 yystack
->yyerrflag
= 1;
640 if (yyformat
!= NULL
)
644 va_start (yyap
, yyformat
);
645 vsprintf (yymsg
, yyformat
, yyap
);
646 yyerror (]b4_yyerror_args
[yymsg
);
648 longjmp (yystack
->yyexception_buffer
, 1);
651 #if YYDEBUG || YYERROR_VERBOSE
652 /** A printable representation of TOKEN. Valid until next call to
654 static inline const char*
655 yytokenName (yySymbol yytoken
)
657 if (yytoken
== YYEMPTY
)
660 return yytname
[yytoken
];
664 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
665 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
666 * containing the pointer to the next state in the chain. Assumes
667 * YYLOW1 < YYLOW0. */
668 static void yyfillin (yyGLRStackItem
*, int, int) ATTRIBUTE_UNUSED
;
670 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
674 s
= yyvsp
[yylow0
].yystate
.yypred
;
675 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
677 YYASSERT (s
->yyresolved
);
678 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
679 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
680 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
681 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
685 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
686 YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
687 For convenience, always return YYLOW1. */
688 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
691 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
693 if (!yynormal
&& yylow1
< *yylow
)
695 yyfillin (yyvsp
, *yylow
, yylow1
);
701 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
702 * and top stack item YYVSP. YYLVALP points to place to put semantic
703 * value ($$), and yylocp points to place for location information
704 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
705 * yyerr for YYERROR, yyabort for YYABORT. */
707 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
709 YYLTYPE
* yylocp
]b4_location_if(, [ ATTRIBUTE_UNUSED
])[,
713 yybool yynormal ATTRIBUTE_UNUSED
= (yystack
->yysplitPoint
== NULL
);
717 # define yyerrok (yystack->yyerrState = 0)
719 # define YYACCEPT return yyaccept
721 # define YYABORT return yyabort
723 # define YYERROR return yyerrok, yyerr
725 # define YYRECOVERING (yystack->yyerrState != 0)
727 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
729 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
731 # define YYBACKUP(Token, Value) \
732 return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \
737 *yyvalp
= yyval_default
;
739 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
740 YYLLOC_DEFAULT (*yylocp
, yyvsp
- yyrhslen
, yyrhslen
);
755 /* Line __line__ of glr.c. */
756 b4_syncline([@oline@
], [@ofile@
])
761 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
763 /* `Use' the arguments. */
773 /* Bison grammar-table manipulation. */
775 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
777 /** Number of symbols composing the right hand side of rule #RULE. */
779 yyrhsLength (yyRuleNum yyrule
)
784 /** Left-hand-side symbol for rule #RULE. */
785 static inline yySymbol
786 yylhsNonterm (yyRuleNum yyrule
)
791 #define yyis_pact_ninf(yystate) \
792 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
794 ((yystate
) == YYPACT_NINF
))[
796 /** True iff LR state STATE has only a default reduction (regardless
799 yyisDefaultedState (yyStateNum yystate
)
801 return yyis_pact_ninf (yypact
[yystate
]);
804 /** The default reduction for STATE, assuming it has one. */
805 static inline yyRuleNum
806 yydefaultAction (yyStateNum yystate
)
808 return yydefact
[yystate
];
811 #define yyis_table_ninf(yytable_value) \
812 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
814 ((yytable_value
) == YYTABLE_NINF
))[
816 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
818 * R < 0: Reduce on rule -R.
820 * R > 0: Shift to state R.
821 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
822 * conflicting reductions.
825 yygetLRActions (yyStateNum yystate
, int yytoken
,
826 int* yyaction
, const short int** yyconflicts
)
828 int yyindex
= yypact
[yystate
] + yytoken
;
829 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
831 *yyaction
= -yydefact
[yystate
];
832 *yyconflicts
= yyconfl
;
834 else if (! yyis_table_ninf (yytable
[yyindex
]))
836 *yyaction
= yytable
[yyindex
];
837 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
842 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
846 static inline yyStateNum
847 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
850 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
851 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
854 return yydefgoto
[yylhs
- YYNTOKENS
];
858 yyisShiftAction (int yyaction
)
864 yyisErrorAction (int yyaction
)
866 return yyaction
== 0;
872 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
873 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
875 yySemanticOption
* yynewItem
;
876 yynewItem
= &yystack
->yynextFree
->yyoption
;
877 yystack
->yyspaceLeft
-= 1;
878 yystack
->yynextFree
+= 1;
879 yynewItem
->yyisState
= yyfalse
;
880 yynewItem
->yystate
= rhs
;
881 yynewItem
->yyrule
= yyrule
;
882 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
883 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
884 if (yystack
->yyspaceLeft
< YYHEADROOM
)
885 yyexpandGLRStack (yystack
]b4_pure_args
[);
890 /** Initialize SET to a singleton set containing an empty stack. */
892 yyinitStateSet (yyGLRStateSet
* yyset
)
895 yyset
->yycapacity
= 16;
896 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
897 yyset
->yystates
[0] = NULL
;
900 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
902 YYFREE (yyset
->yystates
);
905 /** Initialize STACK to a single empty stack, with total maximum
906 * capacity for all stacks of SIZE. */
908 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
910 yystack
->yyerrflag
= 0;
911 yystack
->yyerrState
= 0;
913 yystack
->yyspaceLeft
= yysize
;
914 yystack
->yynextFree
= yystack
->yyitems
=
915 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystack
->yynextFree
[0]);
916 yystack
->yysplitPoint
= NULL
;
917 yystack
->yylastDeleted
= NULL
;
918 yyinitStateSet (&yystack
->yytops
);
921 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
922 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
924 /** If STACK is expandable, extend it. WARNING: Pointers into the
925 stack from outside should be considered invalid after this call.
926 We always expand when there are 1 or fewer items left AFTER an
927 allocation, so that we can avoid having external pointers exist
928 across an allocation. */
930 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
932 #if YYSTACKEXPANDABLE
933 yyGLRStack yynewStack
;
934 yyGLRStackItem
* yyp0
, *yyp1
;
935 size_t yysize
, yynewSize
;
937 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
938 if (YYMAXDEPTH
<= yysize
)
939 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
940 yynewSize
= 2*yysize
;
941 if (YYMAXDEPTH
< yynewSize
)
942 yynewSize
= YYMAXDEPTH
;
943 yyinitGLRStack (&yynewStack
, yynewSize
);
944 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
946 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
949 if (*(yybool
*) yyp0
)
951 yyGLRState
* yys0
= &yyp0
->yystate
;
952 yyGLRState
* yys1
= &yyp1
->yystate
;
953 if (yys0
->yypred
!= NULL
)
955 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
956 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
957 yys1
->yysemantics
.yyfirstVal
=
958 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
962 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
963 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
964 if (yyv0
->yystate
!= NULL
)
965 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
966 if (yyv0
->yynext
!= NULL
)
967 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
970 if (yystack
->yysplitPoint
!= NULL
)
971 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
972 yystack
->yysplitPoint
, yystate
);
974 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
975 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
976 yystack
->yytops
.yystates
[yyn
] =
977 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
978 yystack
->yytops
.yystates
[yyn
], yystate
);
979 YYFREE (yystack
->yyitems
);
980 yystack
->yyitems
= yynewStack
.yyitems
;
981 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
982 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
986 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
991 yyfreeGLRStack (yyGLRStack
* yystack
)
993 YYFREE (yystack
->yyitems
);
994 yyfreeStateSet (&yystack
->yytops
);
997 /** Assuming that S is a GLRState somewhere on STACK, update the
998 * splitpoint of STACK, if needed, so that it is at least as deep as
1001 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
1003 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
1004 yystack
->yysplitPoint
= yys
;
1007 /** Invalidate stack #K in STACK. */
1009 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
1011 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1012 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
1013 yystack
->yytops
.yystates
[yyk
] = NULL
;
1016 /** Undelete the last stack that was marked as deleted. Can only be
1017 done once after a deletion, and only when all other stacks have
1020 yyundeleteLastStack (yyGLRStack
* yystack
)
1022 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
1024 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
1025 yystack
->yytops
.yysize
= 1;
1026 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1027 yystack
->yylastDeleted
= NULL
;
1031 yyremoveDeletes (yyGLRStack
* yystack
)
1035 while (yyj
< yystack
->yytops
.yysize
)
1037 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
1041 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1043 yystack
->yytops
.yysize
-= 1;
1047 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
1050 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1051 (unsigned long int) yyi
, (unsigned long int) yyj
));
1059 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1060 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1062 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
1063 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
1065 yyGLRStackItem
* yynewItem
;
1067 yynewItem
= yystack
->yynextFree
;
1068 yystack
->yynextFree
+= 1;
1069 yystack
->yyspaceLeft
-= 1;
1070 yynewItem
->yystate
.yyisState
= yytrue
;
1071 yynewItem
->yystate
.yylrState
= yylrState
;
1072 yynewItem
->yystate
.yyposn
= yyposn
;
1073 yynewItem
->yystate
.yyresolved
= yytrue
;
1074 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1075 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1076 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1077 yynewItem
->yystate
.yyloc
= *yylocp
;
1078 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1079 yyexpandGLRStack (yystack
]b4_pure_args
[);
1082 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1083 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1084 * semantic value of YYRHS under the action for YYRULE. */
1086 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1087 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1089 yyGLRStackItem
* yynewItem
;
1091 yynewItem
= yystack
->yynextFree
;
1092 yynewItem
->yystate
.yyisState
= yytrue
;
1093 yynewItem
->yystate
.yylrState
= yylrState
;
1094 yynewItem
->yystate
.yyposn
= yyposn
;
1095 yynewItem
->yystate
.yyresolved
= yyfalse
;
1096 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1097 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1098 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1099 yystack
->yynextFree
+= 1;
1100 yystack
->yyspaceLeft
-= 1;
1101 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1104 /** Pop the symbols consumed by reduction #RULE from the top of stack
1105 * #K of STACK, and perform the appropriate semantic action on their
1106 * semantic values. Assumes that all ambiguities in semantic values
1107 * have been previously resolved. Set *VALP to the resulting value,
1108 * and *LOCP to the computed location (if any). Return value is as
1109 * for userAction. */
1110 static inline YYRESULTTAG
1111 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1112 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1114 int yynrhs
= yyrhsLength (yyrule
);
1116 if (yystack
->yysplitPoint
== NULL
)
1118 /* Standard special case: single stack. */
1119 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1120 YYASSERT (yyk
== 0);
1121 yystack
->yynextFree
-= yynrhs
;
1122 yystack
->yyspaceLeft
+= yynrhs
;
1123 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1124 return yyuserAction (yyrule
, yynrhs
, rhs
,
1125 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1131 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1132 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1133 = yystack
->yytops
.yystates
[yyk
];
1134 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1139 yyupdateSplit (yystack
, yys
);
1140 yystack
->yytops
.yystates
[yyk
] = yys
;
1141 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1142 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1147 # define YY_REDUCE_PRINT(K, Rule)
1149 # define YY_REDUCE_PRINT(K, Rule) \
1152 yy_reduce_print (K, Rule); \
1155 /*----------------------------------------------------------.
1156 | Report that the RULE is going to be reduced on stack #K. |
1157 `----------------------------------------------------------*/
1160 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1163 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu), ",
1164 (unsigned long int) yyk
, yyrule
- 1,
1165 (unsigned long int) yyrline
[yyrule
]);
1166 /* Print the symbols being reduced, and their result. */
1167 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1168 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1169 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1173 /** Pop items off stack #K of STACK according to grammar rule RULE,
1174 * and push back on the resulting nonterminal symbol. Perform the
1175 * semantic action associated with RULE and store its value with the
1176 * newly pushed state, if FORCEEVAL or if STACK is currently
1177 * unambiguous. Otherwise, store the deferred semantic action with
1178 * the new state. If the new state would have an identical input
1179 * position, LR state, and predecessor to an existing state on the stack,
1180 * it is identified with that existing state, eliminating stack #K from
1181 * the STACK. In this case, the (necessarily deferred) semantic value is
1182 * added to the options for the existing state's semantic value.
1184 static inline YYRESULTTAG
1185 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1186 yybool yyforceEval
]b4_pure_formals
[)
1188 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1190 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1195 YY_REDUCE_PRINT (yyk
, yyrule
);
1196 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1197 yyglrShift (yystack
, yyk
,
1198 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1199 yylhsNonterm (yyrule
)),
1200 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1206 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1207 yyStateNum yynewLRState
;
1209 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1215 yyupdateSplit (yystack
, yys
);
1216 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1218 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1219 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1220 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1221 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1223 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1224 yyp
= yystack
->yytops
.yystates
[yyi
];
1225 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1227 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1229 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1230 yymarkStackDeleted (yystack
, yyk
);
1231 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1232 (unsigned long int) yyk
,
1233 (unsigned long int) yyi
));
1239 yystack
->yytops
.yystates
[yyk
] = yys
;
1240 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1246 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1248 if (yystack
->yysplitPoint
== NULL
)
1250 YYASSERT (yyk
== 0);
1251 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1253 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1255 yystack
->yytops
.yycapacity
*= 2;
1256 yystack
->yytops
.yystates
=
1257 (yyGLRState
**) YYREALLOC (yystack
->yytops
.yystates
,
1258 (yystack
->yytops
.yycapacity
1259 * sizeof yystack
->yytops
.yystates
[0]));
1261 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1262 = yystack
->yytops
.yystates
[yyk
];
1263 yystack
->yytops
.yysize
+= 1;
1264 return yystack
->yytops
.yysize
-1;
1267 /** True iff Y0 and Y1 represent identical options at the top level.
1268 * That is, they represent the same rule applied to RHS symbols
1269 * that produce the same terminal symbols. */
1271 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1273 if (yyy0
->yyrule
== yyy1
->yyrule
)
1275 yyGLRState
*yys0
, *yys1
;
1277 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1278 yyn
= yyrhsLength (yyy0
->yyrule
);
1280 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1281 if (yys0
->yyposn
!= yys1
->yyposn
)
1289 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1290 * alternative semantic values for the RHS-symbols of Y1 into the
1291 * corresponding semantic value sets of the symbols of Y0. */
1293 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1295 yyGLRState
*yys0
, *yys1
;
1297 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1298 yyn
= yyrhsLength (yyy0
->yyrule
);
1300 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1303 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1305 yySemanticOption
* yyz
;
1306 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1309 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1313 /** Y0 and Y1 represent two possible actions to take in a given
1314 * parsing state; return 0 if no combination is possible,
1315 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1317 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1319 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1320 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1324 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1329 if (p0
== 0 || p1
== 0)
1338 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1339 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1340 YYLTYPE
* yylocp
]b4_user_formals
[);
1343 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1348 YYASSERT (yys
->yypred
);
1349 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1352 if (! yys
->yyresolved
)
1354 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1355 &yys
->yysemantics
.yysval
, &yys
->yyloc
1359 yys
->yyresolved
= yytrue
;
1366 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1367 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1369 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1372 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1373 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1374 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;
1375 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1376 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1377 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1382 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1384 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1387 yyGLRState
* yystates
[YYMAXRHS
];
1388 yyGLRState yyleftmost_state
;
1390 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1391 yystates
[yyi
] = yys
;
1394 yyleftmost_state
.yyposn
= 0;
1395 yystates
[0] = &yyleftmost_state
;
1400 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1401 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1402 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1405 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1406 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1407 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1408 (unsigned long int) yyx
->yystate
->yyposn
);
1409 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1411 if (yystates
[yyi
]->yyresolved
)
1413 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1414 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1415 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1417 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1418 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1419 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1420 (unsigned long int) yystates
[yyi
]->yyposn
);
1423 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1429 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1430 yyGLRStack
* yystack
]b4_pure_formals
[)
1432 /* `Unused' warnings. */
1437 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1438 YYFPRINTF (stderr
, "Option 1,\n");
1439 yyreportTree (yyx0
, 2);
1440 YYFPRINTF (stderr
, "\nOption 2,\n");
1441 yyreportTree (yyx1
, 2);
1442 YYFPRINTF (stderr
, "\n");
1444 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1448 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1449 * actions, and return the result. */
1451 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1452 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1454 yySemanticOption
* yybest
;
1455 yySemanticOption
* yyp
;
1458 yybest
= yyoptionList
;
1460 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1462 if (yyidenticalOptions (yybest
, yyp
))
1463 yymergeOptionSets (yybest
, yyp
);
1465 switch (yypreference (yybest
, yyp
))
1468 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1484 int yyprec
= yydprec
[yybest
->yyrule
];
1485 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1486 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1488 if (yyprec
== yydprec
[yyp
->yyrule
])
1492 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1493 yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1499 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1503 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1505 if (yystack
->yysplitPoint
!= NULL
)
1510 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1511 yys
!= yystack
->yysplitPoint
;
1512 yys
= yys
->yypred
, yyn
+= 1)
1514 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1521 yycompressStack (yyGLRStack
* yystack
)
1523 yyGLRState
* yyp
, *yyq
, *yyr
;
1525 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1528 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1529 yyp
!= yystack
->yysplitPoint
;
1530 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1533 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1534 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1535 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1536 yystack
->yysplitPoint
= NULL
;
1537 yystack
->yylastDeleted
= NULL
;
1541 yystack
->yynextFree
->yystate
= *yyr
;
1543 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1544 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1545 yystack
->yynextFree
+= 1;
1546 yystack
->yyspaceLeft
-= 1;
1551 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1552 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1556 const short int* yyconflicts
;
1558 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1560 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1562 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1563 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1565 YYASSERT (yystate
!= YYFINAL
);
1567 if (yyisDefaultedState (yystate
))
1569 yyrule
= yydefaultAction (yystate
);
1572 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1573 yymarkStackDeleted (yystack
, yyk
);
1576 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1580 if (*yytokenp
== YYEMPTY
)
1582 YYDPRINTF ((stderr
, "Reading a token: "));
1584 *yytokenp
= YYTRANSLATE (yychar
);
1585 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1587 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1589 while (*yyconflicts
!= 0)
1591 int yynewStack
= yysplitStack (yystack
, yyk
);
1592 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1594 YYCHK (yyglrReduce (yystack
, yynewStack
,
1595 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1596 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1597 yylvalp
, yyllocp
]b4_user_args
[));
1601 if (yyisShiftAction (yyaction
))
1603 YYDPRINTF ((stderr
, "On stack %d, ", yyk
));
1604 YY_SYMBOL_PRINT ("shifting", *yytokenp
, yylvalp
, yyllocp
);
1605 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1606 *yylvalp
, yyllocp
]b4_user_args
[);
1607 YYDPRINTF ((stderr
, ", now in state #%d\n",
1608 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1611 else if (yyisErrorAction (yyaction
))
1613 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1614 yymarkStackDeleted (yystack
, yyk
);
1618 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1625 yyreportSyntaxError (yyGLRStack
* yystack
,
1626 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1628 /* `Unused' warnings. */
1632 if (yystack
->yyerrState
== 0)
1635 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1637 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1638 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1641 const char* yyprefix
;
1645 /* Start YYX at -YYN if negative to avoid negative indexes in
1647 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1649 /* Stay within bounds of both yycheck and yytname. */
1650 int yychecklim
= YYLAST
- yyn
;
1651 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1654 yyprefix
= ", expecting ";
1655 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1656 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1658 yysize
+= strlen (yyprefix
) + strlen (yytokenName (yyx
));
1667 yysize
+= (sizeof ("syntax error, unexpected ")
1668 + strlen (yytokenName (*yytokenp
)));
1669 yymsg
= (char*) YYMALLOC (yysize
);
1673 sprintf (yyp
, "syntax error%s%s",
1674 (*yytokenp
== YYEMPTY
? "" : ", unexpected "),
1675 yytokenName (*yytokenp
));
1676 yyp
+= strlen (yyp
);
1679 yyprefix
= ", expecting ";
1680 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1681 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1683 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1684 yyp
+= strlen (yyp
);
1688 yyerror (]b4_lyyerror_args
[yymsg
);
1692 yyerror (]b4_lyyerror_args
["syntax error; also virtual memory exhausted");
1695 #endif /* YYERROR_VERBOSE */
1696 yyerror (]b4_lyyerror_args
["syntax error");
1701 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1702 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1703 value, and location of the look-ahead. */
1705 yyrecoverSyntaxError (yyGLRStack
* yystack
,
1707 YYLTYPE
* yyllocp
]b4_location_if(, [ ATTRIBUTE_UNUSED
])[
1710 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1714 if (yystack
->yyerrState
== 3)
1715 /* We just shifted the error token and (perhaps) took some
1716 reductions. Skip tokens until we can proceed. */
1719 if (*yytokenp
== YYEOF
)
1721 /* Now pop stack until empty and fail. */
1722 while (yystack
->yytops
.yystates
[0] != NULL
)
1724 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1725 ]b4_location_if([[ yystack
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
1726 yydestruct ("Error: popping",
1727 yystos
[yys
->yylrState
],
1728 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1729 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1730 yystack
->yynextFree
-= 1;
1731 yystack
->yyspaceLeft
+= 1;
1733 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1735 if (*yytokenp
!= YYEMPTY
)
1737 /* We throw away the lookahead, but the error range
1738 of the shifted error token must take it into account. */
1739 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1740 yyGLRStackItem yyerror_range
[3];
1741 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
1742 yyerror_range
[2].yystate
.yyloc
= *yyllocp
;
1743 YYLLOC_DEFAULT (yys
->yyloc
, yyerror_range
, 2);]])[
1744 yydestruct ("Error: discarding",
1745 *yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1747 YYDPRINTF ((stderr
, "Reading a token: "));
1749 *yytokenp
= YYTRANSLATE (yychar
);
1750 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1751 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1752 if (yyis_pact_ninf (yyj
))
1755 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1757 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1760 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1764 /* Reduce to one stack. */
1765 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1766 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1768 if (yyk
>= yystack
->yytops
.yysize
)
1769 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1770 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1771 yymarkStackDeleted (yystack
, yyk
);
1772 yyremoveDeletes (yystack
);
1773 yycompressStack (yystack
);
1775 /* Now pop stack until we find a state that shifts the error token. */
1776 yystack
->yyerrState
= 3;
1777 while (yystack
->yytops
.yystates
[0] != NULL
)
1779 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1780 yyj
= yypact
[yys
->yylrState
];
1781 if (! yyis_pact_ninf (yyj
))
1784 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1785 && yyisShiftAction (yytable
[yyj
]))
1787 /* Shift the error token having adjusted its location. */
1788 YYLTYPE yyerrloc
;]b4_location_if([[
1789 yystack
->yyerror_range
[2].yystate
.yyloc
= *yyllocp
;
1790 YYLLOC_DEFAULT (yyerrloc
, yystack
->yyerror_range
, 2);]])[
1791 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
1792 yylvalp
, &yyerrloc
);
1793 yyglrShift (yystack
, 0, yytable
[yyj
],
1794 yys
->yyposn
, *yylvalp
, &yyerrloc
]b4_user_args
[);
1795 yys
= yystack
->yytops
.yystates
[0];
1799 ]b4_location_if([[ yystack
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
1800 yydestruct ("Error: popping",
1801 yystos
[yys
->yylrState
],
1802 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1803 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1804 yystack
->yynextFree
-= 1;
1805 yystack
->yyspaceLeft
+= 1;
1807 if (yystack
->yytops
.yystates
[0] == NULL
)
1808 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1811 #define YYCHK1(YYE) \
1817 yystack.yyerrflag = 1; \
1820 yystack.yyerrflag = 0; \
1823 goto yyuser_error; \
1832 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1842 #define yychar (yystack.yyrawchar)
1845 YYSTYPE
* const yylvalp
= &yylval
;
1846 YYLTYPE
* const yyllocp
= &yylloc
;
1848 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1849 yystack
.yytokenp
= &yytoken
;
1851 YYDPRINTF ((stderr
, "Starting parse\n"));
1853 if (setjmp (yystack
.yyexception_buffer
) != 0)
1856 yylval
= yyval_default
;
1858 #if YYLTYPE_IS_TRIVIAL
1859 yylloc
.first_line
= yylloc
.last_line
= 1;
1860 yylloc
.first_column
= yylloc
.last_column
= 0;
1863 m4_ifdef([b4_initial_action
], [
1864 m4_pushdef([b4_at_dollar
], [yylval
])dnl
1865 m4_pushdef([b4_dollar_dollar
], [yylloc
])dnl
1866 /* User initialization code. */
1868 m4_popdef([b4_dollar_dollar
])dnl
1869 m4_popdef([b4_at_dollar
])dnl
1870 /* Line __line__ of glr.c. */
1871 b4_syncline([@oline@
], [@ofile@
])])dnl
1873 yyglrShift (&yystack
, 0, 0, 0, yylval
, &yylloc
]b4_user_args
[);
1879 /* For efficiency, we have two loops, the first of which is
1880 specialized to deterministic operation (single stack, no
1881 potential ambiguity). */
1887 const short int* yyconflicts
;
1889 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1890 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1891 if (yystate
== YYFINAL
)
1893 if (yyisDefaultedState (yystate
))
1895 yyrule
= yydefaultAction (yystate
);
1898 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
1899 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1902 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1906 if (yytoken
== YYEMPTY
)
1908 YYDPRINTF ((stderr
, "Reading a token: "));
1910 yytoken
= YYTRANSLATE (yychar
);
1911 YY_SYMBOL_PRINT ("Next token is", yytoken
, yylvalp
, yyllocp
);
1913 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1914 if (*yyconflicts
!= 0)
1916 if (yyisShiftAction (yyaction
))
1918 YY_SYMBOL_PRINT ("Shifting", yytoken
, yylvalp
, yyllocp
);
1919 if (yytoken
!= YYEOF
)
1922 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1923 yylval
, yyllocp
]b4_user_args
[);
1924 if (0 < yystack
.yyerrState
)
1925 yystack
.yyerrState
-= 1;
1927 else if (yyisErrorAction (yyaction
))
1929 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
1930 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1934 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1941 int yyn
= yystack
.yytops
.yysize
;
1942 for (yys
= 0; yys
< yyn
; yys
+= 1)
1943 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1944 yylvalp
, yyllocp
]b4_user_args
[));
1947 yyremoveDeletes (&yystack
);
1948 if (yystack
.yytops
.yysize
== 0)
1950 yyundeleteLastStack (&yystack
);
1951 if (yystack
.yytops
.yysize
== 0)
1952 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1953 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1954 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1955 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
1956 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1959 else if (yystack
.yytops
.yysize
== 1)
1961 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1962 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1963 yycompressStack (&yystack
);
1969 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1970 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1973 /* On YYABORT, free the lookahead. */
1974 if (yystack
.yyerrflag
== 1 && yytoken
!= YYEMPTY
)
1975 yydestruct ("Error: discarding lookahead",
1976 yytoken
, yylvalp
]b4_location_if([, yyllocp
])[);
1978 yyfreeGLRStack (&yystack
);
1979 return yystack
.yyerrflag
;
1982 /* DEBUGGING ONLY */
1984 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1985 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1988 yy_yypstack (yyGLRState
* yys
)
1992 yy_yypstack (yys
->yypred
);
1993 fprintf (stderr
, " -> ");
1995 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long int) yys
->yyposn
);
1999 yypstates (yyGLRState
* yyst
)
2002 fprintf (stderr
, "<null>");
2005 fprintf (stderr
, "\n");
2009 yypstack (yyGLRStack
* yystack
, int yyk
)
2011 yypstates (yystack
->yytops
.yystates
[yyk
]);
2014 #define YYINDEX(YYX) \
2015 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
2019 yypdumpstack (yyGLRStack
* yystack
)
2021 yyGLRStackItem
* yyp
;
2023 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
2025 fprintf (stderr
, "%3lu. ", (unsigned long int) (yyp
- yystack
->yyitems
));
2026 if (*(yybool
*) yyp
)
2028 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2029 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2030 (unsigned long int) yyp
->yystate
.yyposn
,
2031 (long int) YYINDEX (yyp
->yystate
.yypred
));
2032 if (! yyp
->yystate
.yyresolved
)
2033 fprintf (stderr
, ", firstVal: %ld",
2034 (long int) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
2038 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2039 yyp
->yyoption
.yyrule
,
2040 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2041 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2043 fprintf (stderr
, "\n");
2045 fprintf (stderr
, "Tops:");
2046 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
2047 fprintf (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2048 (long int) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
2049 fprintf (stderr
, "\n");
2055 m4_if(b4_defines_flag
, 0, [],
2056 [@output @output_header_name@
2057 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003, 2004])
2059 b4_token_defines(b4_tokens
)
2061 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2062 m4_ifdef([b4_stype
],
2063 [b4_syncline([b4_stype_line
], [b4_filename
])
2064 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
2065 /* Line __line__ of glr.c. */
2066 b4_syncline([@oline@
], [@ofile@
])],
2067 [typedef int YYSTYPE
;])
2068 # define YYSTYPE_IS_DECLARED 1
2069 # define YYSTYPE_IS_TRIVIAL 1
2073 [extern YYSTYPE b4_prefix
[]lval
;])
2075 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2076 typedef struct YYLTYPE
2087 # define YYLTYPE_IS_DECLARED 1
2088 # define YYLTYPE_IS_TRIVIAL 1
2091 b4_location_if([b4_pure_if([],
2092 [extern YYLTYPE b4_prefix
[]lloc
;])