1 # C++ skeleton for Bison
3 # Copyright (C) 2002-2010 Free Software Foundation, Inc.
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 m4_include(b4_pkgdatadir
/[c
++.m4
])
20 m4_define([b4_parser_class_name
],
21 [b4_percent_define_get([[parser_class_name]])])
23 # The header is mandatory.
25 [b4_fatal([b4_skeleton
[: using %%defines is mandatory
]])])
27 b4_percent_define_ifdef([[location_type]], [],
28 [# Backward compatibility.
29 m4_define([b4_location_constructors
])
30 m4_include(b4_pkgdatadir
/[location
.cc
])])
32 # We do want M4 expansion after # for CPP macros.
36 [@
output(b4_spec_defines_file@
)@
37 b4_copyright([Skeleton interface
for Bison
LALR(1) parsers in C
++],
39 dnl FIXME
: This is wrong
, we want computed header guards
.
41 /* C++ LALR(1) parser skeleton written by Akim Demaille. */
43 #ifndef PARSER_HEADER_H
44 # define PARSER_HEADER_H
46 ]b4_percent_code_get([[requires]])[
51 ]b4_percent_define_ifdef([[location_type]], [],
52 [[#include "location.hh"]])[
54 /* Enabling traces. */
56 # define YYDEBUG ]b4_debug_flag[
59 /* Enabling verbose error messages. */
60 #ifdef YYERROR_VERBOSE
61 # undef YYERROR_VERBOSE
62 # define YYERROR_VERBOSE 1
64 # define YYERROR_VERBOSE ]b4_error_verbose_flag[
67 /* Enabling the token table. */
69 # define YYTOKEN_TABLE ]b4_token_table[
75 class ]b4_parser_class_name
[
78 /// Symbol semantic values.
85 [m4_if(b4_tag_seen_flag
, 0,
86 [[ typedef int semantic_type
;]],
87 [[ typedef YYSTYPE semantic_type
;]])])[
89 typedef YYSTYPE semantic_type
;
92 typedef ]b4_percent_define_get([[location_type]],
93 [[location]])[ location_type
;
97 ]b4_token_enums(b4_tokens
)[
100 typedef token::yytokentype token_type
;
102 /// Build a parser object.
103 ]b4_parser_class_name
[ (]b4_parse_param_decl
[);
104 virtual ~]b4_parser_class_name
[ ();
107 /// \returns 0 iff parsing succeeded.
108 virtual int parse ();
111 /// The current debugging stream.
112 std::ostream
& debug_stream () const;
113 /// Set the current debugging stream.
114 void set_debug_stream (std::ostream
&);
116 /// Type for debugging levels.
117 typedef int debug_level_type
;
118 /// The current debugging level.
119 debug_level_type
debug_level () const;
120 /// Set the current debugging level.
121 void set_debug_level (debug_level_type l
);
125 /// Report a syntax error.
126 /// \param loc where the syntax error is found.
127 /// \param msg a description of the syntax error.
128 virtual void error (const location_type
& loc
, const std::string
& msg
);
130 /// Generate an error message.
131 /// \param state the state where the error occurred.
132 /// \param tok the lookahead token.
133 virtual std::string
yysyntax_error_ (int yystate
, int tok
);
136 /// \brief Report a symbol value on the debug stream.
137 /// \param yytype The token type.
138 /// \param yyvaluep Its semantic value.
139 /// \param yylocationp Its location.
140 virtual void yy_symbol_value_print_ (int yytype
,
141 const semantic_type
* yyvaluep
,
142 const location_type
* yylocationp
);
143 /// \brief Report a symbol on the debug stream.
144 /// \param yytype The token type.
145 /// \param yyvaluep Its semantic value.
146 /// \param yylocationp Its location.
147 virtual void yy_symbol_print_ (int yytype
,
148 const semantic_type
* yyvaluep
,
149 const location_type
* yylocationp
);
154 typedef int state_type
;
155 /// State stack type.
156 typedef stack
<state_type
> state_stack_type
;
157 /// Semantic value stack type.
158 typedef stack
<semantic_type
> semantic_stack_type
;
159 /// location stack type.
160 typedef stack
<location_type
> location_stack_type
;
163 state_stack_type yystate_stack_
;
164 /// The semantic value stack.
165 semantic_stack_type yysemantic_stack_
;
166 /// The location stack.
167 location_stack_type yylocation_stack_
;
169 /// Whether the given \c yypact_ value indicates a defaulted state.
170 /// \param yyvalue the value to check
171 static bool yy_pact_value_is_default_ (int yyvalue
);
173 /// Whether the given \c yytable_ value indicates a syntax error.
174 /// \param yyvalue the value to check
175 static bool yy_table_value_is_error_ (int yyvalue
);
177 /// Internal symbol numbers.
178 typedef ]b4_int_type_for([b4_translate
])[ token_number_type
;
180 /// For a state, the index in \a yytable_ of its portion.
181 static const ]b4_int_type_for([b4_pact
])[ yypact_
[];
182 static const ]b4_int_type(b4_pact_ninf
, b4_pact_ninf
)[ yypact_ninf_
;
184 /// For a state, default reduction number.
185 /// Unless\a yytable_ specifies something else to do.
186 /// Zero means the default is an error.
187 static const ]b4_int_type_for([b4_defact
])[ yydefact_
[];
189 static const ]b4_int_type_for([b4_pgoto
])[ yypgoto_
[];
190 static const ]b4_int_type_for([b4_defgoto
])[ yydefgoto_
[];
192 /// What to do in a state.
193 /// \a yytable_[yypact_[s]]: what to do in state \a s.
194 /// - if positive, shift that token.
195 /// - if negative, reduce the rule which number is the opposite.
196 /// - if zero, do what YYDEFACT says.
197 static const ]b4_int_type_for([b4_table
])[ yytable_
[];
198 static const ]b4_int_type(b4_table_ninf
, b4_table_ninf
)[ yytable_ninf_
;
200 static const ]b4_int_type_for([b4_check
])[ yycheck_
[];
202 /// For a state, its accessing symbol.
203 static const ]b4_int_type_for([b4_stos
])[ yystos_
[];
205 /// For a rule, its LHS.
206 static const ]b4_int_type_for([b4_r1
])[ yyr1_
[];
207 /// For a rule, its RHS length.
208 static const ]b4_int_type_for([b4_r2
])[ yyr2_
[];
210 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
211 /// For a symbol, its name in clear.
212 static const char* const yytname_
[];
213 #endif]b4_error_verbose_if([
215 /// Convert the symbol name \a n to a form suitable for a diagnostic.
216 static std::string
yytnamerr_ (const char *n
);])[
219 /// A type to store symbol numbers and -1.
220 typedef ]b4_int_type_for([b4_rhs
])[ rhs_number_type
;
221 /// A `-1'-separated list of the rules' RHS.
222 static const rhs_number_type yyrhs_
[];
223 /// For each rule, the index of the first RHS symbol in \a yyrhs_.
224 static const ]b4_int_type_for([b4_prhs
])[ yyprhs_
[];
225 /// For each rule, its source line number.
226 static const ]b4_int_type_for([b4_rline
])[ yyrline_
[];
227 /// For each scanner token number, its symbol number.
228 static const ]b4_int_type_for([b4_toknum
])[ yytoken_number_
[];
229 /// Report on the debug stream that the rule \a r is going to be reduced.
230 virtual void yy_reduce_print_ (int r
);
231 /// Print the state stack on the debug stream.
232 virtual void yystack_print_ ();
236 std::ostream
* yycdebug_
;
239 /// Convert a scanner token number \a t to a symbol number.
240 token_number_type
yytranslate_ (int t
);
242 /// \brief Reclaim the memory associated to a symbol.
243 /// \param yymsg Why this token is reclaimed.
244 /// \param yytype The symbol type.
245 /// \param yyvaluep Its semantic value.
246 /// \param yylocationp Its location.
247 inline void yydestruct_ (const char* yymsg
,
249 semantic_type
* yyvaluep
,
250 location_type
* yylocationp
);
252 /// Pop \a n symbols the three stacks.
253 inline void yypop_ (unsigned int n
= 1);
256 static const int yyeof_
;
257 /* LAST_ -- Last index in TABLE_. */
258 static const int yylast_
;
259 static const int yynnts_
;
260 static const int yyempty_
;
261 static const int yyfinal_
;
262 static const int yyterror_
;
263 static const int yyerrcode_
;
264 static const int yyntokens_
;
265 static const unsigned int yyuser_token_number_max_
;
266 static const token_number_type yyundef_token_
;
267 ]b4_parse_param_vars
[
271 ]b4_percent_define_flag_if([[global_tokens_and_yystype]],
272 [b4_token_defines(b4_tokens
)
275 /* Redirection for backward compatibility. */
276 # define YYSTYPE b4_namespace_ref::b4_parser_class_name::semantic_type
279 b4_percent_code_get([[provides]])[]dnl
281 [#endif /* ! defined PARSER_HEADER_H */]
283 @
output(b4_parser_file_name@
)@
284 b4_copyright([Skeleton implementation
for Bison
LALR(1) parsers in C
++],
286 b4_percent_code_get([[top]])[]dnl
287 m4_if(b4_prefix
, [yy
], [],
289 // Take the name prefix into account.
290 #define yylex b4_prefix[]lex])[
292 /* First part of user declarations. */
293 ]b4_user_pre_prologue
296 #include "@basename(]b4_spec_defines_file[@)"]])[
298 /* User implementation prologue. */
299 ]b4_user_post_prologue
300 b4_percent_code_get
[]dnl
303 # if defined YYENABLE_NLS && YYENABLE_NLS
305 # include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
306 # define YY_(msgid) dgettext ("bison-runtime", msgid)
310 # define YY_(msgid) msgid
314 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
315 If N is 0, then set CURRENT to the empty location which ends
316 the previous symbol: RHS[0] (always defined). */
318 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
319 #ifndef YYLLOC_DEFAULT
320 # define YYLLOC_DEFAULT(Current, Rhs, N) \
324 (Current).begin = YYRHSLOC (Rhs, 1).begin; \
325 (Current).end = YYRHSLOC (Rhs, N).end; \
329 (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
334 /* Suppress unused-variable warnings by "using" E. */
335 #define YYUSE(e) ((void) (e))
337 /* Enable debugging if requested. */
340 /* A pseudo ostream that takes yydebug_ into account. */
341 # define YYCDEBUG if (yydebug_) (*yycdebug_)
343 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
347 *yycdebug_ << Title << ' '; \
348 yy_symbol_print_ ((Type), (Value), (Location)); \
349 *yycdebug_ << std::endl; \
353 # define YY_REDUCE_PRINT(Rule) \
356 yy_reduce_print_ (Rule); \
359 # define YY_STACK_PRINT() \
367 # define YYCDEBUG if (false) std::cerr
368 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
369 # define YY_REDUCE_PRINT(Rule)
370 # define YY_STACK_PRINT()
372 #endif /* !YYDEBUG */
374 #define yyerrok (yyerrstatus_ = 0)
375 #define yyclearin (yychar = yyempty_)
377 #define YYACCEPT goto yyacceptlab
378 #define YYABORT goto yyabortlab
379 #define YYERROR goto yyerrorlab
380 #define YYRECOVERING() (!!yyerrstatus_)
382 ]b4_namespace_open
[]b4_error_verbose_if([[
384 /* Return YYSTR after stripping away unnecessary quotes and
385 backslashes, so that it's suitable for yyerror. The heuristic is
386 that double-quoting is unnecessary unless the string contains an
387 apostrophe, a comma, or backslash (other than backslash-backslash).
388 YYSTR is taken from yytname. */
390 ]b4_parser_class_name
[::yytnamerr_ (const char *yystr
)
394 std::string yyr
= "";
395 char const *yyp
= yystr
;
402 goto do_not_strip_quotes
;
406 goto do_not_strip_quotes
;
415 do_not_strip_quotes
: ;
422 /// Build a parser object.
423 ]b4_parser_class_name::b4_parser_class_name
[ (]b4_parse_param_decl
[)]m4_ifset([b4_parse_param
], [
426 ]m4_ifset([b4_parse_param
], [ ], [ :])[yydebug_ (false),
427 yycdebug_ (&std::cerr
)]m4_ifset([b4_parse_param
], [,])[
428 #endif]b4_parse_param_cons[
432 ]b4_parser_class_name::~b4_parser_class_name
[ ()
437 /*--------------------------------.
438 | Print this symbol on YYOUTPUT. |
439 `--------------------------------*/
442 ]b4_parser_class_name
[::yy_symbol_value_print_ (int yytype
,
443 const semantic_type
* yyvaluep
, const location_type
* yylocationp
)
449 ]m4_map([b4_symbol_actions
], m4_defn([b4_symbol_printers
]))dnl
457 ]b4_parser_class_name
[::yy_symbol_print_ (int yytype
,
458 const semantic_type
* yyvaluep
, const location_type
* yylocationp
)
460 *yycdebug_
<< (yytype
< yyntokens_
? "token" : "nterm")
461 << ' ' << yytname_
[yytype
] << " ("
462 << *yylocationp
<< ": ";
463 yy_symbol_value_print_ (yytype
, yyvaluep
, yylocationp
);
469 ]b4_parser_class_name
[::yydestruct_ (const char* yymsg
,
470 int yytype
, semantic_type
* yyvaluep
, location_type
* yylocationp
)
476 YY_SYMBOL_PRINT (yymsg
, yytype
, yyvaluep
, yylocationp
);
480 ]m4_map([b4_symbol_actions
], m4_defn([b4_symbol_destructors
]))[
487 ]b4_parser_class_name
[::yypop_ (unsigned int n
)
489 yystate_stack_
.pop (n
);
490 yysemantic_stack_
.pop (n
);
491 yylocation_stack_
.pop (n
);
496 ]b4_parser_class_name
[::debug_stream () const
502 ]b4_parser_class_name
[::set_debug_stream (std::ostream
& o
)
508 ]b4_parser_class_name
[::debug_level_type
509 ]b4_parser_class_name
[::debug_level () const
515 ]b4_parser_class_name
[::set_debug_level (debug_level_type l
)
522 ]b4_parser_class_name
[::yy_pact_value_is_default_ (int yyvalue
)
524 return yyvalue
== yypact_ninf_
;
528 ]b4_parser_class_name
[::yy_table_value_is_error_ (int yyvalue
)
530 return yyvalue
== yytable_ninf_
;
534 ]b4_parser_class_name
[::parse ()
536 /// Lookahead and lookahead in internal form.
537 int yychar
= yyempty_
;
545 /* Error handling. */
547 int yyerrstatus_
= 0;
549 /// Semantic value of the lookahead.
550 semantic_type yylval
;
551 /// Location of the lookahead.
552 location_type yylloc
;
553 /// The locations where the error started and ended.
554 location_type yyerror_range
[3];
563 YYCDEBUG
<< "Starting parse" << std::endl
;
565 ]m4_ifdef([b4_initial_action
], [
566 m4_pushdef([b4_at_dollar
], [yylloc
])dnl
567 m4_pushdef([b4_dollar_dollar
], [yylval
])dnl
568 /* User initialization code. */
569 b4_user_initial_action
570 m4_popdef([b4_dollar_dollar
])dnl
571 m4_popdef([b4_at_dollar
])])dnl
573 [ /* Initialize the stacks. The initial state will be pushed in
574 yynewstate, since the latter expects the semantical and the
575 location values to have been already stored, initialize these
576 stacks with a primary value. */
577 yystate_stack_
= state_stack_type (0);
578 yysemantic_stack_
= semantic_stack_type (0);
579 yylocation_stack_
= location_stack_type (0);
580 yysemantic_stack_
.push (yylval
);
581 yylocation_stack_
.push (yylloc
);
585 yystate_stack_
.push (yystate
);
586 YYCDEBUG
<< "Entering state " << yystate
<< std::endl
;
589 if (yystate
== yyfinal_
)
597 /* Try to take a decision without lookahead. */
598 yyn
= yypact_
[yystate
];
599 if (yy_pact_value_is_default_ (yyn
))
602 /* Read a lookahead token. */
603 if (yychar
== yyempty_
)
605 YYCDEBUG
<< "Reading a token: ";
606 yychar
= ]b4_c_function_call([yylex
], [int],
607 [[YYSTYPE
*], [&yylval
]][]dnl
608 b4_locations_if([, [[location
*], [&yylloc
]]])dnl
609 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
))[;
613 /* Convert token to internal form. */
614 if (yychar
<= yyeof_
)
616 yychar
= yytoken
= yyeof_
;
617 YYCDEBUG
<< "Now at end of input." << std::endl
;
621 yytoken
= yytranslate_ (yychar
);
622 YY_SYMBOL_PRINT ("Next token is", yytoken
, &yylval
, &yylloc
);
625 /* If the proper action on seeing token YYTOKEN is to reduce or to
626 detect an error, take that action. */
628 if (yyn
< 0 || yylast_
< yyn
|| yycheck_
[yyn
] != yytoken
)
631 /* Reduce or error. */
635 if (yy_table_value_is_error_ (yyn
))
641 /* Shift the lookahead token. */
642 YY_SYMBOL_PRINT ("Shifting", yytoken
, &yylval
, &yylloc
);
644 /* Discard the token being shifted. */
647 yysemantic_stack_
.push (yylval
);
648 yylocation_stack_
.push (yylloc
);
650 /* Count tokens shifted since error; after three, turn off error
658 /*-----------------------------------------------------------.
659 | yydefault -- do the default action for the current state. |
660 `-----------------------------------------------------------*/
662 yyn
= yydefact_
[yystate
];
667 /*-----------------------------.
668 | yyreduce -- Do a reduction. |
669 `-----------------------------*/
672 /* If YYLEN is nonzero, implement the default value of the action:
673 `$$ = $1'. Otherwise, use the top of the stack.
675 Otherwise, the following line sets YYVAL to garbage.
676 This behavior is undocumented and Bison
677 users should not rely upon it. */
679 yyval
= yysemantic_stack_
[yylen
- 1];
681 yyval
= yysemantic_stack_
[0];
684 slice
<location_type
, location_stack_type
> slice (yylocation_stack_
, yylen
);
685 YYLLOC_DEFAULT (yyloc
, slice
, yylen
);
687 YY_REDUCE_PRINT (yyn
);
694 YY_SYMBOL_PRINT ("-> $$ =", yyr1_
[yyn
], &yyval
, &yyloc
);
700 yysemantic_stack_
.push (yyval
);
701 yylocation_stack_
.push (yyloc
);
703 /* Shift the result of the reduction. */
705 yystate
= yypgoto_
[yyn
- yyntokens_
] + yystate_stack_
[0];
706 if (0 <= yystate
&& yystate
<= yylast_
707 && yycheck_
[yystate
] == yystate_stack_
[0])
708 yystate
= yytable_
[yystate
];
710 yystate
= yydefgoto_
[yyn
- yyntokens_
];
713 /*------------------------------------.
714 | yyerrlab -- here on detecting error |
715 `------------------------------------*/
717 /* If not already recovering from an error, report this error. */
721 error (yylloc
, yysyntax_error_ (yystate
, yytoken
));
724 yyerror_range
[1] = yylloc
;
725 if (yyerrstatus_
== 3)
727 /* If just tried and failed to reuse lookahead token after an
728 error, discard it. */
730 if (yychar
<= yyeof_
)
732 /* Return failure if at end of input. */
733 if (yychar
== yyeof_
)
738 yydestruct_ ("Error: discarding", yytoken
, &yylval
, &yylloc
);
743 /* Else will try to reuse lookahead token after shifting the error
748 /*---------------------------------------------------.
749 | yyerrorlab -- error raised explicitly by YYERROR. |
750 `---------------------------------------------------*/
753 /* Pacify compilers like GCC when the user code never invokes
754 YYERROR and the label yyerrorlab therefore never appears in user
759 yyerror_range
[1] = yylocation_stack_
[yylen
- 1];
760 /* Do not reclaim the symbols of the rule which action triggered
764 yystate
= yystate_stack_
[0];
767 /*-------------------------------------------------------------.
768 | yyerrlab1 -- common code for both syntax error and YYERROR. |
769 `-------------------------------------------------------------*/
771 yyerrstatus_
= 3; /* Each real token shifted decrements this. */
775 yyn
= yypact_
[yystate
];
776 if (!yy_pact_value_is_default_ (yyn
))
779 if (0 <= yyn
&& yyn
<= yylast_
&& yycheck_
[yyn
] == yyterror_
)
787 /* Pop the current state because it cannot handle the error token. */
788 if (yystate_stack_
.height () == 1)
791 yyerror_range
[1] = yylocation_stack_
[0];
792 yydestruct_ ("Error: popping",
794 &yysemantic_stack_
[0], &yylocation_stack_
[0]);
796 yystate
= yystate_stack_
[0];
800 yyerror_range
[2] = yylloc
;
801 // Using YYLLOC is tempting, but would change the location of
802 // the lookahead. YYLOC is available though.
803 YYLLOC_DEFAULT (yyloc
, yyerror_range
, 2);
804 yysemantic_stack_
.push (yylval
);
805 yylocation_stack_
.push (yyloc
);
807 /* Shift the error token. */
808 YY_SYMBOL_PRINT ("Shifting", yystos_
[yyn
],
809 &yysemantic_stack_
[0], &yylocation_stack_
[0]);
825 if (yychar
!= yyempty_
)
826 yydestruct_ ("Cleanup: discarding lookahead", yytoken
, &yylval
, &yylloc
);
828 /* Do not reclaim the symbols of the rule which action triggered
829 this YYABORT or YYACCEPT. */
831 while (yystate_stack_
.height () != 1)
833 yydestruct_ ("Cleanup: popping",
834 yystos_
[yystate_stack_
[0]],
835 &yysemantic_stack_
[0],
836 &yylocation_stack_
[0]);
843 // Generate an error message.
845 ]b4_parser_class_name
[::yysyntax_error_ (]dnl
846 b4_error_verbose_if([int yystate
, int yytoken
],
849 std::string yyres
;]b4_error_verbose_if([[
850 int yyn
= yypact_
[yystate
];
851 if (yypact_ninf_
< yyn
&& yyn
<= yylast_
)
853 /* Start YYX at -YYN if negative to avoid negative indexes in
854 YYCHECK. In other words, skip the first -YYN actions for this
855 state because they are default actions. */
856 int yyxbegin
= yyn
< 0 ? -yyn
: 0;
858 /* Stay within bounds of both yycheck and yytname. */
859 int yychecklim
= yylast_
- yyn
+ 1;
860 int yyxend
= yychecklim
< yyntokens_
? yychecklim
: yyntokens_
;
862 // Number of reported tokens (one for the "unexpected", one per
866 enum { YYERROR_VERBOSE_ARGS_MAXIMUM
= 5 };
867 // Arguments of yyformat.
868 char const *yyarg
[YYERROR_VERBOSE_ARGS_MAXIMUM
];
869 yyarg
[yycount
++] = yytname_
[yytoken
];
870 for (int yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
871 if (yycheck_
[yyx
+ yyn
] == yyx
&& yyx
!= yyterror_
872 && !yy_table_value_is_error_ (yytable_
[yyx
+ yyn
]))
874 if (yycount
== YYERROR_VERBOSE_ARGS_MAXIMUM
)
880 yyarg
[yycount
++] = yytname_
[yyx
];
883 char const* yyformat
= 0;
886 #define YYCASE_(N, S) \
890 YYCASE_(1, YY_("syntax error, unexpected %s"));
891 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
892 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
893 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
894 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
899 for (char const* yyp
= yyformat
; *yyp
; ++yyp
)
900 if (yyp
[0] == '%' && yyp
[1] == 's' && yyi
< yycount
)
902 yyres
+= yytnamerr_ (yyarg
[yyi
++]);
910 [ yyres
= YY_("syntax error");
915 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
917 const ]b4_int_type(b4_pact_ninf
, b4_pact_ninf
) b4_parser_class_name::yypact_ninf_
= b4_pact_ninf
[;
918 const ]b4_int_type_for([b4_pact
])[
919 ]b4_parser_class_name
[::yypact_
[] =
924 /* YYDEFACT[S] -- default reduction number in state S. Performed when
925 YYTABLE doesn't specify something else to do. Zero means the
926 default is an error. */
927 const ]b4_int_type_for([b4_defact
])[
928 ]b4_parser_class_name
[::yydefact_
[] =
933 /* YYPGOTO[NTERM-NUM]. */
934 const ]b4_int_type_for([b4_pgoto
])[
935 ]b4_parser_class_name
[::yypgoto_
[] =
940 /* YYDEFGOTO[NTERM-NUM]. */
941 const ]b4_int_type_for([b4_defgoto
])[
942 ]b4_parser_class_name
[::yydefgoto_
[] =
947 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
948 positive, shift that token. If negative, reduce the rule which
949 number is the opposite. If YYTABLE_NINF_, syntax error. */
950 const ]b4_int_type(b4_table_ninf
, b4_table_ninf
) b4_parser_class_name::yytable_ninf_
= b4_table_ninf
[;
951 const ]b4_int_type_for([b4_table
])[
952 ]b4_parser_class_name
[::yytable_
[] =
958 const ]b4_int_type_for([b4_check
])[
959 ]b4_parser_class_name
[::yycheck_
[] =
964 /* STOS_[STATE-NUM] -- The (internal number of the) accessing
965 symbol of state STATE-NUM. */
966 const ]b4_int_type_for([b4_stos
])[
967 ]b4_parser_class_name
[::yystos_
[] =
973 /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
975 const ]b4_int_type_for([b4_toknum
])[
976 ]b4_parser_class_name
[::yytoken_number_
[] =
982 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
983 const ]b4_int_type_for([b4_r1
])[
984 ]b4_parser_class_name
[::yyr1_
[] =
989 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
990 const ]b4_int_type_for([b4_r2
])[
991 ]b4_parser_class_name
[::yyr2_
[] =
996 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
997 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
998 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
1000 const ]b4_parser_class_name
[::yytname_
[] =
1007 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
1008 const ]b4_parser_class_name
[::rhs_number_type
1009 ]b4_parser_class_name
[::yyrhs_
[] =
1014 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1016 const ]b4_int_type_for([b4_prhs
])[
1017 ]b4_parser_class_name
[::yyprhs_
[] =
1022 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1023 const ]b4_int_type_for([b4_rline
])[
1024 ]b4_parser_class_name
[::yyrline_
[] =
1029 // Print the state stack on the debug stream.
1031 ]b4_parser_class_name
[::yystack_print_ ()
1033 *yycdebug_
<< "Stack now";
1034 for (state_stack_type::const_iterator i
= yystate_stack_
.begin ();
1035 i
!= yystate_stack_
.end (); ++i
)
1036 *yycdebug_
<< ' ' << *i
;
1037 *yycdebug_
<< std::endl
;
1040 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1042 ]b4_parser_class_name
[::yy_reduce_print_ (int yyrule
)
1044 unsigned int yylno
= yyrline_
[yyrule
];
1045 int yynrhs
= yyr2_
[yyrule
];
1046 /* Print the symbols being reduced, and their result. */
1047 *yycdebug_
<< "Reducing stack by rule " << yyrule
- 1
1048 << " (line " << yylno
<< "):" << std::endl
;
1049 /* The symbols being reduced. */
1050 for (int yyi
= 0; yyi
< yynrhs
; yyi
++)
1051 YY_SYMBOL_PRINT (" $" << yyi
+ 1 << " =",
1052 yyrhs_
[yyprhs_
[yyrule
] + yyi
],
1053 &]b4_rhs_value(yynrhs
, yyi
+ 1)[,
1054 &]b4_rhs_location(yynrhs
, yyi
+ 1)[);
1058 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1059 ]b4_parser_class_name
[::token_number_type
1060 ]b4_parser_class_name
[::yytranslate_ (int t
)
1063 const token_number_type
1068 if ((unsigned int) t
<= yyuser_token_number_max_
)
1069 return translate_table
[t
];
1071 return yyundef_token_
;
1074 const int ]b4_parser_class_name
[::yyeof_
= 0;
1075 const int ]b4_parser_class_name
[::yylast_
= ]b4_last
[;
1076 const int ]b4_parser_class_name
[::yynnts_
= ]b4_nterms_number
[;
1077 const int ]b4_parser_class_name
[::yyempty_
= -2;
1078 const int ]b4_parser_class_name
[::yyfinal_
= ]b4_final_state_number
[;
1079 const int ]b4_parser_class_name
[::yyterror_
= 1;
1080 const int ]b4_parser_class_name
[::yyerrcode_
= 256;
1081 const int ]b4_parser_class_name
[::yyntokens_
= ]b4_tokens_number
[;
1083 const unsigned int ]b4_parser_class_name
[::yyuser_token_number_max_
= ]b4_user_token_number_max
[;
1084 const ]b4_parser_class_name
[::token_number_type
]b4_parser_class_name
[::yyundef_token_
= ]b4_undef_token_number
[;
1086 ]b4_namespace_close
[
1090 @
output(b4_dir_prefix
[]stack
.hh@
)@
1091 b4_copyright([Stack handling
for Bison parsers in C
++],
1094 #ifndef BISON_STACK_HH
1095 # define BISON_STACK_HH
1100 template <class T
, class S
= std::deque
<T
> >
1105 // Hide our reversed order.
1106 typedef typename
S::reverse_iterator iterator
;
1107 typedef typename
S::const_reverse_iterator const_iterator
;
1113 stack (unsigned int n
) : seq_ (n
)
1119 operator [] (unsigned int i
)
1126 operator [] (unsigned int i
) const
1135 seq_
.push_front (t
);
1140 pop (unsigned int n
= 1)
1150 return seq_
.size ();
1153 inline const_iterator
begin () const { return seq_
.rbegin (); }
1154 inline const_iterator
end () const { return seq_
.rend (); }
1161 /// Present a slice of the top of a stack.
1162 template <class T
, class S
= stack
<T
> >
1167 slice (const S
& stack
,
1168 unsigned int range
) : stack_ (stack
),
1175 operator [] (unsigned int i
) const
1177 return stack_
[range_
- i
];
1183 unsigned int range_
;
1185 ]b4_namespace_close
[
1187 #endif // not BISON_STACK_HH[]dnl