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