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