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