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