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