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 [/* Substitute the variable and function names. */
153 #define yyparse b4_prefix[]parse
154 #define yylex b4_prefix[]lex
155 #define yyerror b4_prefix[]error
156 #define yylval b4_prefix[]lval
157 #define yychar b4_prefix[]char
158 #define yydebug b4_prefix[]debug
159 #define yynerrs b4_prefix[]nerrs
160 #define yylloc b4_prefix[]lloc])
162 b4_token_defines(b4_tokens
)
164 /* Copy the first part of user declarations. */
167 /* Enabling traces. */
169 # define YYDEBUG ]b4_debug[
172 /* Enabling verbose error messages. */
173 #ifdef YYERROR_VERBOSE
174 # undef YYERROR_VERBOSE
175 # define YYERROR_VERBOSE 1
177 # define YYERROR_VERBOSE ]b4_error_verbose[
180 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
181 ]m4_ifdef([b4_stype
],
182 [b4_syncline([b4_stype_line
], [b4_filename
])
183 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
184 /* Line __line__ of glr.c. */
185 b4_syncline([@oline@
], [@ofile@
])],
186 [typedef int YYSTYPE
;])[
187 # define YYSTYPE_IS_DECLARED 1
188 # define YYSTYPE_IS_TRIVIAL 1
191 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
192 typedef struct YYLTYPE
203 # define YYLTYPE_IS_DECLARED 1
204 # define YYLTYPE_IS_TRIVIAL 1
207 /* Default (constant) value used for initialization for null
208 right-hand sides. Unlike the standard yacc.c template,
209 here we set the default value of $$ to a zeroed-out value.
210 Since the default value is undefined, this behavior is
211 technically correct. */
212 static YYSTYPE yyval_default
;
214 /* Copy the second part of user declarations. */
217 ]/* Line __line__ of glr.c. */
218 b4_syncline([@oline@
], [@ofile@
])
224 # define YYMALLOC malloc
227 # define YYREALLOC realloc
233 typedef unsigned char yybool
;
242 #ifndef __attribute__
243 /* This feature is available in gcc versions 2.5 and later. */
244 # if !defined (__GNUC__) || __GNUC__ < 2 || \
245 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
246 # define __attribute__(Spec) /* empty */
251 # define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
254 #ifndef ATTRIBUTE_UNUSED
255 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
258 /* YYFINAL -- State number of the termination state. */
259 #define YYFINAL ]b4_final_state_number[
260 /* YYLAST -- Last index in YYTABLE. */
261 #define YYLAST ]b4_last[
263 /* YYNTOKENS -- Number of terminals. */
264 #define YYNTOKENS ]b4_tokens_number[
265 /* YYNNTS -- Number of nonterminals. */
266 #define YYNNTS ]b4_nterms_number[
267 /* YYNRULES -- Number of rules. */
268 #define YYNRULES ]b4_rules_number[
269 /* YYNRULES -- Number of states. */
270 #define YYNSTATES ]b4_states_number[
271 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
272 #define YYMAXRHS ]b4_r2_max[
273 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
274 accessed by $0, $-1, etc., in any rule. */
275 #define YYMAXLEFT ]b4_max_left_semantic_context[
277 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
278 #define YYUNDEFTOK ]b4_undef_token_number[
279 #define YYMAXUTOK ]b4_user_token_number_max[
281 #define YYTRANSLATE(YYX) \
282 ((YYX <= 0) ? YYEOF : \
283 (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
285 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
286 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
292 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
294 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
299 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
300 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
305 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
306 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
312 #if (YYDEBUG) || YYERROR_VERBOSE
313 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
314 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
315 static const char *const yytname
[] =
321 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
322 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
327 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
328 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
333 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
334 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
339 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
340 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
345 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
346 doesn't specify something else to do. Zero means the default is an
348 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
353 /* YYPDEFGOTO[NTERM-NUM]. */
354 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
359 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
361 #define YYPACT_NINF ]b4_pact_ninf[
362 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
367 /* YYPGOTO[NTERM-NUM]. */
368 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
373 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
374 positive, shift that token. If negative, reduce the rule which
375 number is the opposite. If zero, do what YYDEFACT says.
376 If YYTABLE_NINF, syntax error. */
377 #define YYTABLE_NINF ]b4_table_ninf[
378 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
383 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
384 list of conflicting reductions corresponding to action entry for
385 state STATE-NUM in yytable. 0 means no conflicts. The list in
386 yyconfl is terminated by a rule number of 0. */
387 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
389 ]b4_conflict_list_heads
[
392 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
393 0, pointed into by YYCONFLP. */
394 ]dnl Do
not use b4_int_type_for here
, since there are places where
395 dnl pointers onto yyconfl are taken
, which type is
"short int *".
396 dnl We probably ought to introduce a type
for confl
.
397 [static const short int yyconfl
[] =
399 ]b4_conflicting_rules
[
402 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
407 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
408 symbol of state STATE-NUM. */
409 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
415 /* Prevent warning if -Wmissing-prototypes. */
416 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
418 /* Error token number */
421 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
422 If N is 0, then set CURRENT to the empty location which ends
423 the previous symbol: RHS[0] (always defined). */
426 #define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
427 #ifndef YYLLOC_DEFAULT
428 # define YYLLOC_DEFAULT(Current, Rhs, N) \
432 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
433 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
434 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
435 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
439 (Current).first_line = (Current).last_line = \
440 YYRHSLOC (Rhs, 0).last_line; \
441 (Current).first_column = (Current).last_column = \
442 YYRHSLOC (Rhs, 0).last_column; \
446 /* YY_LOCATION_PRINT -- Print the location on the stream.
447 This macro was not mandated originally: define only if we know
448 we won't break user code: when these are the locations we know. */
450 # define YY_LOCATION_PRINT(File, Loc) \
451 fprintf (File, "%d.%d-%d.%d", \
452 (Loc).first_line, (Loc).first_column, \
453 (Loc).last_line, (Loc).last_column)
456 #ifndef YYLLOC_DEFAULT
457 # define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
461 #ifndef YY_LOCATION_PRINT
462 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
466 /* YYLEX -- calling `yylex' with the right arguments. */
467 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
472 #define yynerrs (yystack->yyerrcnt)
474 #define yychar (yystack->yyrawchar)],
482 static const int YYEOF
= 0;
483 static const int YYEMPTY
= -2;
485 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
488 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
493 #if ! defined (YYFPRINTF)
494 # define YYFPRINTF fprintf
497 # define YYDPRINTF(Args) \
503 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
505 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
509 YYFPRINTF (stderr, "%s ", Title); \
510 yysymprint (stderr, \
511 Type, Value]b4_location_if([, Location])[); \
512 YYFPRINTF (stderr, "\n"); \
516 /* Nonzero means print parse trace. It is left uninitialized so that
517 multiple parsers can coexist. */
522 # define YYDPRINTF(Args)
523 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
525 #endif /* !YYDEBUG */
527 /* YYINITDEPTH -- initial size of the parser's stacks. */
529 # define YYINITDEPTH ]b4_stack_depth_init[
532 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
533 if the built-in stack extension method is used).
535 Do not make this value too large; the results are undefined if
536 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
537 evaluated with infinite-precision integer arithmetic. */
540 # define YYMAXDEPTH ]b4_stack_depth_max[
543 /* Minimum number of free items on the stack allowed after an
544 allocation. This is to allow allocation and initialization
545 to be completed by functions that call expandGLRStack before the
546 stack is expanded, thus insuring that all necessary pointers get
547 properly redirected to new data. */
550 #if (! defined (YYSTACKEXPANDABLE) \
551 && (! defined (__cplusplus) \
552 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
553 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
554 #define YYSTACKEXPANDABLE 1
556 #define YYSTACKEXPANDABLE 0
559 /** State numbers, as in LALR(1) machine */
560 typedef int yyStateNum
;
562 /** Rule numbers, as in LALR(1) machine */
563 typedef int yyRuleNum
;
565 /** Grammar symbol */
566 typedef short int yySymbol
;
568 /** Item references, as in LALR(1) machine */
569 typedef short int yyItemNum
;
571 typedef struct yyGLRState yyGLRState
;
572 typedef struct yySemanticOption yySemanticOption
;
573 typedef union yyGLRStackItem yyGLRStackItem
;
574 typedef struct yyGLRStack yyGLRStack
;
575 typedef struct yyGLRStateSet yyGLRStateSet
;
580 yyStateNum yylrState
;
584 yySemanticOption
* yyfirstVal
;
590 struct yyGLRStateSet
{
591 yyGLRState
** yystates
;
592 size_t yysize
, yycapacity
;
595 struct yySemanticOption
{
599 yySemanticOption
* yynext
;
602 union yyGLRStackItem
{
604 yySemanticOption yyoption
;
610 ]b4_location_if([[ /* To compute the location of the error token. */
611 yyGLRStackItem yyerror_range
[3];]])[
618 jmp_buf yyexception_buffer
;
619 yyGLRStackItem
* yyitems
;
620 yyGLRStackItem
* yynextFree
;
622 yyGLRState
* yysplitPoint
;
623 yyGLRState
* yylastDeleted
;
624 yyGLRStateSet yytops
;
627 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
628 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
629 static void yyfreeGLRStack (yyGLRStack
* yystack
);
632 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
634 yystack
->yyerrflag
= 1;
635 if (yyformat
!= NULL
)
639 va_start (yyap
, yyformat
);
640 vsprintf (yymsg
, yyformat
, yyap
);
641 yyerror (]b4_yyerror_args
[yymsg
);
643 longjmp (yystack
->yyexception_buffer
, 1);
646 #if YYDEBUG || YYERROR_VERBOSE
647 /** A printable representation of TOKEN. Valid until next call to
649 static inline const char*
650 yytokenName (yySymbol yytoken
)
652 if (yytoken
== YYEMPTY
)
655 return yytname
[yytoken
];
659 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
660 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
661 * containing the pointer to the next state in the chain. Assumes
662 * YYLOW1 < YYLOW0. */
663 static void yyfillin (yyGLRStackItem
*, int, int) ATTRIBUTE_UNUSED
;
665 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
669 s
= yyvsp
[yylow0
].yystate
.yypred
;
670 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
672 YYASSERT (s
->yyresolved
);
673 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
674 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
675 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
676 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
680 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
681 YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
682 For convenience, always return YYLOW1. */
683 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
686 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
688 if (!yynormal
&& yylow1
< *yylow
)
690 yyfillin (yyvsp
, *yylow
, yylow1
);
696 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
697 * and top stack item YYVSP. YYLVALP points to place to put semantic
698 * value ($$), and yylocp points to place for location information
699 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
700 * yyerr for YYERROR, yyabort for YYABORT. */
702 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
704 YYLTYPE
* yylocp
]b4_location_if(, [ ATTRIBUTE_UNUSED
])[,
708 yybool yynormal ATTRIBUTE_UNUSED
= (yystack
->yysplitPoint
== NULL
);
712 # define yyerrok (yystack->yyerrState = 0)
714 # define YYACCEPT return yyaccept
716 # define YYABORT return yyabort
718 # define YYERROR return yyerrok, yyerr
720 # define YYRECOVERING (yystack->yyerrState != 0)
722 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
724 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
726 # define YYBACKUP(Token, Value) \
727 return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \
732 *yyvalp
= yyval_default
;
734 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
735 YYLLOC_DEFAULT (*yylocp
, yyvsp
- yyrhslen
, yyrhslen
);
750 /* Line __line__ of glr.c. */
751 b4_syncline([@oline@
], [@ofile@
])
756 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
758 /* `Use' the arguments. */
768 /* Bison grammar-table manipulation. */
770 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
772 /** Number of symbols composing the right hand side of rule #RULE. */
774 yyrhsLength (yyRuleNum yyrule
)
779 /** Left-hand-side symbol for rule #RULE. */
780 static inline yySymbol
781 yylhsNonterm (yyRuleNum yyrule
)
786 #define yyis_pact_ninf(yystate) \
787 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
789 ((yystate
) == YYPACT_NINF
))[
791 /** True iff LR state STATE has only a default reduction (regardless
794 yyisDefaultedState (yyStateNum yystate
)
796 return yyis_pact_ninf (yypact
[yystate
]);
799 /** The default reduction for STATE, assuming it has one. */
800 static inline yyRuleNum
801 yydefaultAction (yyStateNum yystate
)
803 return yydefact
[yystate
];
806 #define yyis_table_ninf(yytable_value) \
807 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
809 ((yytable_value
) == YYTABLE_NINF
))[
811 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
813 * R < 0: Reduce on rule -R.
815 * R > 0: Shift to state R.
816 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
817 * conflicting reductions.
820 yygetLRActions (yyStateNum yystate
, int yytoken
,
821 int* yyaction
, const short int** yyconflicts
)
823 int yyindex
= yypact
[yystate
] + yytoken
;
824 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
826 *yyaction
= -yydefact
[yystate
];
827 *yyconflicts
= yyconfl
;
829 else if (! yyis_table_ninf (yytable
[yyindex
]))
831 *yyaction
= yytable
[yyindex
];
832 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
837 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
841 static inline yyStateNum
842 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
845 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
846 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
849 return yydefgoto
[yylhs
- YYNTOKENS
];
853 yyisShiftAction (int yyaction
)
859 yyisErrorAction (int yyaction
)
861 return yyaction
== 0;
867 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
868 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
870 yySemanticOption
* yynewItem
;
871 yynewItem
= &yystack
->yynextFree
->yyoption
;
872 yystack
->yyspaceLeft
-= 1;
873 yystack
->yynextFree
+= 1;
874 yynewItem
->yyisState
= yyfalse
;
875 yynewItem
->yystate
= rhs
;
876 yynewItem
->yyrule
= yyrule
;
877 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
878 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
879 if (yystack
->yyspaceLeft
< YYHEADROOM
)
880 yyexpandGLRStack (yystack
]b4_pure_args
[);
885 /** Initialize SET to a singleton set containing an empty stack. */
887 yyinitStateSet (yyGLRStateSet
* yyset
)
890 yyset
->yycapacity
= 16;
891 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
892 yyset
->yystates
[0] = NULL
;
895 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
897 YYFREE (yyset
->yystates
);
900 /** Initialize STACK to a single empty stack, with total maximum
901 * capacity for all stacks of SIZE. */
903 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
905 yystack
->yyerrflag
= 0;
906 yystack
->yyerrState
= 0;
908 yystack
->yyspaceLeft
= yysize
;
909 yystack
->yynextFree
= yystack
->yyitems
=
910 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystack
->yynextFree
[0]);
911 yystack
->yysplitPoint
= NULL
;
912 yystack
->yylastDeleted
= NULL
;
913 yyinitStateSet (&yystack
->yytops
);
916 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
917 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
919 /** If STACK is expandable, extend it. WARNING: Pointers into the
920 stack from outside should be considered invalid after this call.
921 We always expand when there are 1 or fewer items left AFTER an
922 allocation, so that we can avoid having external pointers exist
923 across an allocation. */
925 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
927 #if YYSTACKEXPANDABLE
928 yyGLRStack yynewStack
;
929 yyGLRStackItem
* yyp0
, *yyp1
;
930 size_t yysize
, yynewSize
;
932 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
933 if (YYMAXDEPTH
<= yysize
)
934 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
935 yynewSize
= 2*yysize
;
936 if (YYMAXDEPTH
< yynewSize
)
937 yynewSize
= YYMAXDEPTH
;
938 yyinitGLRStack (&yynewStack
, yynewSize
);
939 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
941 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
944 if (*(yybool
*) yyp0
)
946 yyGLRState
* yys0
= &yyp0
->yystate
;
947 yyGLRState
* yys1
= &yyp1
->yystate
;
948 if (yys0
->yypred
!= NULL
)
950 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
951 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
952 yys1
->yysemantics
.yyfirstVal
=
953 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
957 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
958 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
959 if (yyv0
->yystate
!= NULL
)
960 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
961 if (yyv0
->yynext
!= NULL
)
962 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
965 if (yystack
->yysplitPoint
!= NULL
)
966 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
967 yystack
->yysplitPoint
, yystate
);
969 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
970 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
971 yystack
->yytops
.yystates
[yyn
] =
972 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
973 yystack
->yytops
.yystates
[yyn
], yystate
);
974 YYFREE (yystack
->yyitems
);
975 yystack
->yyitems
= yynewStack
.yyitems
;
976 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
977 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
981 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
986 yyfreeGLRStack (yyGLRStack
* yystack
)
988 YYFREE (yystack
->yyitems
);
989 yyfreeStateSet (&yystack
->yytops
);
992 /** Assuming that S is a GLRState somewhere on STACK, update the
993 * splitpoint of STACK, if needed, so that it is at least as deep as
996 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
998 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
999 yystack
->yysplitPoint
= yys
;
1002 /** Invalidate stack #K in STACK. */
1004 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
1006 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1007 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
1008 yystack
->yytops
.yystates
[yyk
] = NULL
;
1011 /** Undelete the last stack that was marked as deleted. Can only be
1012 done once after a deletion, and only when all other stacks have
1015 yyundeleteLastStack (yyGLRStack
* yystack
)
1017 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
1019 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
1020 yystack
->yytops
.yysize
= 1;
1021 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1022 yystack
->yylastDeleted
= NULL
;
1026 yyremoveDeletes (yyGLRStack
* yystack
)
1030 while (yyj
< yystack
->yytops
.yysize
)
1032 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
1036 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1038 yystack
->yytops
.yysize
-= 1;
1042 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
1045 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1046 (unsigned long int) yyi
, (unsigned long int) yyj
));
1054 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1055 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1057 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
1058 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
1060 yyGLRStackItem
* yynewItem
;
1062 yynewItem
= yystack
->yynextFree
;
1063 yystack
->yynextFree
+= 1;
1064 yystack
->yyspaceLeft
-= 1;
1065 yynewItem
->yystate
.yyisState
= yytrue
;
1066 yynewItem
->yystate
.yylrState
= yylrState
;
1067 yynewItem
->yystate
.yyposn
= yyposn
;
1068 yynewItem
->yystate
.yyresolved
= yytrue
;
1069 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1070 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1071 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1072 yynewItem
->yystate
.yyloc
= *yylocp
;
1073 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1074 yyexpandGLRStack (yystack
]b4_pure_args
[);
1077 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1078 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1079 * semantic value of YYRHS under the action for YYRULE. */
1081 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1082 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1084 yyGLRStackItem
* yynewItem
;
1086 yynewItem
= yystack
->yynextFree
;
1087 yynewItem
->yystate
.yyisState
= yytrue
;
1088 yynewItem
->yystate
.yylrState
= yylrState
;
1089 yynewItem
->yystate
.yyposn
= yyposn
;
1090 yynewItem
->yystate
.yyresolved
= yyfalse
;
1091 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1092 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1093 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1094 yystack
->yynextFree
+= 1;
1095 yystack
->yyspaceLeft
-= 1;
1096 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1099 /** Pop the symbols consumed by reduction #RULE from the top of stack
1100 * #K of STACK, and perform the appropriate semantic action on their
1101 * semantic values. Assumes that all ambiguities in semantic values
1102 * have been previously resolved. Set *VALP to the resulting value,
1103 * and *LOCP to the computed location (if any). Return value is as
1104 * for userAction. */
1105 static inline YYRESULTTAG
1106 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1107 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1109 int yynrhs
= yyrhsLength (yyrule
);
1111 if (yystack
->yysplitPoint
== NULL
)
1113 /* Standard special case: single stack. */
1114 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1115 YYASSERT (yyk
== 0);
1116 yystack
->yynextFree
-= yynrhs
;
1117 yystack
->yyspaceLeft
+= yynrhs
;
1118 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1119 return yyuserAction (yyrule
, yynrhs
, rhs
,
1120 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1126 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1127 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1128 = yystack
->yytops
.yystates
[yyk
];
1129 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1134 yyupdateSplit (yystack
, yys
);
1135 yystack
->yytops
.yystates
[yyk
] = yys
;
1136 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1137 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1142 # define YY_REDUCE_PRINT(K, Rule)
1144 # define YY_REDUCE_PRINT(K, Rule) \
1147 yy_reduce_print (K, Rule); \
1150 /*----------------------------------------------------------.
1151 | Report that the RULE is going to be reduced on stack #K. |
1152 `----------------------------------------------------------*/
1155 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1158 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu), ",
1159 (unsigned long int) yyk
, yyrule
- 1,
1160 (unsigned long int) yyrline
[yyrule
]);
1161 /* Print the symbols being reduced, and their result. */
1162 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1163 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1164 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1168 /** Pop items off stack #K of STACK according to grammar rule RULE,
1169 * and push back on the resulting nonterminal symbol. Perform the
1170 * semantic action associated with RULE and store its value with the
1171 * newly pushed state, if FORCEEVAL or if STACK is currently
1172 * unambiguous. Otherwise, store the deferred semantic action with
1173 * the new state. If the new state would have an identical input
1174 * position, LR state, and predecessor to an existing state on the stack,
1175 * it is identified with that existing state, eliminating stack #K from
1176 * the STACK. In this case, the (necessarily deferred) semantic value is
1177 * added to the options for the existing state's semantic value.
1179 static inline YYRESULTTAG
1180 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1181 yybool yyforceEval
]b4_pure_formals
[)
1183 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1185 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1190 YY_REDUCE_PRINT (yyk
, yyrule
);
1191 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1192 yyglrShift (yystack
, yyk
,
1193 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1194 yylhsNonterm (yyrule
)),
1195 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1201 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1202 yyStateNum yynewLRState
;
1204 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1210 yyupdateSplit (yystack
, yys
);
1211 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1213 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1214 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1215 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1216 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1218 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1219 yyp
= yystack
->yytops
.yystates
[yyi
];
1220 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1222 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1224 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1225 yymarkStackDeleted (yystack
, yyk
);
1226 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1227 (unsigned long int) yyk
,
1228 (unsigned long int) yyi
));
1234 yystack
->yytops
.yystates
[yyk
] = yys
;
1235 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1241 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1243 if (yystack
->yysplitPoint
== NULL
)
1245 YYASSERT (yyk
== 0);
1246 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1248 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1250 yystack
->yytops
.yycapacity
*= 2;
1251 yystack
->yytops
.yystates
=
1252 (yyGLRState
**) YYREALLOC (yystack
->yytops
.yystates
,
1253 (yystack
->yytops
.yycapacity
1254 * sizeof yystack
->yytops
.yystates
[0]));
1256 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1257 = yystack
->yytops
.yystates
[yyk
];
1258 yystack
->yytops
.yysize
+= 1;
1259 return yystack
->yytops
.yysize
-1;
1262 /** True iff Y0 and Y1 represent identical options at the top level.
1263 * That is, they represent the same rule applied to RHS symbols
1264 * that produce the same terminal symbols. */
1266 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1268 if (yyy0
->yyrule
== yyy1
->yyrule
)
1270 yyGLRState
*yys0
, *yys1
;
1272 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1273 yyn
= yyrhsLength (yyy0
->yyrule
);
1275 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1276 if (yys0
->yyposn
!= yys1
->yyposn
)
1284 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1285 * alternative semantic values for the RHS-symbols of Y1 into the
1286 * corresponding semantic value sets of the symbols of Y0. */
1288 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1290 yyGLRState
*yys0
, *yys1
;
1292 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1293 yyn
= yyrhsLength (yyy0
->yyrule
);
1295 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1298 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1300 yySemanticOption
* yyz
;
1301 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1304 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1308 /** Y0 and Y1 represent two possible actions to take in a given
1309 * parsing state; return 0 if no combination is possible,
1310 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1312 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1314 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1315 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1319 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1324 if (p0
== 0 || p1
== 0)
1333 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1334 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1335 YYLTYPE
* yylocp
]b4_user_formals
[);
1338 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1343 YYASSERT (yys
->yypred
);
1344 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1347 if (! yys
->yyresolved
)
1349 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1350 &yys
->yysemantics
.yysval
, &yys
->yyloc
1354 yys
->yyresolved
= yytrue
;
1361 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1362 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1364 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1367 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1368 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1369 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;
1370 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1371 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1372 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1377 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1379 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1382 yyGLRState
* yystates
[YYMAXRHS
];
1383 yyGLRState yyleftmost_state
;
1385 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1386 yystates
[yyi
] = yys
;
1389 yyleftmost_state
.yyposn
= 0;
1390 yystates
[0] = &yyleftmost_state
;
1395 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1396 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1397 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1400 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1401 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1402 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1403 (unsigned long int) yyx
->yystate
->yyposn
);
1404 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1406 if (yystates
[yyi
]->yyresolved
)
1408 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1409 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1410 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1412 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1413 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1414 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1415 (unsigned long int) yystates
[yyi
]->yyposn
);
1418 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1424 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1425 yyGLRStack
* yystack
]b4_pure_formals
[)
1427 /* `Unused' warnings. */
1432 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1433 YYFPRINTF (stderr
, "Option 1,\n");
1434 yyreportTree (yyx0
, 2);
1435 YYFPRINTF (stderr
, "\nOption 2,\n");
1436 yyreportTree (yyx1
, 2);
1437 YYFPRINTF (stderr
, "\n");
1439 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1443 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1444 * actions, and return the result. */
1446 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1447 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1449 yySemanticOption
* yybest
;
1450 yySemanticOption
* yyp
;
1453 yybest
= yyoptionList
;
1455 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1457 if (yyidenticalOptions (yybest
, yyp
))
1458 yymergeOptionSets (yybest
, yyp
);
1460 switch (yypreference (yybest
, yyp
))
1463 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1479 int yyprec
= yydprec
[yybest
->yyrule
];
1480 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1481 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1483 if (yyprec
== yydprec
[yyp
->yyrule
])
1487 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1488 yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1494 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1498 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1500 if (yystack
->yysplitPoint
!= NULL
)
1505 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1506 yys
!= yystack
->yysplitPoint
;
1507 yys
= yys
->yypred
, yyn
+= 1)
1509 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1516 yycompressStack (yyGLRStack
* yystack
)
1518 yyGLRState
* yyp
, *yyq
, *yyr
;
1520 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1523 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1524 yyp
!= yystack
->yysplitPoint
;
1525 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1528 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1529 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1530 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1531 yystack
->yysplitPoint
= NULL
;
1532 yystack
->yylastDeleted
= NULL
;
1536 yystack
->yynextFree
->yystate
= *yyr
;
1538 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1539 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1540 yystack
->yynextFree
+= 1;
1541 yystack
->yyspaceLeft
-= 1;
1546 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1547 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1551 const short int* yyconflicts
;
1553 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1555 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1557 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1558 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1560 YYASSERT (yystate
!= YYFINAL
);
1562 if (yyisDefaultedState (yystate
))
1564 yyrule
= yydefaultAction (yystate
);
1567 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1568 yymarkStackDeleted (yystack
, yyk
);
1571 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1575 if (*yytokenp
== YYEMPTY
)
1577 YYDPRINTF ((stderr
, "Reading a token: "));
1579 *yytokenp
= YYTRANSLATE (yychar
);
1580 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1582 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1584 while (*yyconflicts
!= 0)
1586 int yynewStack
= yysplitStack (yystack
, yyk
);
1587 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1589 YYCHK (yyglrReduce (yystack
, yynewStack
,
1590 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1591 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1592 yylvalp
, yyllocp
]b4_user_args
[));
1596 if (yyisShiftAction (yyaction
))
1598 YYDPRINTF ((stderr
, "On stack %d, ", yyk
));
1599 YY_SYMBOL_PRINT ("shifting", *yytokenp
, yylvalp
, yyllocp
);
1600 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1601 *yylvalp
, yyllocp
]b4_user_args
[);
1602 YYDPRINTF ((stderr
, ", now in state #%d\n",
1603 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1606 else if (yyisErrorAction (yyaction
))
1608 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1609 yymarkStackDeleted (yystack
, yyk
);
1613 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1620 yyreportSyntaxError (yyGLRStack
* yystack
,
1621 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1623 /* `Unused' warnings. */
1627 if (yystack
->yyerrState
== 0)
1630 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1632 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1633 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1636 const char* yyprefix
;
1640 /* Start YYX at -YYN if negative to avoid negative indexes in
1642 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1644 /* Stay within bounds of both yycheck and yytname. */
1645 int yychecklim
= YYLAST
- yyn
;
1646 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1649 yyprefix
= ", expecting ";
1650 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1651 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1653 yysize
+= strlen (yyprefix
) + strlen (yytokenName (yyx
));
1662 yysize
+= (sizeof ("syntax error, unexpected ")
1663 + strlen (yytokenName (*yytokenp
)));
1664 yymsg
= (char*) YYMALLOC (yysize
);
1668 sprintf (yyp
, "syntax error%s%s",
1669 (*yytokenp
== YYEMPTY
? "" : ", unexpected "),
1670 yytokenName (*yytokenp
));
1671 yyp
+= strlen (yyp
);
1674 yyprefix
= ", expecting ";
1675 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1676 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1678 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1679 yyp
+= strlen (yyp
);
1683 yyerror (]b4_lyyerror_args
[yymsg
);
1687 yyerror (]b4_lyyerror_args
["syntax error; also virtual memory exhausted");
1690 #endif /* YYERROR_VERBOSE */
1691 yyerror (]b4_lyyerror_args
["syntax error");
1696 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1697 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1698 value, and location of the look-ahead. */
1700 yyrecoverSyntaxError (yyGLRStack
* yystack
,
1702 YYLTYPE
* yyllocp
]b4_location_if(, [ ATTRIBUTE_UNUSED
])[
1705 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1709 if (yystack
->yyerrState
== 3)
1710 /* We just shifted the error token and (perhaps) took some
1711 reductions. Skip tokens until we can proceed. */
1714 if (*yytokenp
== YYEOF
)
1716 /* Now pop stack until empty and fail. */
1717 while (yystack
->yytops
.yystates
[0] != NULL
)
1719 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1720 ]b4_location_if([[ yystack
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
1721 yydestruct ("Error: popping",
1722 yystos
[yys
->yylrState
],
1723 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1724 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1725 yystack
->yynextFree
-= 1;
1726 yystack
->yyspaceLeft
+= 1;
1728 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1730 if (*yytokenp
!= YYEMPTY
)
1732 /* We throw away the lookahead, but the error range
1733 of the shifted error token must take it into account. */
1734 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1735 yyGLRStackItem yyerror_range
[3];
1736 yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;
1737 yyerror_range
[2].yystate
.yyloc
= *yyllocp
;
1738 YYLLOC_DEFAULT (yys
->yyloc
, yyerror_range
, 2);]])[
1739 yydestruct ("Error: discarding",
1740 *yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1742 YYDPRINTF ((stderr
, "Reading a token: "));
1744 *yytokenp
= YYTRANSLATE (yychar
);
1745 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1746 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1747 if (yyis_pact_ninf (yyj
))
1750 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1752 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1755 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1759 /* Reduce to one stack. */
1760 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1761 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1763 if (yyk
>= yystack
->yytops
.yysize
)
1764 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1765 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1766 yymarkStackDeleted (yystack
, yyk
);
1767 yyremoveDeletes (yystack
);
1768 yycompressStack (yystack
);
1770 /* Now pop stack until we find a state that shifts the error token. */
1771 yystack
->yyerrState
= 3;
1772 while (yystack
->yytops
.yystates
[0] != NULL
)
1774 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1775 yyj
= yypact
[yys
->yylrState
];
1776 if (! yyis_pact_ninf (yyj
))
1779 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1780 && yyisShiftAction (yytable
[yyj
]))
1782 /* Shift the error token having adjusted its location. */
1783 YYLTYPE yyerrloc
;]b4_location_if([[
1784 yystack
->yyerror_range
[2].yystate
.yyloc
= *yyllocp
;
1785 YYLLOC_DEFAULT (yyerrloc
, yystack
->yyerror_range
, 2);]])[
1786 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
1787 yylvalp
, &yyerrloc
);
1788 yyglrShift (yystack
, 0, yytable
[yyj
],
1789 yys
->yyposn
, *yylvalp
, &yyerrloc
]b4_user_args
[);
1790 yys
= yystack
->yytops
.yystates
[0];
1794 ]b4_location_if([[ yystack
->yyerror_range
[1].yystate
.yyloc
= yys
->yyloc
;]])[
1795 yydestruct ("Error: popping",
1796 yystos
[yys
->yylrState
],
1797 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1798 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1799 yystack
->yynextFree
-= 1;
1800 yystack
->yyspaceLeft
+= 1;
1802 if (yystack
->yytops
.yystates
[0] == NULL
)
1803 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1806 #define YYCHK1(YYE) \
1812 yystack.yyerrflag = 1; \
1815 yystack.yyerrflag = 0; \
1818 goto yyuser_error; \
1827 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1837 #define yychar (yystack.yyrawchar)
1840 YYSTYPE
* const yylvalp
= &yylval
;
1841 YYLTYPE
* const yyllocp
= &yylloc
;
1843 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1844 yystack
.yytokenp
= &yytoken
;
1846 YYDPRINTF ((stderr
, "Starting parse\n"));
1848 if (setjmp (yystack
.yyexception_buffer
) != 0)
1851 yylval
= yyval_default
;
1853 #if YYLTYPE_IS_TRIVIAL
1854 yylloc
.first_line
= yylloc
.last_line
= 1;
1855 yylloc
.first_column
= yylloc
.last_column
= 0;
1858 m4_ifdef([b4_initial_action
], [
1859 m4_pushdef([b4_at_dollar
], [yylval
])dnl
1860 m4_pushdef([b4_dollar_dollar
], [yylloc
])dnl
1861 /* User initialization code. */
1863 m4_popdef([b4_dollar_dollar
])dnl
1864 m4_popdef([b4_at_dollar
])dnl
1865 /* Line __line__ of glr.c. */
1866 b4_syncline([@oline@
], [@ofile@
])])dnl
1868 yyglrShift (&yystack
, 0, 0, 0, yylval
, &yylloc
]b4_user_args
[);
1874 /* For efficiency, we have two loops, the first of which is
1875 specialized to deterministic operation (single stack, no
1876 potential ambiguity). */
1882 const short int* yyconflicts
;
1884 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1885 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1886 if (yystate
== YYFINAL
)
1888 if (yyisDefaultedState (yystate
))
1890 yyrule
= yydefaultAction (yystate
);
1893 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
1894 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1897 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1901 if (yytoken
== YYEMPTY
)
1903 YYDPRINTF ((stderr
, "Reading a token: "));
1905 yytoken
= YYTRANSLATE (yychar
);
1906 YY_SYMBOL_PRINT ("Next token is", yytoken
, yylvalp
, yyllocp
);
1908 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1909 if (*yyconflicts
!= 0)
1911 if (yyisShiftAction (yyaction
))
1913 YY_SYMBOL_PRINT ("Shifting", yytoken
, yylvalp
, yyllocp
);
1914 if (yytoken
!= YYEOF
)
1917 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1918 yylval
, yyllocp
]b4_user_args
[);
1919 if (0 < yystack
.yyerrState
)
1920 yystack
.yyerrState
-= 1;
1922 else if (yyisErrorAction (yyaction
))
1924 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
1925 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1929 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1936 int yyn
= yystack
.yytops
.yysize
;
1937 for (yys
= 0; yys
< yyn
; yys
+= 1)
1938 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1939 yylvalp
, yyllocp
]b4_user_args
[));
1942 yyremoveDeletes (&yystack
);
1943 if (yystack
.yytops
.yysize
== 0)
1945 yyundeleteLastStack (&yystack
);
1946 if (yystack
.yytops
.yysize
== 0)
1947 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1948 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1949 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1950 ]b4_location_if([[ yystack
.yyerror_range
[1].yystate
.yyloc
= *yyllocp
;]])[
1951 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1954 else if (yystack
.yytops
.yysize
== 1)
1956 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1957 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1958 yycompressStack (&yystack
);
1964 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1965 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1968 /* On YYABORT, free the lookahead. */
1969 if (yystack
.yyerrflag
== 1 && yytoken
!= YYEMPTY
)
1970 yydestruct ("Error: discarding lookahead",
1971 yytoken
, yylvalp
]b4_location_if([, yyllocp
])[);
1973 yyfreeGLRStack (&yystack
);
1974 return yystack
.yyerrflag
;
1977 /* DEBUGGING ONLY */
1979 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1980 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1983 yy_yypstack (yyGLRState
* yys
)
1987 yy_yypstack (yys
->yypred
);
1988 fprintf (stderr
, " -> ");
1990 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long int) yys
->yyposn
);
1994 yypstates (yyGLRState
* yyst
)
1997 fprintf (stderr
, "<null>");
2000 fprintf (stderr
, "\n");
2004 yypstack (yyGLRStack
* yystack
, int yyk
)
2006 yypstates (yystack
->yytops
.yystates
[yyk
]);
2009 #define YYINDEX(YYX) \
2010 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
2014 yypdumpstack (yyGLRStack
* yystack
)
2016 yyGLRStackItem
* yyp
;
2018 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
2020 fprintf (stderr
, "%3lu. ", (unsigned long int) (yyp
- yystack
->yyitems
));
2021 if (*(yybool
*) yyp
)
2023 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2024 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2025 (unsigned long int) yyp
->yystate
.yyposn
,
2026 (long int) YYINDEX (yyp
->yystate
.yypred
));
2027 if (! yyp
->yystate
.yyresolved
)
2028 fprintf (stderr
, ", firstVal: %ld",
2029 (long int) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
2033 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2034 yyp
->yyoption
.yyrule
,
2035 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2036 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2038 fprintf (stderr
, "\n");
2040 fprintf (stderr
, "Tops:");
2041 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
2042 fprintf (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2043 (long int) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
2044 fprintf (stderr
, "\n");
2050 m4_if(b4_defines_flag
, 0, [],
2051 [@output @output_header_name@
2052 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003, 2004])
2054 b4_token_defines(b4_tokens
)
2056 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2057 m4_ifdef([b4_stype
],
2058 [b4_syncline([b4_stype_line
], [b4_filename
])
2059 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
2060 /* Line __line__ of glr.c. */
2061 b4_syncline([@oline@
], [@ofile@
])],
2062 [typedef int YYSTYPE
;])
2063 # define YYSTYPE_IS_DECLARED 1
2064 # define YYSTYPE_IS_TRIVIAL 1
2068 [extern YYSTYPE b4_prefix
[]lval
;])
2070 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2071 typedef struct YYLTYPE
2082 # define YYLTYPE_IS_DECLARED 1
2083 # define YYLTYPE_IS_TRIVIAL 1
2086 b4_location_if([b4_pure_if([],
2087 [extern YYLTYPE b4_prefix
[]lloc
;])