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) values used for initialization for null
209 right-hand sides. Unlike the standard yacc.c template,
210 here we set the default values of $$ and $@@ to zeroed-out
211 values. Since the default value of these quantities is undefined,
212 this behavior is technically correct. */
213 static YYSTYPE yyval_default
;
214 static YYLTYPE yyloc_default
;
216 /* Copy the second part of user declarations. */
219 ]/* Line __line__ of glr.c. */
220 b4_syncline([@oline@
], [@ofile@
])
226 # define YYMALLOC malloc
229 # define YYREALLOC realloc
235 typedef unsigned char yybool
;
244 #ifndef __attribute__
245 /* This feature is available in gcc versions 2.5 and later. */
246 # if !defined (__GNUC__) || __GNUC__ < 2 || \
247 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
248 # define __attribute__(Spec) /* empty */
253 # define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
256 #ifndef ATTRIBUTE_UNUSED
257 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
260 /* YYFINAL -- State number of the termination state. */
261 #define YYFINAL ]b4_final_state_number[
262 /* YYLAST -- Last index in YYTABLE. */
263 #define YYLAST ]b4_last[
265 /* YYNTOKENS -- Number of terminals. */
266 #define YYNTOKENS ]b4_tokens_number[
267 /* YYNNTS -- Number of nonterminals. */
268 #define YYNNTS ]b4_nterms_number[
269 /* YYNRULES -- Number of rules. */
270 #define YYNRULES ]b4_rules_number[
271 /* YYNRULES -- Number of states. */
272 #define YYNSTATES ]b4_states_number[
273 /* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
274 #define YYMAXRHS ]b4_r2_max[
275 /* YYMAXLEFT -- Maximum number of symbols to the left of a handle
276 accessed by $0, $-1, etc., in any rule. */
277 #define YYMAXLEFT ]b4_max_left_semantic_context[
279 /* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
280 #define YYUNDEFTOK ]b4_undef_token_number[
281 #define YYMAXUTOK ]b4_user_token_number_max[
283 #define YYTRANSLATE(YYX) \
284 ((YYX <= 0) ? YYEOF : \
285 (unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
287 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
288 static const ]b4_int_type_for([b4_translate
])[ yytranslate
[] =
294 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
296 static const ]b4_int_type_for([b4_prhs
])[ yyprhs
[] =
301 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
302 static const ]b4_int_type_for([b4_rhs
])[ yyrhs
[] =
307 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
308 static const ]b4_int_type_for([b4_rline
])[ yyrline
[] =
314 #if (YYDEBUG) || YYERROR_VERBOSE
315 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
316 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
317 static const char *const yytname
[] =
323 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
324 static const ]b4_int_type_for([b4_r1
])[ yyr1
[] =
329 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
330 static const ]b4_int_type_for([b4_r2
])[ yyr2
[] =
335 /* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
336 static const ]b4_int_type_for([b4_dprec
])[ yydprec
[] =
341 /* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
342 static const ]b4_int_type_for([b4_merger
])[ yymerger
[] =
347 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
348 doesn't specify something else to do. Zero means the default is an
350 static const ]b4_int_type_for([b4_defact
])[ yydefact
[] =
355 /* YYPDEFGOTO[NTERM-NUM]. */
356 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto
[] =
361 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
363 #define YYPACT_NINF ]b4_pact_ninf[
364 static const ]b4_int_type_for([b4_pact
])[ yypact
[] =
369 /* YYPGOTO[NTERM-NUM]. */
370 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto
[] =
375 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
376 positive, shift that token. If negative, reduce the rule which
377 number is the opposite. If zero, do what YYDEFACT says.
378 If YYTABLE_NINF, syntax error. */
379 #define YYTABLE_NINF ]b4_table_ninf[
380 static const ]b4_int_type_for([b4_table
])[ yytable
[] =
385 /* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
386 list of conflicting reductions corresponding to action entry for
387 state STATE-NUM in yytable. 0 means no conflicts. The list in
388 yyconfl is terminated by a rule number of 0. */
389 static const ]b4_int_type_for([b4_conflict_list_heads
])[ yyconflp
[] =
391 ]b4_conflict_list_heads
[
394 /* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
395 0, pointed into by YYCONFLP. */
396 ]dnl Do
not use b4_int_type_for here
, since there are places where
397 dnl pointers onto yyconfl are taken
, which type is
"short int *".
398 dnl We probably ought to introduce a type
for confl
.
399 [static const short int yyconfl
[] =
401 ]b4_conflicting_rules
[
404 static const ]b4_int_type_for([b4_check
])[ yycheck
[] =
409 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
410 symbol of state STATE-NUM. */
411 static const ]b4_int_type_for([b4_stos
])[ yystos
[] =
417 /* Prevent warning if -Wmissing-prototypes. */
418 ]b4_c_ansi_function_decl([yyparse
], [int], b4_parse_param
)[
420 /* Error token number */
423 /* YYLLOC_DEFAULT -- Compute the default location (before the actions
427 #define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc)
429 #ifndef YYLLOC_DEFAULT
430 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
431 ((yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line, \
432 (yyCurrent).first_column = YYRHSLOC(yyRhs, 1).first_column, \
433 (yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line, \
434 (yyCurrent).last_column = YYRHSLOC(yyRhs, YYN).last_column)
437 #ifndef YYLLOC_DEFAULT
438 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) ((void) 0)
443 /* YYLEX -- calling `yylex' with the right arguments. */
444 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
449 #define yynerrs (yystack->yyerrcnt)
451 #define yychar (yystack->yyrawchar)],
459 static const int YYEOF
= 0;
460 static const int YYEMPTY
= -2;
462 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
465 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
470 #if ! defined (YYFPRINTF)
471 # define YYFPRINTF fprintf
474 # define YYDPRINTF(Args) \
480 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
482 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
486 YYFPRINTF (stderr, "%s ", Title); \
487 yysymprint (stderr, \
488 Type, Value]b4_location_if([, Location])[); \
489 YYFPRINTF (stderr, "\n"); \
493 /* Nonzero means print parse trace. It is left uninitialized so that
494 multiple parsers can coexist. */
499 # define YYDPRINTF(Args)
500 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
502 #endif /* !YYDEBUG */
504 /* YYINITDEPTH -- initial size of the parser's stacks. */
506 # define YYINITDEPTH ]b4_stack_depth_init[
509 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
510 if the built-in stack extension method is used).
512 Do not make this value too large; the results are undefined if
513 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
514 evaluated with infinite-precision integer arithmetic. */
521 # define YYMAXDEPTH ]b4_stack_depth_max[
524 /* Minimum number of free items on the stack allowed after an
525 allocation. This is to allow allocation and initialization
526 to be completed by functions that call expandGLRStack before the
527 stack is expanded, thus insuring that all necessary pointers get
528 properly redirected to new data. */
531 #if (! defined (YYSTACKEXPANDABLE) \
532 && (! defined (__cplusplus) \
533 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
534 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
535 #define YYSTACKEXPANDABLE 1
537 #define YYSTACKEXPANDABLE 0
540 /** State numbers, as in LALR(1) machine */
541 typedef int yyStateNum
;
543 /** Rule numbers, as in LALR(1) machine */
544 typedef int yyRuleNum
;
546 /** Grammar symbol */
547 typedef short int yySymbol
;
549 /** Item references, as in LALR(1) machine */
550 typedef short int yyItemNum
;
552 typedef struct yyGLRState yyGLRState
;
553 typedef struct yySemanticOption yySemanticOption
;
554 typedef union yyGLRStackItem yyGLRStackItem
;
555 typedef struct yyGLRStack yyGLRStack
;
556 typedef struct yyGLRStateSet yyGLRStateSet
;
561 yyStateNum yylrState
;
565 yySemanticOption
* yyfirstVal
;
571 struct yyGLRStateSet
{
572 yyGLRState
** yystates
;
573 size_t yysize
, yycapacity
;
576 struct yySemanticOption
{
580 yySemanticOption
* yynext
;
583 union yyGLRStackItem
{
585 yySemanticOption yyoption
;
597 jmp_buf yyexception_buffer
;
598 yyGLRStackItem
* yyitems
;
599 yyGLRStackItem
* yynextFree
;
601 yyGLRState
* yysplitPoint
;
602 yyGLRState
* yylastDeleted
;
603 yyGLRStateSet yytops
;
606 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
607 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
608 static void yyfreeGLRStack (yyGLRStack
* yystack
);
611 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
613 yystack
->yyerrflag
= 1;
614 if (yyformat
!= NULL
)
618 va_start (yyap
, yyformat
);
619 vsprintf (yymsg
, yyformat
, yyap
);
620 yyerror (]b4_yyerror_args
[yymsg
);
622 longjmp (yystack
->yyexception_buffer
, 1);
625 #if YYDEBUG || YYERROR_VERBOSE
626 /** A printable representation of TOKEN. Valid until next call to
628 static inline const char*
629 yytokenName (yySymbol yytoken
)
631 if (yytoken
== YYEMPTY
)
634 return yytname
[yytoken
];
638 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
639 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
640 * containing the pointer to the next state in the chain. Assumes
641 * YYLOW1 < YYLOW0. */
642 static void yyfillin (yyGLRStackItem
*, int, int) ATTRIBUTE_UNUSED
;
644 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
648 s
= yyvsp
[yylow0
].yystate
.yypred
;
649 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
651 YYASSERT (s
->yyresolved
);
652 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
653 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
654 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
655 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
659 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
660 YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
661 For convenience, always return YYLOW1. */
662 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
665 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
667 if (!yynormal
&& yylow1
< *yylow
)
669 yyfillin (yyvsp
, *yylow
, yylow1
);
675 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
676 * and top stack item YYVSP. YYLVALP points to place to put semantic
677 * value ($$), and yylocp points to place for location information
678 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
679 * yyerr for YYERROR, yyabort for YYABORT. */
681 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
682 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
, yyGLRStack
* yystack
685 yybool yynormal ATTRIBUTE_UNUSED
= (yystack
->yysplitPoint
== NULL
);
689 # define yyerrok (yystack->yyerrState = 0)
691 # define YYACCEPT return yyaccept
693 # define YYABORT return yyabort
695 # define YYERROR return yyerrok, yyerr
697 # define YYRECOVERING (yystack->yyerrState != 0)
699 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
701 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
703 # define YYBACKUP(Token, Value) \
704 return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \
710 *yyvalp
= yyval_default
;
711 *yylocp
= yyloc_default
;
715 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
716 YYLLOC_DEFAULT (*yylocp
, yyvsp
- yyrhslen
, yyrhslen
);
733 /* Line __line__ of glr.c. */
734 b4_syncline([@oline@
], [@ofile@
])
739 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
741 /* `Use' the arguments. */
751 /* Bison grammar-table manipulation. */
753 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
755 /** Number of symbols composing the right hand side of rule #RULE. */
757 yyrhsLength (yyRuleNum yyrule
)
762 /** Left-hand-side symbol for rule #RULE. */
763 static inline yySymbol
764 yylhsNonterm (yyRuleNum yyrule
)
769 #define yyis_pact_ninf(yystate) \
770 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
772 ((yystate
) == YYPACT_NINF
))[
774 /** True iff LR state STATE has only a default reduction (regardless
777 yyisDefaultedState (yyStateNum yystate
)
779 return yyis_pact_ninf (yypact
[yystate
]);
782 /** The default reduction for STATE, assuming it has one. */
783 static inline yyRuleNum
784 yydefaultAction (yyStateNum yystate
)
786 return yydefact
[yystate
];
789 #define yyis_table_ninf(yytable_value) \
790 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
792 ((yytable_value
) == YYTABLE_NINF
))[
794 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
796 * R < 0: Reduce on rule -R.
798 * R > 0: Shift to state R.
799 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
800 * conflicting reductions.
803 yygetLRActions (yyStateNum yystate
, int yytoken
,
804 int* yyaction
, const short int** yyconflicts
)
806 int yyindex
= yypact
[yystate
] + yytoken
;
807 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
809 *yyaction
= -yydefact
[yystate
];
810 *yyconflicts
= yyconfl
;
812 else if (! yyis_table_ninf (yytable
[yyindex
]))
814 *yyaction
= yytable
[yyindex
];
815 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
820 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
824 static inline yyStateNum
825 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
828 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
829 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
832 return yydefgoto
[yylhs
- YYNTOKENS
];
836 yyisShiftAction (int yyaction
)
842 yyisErrorAction (int yyaction
)
844 return yyaction
== 0;
850 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
851 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
853 yySemanticOption
* yynewItem
;
854 yynewItem
= &yystack
->yynextFree
->yyoption
;
855 yystack
->yyspaceLeft
-= 1;
856 yystack
->yynextFree
+= 1;
857 yynewItem
->yyisState
= yyfalse
;
858 yynewItem
->yystate
= rhs
;
859 yynewItem
->yyrule
= yyrule
;
860 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
861 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
862 if (yystack
->yyspaceLeft
< YYHEADROOM
)
863 yyexpandGLRStack (yystack
]b4_pure_args
[);
868 /** Initialize SET to a singleton set containing an empty stack. */
870 yyinitStateSet (yyGLRStateSet
* yyset
)
873 yyset
->yycapacity
= 16;
874 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
875 yyset
->yystates
[0] = NULL
;
878 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
880 YYFREE (yyset
->yystates
);
883 /** Initialize STACK to a single empty stack, with total maximum
884 * capacity for all stacks of SIZE. */
886 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
888 yystack
->yyerrflag
= 0;
889 yystack
->yyerrState
= 0;
891 yystack
->yyspaceLeft
= yysize
;
892 yystack
->yynextFree
= yystack
->yyitems
=
893 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystack
->yynextFree
[0]);
894 yystack
->yysplitPoint
= NULL
;
895 yystack
->yylastDeleted
= NULL
;
896 yyinitStateSet (&yystack
->yytops
);
899 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
900 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
902 /** If STACK is expandable, extend it. WARNING: Pointers into the
903 stack from outside should be considered invalid after this call.
904 We always expand when there are 1 or fewer items left AFTER an
905 allocation, so that we can avoid having external pointers exist
906 across an allocation. */
908 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
910 #if YYSTACKEXPANDABLE
911 yyGLRStack yynewStack
;
912 yyGLRStackItem
* yyp0
, *yyp1
;
913 size_t yysize
, yynewSize
;
915 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
916 if (YYMAXDEPTH
<= yysize
)
917 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
918 yynewSize
= 2*yysize
;
919 if (YYMAXDEPTH
< yynewSize
)
920 yynewSize
= YYMAXDEPTH
;
921 yyinitGLRStack (&yynewStack
, yynewSize
);
922 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
924 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
927 if (*(yybool
*) yyp0
)
929 yyGLRState
* yys0
= &yyp0
->yystate
;
930 yyGLRState
* yys1
= &yyp1
->yystate
;
931 if (yys0
->yypred
!= NULL
)
933 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
934 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
935 yys1
->yysemantics
.yyfirstVal
=
936 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
940 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
941 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
942 if (yyv0
->yystate
!= NULL
)
943 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
944 if (yyv0
->yynext
!= NULL
)
945 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
948 if (yystack
->yysplitPoint
!= NULL
)
949 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
950 yystack
->yysplitPoint
, yystate
);
952 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
953 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
954 yystack
->yytops
.yystates
[yyn
] =
955 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
956 yystack
->yytops
.yystates
[yyn
], yystate
);
957 YYFREE (yystack
->yyitems
);
958 yystack
->yyitems
= yynewStack
.yyitems
;
959 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
960 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
964 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
969 yyfreeGLRStack (yyGLRStack
* yystack
)
971 YYFREE (yystack
->yyitems
);
972 yyfreeStateSet (&yystack
->yytops
);
975 /** Assuming that S is a GLRState somewhere on STACK, update the
976 * splitpoint of STACK, if needed, so that it is at least as deep as
979 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
981 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
982 yystack
->yysplitPoint
= yys
;
985 /** Invalidate stack #K in STACK. */
987 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
989 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
990 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
991 yystack
->yytops
.yystates
[yyk
] = NULL
;
994 /** Undelete the last stack that was marked as deleted. Can only be
995 done once after a deletion, and only when all other stacks have
998 yyundeleteLastStack (yyGLRStack
* yystack
)
1000 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
1002 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
1003 yystack
->yytops
.yysize
= 1;
1004 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1005 yystack
->yylastDeleted
= NULL
;
1009 yyremoveDeletes (yyGLRStack
* yystack
)
1013 while (yyj
< yystack
->yytops
.yysize
)
1015 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
1019 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1021 yystack
->yytops
.yysize
-= 1;
1025 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
1028 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1029 (unsigned long int) yyi
, (unsigned long int) yyj
));
1037 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1038 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1040 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
1041 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
1043 yyGLRStackItem
* yynewItem
;
1045 yynewItem
= yystack
->yynextFree
;
1046 yystack
->yynextFree
+= 1;
1047 yystack
->yyspaceLeft
-= 1;
1048 yynewItem
->yystate
.yyisState
= yytrue
;
1049 yynewItem
->yystate
.yylrState
= yylrState
;
1050 yynewItem
->yystate
.yyposn
= yyposn
;
1051 yynewItem
->yystate
.yyresolved
= yytrue
;
1052 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1053 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1054 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1055 yynewItem
->yystate
.yyloc
= *yylocp
;
1056 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1057 yyexpandGLRStack (yystack
]b4_pure_args
[);
1060 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1061 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1062 * semantic value of YYRHS under the action for YYRULE. */
1064 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1065 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1067 yyGLRStackItem
* yynewItem
;
1069 yynewItem
= yystack
->yynextFree
;
1070 yynewItem
->yystate
.yyisState
= yytrue
;
1071 yynewItem
->yystate
.yylrState
= yylrState
;
1072 yynewItem
->yystate
.yyposn
= yyposn
;
1073 yynewItem
->yystate
.yyresolved
= yyfalse
;
1074 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1075 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1076 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1077 yystack
->yynextFree
+= 1;
1078 yystack
->yyspaceLeft
-= 1;
1079 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1082 /** Pop the symbols consumed by reduction #RULE from the top of stack
1083 * #K of STACK, and perform the appropriate semantic action on their
1084 * semantic values. Assumes that all ambiguities in semantic values
1085 * have been previously resolved. Set *VALP to the resulting value,
1086 * and *LOCP to the computed location (if any). Return value is as
1087 * for userAction. */
1088 static inline YYRESULTTAG
1089 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1090 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1092 int yynrhs
= yyrhsLength (yyrule
);
1094 if (yystack
->yysplitPoint
== NULL
)
1096 /* Standard special case: single stack. */
1097 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1098 YYASSERT (yyk
== 0);
1099 yystack
->yynextFree
-= yynrhs
;
1100 yystack
->yyspaceLeft
+= yynrhs
;
1101 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1102 return yyuserAction (yyrule
, yynrhs
, rhs
,
1103 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1109 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1110 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1111 = yystack
->yytops
.yystates
[yyk
];
1112 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1117 yyupdateSplit (yystack
, yys
);
1118 yystack
->yytops
.yystates
[yyk
] = yys
;
1119 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1120 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1125 # define YY_REDUCE_PRINT(K, Rule)
1127 # define YY_REDUCE_PRINT(K, Rule) \
1130 yy_reduce_print (K, Rule); \
1133 /*----------------------------------------------------------.
1134 | Report that the RULE is going to be reduced on stack #K. |
1135 `----------------------------------------------------------*/
1138 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1141 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu), ",
1142 (unsigned long int) yyk
, yyrule
- 1,
1143 (unsigned long int) yyrline
[yyrule
]);
1144 /* Print the symbols being reduced, and their result. */
1145 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1146 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1147 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1151 /** Pop items off stack #K of STACK according to grammar rule RULE,
1152 * and push back on the resulting nonterminal symbol. Perform the
1153 * semantic action associated with RULE and store its value with the
1154 * newly pushed state, if FORCEEVAL or if STACK is currently
1155 * unambiguous. Otherwise, store the deferred semantic action with
1156 * the new state. If the new state would have an identical input
1157 * position, LR state, and predecessor to an existing state on the stack,
1158 * it is identified with that existing state, eliminating stack #K from
1159 * the STACK. In this case, the (necessarily deferred) semantic value is
1160 * added to the options for the existing state's semantic value.
1162 static inline YYRESULTTAG
1163 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1164 yybool yyforceEval
]b4_pure_formals
[)
1166 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1168 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1173 YY_REDUCE_PRINT (yyk
, yyrule
);
1174 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1175 yyglrShift (yystack
, yyk
,
1176 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1177 yylhsNonterm (yyrule
)),
1178 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1184 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1185 yyStateNum yynewLRState
;
1187 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1193 yyupdateSplit (yystack
, yys
);
1194 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1196 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1197 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1198 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1199 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1201 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1202 yyp
= yystack
->yytops
.yystates
[yyi
];
1203 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1205 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1207 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1208 yymarkStackDeleted (yystack
, yyk
);
1209 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1210 (unsigned long int) yyk
,
1211 (unsigned long int) yyi
));
1217 yystack
->yytops
.yystates
[yyk
] = yys
;
1218 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1224 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1226 if (yystack
->yysplitPoint
== NULL
)
1228 YYASSERT (yyk
== 0);
1229 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1231 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1233 yystack
->yytops
.yycapacity
*= 2;
1234 yystack
->yytops
.yystates
=
1235 (yyGLRState
**) YYREALLOC (yystack
->yytops
.yystates
,
1236 (yystack
->yytops
.yycapacity
1237 * sizeof yystack
->yytops
.yystates
[0]));
1239 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1240 = yystack
->yytops
.yystates
[yyk
];
1241 yystack
->yytops
.yysize
+= 1;
1242 return yystack
->yytops
.yysize
-1;
1245 /** True iff Y0 and Y1 represent identical options at the top level.
1246 * That is, they represent the same rule applied to RHS symbols
1247 * that produce the same terminal symbols. */
1249 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1251 if (yyy0
->yyrule
== yyy1
->yyrule
)
1253 yyGLRState
*yys0
, *yys1
;
1255 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1256 yyn
= yyrhsLength (yyy0
->yyrule
);
1258 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1259 if (yys0
->yyposn
!= yys1
->yyposn
)
1267 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1268 * alternative semantic values for the RHS-symbols of Y1 into the
1269 * corresponding semantic value sets of the symbols of Y0. */
1271 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1273 yyGLRState
*yys0
, *yys1
;
1275 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1276 yyn
= yyrhsLength (yyy0
->yyrule
);
1278 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1281 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1283 yySemanticOption
* yyz
;
1284 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1287 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1291 /** Y0 and Y1 represent two possible actions to take in a given
1292 * parsing state; return 0 if no combination is possible,
1293 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1295 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1297 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1298 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1302 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1307 if (p0
== 0 || p1
== 0)
1316 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1317 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1318 YYLTYPE
* yylocp
]b4_user_formals
[);
1321 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1326 YYASSERT (yys
->yypred
);
1327 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1330 if (! yys
->yyresolved
)
1332 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1333 &yys
->yysemantics
.yysval
, &yys
->yyloc
1337 yys
->yyresolved
= yytrue
;
1344 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1345 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1347 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1350 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1351 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1352 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;
1353 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1354 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1355 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1360 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1362 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1365 yyGLRState
* yystates
[YYMAXRHS
];
1366 yyGLRState yyleftmost_state
;
1368 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1369 yystates
[yyi
] = yys
;
1372 yyleftmost_state
.yyposn
= 0;
1373 yystates
[0] = &yyleftmost_state
;
1378 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1379 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1380 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1383 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1384 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1385 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1386 (unsigned long int) yyx
->yystate
->yyposn
);
1387 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1389 if (yystates
[yyi
]->yyresolved
)
1391 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1392 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1393 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1395 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1396 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1397 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1398 (unsigned long int) yystates
[yyi
]->yyposn
);
1401 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1407 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1408 yyGLRStack
* yystack
]b4_pure_formals
[)
1410 /* `Unused' warnings. */
1415 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1416 YYFPRINTF (stderr
, "Option 1,\n");
1417 yyreportTree (yyx0
, 2);
1418 YYFPRINTF (stderr
, "\nOption 2,\n");
1419 yyreportTree (yyx1
, 2);
1420 YYFPRINTF (stderr
, "\n");
1422 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1426 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1427 * actions, and return the result. */
1429 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1430 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1432 yySemanticOption
* yybest
;
1433 yySemanticOption
* yyp
;
1436 yybest
= yyoptionList
;
1438 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1440 if (yyidenticalOptions (yybest
, yyp
))
1441 yymergeOptionSets (yybest
, yyp
);
1443 switch (yypreference (yybest
, yyp
))
1446 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1462 int yyprec
= yydprec
[yybest
->yyrule
];
1463 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1464 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1466 if (yyprec
== yydprec
[yyp
->yyrule
])
1470 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1471 yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1477 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1481 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1483 if (yystack
->yysplitPoint
!= NULL
)
1488 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1489 yys
!= yystack
->yysplitPoint
;
1490 yys
= yys
->yypred
, yyn
+= 1)
1492 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1499 yycompressStack (yyGLRStack
* yystack
)
1501 yyGLRState
* yyp
, *yyq
, *yyr
;
1503 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1506 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1507 yyp
!= yystack
->yysplitPoint
;
1508 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1511 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1512 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1513 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1514 yystack
->yysplitPoint
= NULL
;
1515 yystack
->yylastDeleted
= NULL
;
1519 yystack
->yynextFree
->yystate
= *yyr
;
1521 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1522 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1523 yystack
->yynextFree
+= 1;
1524 yystack
->yyspaceLeft
-= 1;
1529 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1530 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1534 const short int* yyconflicts
;
1536 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1538 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1540 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1541 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1543 YYASSERT (yystate
!= YYFINAL
);
1545 if (yyisDefaultedState (yystate
))
1547 yyrule
= yydefaultAction (yystate
);
1550 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1551 yymarkStackDeleted (yystack
, yyk
);
1554 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1558 if (*yytokenp
== YYEMPTY
)
1560 YYDPRINTF ((stderr
, "Reading a token: "));
1562 *yytokenp
= YYTRANSLATE (yychar
);
1563 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1565 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1567 while (*yyconflicts
!= 0)
1569 int yynewStack
= yysplitStack (yystack
, yyk
);
1570 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1572 YYCHK (yyglrReduce (yystack
, yynewStack
,
1573 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1574 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1575 yylvalp
, yyllocp
]b4_user_args
[));
1579 if (yyisShiftAction (yyaction
))
1581 YYDPRINTF ((stderr
, "Shifting token %s on stack %d, ",
1582 yytokenName (*yytokenp
), yyk
));
1583 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1584 *yylvalp
, yyllocp
]b4_user_args
[);
1585 YYDPRINTF ((stderr
, "which is now in state #%d\n",
1586 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1589 else if (yyisErrorAction (yyaction
))
1591 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1592 yymarkStackDeleted (yystack
, yyk
);
1596 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1603 yyreportSyntaxError (yyGLRStack
* yystack
,
1604 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1606 /* `Unused' warnings. */
1610 if (yystack
->yyerrState
== 0)
1613 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1615 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1616 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1619 const char* yyprefix
;
1623 /* Start YYX at -YYN if negative to avoid negative indexes in
1625 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1627 /* Stay within bounds of both yycheck and yytname. */
1628 int yychecklim
= YYLAST
- yyn
;
1629 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1632 yyprefix
= ", expecting ";
1633 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1634 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1636 yysize
+= strlen (yyprefix
) + strlen (yytokenName (yyx
));
1645 yysize
+= (sizeof ("syntax error, unexpected ")
1646 + strlen (yytokenName (*yytokenp
)));
1647 yymsg
= (char*) YYMALLOC (yysize
);
1651 sprintf (yyp
, "syntax error%s%s",
1652 (*yytokenp
== YYEMPTY
? "" : ", unexpected "),
1653 yytokenName (*yytokenp
));
1654 yyp
+= strlen (yyp
);
1657 yyprefix
= ", expecting ";
1658 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1659 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1661 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1662 yyp
+= strlen (yyp
);
1666 yyerror (]b4_lyyerror_args
[yymsg
);
1670 yyerror (]b4_lyyerror_args
["syntax error; also virtual memory exhausted");
1673 #endif /* YYERROR_VERBOSE */
1674 yyerror (]b4_lyyerror_args
["syntax error");
1679 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1680 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1681 value, and location of the look-ahead. */
1683 yyrecoverSyntaxError (yyGLRStack
* yystack
,
1684 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1686 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1690 if (yystack
->yyerrState
== 3)
1691 /* We just shifted the error token and (perhaps) took some
1692 reductions. Skip tokens until we can proceed. */
1695 if (*yytokenp
== YYEOF
)
1697 /* Now pop stack until empty and fail. */
1698 while (yystack
->yytops
.yystates
[0] != NULL
)
1700 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1701 YY_SYMBOL_PRINT ("Error: popping",
1702 yystos
[yys
->yylrState
],
1703 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1704 yydestruct (yystos
[yys
->yylrState
],
1705 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1706 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1707 yystack
->yynextFree
-= 1;
1708 yystack
->yyspaceLeft
+= 1;
1710 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1712 if (*yytokenp
!= YYEMPTY
)
1714 YY_SYMBOL_PRINT ("Error: discarding", *yytokenp
, yylvalp
, yyllocp
);
1715 yydestruct (*yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1717 YYDPRINTF ((stderr
, "Reading a token: "));
1719 *yytokenp
= YYTRANSLATE (yychar
);
1720 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1721 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1722 if (yyis_pact_ninf (yyj
))
1725 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1727 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1730 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1734 /* Reduce to one stack. */
1735 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1736 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1738 if (yyk
>= yystack
->yytops
.yysize
)
1739 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1740 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1741 yymarkStackDeleted (yystack
, yyk
);
1742 yyremoveDeletes (yystack
);
1743 yycompressStack (yystack
);
1745 /* Now pop stack until we find a state that shifts the error token. */
1746 yystack
->yyerrState
= 3;
1747 while (yystack
->yytops
.yystates
[0] != NULL
)
1749 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1750 yyj
= yypact
[yys
->yylrState
];
1751 if (! yyis_pact_ninf (yyj
))
1754 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1755 && yyisShiftAction (yytable
[yyj
]))
1757 YYDPRINTF ((stderr
, "Shifting error token, "));
1758 yyglrShift (yystack
, 0, yytable
[yyj
],
1759 yys
->yyposn
, *yylvalp
, yyllocp
]b4_user_args
[);
1763 YY_SYMBOL_PRINT ("Error: popping",
1764 yystos
[yys
->yylrState
],
1765 &yys
->yysemantics
.yysval
, &yys
->yyloc
);
1766 yydestruct (yystos
[yys
->yylrState
],
1767 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1768 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1769 yystack
->yynextFree
-= 1;
1770 yystack
->yyspaceLeft
+= 1;
1772 if (yystack
->yytops
.yystates
[0] == NULL
)
1773 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1776 #define YYCHK1(YYE) \
1782 yystack.yyerrflag = 1; \
1785 yystack.yyerrflag = 0; \
1788 goto yyuser_error; \
1797 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1807 #define yychar (yystack.yyrawchar)
1810 YYSTYPE
* const yylvalp
= &yylval
;
1811 YYLTYPE
* const yyllocp
= &yylloc
;
1813 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1814 yystack
.yytokenp
= &yytoken
;
1816 YYDPRINTF ((stderr
, "Starting parse\n"));
1818 if (setjmp (yystack
.yyexception_buffer
) != 0)
1821 yyglrShift (&yystack
, 0, 0, 0, yyval_default
, &yyloc_default
]b4_user_args
[);
1827 /* For efficiency, we have two loops, the first of which is
1828 specialized to deterministic operation (single stack, no
1829 potential ambiguity). */
1835 const short int* yyconflicts
;
1837 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1838 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1839 if (yystate
== YYFINAL
)
1841 if (yyisDefaultedState (yystate
))
1843 yyrule
= yydefaultAction (yystate
);
1846 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1849 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1853 if (yytoken
== YYEMPTY
)
1855 YYDPRINTF ((stderr
, "Reading a token: "));
1857 yytoken
= YYTRANSLATE (yychar
);
1858 YY_SYMBOL_PRINT ("Next token is", yytoken
, yylvalp
, yyllocp
);
1860 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1861 if (*yyconflicts
!= 0)
1863 if (yyisShiftAction (yyaction
))
1865 YYDPRINTF ((stderr
, "Shifting token %s, ",
1866 yytokenName (yytoken
)));
1867 if (yytoken
!= YYEOF
)
1870 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1871 yylval
, yyllocp
]b4_user_args
[);
1872 if (0 < yystack
.yyerrState
)
1873 yystack
.yyerrState
-= 1;
1875 else if (yyisErrorAction (yyaction
))
1877 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1881 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1888 int yyn
= yystack
.yytops
.yysize
;
1889 for (yys
= 0; yys
< yyn
; yys
+= 1)
1890 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1891 yylvalp
, yyllocp
]b4_user_args
[));
1894 yyremoveDeletes (&yystack
);
1895 if (yystack
.yytops
.yysize
== 0)
1897 yyundeleteLastStack (&yystack
);
1898 if (yystack
.yytops
.yysize
== 0)
1899 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1900 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1901 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1902 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1905 else if (yystack
.yytops
.yysize
== 1)
1907 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1908 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1909 yycompressStack (&yystack
);
1915 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1916 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1921 yyfreeGLRStack (&yystack
);
1922 return yystack
.yyerrflag
;
1925 /* DEBUGGING ONLY */
1927 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1928 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1931 yy_yypstack (yyGLRState
* yys
)
1935 yy_yypstack (yys
->yypred
);
1936 fprintf (stderr
, " -> ");
1938 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long int) yys
->yyposn
);
1942 yypstates (yyGLRState
* yyst
)
1945 fprintf (stderr
, "<null>");
1948 fprintf (stderr
, "\n");
1952 yypstack (yyGLRStack
* yystack
, int yyk
)
1954 yypstates (yystack
->yytops
.yystates
[yyk
]);
1957 #define YYINDEX(YYX) \
1958 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
1962 yypdumpstack (yyGLRStack
* yystack
)
1964 yyGLRStackItem
* yyp
;
1966 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
1968 fprintf (stderr
, "%3lu. ", (unsigned long int) (yyp
- yystack
->yyitems
));
1969 if (*(yybool
*) yyp
)
1971 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
1972 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
1973 (unsigned long int) yyp
->yystate
.yyposn
,
1974 (long int) YYINDEX (yyp
->yystate
.yypred
));
1975 if (! yyp
->yystate
.yyresolved
)
1976 fprintf (stderr
, ", firstVal: %ld",
1977 (long int) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
1981 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
1982 yyp
->yyoption
.yyrule
,
1983 (long int) YYINDEX (yyp
->yyoption
.yystate
),
1984 (long int) YYINDEX (yyp
->yyoption
.yynext
));
1986 fprintf (stderr
, "\n");
1988 fprintf (stderr
, "Tops:");
1989 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1990 fprintf (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
1991 (long int) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
1992 fprintf (stderr
, "\n");
1998 m4_if(b4_defines_flag
, 0, [],
1999 [@output @output_header_name@
2000 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003, 2004])
2002 b4_token_defines(b4_tokens
)
2004 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2005 m4_ifdef([b4_stype
],
2006 [b4_syncline([b4_stype_line
], [b4_filename
])
2007 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
2008 /* Line __line__ of glr.c. */
2009 b4_syncline([@oline@
], [@ofile@
])],
2010 [typedef int YYSTYPE
;])
2011 # define YYSTYPE_IS_DECLARED 1
2012 # define YYSTYPE_IS_TRIVIAL 1
2016 [extern YYSTYPE b4_prefix
[]lval
;])
2018 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2019 typedef struct YYLTYPE
2030 # define YYLTYPE_IS_DECLARED 1
2031 # define YYLTYPE_IS_TRIVIAL 1
2034 b4_location_if([m4_if(b4_pure
, [0],
2035 [extern YYLTYPE b4_prefix
[]lloc
;])