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