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