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