]> git.saurik.com Git - bison.git/blame - data/lalr1.cc
remove duplicate definitions
[bison.git] / data / lalr1.cc
CommitLineData
60491a94 1# C++ skeleton for Bison
b4721715 2
34136e65 3# Copyright (C) 2002-2012 Free Software Foundation, Inc.
60491a94 4
f16b0819 5# This program is free software: you can redistribute it and/or modify
60491a94 6# it under the terms of the GNU General Public License as published by
f16b0819 7# the Free Software Foundation, either version 3 of the License, or
60491a94 8# (at your option) any later version.
f16b0819 9#
60491a94
AD
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.
f16b0819 14#
60491a94 15# You should have received a copy of the GNU General Public License
f16b0819 16# along with this program. If not, see <http://www.gnu.org/licenses/>.
60491a94 17
cf147260 18m4_include(b4_pkgdatadir/[c++.m4])
7eb8a0bc 19
2ea7730c 20
ba206cf4
AD
21# b4_integral_parser_table_declare(TABLE-NAME, CONTENT, COMMENT)
22# --------------------------------------------------------------
0fddb3d5 23# Declare "parser::yy<TABLE-NAME>_" which contents is CONTENT.
ba206cf4 24m4_define([b4_integral_parser_table_declare],
15f66669 25[m4_ifval([$3], [b4_comment([$3], [ ])
6ab1adbe
AD
26])dnl
27 static const b4_int_type_for([$2]) yy$1_[[]];dnl
0fddb3d5
AD
28])
29
ba206cf4 30# b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
2b08bceb 31# -------------------------------------------------------------
8901f32e 32# Define "parser::yy<TABLE-NAME>_" which contents is CONTENT.
ba206cf4 33m4_define([b4_integral_parser_table_define],
6ab1adbe 34[ const b4_int_type_for([$2])
8901f32e
AD
35 b4_parser_class_name::yy$1_[[]] =
36 {
37 $2
6ab1adbe
AD
38 };dnl
39])
40
a9ce3f54 41
5de9c593
AD
42# b4_symbol_value_template(VAL, [TYPE])
43# -------------------------------------
507aa0e2
AD
44# Same as b4_symbol_value, but used in a template method. It makes
45# a difference when using variants.
5de9c593
AD
46m4_copy([b4_symbol_value], [b4_symbol_value_template])
47
5ab8c47b 48
e1f93869
AD
49# b4_lhs_value([TYPE])
50# --------------------
51# Expansion of $<TYPE>$.
52m4_define([b4_lhs_value],
507aa0e2 53 [b4_symbol_value([yylhs.value], [$1])])
e1f93869
AD
54
55
56# b4_lhs_location()
57# -----------------
58# Expansion of @$.
59m4_define([b4_lhs_location],
507aa0e2 60 [yylhs.location])
e1f93869
AD
61
62
33c195cc
AD
63# b4_rhs_data(RULE-LENGTH, NUM)
64# -----------------------------
65# Return the data corresponding to the symbol #NUM, where the current
66# rule has RULE-LENGTH symbols on RHS.
67m4_define([b4_rhs_data],
3204049e 68 [yystack_@{b4_subtract($@)@}])
33c195cc
AD
69
70
71# b4_rhs_state(RULE-LENGTH, NUM)
51bacae6 72# ------------------------------
33c195cc
AD
73# The state corresponding to the symbol #NUM, where the current
74# rule has RULE-LENGTH symbols on RHS.
75m4_define([b4_rhs_state],
76 [b4_rhs_data([$1], [$2]).state])
77
78
8901f32e
AD
79# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
80# --------------------------------------
81# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
82# symbols on RHS.
83m4_define([b4_rhs_value],
33c195cc
AD
84 [b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3])])
85
8901f32e
AD
86
87# b4_rhs_location(RULE-LENGTH, NUM)
88# ---------------------------------
89# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
90# on RHS.
91m4_define([b4_rhs_location],
33c195cc 92 [b4_rhs_data([$1], [$2]).location])
8901f32e 93
507aa0e2 94
2bde9113
AD
95# b4_symbol_action(SYMBOL-NUM, KIND)
96# ----------------------------------
97# Run the action KIND (destructor or printer) for SYMBOL-NUM.
c4585f1e 98# Same as in C, but using references instead of pointers.
2bde9113
AD
99m4_define([b4_symbol_action],
100[b4_symbol_if([$1], [has_$2],
4323e0da
AD
101[m4_pushdef([b4_symbol_value], m4_defn([b4_symbol_value_template]))[]dnl
102b4_dollar_pushdef([yysym.value],
103 b4_symbol_if([$1], [has_type],
104 [m4_dquote(b4_symbol([$1], [type]))]),
105 [yysym.location])dnl
fb7c5b1f 106 b4_symbol_case_([$1])
2bde9113
AD
107b4_syncline([b4_symbol([$1], [$2_line])], ["b4_symbol([$1], [$2_file])"])
108 b4_symbol([$1], [$2])
c4585f1e
AD
109b4_syncline([@oline@], [@ofile@])
110 break;
2bde9113 111
4323e0da
AD
112m4_popdef([b4_symbol_value])[]dnl
113b4_dollar_popdef[]dnl
2bde9113
AD
114])])
115
2873fdf8 116
8901f32e 117m4_pushdef([b4_copyright_years],
34136e65 118 [2002-2012])
8901f32e 119
6afc30cc 120m4_define([b4_parser_class_name],
a4e25e1d 121 [b4_percent_define_get([[parser_class_name]])])
34376418 122
f6b561d9 123b4_locations_if([b4_percent_define_ifdef([[api.location.type]], [],
7789b6e3 124 [# Backward compatibility.
c547693a
AD
125 m4_define([b4_location_constructors])
126 m4_include(b4_pkgdatadir/[location.cc])])])
51bacae6 127m4_include(b4_pkgdatadir/[stack.hh])
507aa0e2 128b4_variant_if([m4_include(b4_pkgdatadir/[variant.hh])])
a5eb1ed2 129
d27c5e65
AD
130# b4_shared_declarations
131# ----------------------
132# Declaration that might either go into the header (if --defines)
133# or open coded in the parser body.
134m4_define([b4_shared_declarations],
135[b4_percent_code_get([[requires]])[
ff348970 136]b4_parse_assert_if([# include <cassert>])[
5de5b987 137# include <deque>
ff348970 138# include <iostream>
5de5b987
AD
139# include <stdexcept>
140# include <string>]b4_defines_if([[
ff348970 141# include "stack.hh"
f6b561d9 142]b4_locations_if([b4_percent_define_ifdef([[api.location.type]], [],
5de5b987
AD
143 [[# include "location.hh"]])])])[
144
145]b4_YYDEBUG_define[
50997c6e 146
93549bcd 147]b4_namespace_open[
4162fa07 148
5de5b987
AD
149]b4_defines_if([],
150[b4_stack_define
f6b561d9 151b4_locations_if([b4_percent_define_ifdef([[api.location.type]], [],
5de5b987 152 [b4_position_define
93549bcd 153b4_location_define])])])[
69e2658b 154
93549bcd 155]b4_variant_if([b4_variant_define])[
3f3eed27 156
efeed023 157 /// A Bison parser.
07fed891 158 class ]b4_parser_class_name[
2b548aa6 159 {
fb9712a9 160 public:
4f84717d 161]b4_public_types_declare[
efeed023 162 /// Build a parser object.
98ae9643
AD
163 ]b4_parser_class_name[ (]b4_parse_param_decl[);
164 virtual ~]b4_parser_class_name[ ();
2b548aa6 165
f69a4142
AD
166 /// Parse.
167 /// \returns 0 iff parsing succeeded.
e019c247 168 virtual int parse ();
2b548aa6 169
5f108727 170#if ]b4_api_PREFIX[DEBUG
f69a4142 171 /// The current debugging stream.
9a1e9989
AD
172 std::ostream& debug_stream () const;
173 /// Set the current debugging stream.
174 void set_debug_stream (std::ostream &);
175
a3cb6248
AD
176 /// Type for debugging levels.
177 typedef int debug_level_type;
178 /// The current debugging level.
179 debug_level_type debug_level () const;
180 /// Set the current debugging level.
181 void set_debug_level (debug_level_type l);
52cbbe84 182#endif
a3cb6248 183
34904c57
AD
184 /// Report a syntax error.]b4_locations_if([[
185 /// \param loc where the syntax error is found.]])[
efeed023 186 /// \param msg a description of the syntax error.
34904c57 187 virtual void error (]b4_locations_if([[const location_type& loc, ]])[const std::string& msg);
efeed023 188
a6552c5d
AD
189 /// Report a syntax error.
190 void error (const syntax_error& err);
191
49572920 192 private:
e019c247 193 /// State numbers.
f479c6c6 194 typedef int state_type;
2b548aa6 195
ceb8b8e6
AD
196 /// Generate an error message.
197 /// \param yystate the state where the error occurred.
198 /// \param yytoken the lookahead token.
199 virtual std::string yysyntax_error_ (state_type yystate, int yytoken);
200
7580c379
AD
201 /// Compute post-reduction state.
202 /// \param yystate the current state
203 /// \param yylhs the nonterminal to push on the stack
204 state_type yy_lr_goto_state_ (state_type yystate, int yylhs);
205
f2b30bdf
JD
206 /// Whether the given \c yypact_ value indicates a defaulted state.
207 /// \param yyvalue the value to check
208 static bool yy_pact_value_is_default_ (int yyvalue);
209
210 /// Whether the given \c yytable_ value indicates a syntax error.
211 /// \param yyvalue the value to check
212 static bool yy_table_value_is_error_ (int yyvalue);
213
e019c247 214 /// Internal symbol numbers.
f479c6c6 215 typedef ]b4_int_type_for([b4_translate])[ token_number_type;
617a8f12 216 static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
617a8f12 217 static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
efeed023 218
7aaaad6c
AD
219 // Tables.
220]b4_parser_tables_declare[]b4_error_verbose_if([
9e0876fb 221
9e0876fb 222 /// Convert the symbol name \a n to a form suitable for a diagnostic.
422c18f4 223 static std::string yytnamerr_ (const char *n);])[
2b548aa6 224
5f108727 225]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
258cddbc
AD
226 /// For a symbol, its name in clear.
227 static const char* const yytname_[];
5f108727 228]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
ba206cf4
AD
229]b4_integral_parser_table_declare([rline], [b4_rline],
230 [YYRLINE[YYN] -- Source line where rule number YYN was defined.])[
efeed023 231 /// Report on the debug stream that the rule \a r is going to be reduced.
d1ff7a7c 232 virtual void yy_reduce_print_ (int r);
efeed023 233 /// Print the state stack on the debug stream.
f69a4142 234 virtual void yystack_print_ ();
fa7b79c0 235
7aaaad6c 236 // Debugging.
fa7b79c0
PE
237 int yydebug_;
238 std::ostream* yycdebug_;
ccdc1577 239#endif // ]b4_api_PREFIX[DEBUG
2b548aa6 240
32c96bd7 241 /// Convert a scanner token number \a t to a symbol number.
e36ec1f4 242 static inline token_number_type yytranslate_ (]b4_token_ctor_if([token_type], [int])[ t);
f69a4142 243
ccdc1577 244#if ]b4_api_PREFIX[DEBUG
1f7d007b
AD
245 /// \brief Display a symbol type, value and location.
246 /// \param yyo The output stream.
247 /// \param yysym The symbol.
5de9c593
AD
248 template <typename Exact>
249 void yy_print_ (std::ostream& yyo,
250 const symbol_base_type<Exact>& yysym) const;
57295d14
AD
251#endif
252
1f7d007b
AD
253 /// \brief Reclaim the memory associated to a symbol.
254 /// \param yymsg Why this token is reclaimed.
255 /// If null, print nothing.
256 /// \param s The symbol.
5de9c593
AD
257 template <typename Exact>
258 inline void yy_destroy_ (const char* yymsg,
259 symbol_base_type<Exact>& yysym) const;
1f7d007b 260
2873fdf8 261 private:
1f7d007b 262 /// Element of the stack: a state and its attributes.
5de9c593 263 struct stack_symbol_type : symbol_base_type<stack_symbol_type>
1f7d007b 264 {
5de9c593
AD
265 /// The parent class.
266 typedef symbol_base_type<stack_symbol_type> super_type;
267
1f7d007b 268 /// Default constructor.
d3be4f6d 269 inline stack_symbol_type ();
1f7d007b
AD
270
271 /// Constructor.
710c4a65 272 inline stack_symbol_type (]b4_join([state_type s],
2ea7730c
AD
273 [const semantic_type& v],
274 b4_locations_if([const location_type& l]))[);
1f7d007b
AD
275
276 /// The state.
277 state_type state;
57295d14 278
2b08bceb 279 /// The type (corresponding to \a state).
5de9c593 280 inline int type_get_ () const;
1f7d007b 281 };
57295d14 282
8901f32e 283 /// Stack type.
bc0b0477 284 typedef stack<stack_symbol_type> stack_type;
8901f32e
AD
285
286 /// The stack.
287 stack_type yystack_;
288
7dedf26e 289 /// Push a new state on the stack.
9380cfd0
AD
290 /// \param m a debug message to display
291 /// if null, no trace is output.
e9b0834e
AD
292 /// \param s the symbol
293 /// \warning the contents of \a s.value is stolen.
bc0b0477 294 inline void yypush_ (const char* m, stack_symbol_type& s);
7dedf26e 295
1f7d007b
AD
296 /// Push a new look ahead token on the state on the stack.
297 /// \param m a debug message to display
298 /// if null, no trace is output.
299 /// \param s the state
300 /// \param sym the symbol (for its value and location).
301 /// \warning the contents of \a s.value is stolen.
302 inline void yypush_ (const char* m, state_type s, symbol_type& sym);
303
52d5733f 304 /// Pop \a n symbols the three stacks.
f69a4142 305 inline void yypop_ (unsigned int n = 1);
52d5733f 306
762a801e 307 /* Constants. */
914202bd
AD
308 enum
309 {
310 yyeof_ = 0,
311 yylast_ = ]b4_last[, //< Last index in yytable_.
312 yynnts_ = ]b4_nterms_number[, //< Number of nonterminal symbols.
313 yyempty_ = -2,
314 yyfinal_ = ]b4_final_state_number[, //< Termination state number.
315 yyterror_ = 1,
316 yyerrcode_ = 256,
f3bd3f78 317 yyntokens_ = ]b4_tokens_number[ //< Number of tokens.
914202bd
AD
318 };
319
caf37a36 320]b4_parse_param_vars[
2b548aa6 321 };
1c4af381 322
e36ec1f4 323]b4_token_ctor_if([b4_yytranslate_define
0623bacc 324b4_public_types_define])[
793fbca5 325]b4_namespace_close[
2b548aa6 326
592d0b1e 327]b4_percent_define_flag_if([[global_tokens_and_yystype]],
6687da34 328[b4_token_defines
fb9712a9 329
4b3847c3 330#ifndef ]b4_api_PREFIX[STYPE
9d9b8b70 331 /* Redirection for backward compatibility. */
4b3847c3 332# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
fb9712a9 333#endif
22172d47
AD
334])[
335]b4_percent_code_get([[provides]])[
d27c5e65
AD
336]])
337
338# We do want M4 expansion after # for CPP macros.
339m4_changecom()
85f0b29e
AD
340b4_defines_if(
341[m4_divert_push(0)dnl
d27c5e65
AD
342@output(b4_spec_defines_file@)@
343b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
344[
345/**
346 ** \file ]b4_spec_defines_file[
347 ** Define the ]b4_namespace_ref[::parser class.
348 */
349
350/* C++ LALR(1) parser skeleton written by Akim Demaille. */
351
352]b4_cpp_guard_open([b4_spec_defines_file])[
353]b4_shared_declarations[
22172d47 354]b4_cpp_guard_close([b4_spec_defines_file])
1c7ec959 355b4_output_end()
85f0b29e
AD
356])
357
358
1c7ec959 359b4_output_begin([b4_parser_file_name])
a9ce3f54 360b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])
a4e25e1d 361b4_percent_code_get([[top]])[]dnl
aa08666d 362m4_if(b4_prefix, [yy], [],
c5b95ccf
AD
363[
364// Take the name prefix into account.
9bc0dd67
JD
365#define yylex b4_prefix[]lex])[
366
28427f57 367// First part of user declarations.
c944f7f2 368]b4_user_pre_prologue[
9bc0dd67 369
28427f57
AD
370]b4_null_define[
371
85f0b29e
AD
372]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
373 [b4_shared_declarations])[
50997c6e 374
fb9712a9 375/* User implementation prologue. */
771dc643
AD
376]b4_user_post_prologue[
377]b4_percent_code_get[
378
771dc643 379#ifndef YY_
ae93128c 380# if defined YYENABLE_NLS && YYENABLE_NLS
30757c8c
PE
381# if ENABLE_NLS
382# include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
383# define YY_(msgid) dgettext ("bison-runtime", msgid)
384# endif
385# endif
386# ifndef YY_
387# define YY_(msgid) msgid
388# endif
989b5b8e
AD
389#endif
390
38435078 391]b4_locations_if([dnl
ccdc1577
AD
392[#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
393]b4_yylloc_default_define])[
38435078 394
2a4647a3 395/* Suppress unused-variable warnings by "using" E. */
12ce2df6 396#define YYUSE(e) ((void) (e))
2a4647a3 397
2b548aa6 398/* Enable debugging if requested. */
5f108727 399#if ]b4_api_PREFIX[DEBUG
284acc8b 400
fa7b79c0
PE
401/* A pseudo ostream that takes yydebug_ into account. */
402# define YYCDEBUG if (yydebug_) (*yycdebug_)
403
1f7d007b 404# define YY_SYMBOL_PRINT(Title, Symbol) \
57295d14
AD
405 do { \
406 if (yydebug_) \
407 { \
408 *yycdebug_ << Title << ' '; \
1f7d007b 409 yy_print_ (*yycdebug_, Symbol); \
57295d14
AD
410 *yycdebug_ << std::endl; \
411 } \
8901f32e 412 } while (false)
284acc8b 413
e9690142
JD
414# define YY_REDUCE_PRINT(Rule) \
415 do { \
8901f32e 416 if (yydebug_) \
e9690142 417 yy_reduce_print_ (Rule); \
8901f32e 418 } while (false)
284acc8b 419
e9690142
JD
420# define YY_STACK_PRINT() \
421 do { \
8901f32e
AD
422 if (yydebug_) \
423 yystack_print_ (); \
424 } while (false)
284acc8b 425
5f108727 426#else /* !]b4_api_PREFIX[DEBUG */
284acc8b 427
a36b333c 428# define YYCDEBUG if (false) std::cerr
beadb220 429# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
1f7d007b
AD
430# define YY_REDUCE_PRINT(Rule) static_cast<void>(0)
431# define YY_STACK_PRINT() static_cast<void>(0)
284acc8b 432
5f108727 433#endif /* !]b4_api_PREFIX[DEBUG */
2b548aa6 434
39be9022
AD
435#define yyerrok (yyerrstatus_ = 0)
436#define yyclearin (yyempty = true)
98e26a92 437
39be9022
AD
438#define YYACCEPT goto yyacceptlab
439#define YYABORT goto yyabortlab
440#define YYERROR goto yyerrorlab
98e26a92 441#define YYRECOVERING() (!!yyerrstatus_)
60a777aa 442
422c18f4 443]b4_namespace_open[]b4_error_verbose_if([[
9e0876fb 444
aa08666d
AD
445 /* Return YYSTR after stripping away unnecessary quotes and
446 backslashes, so that it's suitable for yyerror. The heuristic is
447 that double-quoting is unnecessary unless the string contains an
448 apostrophe, a comma, or backslash (other than backslash-backslash).
449 YYSTR is taken from yytname. */
450 std::string
451 ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
452 {
453 if (*yystr == '"')
454 {
455 std::string yyr = "";
456 char const *yyp = yystr;
193d7c70 457
aa08666d
AD
458 for (;;)
459 switch (*++yyp)
460 {
461 case '\'':
462 case ',':
463 goto do_not_strip_quotes;
193d7c70 464
aa08666d
AD
465 case '\\':
466 if (*++yyp != '\\')
467 goto do_not_strip_quotes;
468 /* Fall through. */
469 default:
470 yyr += *yyp;
471 break;
193d7c70 472
aa08666d
AD
473 case '"':
474 return yyr;
475 }
476 do_not_strip_quotes: ;
477 }
193d7c70 478
aa08666d
AD
479 return yystr;
480 }
422c18f4 481]])[
9e0876fb 482
98ae9643 483 /// Build a parser object.
fa7b79c0
PE
484 ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
485 :])[
5f108727 486#if ]b4_api_PREFIX[DEBUG
fa7b79c0
PE
487 ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
488 yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
489#endif]b4_parse_param_cons[
98ae9643
AD
490 {
491 }
a0e68930 492
98ae9643
AD
493 ]b4_parser_class_name::~b4_parser_class_name[ ()
494 {
495 }
a0e68930 496
a0e68930 497
1f7d007b
AD
498 /*---------------.
499 | Symbol types. |
500 `---------------*/
501
e36ec1f4 502]b4_token_ctor_if([], [b4_public_types_define])[
2873fdf8 503
1f7d007b
AD
504 // stack_symbol_type.
505 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type ()
5de9c593
AD
506 : super_type ()
507 , state ()
1f7d007b
AD
508 {
509 }
510
710c4a65 511 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (]b4_join(
2ea7730c
AD
512 [state_type s],
513 [const semantic_type& v],
514 b4_locations_if([const location_type& l]))[)
515 : super_type (v]b4_locations_if([, l])[)
5de9c593 516 , state (s)
1f7d007b
AD
517 {
518 }
519
520 int
5de9c593 521 ]b4_parser_class_name[::stack_symbol_type::type_get_ () const
1f7d007b
AD
522 {
523 return yystos_[state];
524 }
525
526
5de9c593 527 template <typename Exact>
98ae9643 528 void
5de9c593
AD
529 ]b4_parser_class_name[::yy_destroy_ (const char* yymsg,
530 symbol_base_type<Exact>& yysym) const
98ae9643 531 {
8901f32e 532 if (yymsg)
1f7d007b 533 YY_SYMBOL_PRINT (yymsg, yysym);
98ae9643 534
8901f32e 535 // User destructor.
c5026327 536 int yytype = yysym.type_get ();
98ae9643
AD
537 switch (yytype)
538 {
e3c52a63 539]b4_symbol_foreach([b4_symbol_destructor])dnl
2bde9113
AD
540[ default:
541 break;
8901f32e
AD
542 }]b4_variant_if([
543
544 // Type destructor.
4c3cc7da 545 b4_symbol_variant([[yytype]], [[yysym.value]], [[template destroy]])])[
8901f32e
AD
546 }
547
ccdc1577 548#if ]b4_api_PREFIX[DEBUG
5de9c593 549 template <typename Exact>
1f7d007b 550 void
5de9c593
AD
551 ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
552 const symbol_base_type<Exact>& yysym) const
8901f32e 553 {
c5026327
AD
554 std::ostream& yyoutput = yyo;
555 YYUSE (yyoutput);
1f7d007b
AD
556 int yytype = yysym.type_get ();
557 yyo << (yytype < yyntokens_ ? "token" : "nterm")
2ea7730c
AD
558 << ' ' << yytname_[yytype] << " ("]b4_locations_if([
559 << yysym.location << ": "])[;
1f7d007b
AD
560 switch (yytype)
561 {
e3c52a63 562]b4_symbol_foreach([b4_symbol_printer])dnl
2bde9113 563[ default:
e9690142 564 break;
1f7d007b
AD
565 }
566 yyo << ')';
8901f32e 567 }
1f7d007b 568#endif
8901f32e 569
1f7d007b
AD
570 void
571 ]b4_parser_class_name[::yypush_ (const char* m, state_type s,
572 symbol_type& sym)
8901f32e 573 {
1f7d007b
AD
574 if (m)
575 YY_SYMBOL_PRINT (m, sym);
576]b4_variant_if(
710c4a65 577[[ yystack_.push (stack_symbol_type (]b4_join(
2ea7730c
AD
578 [s],
579 [semantic_type()],
580 b4_locations_if([sym.location]))[));
1f7d007b
AD
581 ]b4_symbol_variant([[yystos_[s]]], [[yystack_[0].value]],
582 [build], [sym.value])],
710c4a65 583[[ yystack_.push (stack_symbol_type (]b4_join(
2ea7730c
AD
584 [s],
585 [sym.value],
586 b4_locations_if([sym.location]))[));]])[
98ae9643 587 }
60a777aa 588
7dedf26e 589 void
bc0b0477 590 ]b4_parser_class_name[::yypush_ (const char* m, stack_symbol_type& s)
7dedf26e 591 {
9380cfd0 592 if (m)
1f7d007b 593 YY_SYMBOL_PRINT (m, s);
8901f32e 594]b4_variant_if(
710c4a65 595[[ yystack_.push (stack_symbol_type (]b4_join(
2ea7730c
AD
596 [s.state],
597 [semantic_type()],
598 b4_locations_if([s.location]))[));
1f7d007b 599 ]b4_symbol_variant([[yystos_[s.state]]], [[yystack_[0].value]],
e9b0834e
AD
600 [build], [s.value])],
601[ yystack_.push (s);])[
7dedf26e
AD
602 }
603
98ae9643
AD
604 void
605 ]b4_parser_class_name[::yypop_ (unsigned int n)
606 {
8901f32e 607 yystack_.pop (n);
98ae9643 608 }
52d5733f 609
5f108727 610#if ]b4_api_PREFIX[DEBUG
98ae9643
AD
611 std::ostream&
612 ]b4_parser_class_name[::debug_stream () const
613 {
614 return *yycdebug_;
615 }
9a1e9989 616
98ae9643
AD
617 void
618 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
619 {
620 yycdebug_ = &o;
621 }
9a1e9989
AD
622
623
98ae9643
AD
624 ]b4_parser_class_name[::debug_level_type
625 ]b4_parser_class_name[::debug_level () const
626 {
627 return yydebug_;
628 }
a3cb6248 629
98ae9643
AD
630 void
631 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
632 {
633 yydebug_ = l;
634 }
ccdc1577 635#endif // ]b4_api_PREFIX[DEBUG
a3cb6248 636
7580c379
AD
637 inline ]b4_parser_class_name[::state_type
638 ]b4_parser_class_name[::yy_lr_goto_state_ (state_type yystate, int yylhs)
639 {
640 int yyr = yypgoto_[yylhs - yyntokens_] + yystate;
641 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
642 return yytable_[yyr];
643 else
644 return yydefgoto_[yylhs - yyntokens_];
645 }
646
f2b30bdf
JD
647 inline bool
648 ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
649 {
650 return yyvalue == yypact_ninf_;
651 }
652
653 inline bool
654 ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
655 {
aa0cb40d 656 return yyvalue == yytable_ninf_;
f2b30bdf
JD
657 }
658
98ae9643
AD
659 int
660 ]b4_parser_class_name[::parse ()
661 {
39be9022
AD
662 /// Whether yyla contains a lookahead.
663 bool yyempty = true;
d4fb5e3c 664
b720fedf 665 // State.
98ae9643 666 int yyn;
a85284cf 667 int yylen = 0;
d4fb5e3c 668
b720fedf 669 // Error handling.
98ae9643
AD
670 int yynerrs_ = 0;
671 int yyerrstatus_ = 0;
dbcdae2d 672
6082531a 673 /// The lookahead symbol.
2ea7730c 674 symbol_type yyla;]b4_locations_if([[
6082531a 675
98ae9643 676 /// The locations where the error started and ended.
44c2b42d 677 stack_symbol_type yyerror_range[3];]])[
dbcdae2d 678
e1f93869 679 /// $$ and @@$.
bc0b0477 680 stack_symbol_type yylhs;
dbcdae2d 681
ff348970 682 /// The return value of parse ().
98ae9643 683 int yyresult;
ad745863 684
7e1fabbe
AD
685 // FIXME: This shoud be completely indented. It is not yet to
686 // avoid gratuitous conflicts when merging into the master branch.
687 try
688 {
98ae9643 689 YYCDEBUG << "Starting parse" << std::endl;
451364ed 690
451364ed 691]m4_ifdef([b4_initial_action], [
4323e0da 692b4_dollar_pushdef([yyla.value], [], [yyla.location])dnl
9d9b8b70 693 /* User initialization code. */
8ec0a172 694 b4_user_initial_action
cd735a8c 695b4_dollar_popdef])[]dnl
451364ed 696
8901f32e 697 [ /* Initialize the stack. The initial state will be set in
98ae9643
AD
698 yynewstate, since the latter expects the semantical and the
699 location values to have been already stored, initialize these
700 stacks with a primary value. */
8901f32e 701 yystack_ = stack_type (0);
eeaf1dc6 702 yypush_ (YY_NULL, 0, yyla);
98ae9643 703
7580c379 704 // A new symbol was pushed on the stack.
98ae9643 705 yynewstate:
7580c379 706 YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
868d2d96
JD
707
708 /* Accept? */
7580c379 709 if (yystack_[0].state == yyfinal_)
868d2d96
JD
710 goto yyacceptlab;
711
98ae9643
AD
712 goto yybackup;
713
714 /* Backup. */
715 yybackup:
716
742e4900 717 /* Try to take a decision without lookahead. */
7580c379 718 yyn = yypact_[yystack_[0].state];
f2b30bdf 719 if (yy_pact_value_is_default_ (yyn))
98ae9643
AD
720 goto yydefault;
721
742e4900 722 /* Read a lookahead token. */
39be9022 723 if (yyempty)
98ae9643 724 {
09277875 725 YYCDEBUG << "Reading a token: ";
a6552c5d 726 try
77a1a208 727 {
e36ec1f4 728]b4_token_ctor_if(
77a1a208 729[ yyla = b4_function_call([yylex], [symbol_type],
a6552c5d 730 m4_ifdef([b4_lex_param], b4_lex_param));],
77a1a208 731[ yyla.type = yytranslate_ (b4_function_call([yylex], [int],
5458913a 732 [b4_api_PREFIX[STYPE*], [&yyla.value]][]dnl
6082531a 733b4_locations_if([, [[location*], [&yyla.location]]])dnl
09277875 734m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
77a1a208 735 }
a6552c5d 736 catch (const syntax_error& yyexc)
77a1a208
AD
737 {
738 error (yyexc);
739 goto yyerrlab1;
740 }
39be9022 741 yyempty = false;
98ae9643 742 }
aba12ad1 743 YY_SYMBOL_PRINT ("Next token is", yyla);
98ae9643 744
1f7d007b
AD
745 /* If the proper action on seeing token YYLA.TYPE is to reduce or
746 to detect an error, take that action. */
747 yyn += yyla.type;
748 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type)
98ae9643
AD
749 goto yydefault;
750
751 /* Reduce or error. */
752 yyn = yytable_[yyn];
753 if (yyn <= 0)
754 {
e9690142
JD
755 if (yy_table_value_is_error_ (yyn))
756 goto yyerrlab;
757 yyn = -yyn;
758 goto yyreduce;
98ae9643
AD
759 }
760
868d2d96 761 /* Discard the token being shifted. */
39be9022 762 yyempty = true;
98ae9643
AD
763
764 /* Count tokens shifted since error; after three, turn off error
765 status. */
766 if (yyerrstatus_)
767 --yyerrstatus_;
768
9380cfd0 769 /* Shift the lookahead token. */
7580c379 770 yypush_ ("Shifting", yyn, yyla);
98ae9643
AD
771 goto yynewstate;
772
773 /*-----------------------------------------------------------.
774 | yydefault -- do the default action for the current state. |
775 `-----------------------------------------------------------*/
776 yydefault:
7580c379 777 yyn = yydefact_[yystack_[0].state];
98ae9643
AD
778 if (yyn == 0)
779 goto yyerrlab;
780 goto yyreduce;
781
782 /*-----------------------------.
783 | yyreduce -- Do a reduction. |
784 `-----------------------------*/
785 yyreduce:
c4dc4c46 786 yylen = yyr2_[yyn];
7580c379 787 yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([
5ab8c47b 788 /* Variants are always initialized to an empty instance of the
3eead995
AD
789 correct type. The default $$=$1 action is NOT applied when using
790 variants. */
c4dc4c46 791 b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [build])],[
a85284cf 792 /* If YYLEN is nonzero, implement the default value of the action:
98ae9643
AD
793 `$$ = $1'. Otherwise, use the top of the stack.
794
e1f93869 795 Otherwise, the following line sets YYLHS.VALUE to garbage.
98ae9643
AD
796 This behavior is undocumented and Bison
797 users should not rely upon it. */
798 if (yylen)
e1f93869 799 yylhs.value = yystack_@{yylen - 1@}.value;
98ae9643 800 else
e1f93869 801 yylhs.value = yystack_@{0@}.value;])[
2ea7730c
AD
802]b4_locations_if([dnl
803[
8901f32e 804 // Compute the default @@$.
2b548aa6 805 {
bc0b0477 806 slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
e1f93869 807 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
2ea7730c 808 }]])[
8901f32e
AD
809
810 // Perform the reduction.
98ae9643 811 YY_REDUCE_PRINT (yyn);
ff601366 812 try
98ae9643 813 {
77a1a208
AD
814 switch (yyn)
815 {
30bb2edc 816]b4_user_actions[
77a1a208
AD
817 default:
818 break;
819 }
98ae9643 820 }
ff601366 821 catch (const syntax_error& yyexc)
77a1a208
AD
822 {
823 error (yyexc);
824 YYERROR;
825 }
1f7d007b 826 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
8901f32e 827]b4_variant_if([[
9c6a8966 828 // Destroy the rhs symbols.
8901f32e 829 for (int i = 0; i < yylen; ++i)
9c6a8966
AD
830 // Destroy a variant which value may have been swapped with
831 // yylhs.value (for instance if the action was "std::swap($$,
832 // $1)"). The value of yylhs.value (hence possibly one of these
5237cd1a 833 // rhs symbols) depends on the default construction for this
9c6a8966
AD
834 // type. In the case of pointers for instance, no
835 // initialization is done, so the value is junk. Therefore do
836 // not try to report the value of symbols about to be destroyed
837 // in the debug trace, it's possibly junk. Hence yymsg = 0.
838 // Besides, that keeps exactly the same traces as with the other
839 // Bison skeletons.
eeaf1dc6 840 yy_destroy_ (YY_NULL, yystack_[i]);]])[
98ae9643
AD
841
842 yypop_ (yylen);
a85284cf 843 yylen = 0;
98ae9643 844 YY_STACK_PRINT ();
98ae9643
AD
845
846 /* Shift the result of the reduction. */
eeaf1dc6 847 yypush_ (YY_NULL, yylhs);
98ae9643
AD
848 goto yynewstate;
849
9c6a8966
AD
850 /*--------------------------------------.
851 | yyerrlab -- here on detecting error. |
852 `--------------------------------------*/
98ae9643
AD
853 yyerrlab:
854 /* If not already recovering from an error, report this error. */
855 if (!yyerrstatus_)
856 {
e9690142 857 ++yynerrs_;
710c4a65 858 error (]b4_join(b4_locations_if([yyla.location]),
d2060f06
JD
859 [[yysyntax_error_ (yystack_[0].state,
860 yyempty ? yyempty_ : yyla.type)]])[);
98ae9643
AD
861 }
862
2ea7730c 863]b4_locations_if([[
44c2b42d 864 yyerror_range[1].location = yyla.location;]])[
98ae9643
AD
865 if (yyerrstatus_ == 3)
866 {
e9690142 867 /* If just tried and failed to reuse lookahead token after an
27cb5b59
AD
868 error, discard it. */
869
870 /* Return failure if at end of input. */
aba12ad1 871 if (yyla.type == yyeof_)
27cb5b59 872 YYABORT;
d59beda0 873 else if (!yyempty)
39be9022 874 {
27cb5b59 875 yy_destroy_ ("Error: discarding", yyla);
39be9022 876 yyempty = true;
e9690142 877 }
98ae9643
AD
878 }
879
742e4900 880 /* Else will try to reuse lookahead token after shifting the error
98ae9643
AD
881 token. */
882 goto yyerrlab1;
883
884
885 /*---------------------------------------------------.
886 | yyerrorlab -- error raised explicitly by YYERROR. |
887 `---------------------------------------------------*/
888 yyerrorlab:
889
890 /* Pacify compilers like GCC when the user code never invokes
891 YYERROR and the label yyerrorlab therefore never appears in user
892 code. */
893 if (false)
c4dc4c46 894 goto yyerrorlab;]b4_locations_if([[
44c2b42d 895 yyerror_range[1].location = yystack_[yylen - 1].location;]])b4_variant_if([[
c4dc4c46
AD
896 /* $$ was initialized before running the user action. */
897 yy_destroy_ ("Error: discarding", yylhs);]])[
a85284cf 898 /* Do not reclaim the symbols of the rule which action triggered
9d9b8b70 899 this YYERROR. */
98ae9643 900 yypop_ (yylen);
a85284cf 901 yylen = 0;
98ae9643
AD
902 goto yyerrlab1;
903
904 /*-------------------------------------------------------------.
905 | yyerrlab1 -- common code for both syntax error and YYERROR. |
906 `-------------------------------------------------------------*/
907 yyerrlab1:
e9690142 908 yyerrstatus_ = 3; /* Each real token shifted decrements this. */
e1f93869 909 {
bc0b0477 910 stack_symbol_type error_token;
e1f93869
AD
911 for (;;)
912 {
7580c379 913 yyn = yypact_[yystack_[0].state];
f2b30bdf 914 if (!yy_pact_value_is_default_ (yyn))
e1f93869
AD
915 {
916 yyn += yyterror_;
917 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
918 {
919 yyn = yytable_[yyn];
920 if (0 < yyn)
921 break;
922 }
923 }
98ae9643 924
e1f93869
AD
925 // Pop the current state because it cannot handle the error token.
926 if (yystack_.size () == 1)
927 YYABORT;
2ea7730c 928]b4_locations_if([[
44c2b42d 929 yyerror_range[1].location = yystack_[0].location;]])[
1f7d007b 930 yy_destroy_ ("Error: popping", yystack_[0]);
e1f93869 931 yypop_ ();
e1f93869
AD
932 YY_STACK_PRINT ();
933 }
2ea7730c 934]b4_locations_if([[
44c2b42d
JD
935 yyerror_range[2].location = yyla.location;
936 YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
e1f93869
AD
937
938 /* Shift the error token. */
7580c379 939 error_token.state = yyn;
e9b0834e 940 yypush_ ("Shifting", error_token);
e1f93869 941 }
98ae9643
AD
942 goto yynewstate;
943
944 /* Accept. */
945 yyacceptlab:
946 yyresult = 0;
947 goto yyreturn;
948
949 /* Abort. */
950 yyabortlab:
951 yyresult = 1;
952 goto yyreturn;
953
954 yyreturn:
39be9022 955 if (!yyempty)
1f7d007b 956 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
98ae9643 957
a85284cf 958 /* Do not reclaim the symbols of the rule which action triggered
9d9b8b70 959 this YYABORT or YYACCEPT. */
a85284cf 960 yypop_ (yylen);
23d13411 961 while (1 < yystack_.size ())
98ae9643 962 {
e9690142
JD
963 yy_destroy_ ("Cleanup: popping", yystack_[0]);
964 yypop_ ();
98ae9643
AD
965 }
966
967 return yyresult;
968 }
7e1fabbe
AD
969 catch (...)
970 {
25a6ad2f
AD
971 YYCDEBUG << "Exception caught: cleaning lookahead and stack"
972 << std::endl;
973 // Do not try to display the values of the reclaimed symbols,
974 // as their printer might throw an exception.
23d13411
AD
975 if (!yyempty)
976 yy_destroy_ (YY_NULL, yyla);
7e1fabbe 977
23d13411 978 while (1 < yystack_.size ())
7e1fabbe 979 {
23d13411 980 yy_destroy_ (YY_NULL, yystack_[0]);
7e1fabbe
AD
981 yypop_ ();
982 }
983 throw;
984 }
98ae9643 985 }
2b548aa6 986
a6552c5d
AD
987 void
988 ]b4_parser_class_name[::error (const syntax_error& yyexc)
989 {
710c4a65 990 error (]b4_join(b4_locations_if([yyexc.location]),
a6552c5d
AD
991 [[yyexc.what()]])[);
992 }
993
98ae9643
AD
994 // Generate an error message.
995 std::string
422c18f4 996 ]b4_parser_class_name[::yysyntax_error_ (]dnl
ceb8b8e6 997b4_error_verbose_if([state_type yystate, int yytoken],
422c18f4 998 [int, int])[)
25a648d8
JD
999 {]b4_error_verbose_if([[
1000 std::string yyres;
d2060f06
JD
1001 // Number of reported tokens (one for the "unexpected", one per
1002 // "expected").
1003 size_t yycount = 0;
1004 // Its maximum.
1005 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1006 // Arguments of yyformat.
1007 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1008
1009 /* There are many possibilities here to consider:
1010 - If this state is a consistent state with a default action, then
1011 the only way this function was invoked is if the default action
1012 is an error action. In that case, don't check for expected
1013 tokens because there are none.
1014 - The only way there can be no lookahead present (in yytoken) is
1015 if this state is a consistent state with a default action.
1016 Thus, detecting the absence of a lookahead is sufficient to
1017 determine that there is no unexpected or expected token to
1018 report. In that case, just report a simple "syntax error".
1019 - Don't assume there isn't a lookahead just because this state is
1020 a consistent state with a default action. There might have
1021 been a previous inconsistent state, consistent state with a
1022 non-default action, or user semantic action that manipulated
1023 yyla. (However, yyla is currently not documented for users.)
1024 - Of course, the expected token list depends on states to have
1025 correct lookahead information, and it depends on the parser not
1026 to perform extra reductions after fetching a lookahead from the
1027 scanner and before detecting a syntax error. Thus, state
1028 merging (from LALR or IELR) and default reductions corrupt the
1029 expected token list. However, the list is correct for
1030 canonical LR with one exception: it will still contain any
1031 token that will not be accepted due to an error action in a
1032 later state.
1033 */
1034 if (yytoken != yyempty_)
98ae9643 1035 {
d2060f06
JD
1036 yyarg[yycount++] = yytname_[yytoken];
1037 int yyn = yypact_[yystate];
1038 if (!yy_pact_value_is_default_ (yyn))
1039 {
b4bbc4a0
JD
1040 /* Start YYX at -YYN if negative to avoid negative indexes in
1041 YYCHECK. In other words, skip the first -YYN actions for
1042 this state because they are default actions. */
1043 int yyxbegin = yyn < 0 ? -yyn : 0;
b4bbc4a0
JD
1044 /* Stay within bounds of both yycheck and yytname. */
1045 int yychecklim = yylast_ - yyn + 1;
1046 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
b4bbc4a0
JD
1047 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1048 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
1049 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
1050 {
1051 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1052 {
1053 yycount = 1;
1054 break;
1055 }
1056 else
1057 yyarg[yycount++] = yytname_[yyx];
1058 }
d2060f06
JD
1059 }
1060 }
a0ffc175 1061
ef51bfa7 1062 char const* yyformat = YY_NULL;
b4bbc4a0
JD
1063 switch (yycount)
1064 {
1065#define YYCASE_(N, S) \
1066 case N: \
1067 yyformat = S; \
1068 break
d2060f06 1069 YYCASE_(0, YY_("syntax error"));
b4bbc4a0
JD
1070 YYCASE_(1, YY_("syntax error, unexpected %s"));
1071 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1072 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1073 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1074 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
a0ffc175 1075#undef YYCASE_
98ae9643 1076 }
d2060f06 1077
b4bbc4a0
JD
1078 // Argument number.
1079 size_t yyi = 0;
1080 for (char const* yyp = yyformat; *yyp; ++yyp)
1081 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
1082 {
1083 yyres += yytnamerr_ (yyarg[yyi++]);
1084 ++yyp;
1085 }
1086 else
1087 yyres += *yyp;
25a648d8
JD
1088 return yyres;]], [[
1089 return YY_("syntax error");]])[
98ae9643 1090 }
a08460b0 1091
5348bfbe 1092
98ae9643 1093 const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
2b548aa6 1094
0fddb3d5
AD
1095 const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1096
ba206cf4 1097]b4_parser_tables_define[
2b548aa6 1098
5f108727 1099]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
98ae9643 1100 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
9d9b8b70 1101 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
98ae9643
AD
1102 const char*
1103 const ]b4_parser_class_name[::yytname_[] =
1104 {
8901f32e 1105 ]b4_tname[
98ae9643 1106 };
2b548aa6 1107
5f108727 1108]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
ba206cf4 1109]b4_integral_parser_table_define([rline], [b4_rline])[
5348bfbe 1110
98ae9643
AD
1111 // Print the state stack on the debug stream.
1112 void
1113 ]b4_parser_class_name[::yystack_print_ ()
1114 {
1115 *yycdebug_ << "Stack now";
8901f32e
AD
1116 for (stack_type::const_iterator
1117 i = yystack_.begin (),
1118 i_end = yystack_.end ();
e9690142 1119 i != i_end; ++i)
8901f32e 1120 *yycdebug_ << ' ' << i->state;
98ae9643
AD
1121 *yycdebug_ << std::endl;
1122 }
25f66e1a 1123
98ae9643
AD
1124 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1125 void
d1ff7a7c 1126 ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
98ae9643
AD
1127 {
1128 unsigned int yylno = yyrline_[yyrule];
d1ff7a7c 1129 int yynrhs = yyr2_[yyrule];
98ae9643
AD
1130 /* Print the symbols being reduced, and their result. */
1131 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
e9690142 1132 << " (line " << yylno << "):" << std::endl;
d1ff7a7c
AD
1133 /* The symbols being reduced. */
1134 for (int yyi = 0; yyi < yynrhs; yyi++)
1135 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
1f7d007b 1136 ]b4_rhs_data(yynrhs, yyi + 1)[);
98ae9643 1137 }
5f108727 1138#endif // ]b4_api_PREFIX[DEBUG
69e2658b 1139
e36ec1f4 1140]b4_token_ctor_if([], [b4_yytranslate_define])[
793fbca5 1141]b4_namespace_close[
8901f32e 1142]b4_epilogue[]dnl
1c7ec959 1143b4_output_end()
064e42b0
AD
1144
1145
a9ce3f54 1146m4_popdef([b4_copyright_years])dnl