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 -- Set CURRENT to span from RHS[1] to RHS[N].
424 If N is 0, then set CURRENT to the empty location which ends
425 the previous symbol: RHS[0] (always defined). */
428 #ifndef YYLLOC_DEFAULT
429 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) \
433 (yyCurrent).first_line = YYRHSLOC(yyRhs, 1).first_line; \
434 (yyCurrent).first_column = YYRHSLOC(yyRhs, 1).first_column; \
435 (yyCurrent).last_line = YYRHSLOC(yyRhs, YYN).last_line; \
436 (yyCurrent).last_column = YYRHSLOC(yyRhs, YYN).last_column; \
440 (yyCurrent).first_line = YYRHSLOC(yyRhs, 0).last_line; \
441 (yyCurrent).first_column = YYRHSLOC(yyRhs, 0).last_column; \
442 (yyCurrent).last_line = YYRHSLOC(yyRhs, 0).last_line; \
443 (yyCurrent).last_column = YYRHSLOC(yyRhs, 0).last_column; \
447 /* YY_LOCATION_PRINT -- Print the location on the stream.
448 This macro was not mandated originally: define only if we know
449 we won't break user code: when these are the locations we know. */
451 # define YY_LOCATION_PRINT(File, Loc) \
452 fprintf (File, "%d.%d-%d.%d", \
453 (Loc).first_line, (Loc).first_column, \
454 (Loc).last_line, (Loc).last_column)
457 #ifndef YYLLOC_DEFAULT
458 # define YYLLOC_DEFAULT(yyCurrent, yyRhs, YYN) ((void) 0)
462 #ifndef YY_LOCATION_PRINT
463 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
467 /* YYLEX -- calling `yylex' with the right arguments. */
468 #define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
473 #define yynerrs (yystack->yyerrcnt)
475 #define yychar (yystack->yyrawchar)],
483 static const int YYEOF
= 0;
484 static const int YYEMPTY
= -2;
486 typedef enum { yyok
, yyaccept
, yyabort
, yyerr
} YYRESULTTAG
;
489 do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; } \
494 #if ! defined (YYFPRINTF)
495 # define YYFPRINTF fprintf
498 # define YYDPRINTF(Args) \
504 ]b4_yysymprint_generate([b4_c_ansi_function_def
])[
506 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
510 YYFPRINTF (stderr, "%s ", Title); \
511 yysymprint (stderr, \
512 Type, Value]b4_location_if([, Location])[); \
513 YYFPRINTF (stderr, "\n"); \
517 /* Nonzero means print parse trace. It is left uninitialized so that
518 multiple parsers can coexist. */
523 # define YYDPRINTF(Args)
524 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
526 #endif /* !YYDEBUG */
528 /* YYINITDEPTH -- initial size of the parser's stacks. */
530 # define YYINITDEPTH ]b4_stack_depth_init[
533 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
534 if the built-in stack extension method is used).
536 Do not make this value too large; the results are undefined if
537 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
538 evaluated with infinite-precision integer arithmetic. */
545 # define YYMAXDEPTH ]b4_stack_depth_max[
548 /* Minimum number of free items on the stack allowed after an
549 allocation. This is to allow allocation and initialization
550 to be completed by functions that call expandGLRStack before the
551 stack is expanded, thus insuring that all necessary pointers get
552 properly redirected to new data. */
555 #if (! defined (YYSTACKEXPANDABLE) \
556 && (! defined (__cplusplus) \
557 || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \
558 && ]])[defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
559 #define YYSTACKEXPANDABLE 1
561 #define YYSTACKEXPANDABLE 0
564 /** State numbers, as in LALR(1) machine */
565 typedef int yyStateNum
;
567 /** Rule numbers, as in LALR(1) machine */
568 typedef int yyRuleNum
;
570 /** Grammar symbol */
571 typedef short int yySymbol
;
573 /** Item references, as in LALR(1) machine */
574 typedef short int yyItemNum
;
576 typedef struct yyGLRState yyGLRState
;
577 typedef struct yySemanticOption yySemanticOption
;
578 typedef union yyGLRStackItem yyGLRStackItem
;
579 typedef struct yyGLRStack yyGLRStack
;
580 typedef struct yyGLRStateSet yyGLRStateSet
;
585 yyStateNum yylrState
;
589 yySemanticOption
* yyfirstVal
;
595 struct yyGLRStateSet
{
596 yyGLRState
** yystates
;
597 size_t yysize
, yycapacity
;
600 struct yySemanticOption
{
604 yySemanticOption
* yynext
;
607 union yyGLRStackItem
{
609 yySemanticOption yyoption
;
615 ]b4_location_if([[ /* To compute the location of the error token, */
616 YYLTYPE yyerror_range
[2];]])[
623 jmp_buf yyexception_buffer
;
624 yyGLRStackItem
* yyitems
;
625 yyGLRStackItem
* yynextFree
;
627 yyGLRState
* yysplitPoint
;
628 yyGLRState
* yylastDeleted
;
629 yyGLRStateSet yytops
;
632 static void yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
);
633 static void yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[);
634 static void yyfreeGLRStack (yyGLRStack
* yystack
);
637 yyFail (yyGLRStack
* yystack
]b4_pure_formals
[, const char* yyformat
, ...)
639 yystack
->yyerrflag
= 1;
640 if (yyformat
!= NULL
)
644 va_start (yyap
, yyformat
);
645 vsprintf (yymsg
, yyformat
, yyap
);
646 yyerror (]b4_yyerror_args
[yymsg
);
648 longjmp (yystack
->yyexception_buffer
, 1);
651 #if YYDEBUG || YYERROR_VERBOSE
652 /** A printable representation of TOKEN. Valid until next call to
654 static inline const char*
655 yytokenName (yySymbol yytoken
)
657 if (yytoken
== YYEMPTY
)
660 return yytname
[yytoken
];
664 /** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
665 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
666 * containing the pointer to the next state in the chain. Assumes
667 * YYLOW1 < YYLOW0. */
668 static void yyfillin (yyGLRStackItem
*, int, int) ATTRIBUTE_UNUSED
;
670 yyfillin (yyGLRStackItem
*yyvsp
, int yylow0
, int yylow1
)
674 s
= yyvsp
[yylow0
].yystate
.yypred
;
675 for (i
= yylow0
-1; i
>= yylow1
; i
-= 1)
677 YYASSERT (s
->yyresolved
);
678 yyvsp
[i
].yystate
.yyresolved
= yytrue
;
679 yyvsp
[i
].yystate
.yysemantics
.yysval
= s
->yysemantics
.yysval
;
680 yyvsp
[i
].yystate
.yyloc
= s
->yyloc
;
681 s
= yyvsp
[i
].yystate
.yypred
= s
->yypred
;
685 /* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
686 YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
687 For convenience, always return YYLOW1. */
688 static inline int yyfill (yyGLRStackItem
*, int *, int, yybool
)
691 yyfill (yyGLRStackItem
*yyvsp
, int *yylow
, int yylow1
, yybool yynormal
)
693 if (!yynormal
&& yylow1
< *yylow
)
695 yyfillin (yyvsp
, *yylow
, yylow1
);
701 /** Perform user action for rule number YYN, with RHS length YYRHSLEN,
702 * and top stack item YYVSP. YYLVALP points to place to put semantic
703 * value ($$), and yylocp points to place for location information
704 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
705 * yyerr for YYERROR, yyabort for YYABORT. */
707 yyuserAction (yyRuleNum yyn
, int yyrhslen
, yyGLRStackItem
* yyvsp
,
708 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
, yyGLRStack
* yystack
711 yybool yynormal ATTRIBUTE_UNUSED
= (yystack
->yysplitPoint
== NULL
);
715 # define yyerrok (yystack->yyerrState = 0)
717 # define YYACCEPT return yyaccept
719 # define YYABORT return yyabort
721 # define YYERROR return yyerrok, yyerr
723 # define YYRECOVERING (yystack->yyerrState != 0)
725 # define yyclearin (yychar = *(yystack->yytokenp) = YYEMPTY)
727 # define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
729 # define YYBACKUP(Token, Value) \
730 return yyerror (]b4_yyerror_args["syntax error: cannot back up"), \
735 *yyvalp
= yyval_default
;
737 *yyvalp
= yyvsp
[YYFILL (1-yyrhslen
)].yystate
.yysemantics
.yysval
;
738 # define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK].yystate.yyloc)
739 YYLLOC_DEFAULT (*yylocp
, yyvsp
- yyrhslen
, yyrhslen
);
755 /* Line __line__ of glr.c. */
756 b4_syncline([@oline@
], [@ofile@
])
761 yyuserMerge (int yyn
, YYSTYPE
* yy0
, YYSTYPE
* yy1
)
763 /* `Use' the arguments. */
773 /* Bison grammar-table manipulation. */
775 ]b4_yydestruct_generate([b4_c_ansi_function_def
])[
777 /** Number of symbols composing the right hand side of rule #RULE. */
779 yyrhsLength (yyRuleNum yyrule
)
784 /** Left-hand-side symbol for rule #RULE. */
785 static inline yySymbol
786 yylhsNonterm (yyRuleNum yyrule
)
791 #define yyis_pact_ninf(yystate) \
792 ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
794 ((yystate
) == YYPACT_NINF
))[
796 /** True iff LR state STATE has only a default reduction (regardless
799 yyisDefaultedState (yyStateNum yystate
)
801 return yyis_pact_ninf (yypact
[yystate
]);
804 /** The default reduction for STATE, assuming it has one. */
805 static inline yyRuleNum
806 yydefaultAction (yyStateNum yystate
)
808 return yydefact
[yystate
];
811 #define yyis_table_ninf(yytable_value) \
812 ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
814 ((yytable_value
) == YYTABLE_NINF
))[
816 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
818 * R < 0: Reduce on rule -R.
820 * R > 0: Shift to state R.
821 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
822 * conflicting reductions.
825 yygetLRActions (yyStateNum yystate
, int yytoken
,
826 int* yyaction
, const short int** yyconflicts
)
828 int yyindex
= yypact
[yystate
] + yytoken
;
829 if (yyindex
< 0 || YYLAST
< yyindex
|| yycheck
[yyindex
] != yytoken
)
831 *yyaction
= -yydefact
[yystate
];
832 *yyconflicts
= yyconfl
;
834 else if (! yyis_table_ninf (yytable
[yyindex
]))
836 *yyaction
= yytable
[yyindex
];
837 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
842 *yyconflicts
= yyconfl
+ yyconflp
[yyindex
];
846 static inline yyStateNum
847 yyLRgotoState (yyStateNum yystate
, yySymbol yylhs
)
850 yyr
= yypgoto
[yylhs
- YYNTOKENS
] + yystate
;
851 if (0 <= yyr
&& yyr
<= YYLAST
&& yycheck
[yyr
] == yystate
)
854 return yydefgoto
[yylhs
- YYNTOKENS
];
858 yyisShiftAction (int yyaction
)
864 yyisErrorAction (int yyaction
)
866 return yyaction
== 0;
872 yyaddDeferredAction (yyGLRStack
* yystack
, yyGLRState
* yystate
,
873 yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
875 yySemanticOption
* yynewItem
;
876 yynewItem
= &yystack
->yynextFree
->yyoption
;
877 yystack
->yyspaceLeft
-= 1;
878 yystack
->yynextFree
+= 1;
879 yynewItem
->yyisState
= yyfalse
;
880 yynewItem
->yystate
= rhs
;
881 yynewItem
->yyrule
= yyrule
;
882 yynewItem
->yynext
= yystate
->yysemantics
.yyfirstVal
;
883 yystate
->yysemantics
.yyfirstVal
= yynewItem
;
884 if (yystack
->yyspaceLeft
< YYHEADROOM
)
885 yyexpandGLRStack (yystack
]b4_pure_args
[);
890 /** Initialize SET to a singleton set containing an empty stack. */
892 yyinitStateSet (yyGLRStateSet
* yyset
)
895 yyset
->yycapacity
= 16;
896 yyset
->yystates
= (yyGLRState
**) YYMALLOC (16 * sizeof yyset
->yystates
[0]);
897 yyset
->yystates
[0] = NULL
;
900 static void yyfreeStateSet (yyGLRStateSet
* yyset
)
902 YYFREE (yyset
->yystates
);
905 /** Initialize STACK to a single empty stack, with total maximum
906 * capacity for all stacks of SIZE. */
908 yyinitGLRStack (yyGLRStack
* yystack
, size_t yysize
)
910 yystack
->yyerrflag
= 0;
911 yystack
->yyerrState
= 0;
913 yystack
->yyspaceLeft
= yysize
;
914 yystack
->yynextFree
= yystack
->yyitems
=
915 (yyGLRStackItem
*) YYMALLOC (yysize
* sizeof yystack
->yynextFree
[0]);
916 yystack
->yysplitPoint
= NULL
;
917 yystack
->yylastDeleted
= NULL
;
918 yyinitStateSet (&yystack
->yytops
);
921 #define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
922 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
924 /** If STACK is expandable, extend it. WARNING: Pointers into the
925 stack from outside should be considered invalid after this call.
926 We always expand when there are 1 or fewer items left AFTER an
927 allocation, so that we can avoid having external pointers exist
928 across an allocation. */
930 yyexpandGLRStack (yyGLRStack
* yystack
]b4_pure_formals
[)
932 #if YYSTACKEXPANDABLE
933 yyGLRStack yynewStack
;
934 yyGLRStackItem
* yyp0
, *yyp1
;
935 size_t yysize
, yynewSize
;
937 yysize
= yystack
->yynextFree
- yystack
->yyitems
;
938 if (YYMAXDEPTH
<= yysize
)
939 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
940 yynewSize
= 2*yysize
;
941 if (YYMAXDEPTH
< yynewSize
)
942 yynewSize
= YYMAXDEPTH
;
943 yyinitGLRStack (&yynewStack
, yynewSize
);
944 for (yyp0
= yystack
->yyitems
, yyp1
= yynewStack
.yyitems
, yyn
= yysize
;
946 yyn
-= 1, yyp0
+= 1, yyp1
+= 1)
949 if (*(yybool
*) yyp0
)
951 yyGLRState
* yys0
= &yyp0
->yystate
;
952 yyGLRState
* yys1
= &yyp1
->yystate
;
953 if (yys0
->yypred
!= NULL
)
955 YYRELOC (yyp0
, yyp1
, yys0
->yypred
, yystate
);
956 if (! yys0
->yyresolved
&& yys0
->yysemantics
.yyfirstVal
!= NULL
)
957 yys1
->yysemantics
.yyfirstVal
=
958 YYRELOC(yyp0
, yyp1
, yys0
->yysemantics
.yyfirstVal
, yyoption
);
962 yySemanticOption
* yyv0
= &yyp0
->yyoption
;
963 yySemanticOption
* yyv1
= &yyp1
->yyoption
;
964 if (yyv0
->yystate
!= NULL
)
965 yyv1
->yystate
= YYRELOC (yyp0
, yyp1
, yyv0
->yystate
, yystate
);
966 if (yyv0
->yynext
!= NULL
)
967 yyv1
->yynext
= YYRELOC (yyp0
, yyp1
, yyv0
->yynext
, yyoption
);
970 if (yystack
->yysplitPoint
!= NULL
)
971 yystack
->yysplitPoint
= YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
972 yystack
->yysplitPoint
, yystate
);
974 for (yyn
= 0; yyn
< yystack
->yytops
.yysize
; yyn
+= 1)
975 if (yystack
->yytops
.yystates
[yyn
] != NULL
)
976 yystack
->yytops
.yystates
[yyn
] =
977 YYRELOC (yystack
->yyitems
, yynewStack
.yyitems
,
978 yystack
->yytops
.yystates
[yyn
], yystate
);
979 YYFREE (yystack
->yyitems
);
980 yystack
->yyitems
= yynewStack
.yyitems
;
981 yystack
->yynextFree
= yynewStack
.yynextFree
+ yysize
;
982 yystack
->yyspaceLeft
= yynewStack
.yyspaceLeft
- yysize
;
986 yyFail (yystack
][]b4_pure_args
[, "parser stack overflow");
991 yyfreeGLRStack (yyGLRStack
* yystack
)
993 YYFREE (yystack
->yyitems
);
994 yyfreeStateSet (&yystack
->yytops
);
997 /** Assuming that S is a GLRState somewhere on STACK, update the
998 * splitpoint of STACK, if needed, so that it is at least as deep as
1001 yyupdateSplit (yyGLRStack
* yystack
, yyGLRState
* yys
)
1003 if (yystack
->yysplitPoint
!= NULL
&& yystack
->yysplitPoint
> yys
)
1004 yystack
->yysplitPoint
= yys
;
1007 /** Invalidate stack #K in STACK. */
1009 yymarkStackDeleted (yyGLRStack
* yystack
, int yyk
)
1011 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1012 yystack
->yylastDeleted
= yystack
->yytops
.yystates
[yyk
];
1013 yystack
->yytops
.yystates
[yyk
] = NULL
;
1016 /** Undelete the last stack that was marked as deleted. Can only be
1017 done once after a deletion, and only when all other stacks have
1020 yyundeleteLastStack (yyGLRStack
* yystack
)
1022 if (yystack
->yylastDeleted
== NULL
|| yystack
->yytops
.yysize
!= 0)
1024 yystack
->yytops
.yystates
[0] = yystack
->yylastDeleted
;
1025 yystack
->yytops
.yysize
= 1;
1026 YYDPRINTF ((stderr
, "Restoring last deleted stack as stack #0.\n"));
1027 yystack
->yylastDeleted
= NULL
;
1031 yyremoveDeletes (yyGLRStack
* yystack
)
1035 while (yyj
< yystack
->yytops
.yysize
)
1037 if (yystack
->yytops
.yystates
[yyi
] == NULL
)
1041 YYDPRINTF ((stderr
, "Removing dead stacks.\n"));
1043 yystack
->yytops
.yysize
-= 1;
1047 yystack
->yytops
.yystates
[yyj
] = yystack
->yytops
.yystates
[yyi
];
1050 YYDPRINTF ((stderr
, "Rename stack %lu -> %lu.\n",
1051 (unsigned long int) yyi
, (unsigned long int) yyj
));
1059 /** Shift to a new state on stack #K of STACK, corresponding to LR state
1060 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
1062 yyglrShift (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
, size_t yyposn
,
1063 YYSTYPE yysval
, YYLTYPE
* yylocp
]b4_user_formals
[)
1065 yyGLRStackItem
* yynewItem
;
1067 yynewItem
= yystack
->yynextFree
;
1068 yystack
->yynextFree
+= 1;
1069 yystack
->yyspaceLeft
-= 1;
1070 yynewItem
->yystate
.yyisState
= yytrue
;
1071 yynewItem
->yystate
.yylrState
= yylrState
;
1072 yynewItem
->yystate
.yyposn
= yyposn
;
1073 yynewItem
->yystate
.yyresolved
= yytrue
;
1074 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1075 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1076 yynewItem
->yystate
.yysemantics
.yysval
= yysval
;
1077 yynewItem
->yystate
.yyloc
= *yylocp
;
1078 if (yystack
->yyspaceLeft
< YYHEADROOM
)
1079 yyexpandGLRStack (yystack
]b4_pure_args
[);
1082 /** Shift stack #K of YYSTACK, to a new state corresponding to LR
1083 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1084 * semantic value of YYRHS under the action for YYRULE. */
1086 yyglrShiftDefer (yyGLRStack
* yystack
, int yyk
, yyStateNum yylrState
,
1087 size_t yyposn
, yyGLRState
* rhs
, yyRuleNum yyrule
]b4_pure_formals
[)
1089 yyGLRStackItem
* yynewItem
;
1091 yynewItem
= yystack
->yynextFree
;
1092 yynewItem
->yystate
.yyisState
= yytrue
;
1093 yynewItem
->yystate
.yylrState
= yylrState
;
1094 yynewItem
->yystate
.yyposn
= yyposn
;
1095 yynewItem
->yystate
.yyresolved
= yyfalse
;
1096 yynewItem
->yystate
.yypred
= yystack
->yytops
.yystates
[yyk
];
1097 yynewItem
->yystate
.yysemantics
.yyfirstVal
= NULL
;
1098 yystack
->yytops
.yystates
[yyk
] = &yynewItem
->yystate
;
1099 yystack
->yynextFree
+= 1;
1100 yystack
->yyspaceLeft
-= 1;
1101 yyaddDeferredAction (yystack
, &yynewItem
->yystate
, rhs
, yyrule
]b4_pure_args
[);
1104 /** Pop the symbols consumed by reduction #RULE from the top of stack
1105 * #K of STACK, and perform the appropriate semantic action on their
1106 * semantic values. Assumes that all ambiguities in semantic values
1107 * have been previously resolved. Set *VALP to the resulting value,
1108 * and *LOCP to the computed location (if any). Return value is as
1109 * for userAction. */
1110 static inline YYRESULTTAG
1111 yydoAction (yyGLRStack
* yystack
, int yyk
, yyRuleNum yyrule
,
1112 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1114 int yynrhs
= yyrhsLength (yyrule
);
1116 if (yystack
->yysplitPoint
== NULL
)
1118 /* Standard special case: single stack. */
1119 yyGLRStackItem
* rhs
= (yyGLRStackItem
*) yystack
->yytops
.yystates
[yyk
];
1120 YYASSERT (yyk
== 0);
1121 yystack
->yynextFree
-= yynrhs
;
1122 yystack
->yyspaceLeft
+= yynrhs
;
1123 yystack
->yytops
.yystates
[0] = & yystack
->yynextFree
[-1].yystate
;
1124 return yyuserAction (yyrule
, yynrhs
, rhs
,
1125 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1131 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1132 yys
= yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
1133 = yystack
->yytops
.yystates
[yyk
];
1134 for (yyi
= 0; yyi
< yynrhs
; yyi
+= 1)
1139 yyupdateSplit (yystack
, yys
);
1140 yystack
->yytops
.yystates
[yyk
] = yys
;
1141 return yyuserAction (yyrule
, yynrhs
, yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1142 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1147 # define YY_REDUCE_PRINT(K, Rule)
1149 # define YY_REDUCE_PRINT(K, Rule) \
1152 yy_reduce_print (K, Rule); \
1155 /*----------------------------------------------------------.
1156 | Report that the RULE is going to be reduced on stack #K. |
1157 `----------------------------------------------------------*/
1160 yy_reduce_print (size_t yyk
, yyRuleNum yyrule
)
1163 YYFPRINTF (stderr
, "Reducing stack %lu by rule %d (line %lu), ",
1164 (unsigned long int) yyk
, yyrule
- 1,
1165 (unsigned long int) yyrline
[yyrule
]);
1166 /* Print the symbols being reduced, and their result. */
1167 for (yyi
= yyprhs
[yyrule
]; 0 <= yyrhs
[yyi
]; yyi
++)
1168 YYFPRINTF (stderr
, "%s ", yytokenName (yyrhs
[yyi
]));
1169 YYFPRINTF (stderr
, "-> %s\n", yytokenName (yyr1
[yyrule
]));
1173 /** Pop items off stack #K of STACK according to grammar rule RULE,
1174 * and push back on the resulting nonterminal symbol. Perform the
1175 * semantic action associated with RULE and store its value with the
1176 * newly pushed state, if FORCEEVAL or if STACK is currently
1177 * unambiguous. Otherwise, store the deferred semantic action with
1178 * the new state. If the new state would have an identical input
1179 * position, LR state, and predecessor to an existing state on the stack,
1180 * it is identified with that existing state, eliminating stack #K from
1181 * the STACK. In this case, the (necessarily deferred) semantic value is
1182 * added to the options for the existing state's semantic value.
1184 static inline YYRESULTTAG
1185 yyglrReduce (yyGLRStack
* yystack
, size_t yyk
, yyRuleNum yyrule
,
1186 yybool yyforceEval
]b4_pure_formals
[)
1188 size_t yyposn
= yystack
->yytops
.yystates
[yyk
]->yyposn
;
1190 if (yyforceEval
|| yystack
->yysplitPoint
== NULL
)
1195 YY_REDUCE_PRINT (yyk
, yyrule
);
1196 YYCHK (yydoAction (yystack
, yyk
, yyrule
, &yysval
, &yyloc
]b4_user_args
[));
1197 yyglrShift (yystack
, yyk
,
1198 yyLRgotoState (yystack
->yytops
.yystates
[yyk
]->yylrState
,
1199 yylhsNonterm (yyrule
)),
1200 yyposn
, yysval
, &yyloc
]b4_user_args
[);
1206 yyGLRState
* yys
, *yys0
= yystack
->yytops
.yystates
[yyk
];
1207 yyStateNum yynewLRState
;
1209 for (yys
= yystack
->yytops
.yystates
[yyk
], yyn
= yyrhsLength (yyrule
);
1215 yyupdateSplit (yystack
, yys
);
1216 yynewLRState
= yyLRgotoState (yys
->yylrState
, yylhsNonterm (yyrule
));
1218 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
1219 (unsigned long int) yyk
, yyrule
- 1, yynewLRState
));
1220 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
1221 if (yyi
!= yyk
&& yystack
->yytops
.yystates
[yyi
] != NULL
)
1223 yyGLRState
* yyp
, *yysplit
= yystack
->yysplitPoint
;
1224 yyp
= yystack
->yytops
.yystates
[yyi
];
1225 while (yyp
!= yys
&& yyp
!= yysplit
&& yyp
->yyposn
>= yyposn
)
1227 if (yyp
->yylrState
== yynewLRState
&& yyp
->yypred
== yys
)
1229 yyaddDeferredAction (yystack
, yyp
, yys0
, yyrule
]b4_pure_args
[);
1230 yymarkStackDeleted (yystack
, yyk
);
1231 YYDPRINTF ((stderr
, "Merging stack %lu into stack %lu.\n",
1232 (unsigned long int) yyk
,
1233 (unsigned long int) yyi
));
1239 yystack
->yytops
.yystates
[yyk
] = yys
;
1240 yyglrShiftDefer (yystack
, yyk
, yynewLRState
, yyposn
, yys0
, yyrule
]b4_pure_args
[);
1246 yysplitStack (yyGLRStack
* yystack
, int yyk
)
1248 if (yystack
->yysplitPoint
== NULL
)
1250 YYASSERT (yyk
== 0);
1251 yystack
->yysplitPoint
= yystack
->yytops
.yystates
[yyk
];
1253 if (yystack
->yytops
.yysize
>= yystack
->yytops
.yycapacity
)
1255 yystack
->yytops
.yycapacity
*= 2;
1256 yystack
->yytops
.yystates
=
1257 (yyGLRState
**) YYREALLOC (yystack
->yytops
.yystates
,
1258 (yystack
->yytops
.yycapacity
1259 * sizeof yystack
->yytops
.yystates
[0]));
1261 yystack
->yytops
.yystates
[yystack
->yytops
.yysize
]
1262 = yystack
->yytops
.yystates
[yyk
];
1263 yystack
->yytops
.yysize
+= 1;
1264 return yystack
->yytops
.yysize
-1;
1267 /** True iff Y0 and Y1 represent identical options at the top level.
1268 * That is, they represent the same rule applied to RHS symbols
1269 * that produce the same terminal symbols. */
1271 yyidenticalOptions (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1273 if (yyy0
->yyrule
== yyy1
->yyrule
)
1275 yyGLRState
*yys0
, *yys1
;
1277 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1278 yyn
= yyrhsLength (yyy0
->yyrule
);
1280 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1281 if (yys0
->yyposn
!= yys1
->yyposn
)
1289 /** Assuming identicalOptions (Y0,Y1), (destructively) merge the
1290 * alternative semantic values for the RHS-symbols of Y1 into the
1291 * corresponding semantic value sets of the symbols of Y0. */
1293 yymergeOptionSets (yySemanticOption
* yyy0
, yySemanticOption
* yyy1
)
1295 yyGLRState
*yys0
, *yys1
;
1297 for (yys0
= yyy0
->yystate
, yys1
= yyy1
->yystate
,
1298 yyn
= yyrhsLength (yyy0
->yyrule
);
1300 yys0
= yys0
->yypred
, yys1
= yys1
->yypred
, yyn
-= 1)
1303 else if (! yys0
->yyresolved
&& ! yys1
->yyresolved
)
1305 yySemanticOption
* yyz
;
1306 for (yyz
= yys0
->yysemantics
.yyfirstVal
; yyz
->yynext
!= NULL
;
1309 yyz
->yynext
= yys1
->yysemantics
.yyfirstVal
;
1313 /** Y0 and Y1 represent two possible actions to take in a given
1314 * parsing state; return 0 if no combination is possible,
1315 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
1317 yypreference (yySemanticOption
* y0
, yySemanticOption
* y1
)
1319 yyRuleNum r0
= y0
->yyrule
, r1
= y1
->yyrule
;
1320 int p0
= yydprec
[r0
], p1
= yydprec
[r1
];
1324 if (yymerger
[r0
] == 0 || yymerger
[r0
] != yymerger
[r1
])
1329 if (p0
== 0 || p1
== 0)
1338 static YYRESULTTAG
yyresolveValue (yySemanticOption
* yyoptionList
,
1339 yyGLRStack
* yystack
, YYSTYPE
* yyvalp
,
1340 YYLTYPE
* yylocp
]b4_user_formals
[);
1343 yyresolveStates (yyGLRState
* yys
, int yyn
, yyGLRStack
* yystack
]b4_user_formals
[)
1348 YYASSERT (yys
->yypred
);
1349 yyflag
= yyresolveStates (yys
->yypred
, yyn
-1, yystack
]b4_user_args
[);
1352 if (! yys
->yyresolved
)
1354 yyflag
= yyresolveValue (yys
->yysemantics
.yyfirstVal
, yystack
,
1355 &yys
->yysemantics
.yysval
, &yys
->yyloc
1359 yys
->yyresolved
= yytrue
;
1366 yyresolveAction (yySemanticOption
* yyopt
, yyGLRStack
* yystack
,
1367 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1369 yyGLRStackItem yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
+ 1];
1372 yynrhs
= yyrhsLength (yyopt
->yyrule
);
1373 YYCHK (yyresolveStates (yyopt
->yystate
, yynrhs
, yystack
]b4_user_args
[));
1374 yyrhsVals
[YYMAXRHS
+ YYMAXLEFT
].yystate
.yypred
= yyopt
->yystate
;
1375 return yyuserAction (yyopt
->yyrule
, yynrhs
,
1376 yyrhsVals
+ YYMAXRHS
+ YYMAXLEFT
- 1,
1377 yyvalp
, yylocp
, yystack
]b4_user_args
[);
1382 yyreportTree (yySemanticOption
* yyx
, int yyindent
)
1384 int yynrhs
= yyrhsLength (yyx
->yyrule
);
1387 yyGLRState
* yystates
[YYMAXRHS
];
1388 yyGLRState yyleftmost_state
;
1390 for (yyi
= yynrhs
, yys
= yyx
->yystate
; 0 < yyi
; yyi
-= 1, yys
= yys
->yypred
)
1391 yystates
[yyi
] = yys
;
1394 yyleftmost_state
.yyposn
= 0;
1395 yystates
[0] = &yyleftmost_state
;
1400 if (yyx
->yystate
->yyposn
< yys
->yyposn
+ 1)
1401 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, empty>\n",
1402 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1405 YYFPRINTF (stderr
, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
1406 yyindent
, "", yytokenName (yylhsNonterm (yyx
->yyrule
)),
1407 yyx
->yyrule
, (unsigned long int) (yys
->yyposn
+ 1),
1408 (unsigned long int) yyx
->yystate
->yyposn
);
1409 for (yyi
= 1; yyi
<= yynrhs
; yyi
+= 1)
1411 if (yystates
[yyi
]->yyresolved
)
1413 if (yystates
[yyi
-1]->yyposn
+1 > yystates
[yyi
]->yyposn
)
1414 YYFPRINTF (stderr
, "%*s%s <empty>\n", yyindent
+2, "",
1415 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]));
1417 YYFPRINTF (stderr
, "%*s%s <tokens %lu .. %lu>\n", yyindent
+2, "",
1418 yytokenName (yyrhs
[yyprhs
[yyx
->yyrule
]+yyi
-1]),
1419 (unsigned long int) (yystates
[yyi
- 1]->yyposn
+ 1),
1420 (unsigned long int) yystates
[yyi
]->yyposn
);
1423 yyreportTree (yystates
[yyi
]->yysemantics
.yyfirstVal
, yyindent
+2);
1429 yyreportAmbiguity (yySemanticOption
* yyx0
, yySemanticOption
* yyx1
,
1430 yyGLRStack
* yystack
]b4_pure_formals
[)
1432 /* `Unused' warnings. */
1437 YYFPRINTF (stderr
, "Ambiguity detected.\n");
1438 YYFPRINTF (stderr
, "Option 1,\n");
1439 yyreportTree (yyx0
, 2);
1440 YYFPRINTF (stderr
, "\nOption 2,\n");
1441 yyreportTree (yyx1
, 2);
1442 YYFPRINTF (stderr
, "\n");
1444 yyFail (yystack
][]b4_pure_args
[, "ambiguity detected");
1448 /** Resolve the ambiguity represented by OPTIONLIST, perform the indicated
1449 * actions, and return the result. */
1451 yyresolveValue (yySemanticOption
* yyoptionList
, yyGLRStack
* yystack
,
1452 YYSTYPE
* yyvalp
, YYLTYPE
* yylocp
]b4_user_formals
[)
1454 yySemanticOption
* yybest
;
1455 yySemanticOption
* yyp
;
1458 yybest
= yyoptionList
;
1460 for (yyp
= yyoptionList
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1462 if (yyidenticalOptions (yybest
, yyp
))
1463 yymergeOptionSets (yybest
, yyp
);
1465 switch (yypreference (yybest
, yyp
))
1468 yyreportAmbiguity (yybest
, yyp
, yystack
]b4_pure_args
[);
1484 int yyprec
= yydprec
[yybest
->yyrule
];
1485 YYCHK (yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[));
1486 for (yyp
= yybest
->yynext
; yyp
!= NULL
; yyp
= yyp
->yynext
)
1488 if (yyprec
== yydprec
[yyp
->yyrule
])
1492 YYCHK (yyresolveAction (yyp
, yystack
, &yyval1
, &yydummy
]b4_user_args
[));
1493 yyuserMerge (yymerger
[yyp
->yyrule
], yyvalp
, &yyval1
);
1499 return yyresolveAction (yybest
, yystack
, yyvalp
, yylocp
]b4_user_args
[);
1503 yyresolveStack (yyGLRStack
* yystack
]b4_user_formals
[)
1505 if (yystack
->yysplitPoint
!= NULL
)
1510 for (yyn
= 0, yys
= yystack
->yytops
.yystates
[0];
1511 yys
!= yystack
->yysplitPoint
;
1512 yys
= yys
->yypred
, yyn
+= 1)
1514 YYCHK (yyresolveStates (yystack
->yytops
.yystates
[0], yyn
, yystack
1521 yycompressStack (yyGLRStack
* yystack
)
1523 yyGLRState
* yyp
, *yyq
, *yyr
;
1525 if (yystack
->yytops
.yysize
!= 1 || yystack
->yysplitPoint
== NULL
)
1528 for (yyp
= yystack
->yytops
.yystates
[0], yyq
= yyp
->yypred
, yyr
= NULL
;
1529 yyp
!= yystack
->yysplitPoint
;
1530 yyr
= yyp
, yyp
= yyq
, yyq
= yyp
->yypred
)
1533 yystack
->yyspaceLeft
+= yystack
->yynextFree
- yystack
->yyitems
;
1534 yystack
->yynextFree
= ((yyGLRStackItem
*) yystack
->yysplitPoint
) + 1;
1535 yystack
->yyspaceLeft
-= yystack
->yynextFree
- yystack
->yyitems
;
1536 yystack
->yysplitPoint
= NULL
;
1537 yystack
->yylastDeleted
= NULL
;
1541 yystack
->yynextFree
->yystate
= *yyr
;
1543 yystack
->yynextFree
->yystate
.yypred
= & yystack
->yynextFree
[-1].yystate
;
1544 yystack
->yytops
.yystates
[0] = &yystack
->yynextFree
->yystate
;
1545 yystack
->yynextFree
+= 1;
1546 yystack
->yyspaceLeft
-= 1;
1551 yyprocessOneStack (yyGLRStack
* yystack
, int yyk
,
1552 size_t yyposn
, YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
1556 const short int* yyconflicts
;
1558 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1560 while (yystack
->yytops
.yystates
[yyk
] != NULL
)
1562 yyStateNum yystate
= yystack
->yytops
.yystates
[yyk
]->yylrState
;
1563 YYDPRINTF ((stderr
, "Stack %d Entering state %d\n", yyk
, yystate
));
1565 YYASSERT (yystate
!= YYFINAL
);
1567 if (yyisDefaultedState (yystate
))
1569 yyrule
= yydefaultAction (yystate
);
1572 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1573 yymarkStackDeleted (yystack
, yyk
);
1576 YYCHK (yyglrReduce (yystack
, yyk
, yyrule
, yyfalse
]b4_lpure_args
[));
1580 if (*yytokenp
== YYEMPTY
)
1582 YYDPRINTF ((stderr
, "Reading a token: "));
1584 *yytokenp
= YYTRANSLATE (yychar
);
1585 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1587 yygetLRActions (yystate
, *yytokenp
, &yyaction
, &yyconflicts
);
1589 while (*yyconflicts
!= 0)
1591 int yynewStack
= yysplitStack (yystack
, yyk
);
1592 YYDPRINTF ((stderr
, "Splitting off stack %d from %d.\n",
1594 YYCHK (yyglrReduce (yystack
, yynewStack
,
1595 *yyconflicts
, yyfalse
]b4_lpure_args
[));
1596 YYCHK (yyprocessOneStack (yystack
, yynewStack
, yyposn
,
1597 yylvalp
, yyllocp
]b4_user_args
[));
1601 if (yyisShiftAction (yyaction
))
1603 YYDPRINTF ((stderr
, "On stack %d, ", yyk
));
1604 YY_SYMBOL_PRINT ("shifting", *yytokenp
, yylvalp
, yyllocp
);
1605 yyglrShift (yystack
, yyk
, yyaction
, yyposn
+1,
1606 *yylvalp
, yyllocp
]b4_user_args
[);
1607 YYDPRINTF ((stderr
, ", now in state #%d\n",
1608 yystack
->yytops
.yystates
[yyk
]->yylrState
));
1611 else if (yyisErrorAction (yyaction
))
1613 YYDPRINTF ((stderr
, "Stack %d dies.\n", yyk
));
1614 yymarkStackDeleted (yystack
, yyk
);
1618 YYCHK (yyglrReduce (yystack
, yyk
, -yyaction
, yyfalse
]b4_lpure_args
[));
1625 yyreportSyntaxError (yyGLRStack
* yystack
,
1626 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1628 /* `Unused' warnings. */
1632 if (yystack
->yyerrState
== 0)
1635 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1637 yyn
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1638 if (YYPACT_NINF
< yyn
&& yyn
< YYLAST
)
1641 const char* yyprefix
;
1645 /* Start YYX at -YYN if negative to avoid negative indexes in
1647 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1649 /* Stay within bounds of both yycheck and yytname. */
1650 int yychecklim
= YYLAST
- yyn
;
1651 int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1654 yyprefix
= ", expecting ";
1655 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1656 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1658 yysize
+= strlen (yyprefix
) + strlen (yytokenName (yyx
));
1667 yysize
+= (sizeof ("syntax error, unexpected ")
1668 + strlen (yytokenName (*yytokenp
)));
1669 yymsg
= (char*) YYMALLOC (yysize
);
1673 sprintf (yyp
, "syntax error%s%s",
1674 (*yytokenp
== YYEMPTY
? "" : ", unexpected "),
1675 yytokenName (*yytokenp
));
1676 yyp
+= strlen (yyp
);
1679 yyprefix
= ", expecting ";
1680 for (yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1681 if (yycheck
[yyx
+ yyn
] == yyx
&& yyx
!= YYTERROR
)
1683 sprintf (yyp
, "%s%s", yyprefix
, yytokenName (yyx
));
1684 yyp
+= strlen (yyp
);
1688 yyerror (]b4_lyyerror_args
[yymsg
);
1692 yyerror (]b4_lyyerror_args
["syntax error; also virtual memory exhausted");
1695 #endif /* YYERROR_VERBOSE */
1696 yyerror (]b4_lyyerror_args
["syntax error");
1701 /* Recover from a syntax error on YYSTACK, assuming that YYTOKENP,
1702 YYLVALP, and YYLLOCP point to the syntactic category, semantic
1703 value, and location of the look-ahead. */
1705 yyrecoverSyntaxError (yyGLRStack
* yystack
,
1706 YYSTYPE
* yylvalp
, YYLTYPE
* yyllocp
]b4_user_formals
[)
1708 yySymbol
* const yytokenp
= yystack
->yytokenp
;
1712 if (yystack
->yyerrState
== 3)
1713 /* We just shifted the error token and (perhaps) took some
1714 reductions. Skip tokens until we can proceed. */
1717 if (*yytokenp
== YYEOF
)
1719 /* Now pop stack until empty and fail. */
1720 while (yystack
->yytops
.yystates
[0] != NULL
)
1722 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1723 ]b4_location_if([[ yystack
->yyerror_range
[0] = yys
->yyloc
;]])[
1724 yydestruct ("Error: popping",
1725 yystos
[yys
->yylrState
],
1726 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1727 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1728 yystack
->yynextFree
-= 1;
1729 yystack
->yyspaceLeft
+= 1;
1731 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1733 if (*yytokenp
!= YYEMPTY
)
1735 /* We throw away the lookahead, but the error range
1736 of the shifted error token must take it into account. */
1737 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1738 yys
->yyloc
.last_line
= yyllocp
->last_line
;
1739 yys
->yyloc
.last_column
= yyllocp
->last_column
;]])[
1740 yydestruct ("Error: discarding",
1741 *yytokenp
, yylvalp
]b4_location_if([, yyllocp
])[);
1743 YYDPRINTF ((stderr
, "Reading a token: "));
1745 *yytokenp
= YYTRANSLATE (yychar
);
1746 YY_SYMBOL_PRINT ("Next token is", *yytokenp
, yylvalp
, yyllocp
);
1747 yyj
= yypact
[yystack
->yytops
.yystates
[0]->yylrState
];
1748 if (yyis_pact_ninf (yyj
))
1751 if (yyj
< 0 || YYLAST
< yyj
|| yycheck
[yyj
] != *yytokenp
)
1753 if (yydefact
[yystack
->yytops
.yystates
[0]->yylrState
] != 0)
1756 else if (yytable
[yyj
] != 0 && ! yyis_table_ninf (yytable
[yyj
]))
1760 /* Reduce to one stack. */
1761 for (yyk
= 0; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1762 if (yystack
->yytops
.yystates
[yyk
] != NULL
)
1764 if (yyk
>= yystack
->yytops
.yysize
)
1765 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1766 for (yyk
+= 1; yyk
< yystack
->yytops
.yysize
; yyk
+= 1)
1767 yymarkStackDeleted (yystack
, yyk
);
1768 yyremoveDeletes (yystack
);
1769 yycompressStack (yystack
);
1771 /* Now pop stack until we find a state that shifts the error token. */
1772 yystack
->yyerrState
= 3;
1773 while (yystack
->yytops
.yystates
[0] != NULL
)
1775 yyGLRState
*yys
= yystack
->yytops
.yystates
[0];
1776 yyj
= yypact
[yys
->yylrState
];
1777 if (! yyis_pact_ninf (yyj
))
1780 if (0 <= yyj
&& yyj
<= YYLAST
&& yycheck
[yyj
] == YYTERROR
1781 && yyisShiftAction (yytable
[yyj
]))
1783 /* Shift the error token having adjusted its location. */
1784 YYLTYPE yyerrloc
;]b4_location_if([[
1785 yystack
->yyerror_range
[1] = *yyllocp
;
1786 # define YYRHSLOC(yyRhs,YYK) ((yyRhs)[YYK])
1787 YYLLOC_DEFAULT (yyerrloc
, yystack
->yyerror_range
- 1, 2);
1788 # undef YYRHSLOC]])[
1789 YY_SYMBOL_PRINT ("Shifting", yystos
[yytable
[yyj
]],
1790 yylvalp
, &yyerrloc
);
1791 yyglrShift (yystack
, 0, yytable
[yyj
],
1792 yys
->yyposn
, *yylvalp
, &yyerrloc
]b4_user_args
[);
1793 yys
= yystack
->yytops
.yystates
[0];
1797 ]b4_location_if([[ yystack
->yyerror_range
[0] = yys
->yyloc
;]])[
1798 yydestruct ("Error: popping",
1799 yystos
[yys
->yylrState
],
1800 &yys
->yysemantics
.yysval
]b4_location_if([, &yys
->yyloc
])[);
1801 yystack
->yytops
.yystates
[0] = yys
->yypred
;
1802 yystack
->yynextFree
-= 1;
1803 yystack
->yyspaceLeft
+= 1;
1805 if (yystack
->yytops
.yystates
[0] == NULL
)
1806 yyFail (yystack
][]b4_lpure_args
[, NULL
);
1809 #define YYCHK1(YYE) \
1815 yystack.yyerrflag = 1; \
1818 yystack.yyerrflag = 0; \
1821 goto yyuser_error; \
1830 ]b4_c_ansi_function_def([yyparse
], [int], b4_parse_param
)[
1840 #define yychar (yystack.yyrawchar)
1843 YYSTYPE
* const yylvalp
= &yylval
;
1844 YYLTYPE
* const yyllocp
= &yylloc
;
1846 yyinitGLRStack (&yystack
, YYINITDEPTH
);
1847 yystack
.yytokenp
= &yytoken
;
1849 YYDPRINTF ((stderr
, "Starting parse\n"));
1851 if (setjmp (yystack
.yyexception_buffer
) != 0)
1854 yylval
= yyval_default
;
1856 #if YYLTYPE_IS_TRIVIAL
1857 yylloc
.first_line
= yylloc
.last_line
= 1;
1858 yylloc
.first_column
= yylloc
.last_column
= 0;
1861 m4_ifdef([b4_initial_action
], [
1862 m4_pushdef([b4_at_dollar
], [yylval
])dnl
1863 m4_pushdef([b4_dollar_dollar
], [yylloc
])dnl
1864 /* User initialization code. */
1866 m4_popdef([b4_dollar_dollar
])dnl
1867 m4_popdef([b4_at_dollar
])dnl
1868 /* Line __line__ of glr.c. */
1869 b4_syncline([@oline@
], [@ofile@
])])dnl
1871 yyglrShift (&yystack
, 0, 0, 0, yylval
, &yylloc
]b4_user_args
[);
1877 /* For efficiency, we have two loops, the first of which is
1878 specialized to deterministic operation (single stack, no
1879 potential ambiguity). */
1885 const short int* yyconflicts
;
1887 yyStateNum yystate
= yystack
.yytops
.yystates
[0]->yylrState
;
1888 YYDPRINTF ((stderr
, "Entering state %d\n", yystate
));
1889 if (yystate
== YYFINAL
)
1891 if (yyisDefaultedState (yystate
))
1893 yyrule
= yydefaultAction (yystate
);
1896 ]b4_location_if([[ yystack
.yyerror_range
[0] = *yyllocp
;]])[
1897 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1900 YYCHK1 (yyglrReduce (&yystack
, 0, yyrule
, yytrue
]b4_lpure_args
[));
1904 if (yytoken
== YYEMPTY
)
1906 YYDPRINTF ((stderr
, "Reading a token: "));
1908 yytoken
= YYTRANSLATE (yychar
);
1909 YY_SYMBOL_PRINT ("Next token is", yytoken
, yylvalp
, yyllocp
);
1911 yygetLRActions (yystate
, yytoken
, &yyaction
, &yyconflicts
);
1912 if (*yyconflicts
!= 0)
1914 if (yyisShiftAction (yyaction
))
1916 YY_SYMBOL_PRINT ("Shifting", yytoken
, yylvalp
, yyllocp
);
1917 if (yytoken
!= YYEOF
)
1920 yyglrShift (&yystack
, 0, yyaction
, yyposn
,
1921 yylval
, yyllocp
]b4_user_args
[);
1922 if (0 < yystack
.yyerrState
)
1923 yystack
.yyerrState
-= 1;
1925 else if (yyisErrorAction (yyaction
))
1927 yyGLRState
*yys
= yystack
.yytops
.yystates
[0];
1928 ]b4_location_if([[ yystack
.yyerror_range
[0] = *yyllocp
;]])[
1929 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1933 YYCHK1 (yyglrReduce (&yystack
, 0, -yyaction
, yytrue
]b4_lpure_args
[));
1940 int yyn
= yystack
.yytops
.yysize
;
1941 for (yys
= 0; yys
< yyn
; yys
+= 1)
1942 YYCHK1 (yyprocessOneStack (&yystack
, yys
, yyposn
,
1943 yylvalp
, yyllocp
]b4_user_args
[));
1946 yyremoveDeletes (&yystack
);
1947 if (yystack
.yytops
.yysize
== 0)
1949 yyundeleteLastStack (&yystack
);
1950 if (yystack
.yytops
.yysize
== 0)
1951 yyFail (&yystack
][]b4_lpure_args
[, "syntax error");
1952 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1953 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1954 ]b4_location_if([[ yystack
.yyerror_range
[0] = *yyllocp
;]])[
1955 yyreportSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1958 else if (yystack
.yytops
.yysize
== 1)
1960 YYCHK1 (yyresolveStack (&yystack
]b4_user_args
[));
1961 YYDPRINTF ((stderr
, "Returning to deterministic operation.\n"));
1962 yycompressStack (&yystack
);
1968 yyrecoverSyntaxError (&yystack
, yylvalp
, yyllocp
]b4_user_args
[);
1969 yyposn
= yystack
.yytops
.yystates
[0]->yyposn
;
1972 /* On YYABORT, free the lookahead. */
1973 if (yystack
.yyerrflag
== 1 && yytoken
!= YYEMPTY
)
1974 yydestruct ("Error: discarding lookahead",
1975 yytoken
, yylvalp
]b4_location_if([, yyllocp
])[);
1977 yyfreeGLRStack (&yystack
);
1978 return yystack
.yyerrflag
;
1981 /* DEBUGGING ONLY */
1983 static void yypstack (yyGLRStack
* yystack
, int yyk
) ATTRIBUTE_UNUSED
;
1984 static void yypdumpstack (yyGLRStack
* yystack
) ATTRIBUTE_UNUSED
;
1987 yy_yypstack (yyGLRState
* yys
)
1991 yy_yypstack (yys
->yypred
);
1992 fprintf (stderr
, " -> ");
1994 fprintf (stderr
, "%d@@%lu", yys
->yylrState
, (unsigned long int) yys
->yyposn
);
1998 yypstates (yyGLRState
* yyst
)
2001 fprintf (stderr
, "<null>");
2004 fprintf (stderr
, "\n");
2008 yypstack (yyGLRStack
* yystack
, int yyk
)
2010 yypstates (yystack
->yytops
.yystates
[yyk
]);
2013 #define YYINDEX(YYX) \
2014 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystack->yyitems)
2018 yypdumpstack (yyGLRStack
* yystack
)
2020 yyGLRStackItem
* yyp
;
2022 for (yyp
= yystack
->yyitems
; yyp
< yystack
->yynextFree
; yyp
+= 1)
2024 fprintf (stderr
, "%3lu. ", (unsigned long int) (yyp
- yystack
->yyitems
));
2025 if (*(yybool
*) yyp
)
2027 fprintf (stderr
, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2028 yyp
->yystate
.yyresolved
, yyp
->yystate
.yylrState
,
2029 (unsigned long int) yyp
->yystate
.yyposn
,
2030 (long int) YYINDEX (yyp
->yystate
.yypred
));
2031 if (! yyp
->yystate
.yyresolved
)
2032 fprintf (stderr
, ", firstVal: %ld",
2033 (long int) YYINDEX (yyp
->yystate
.yysemantics
.yyfirstVal
));
2037 fprintf (stderr
, "Option. rule: %d, state: %ld, next: %ld",
2038 yyp
->yyoption
.yyrule
,
2039 (long int) YYINDEX (yyp
->yyoption
.yystate
),
2040 (long int) YYINDEX (yyp
->yyoption
.yynext
));
2042 fprintf (stderr
, "\n");
2044 fprintf (stderr
, "Tops:");
2045 for (yyi
= 0; yyi
< yystack
->yytops
.yysize
; yyi
+= 1)
2046 fprintf (stderr
, "%lu: %ld; ", (unsigned long int) yyi
,
2047 (long int) YYINDEX (yystack
->yytops
.yystates
[yyi
]));
2048 fprintf (stderr
, "\n");
2054 m4_if(b4_defines_flag
, 0, [],
2055 [@output @output_header_name@
2056 b4_copyright([Skeleton parser
for GLR parsing with Bison
], [2002, 2003, 2004])
2058 b4_token_defines(b4_tokens
)
2060 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
2061 m4_ifdef([b4_stype
],
2062 [b4_syncline([b4_stype_line
], [b4_filename
])
2063 typedef union m4_bregexp(b4_stype
, [^{], [YYSTYPE
])b4_stype YYSTYPE
;
2064 /* Line __line__ of glr.c. */
2065 b4_syncline([@oline@
], [@ofile@
])],
2066 [typedef int YYSTYPE
;])
2067 # define YYSTYPE_IS_DECLARED 1
2068 # define YYSTYPE_IS_TRIVIAL 1
2072 [extern YYSTYPE b4_prefix
[]lval
;])
2074 #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED)
2075 typedef struct YYLTYPE
2086 # define YYLTYPE_IS_DECLARED 1
2087 # define YYLTYPE_IS_TRIVIAL 1
2090 b4_location_if([b4_pure_if([],
2091 [extern YYLTYPE b4_prefix
[]lloc
;])