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