]> git.saurik.com Git - bison.git/blame - data/lalr1.cc
c++: value_type -> kind_type
[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.
38cea49b
AD
209 /// \param yytoken the lookahead token type, or yyempty_.
210 virtual std::string yysyntax_error_ (state_type yystate,
211 symbol_number_type yytoken) const;
ceb8b8e6 212
7580c379
AD
213 /// Compute post-reduction state.
214 /// \param yystate the current state
215 /// \param yylhs the nonterminal to push on the stack
216 state_type yy_lr_goto_state_ (state_type yystate, int yylhs);
217
f2b30bdf
JD
218 /// Whether the given \c yypact_ value indicates a defaulted state.
219 /// \param yyvalue the value to check
220 static bool yy_pact_value_is_default_ (int yyvalue);
221
222 /// Whether the given \c yytable_ value indicates a syntax error.
223 /// \param yyvalue the value to check
224 static bool yy_table_value_is_error_ (int yyvalue);
225
e019c247 226 /// Internal symbol numbers.
f479c6c6 227 typedef ]b4_int_type_for([b4_translate])[ token_number_type;
617a8f12 228 static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
617a8f12 229 static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
efeed023 230
6f0a6f27 231 /// Convert a scanner token number \a t to a symbol number.
b20e797a 232 static token_number_type yytranslate_ (]b4_token_ctor_if([token_type], [int])[ t);
6f0a6f27 233
7aaaad6c
AD
234 // Tables.
235]b4_parser_tables_declare[]b4_error_verbose_if([
9e0876fb 236
9e0876fb 237 /// Convert the symbol name \a n to a form suitable for a diagnostic.
422c18f4 238 static std::string yytnamerr_ (const char *n);])[
2b548aa6 239
5f108727 240]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
258cddbc
AD
241 /// For a symbol, its name in clear.
242 static const char* const yytname_[];
5f108727 243]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
ba206cf4 244]b4_integral_parser_table_declare([rline], [b4_rline],
6f0a6f27 245 [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
efeed023 246 /// Report on the debug stream that the rule \a r is going to be reduced.
d1ff7a7c 247 virtual void yy_reduce_print_ (int r);
efeed023 248 /// Print the state stack on the debug stream.
f69a4142 249 virtual void yystack_print_ ();
fa7b79c0 250
7aaaad6c 251 // Debugging.
fa7b79c0
PE
252 int yydebug_;
253 std::ostream* yycdebug_;
f69a4142 254
1f7d007b
AD
255 /// \brief Display a symbol type, value and location.
256 /// \param yyo The output stream.
257 /// \param yysym The symbol.
1dbaf37f 258 template <typename Base>
23be254e 259 void yy_print_ (std::ostream& yyo, 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.
7fc7df7a 292 typedef state_type kind_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
23be254e
AD
561 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
562 : super_type (s]b4_locations_if([, that.location])[)
563 {
564 ]b4_variant_if([b4_symbol_variant([that.type_get ()],
565 [value], [move], [that.value])],
566 [[value = that.value;]])[
567 // that is emptied.
568 that.type = -1;
97ae878e
AD
569 }
570
571 inline
572 ]b4_parser_class_name[::stack_symbol_type&
573 ]b4_parser_class_name[::stack_symbol_type::operator= (const stack_symbol_type& that)
574 {
23be254e
AD
575 state = that.state;
576 ]b4_variant_if([b4_symbol_variant([that.type_get ()],
577 [value], [copy], [that.value])],
578 [[value = that.value;]])[]b4_locations_if([
97ae878e
AD
579 location = that.location;])[
580 return *this;
1f7d007b
AD
581 }
582
5f87211c 583
1dbaf37f 584 template <typename Base>
b20e797a 585 inline
98ae9643 586 void
5f87211c 587 ]b4_parser_class_name[::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
98ae9643 588 {
8901f32e 589 if (yymsg)
97ae878e 590 YY_SYMBOL_PRINT (yymsg, yysym);]b4_variant_if([], [
98ae9643 591
8901f32e 592 // User destructor.
c5026327 593 int yytype = yysym.type_get ();
98ae9643
AD
594 switch (yytype)
595 {
e3c52a63 596]b4_symbol_foreach([b4_symbol_destructor])dnl
2bde9113
AD
597[ default:
598 break;
97ae878e 599 }])[
8901f32e
AD
600 }
601
ccdc1577 602#if ]b4_api_PREFIX[DEBUG
1dbaf37f 603 template <typename Base>
1f7d007b 604 void
5de9c593 605 ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
1dbaf37f 606 const basic_symbol<Base>& yysym) const
8901f32e 607 {
c5026327
AD
608 std::ostream& yyoutput = yyo;
609 YYUSE (yyoutput);
1f7d007b
AD
610 int yytype = yysym.type_get ();
611 yyo << (yytype < yyntokens_ ? "token" : "nterm")
2ea7730c
AD
612 << ' ' << yytname_[yytype] << " ("]b4_locations_if([
613 << yysym.location << ": "])[;
1f7d007b
AD
614 switch (yytype)
615 {
e3c52a63 616]b4_symbol_foreach([b4_symbol_printer])dnl
2bde9113 617[ default:
e9690142 618 break;
1f7d007b
AD
619 }
620 yyo << ')';
8901f32e 621 }
1f7d007b 622#endif
8901f32e 623
b20e797a 624 inline
1f7d007b 625 void
5f87211c 626 ]b4_parser_class_name[::yypush_ (const char* m, state_type s, symbol_type& sym)
8901f32e 627 {
97ae878e
AD
628 stack_symbol_type t (s, sym);
629 yypush_ (m, t);
98ae9643 630 }
60a777aa 631
b20e797a 632 inline
7dedf26e 633 void
bc0b0477 634 ]b4_parser_class_name[::yypush_ (const char* m, stack_symbol_type& s)
7dedf26e 635 {
9380cfd0 636 if (m)
1f7d007b 637 YY_SYMBOL_PRINT (m, s);
97ae878e 638 yystack_.push (s);
7dedf26e
AD
639 }
640
b20e797a 641 inline
98ae9643
AD
642 void
643 ]b4_parser_class_name[::yypop_ (unsigned int n)
644 {
8901f32e 645 yystack_.pop (n);
98ae9643 646 }
52d5733f 647
5f108727 648#if ]b4_api_PREFIX[DEBUG
98ae9643
AD
649 std::ostream&
650 ]b4_parser_class_name[::debug_stream () const
651 {
652 return *yycdebug_;
653 }
9a1e9989 654
98ae9643
AD
655 void
656 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
657 {
658 yycdebug_ = &o;
659 }
9a1e9989
AD
660
661
98ae9643
AD
662 ]b4_parser_class_name[::debug_level_type
663 ]b4_parser_class_name[::debug_level () const
664 {
665 return yydebug_;
666 }
a3cb6248 667
98ae9643
AD
668 void
669 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
670 {
671 yydebug_ = l;
672 }
ccdc1577 673#endif // ]b4_api_PREFIX[DEBUG
a3cb6248 674
7580c379
AD
675 inline ]b4_parser_class_name[::state_type
676 ]b4_parser_class_name[::yy_lr_goto_state_ (state_type yystate, int yylhs)
677 {
678 int yyr = yypgoto_[yylhs - yyntokens_] + yystate;
679 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
680 return yytable_[yyr];
681 else
682 return yydefgoto_[yylhs - yyntokens_];
683 }
684
f2b30bdf
JD
685 inline bool
686 ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
687 {
688 return yyvalue == yypact_ninf_;
689 }
690
691 inline bool
692 ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
693 {
aa0cb40d 694 return yyvalue == yytable_ninf_;
f2b30bdf
JD
695 }
696
98ae9643
AD
697 int
698 ]b4_parser_class_name[::parse ()
699 {
39be9022
AD
700 /// Whether yyla contains a lookahead.
701 bool yyempty = true;
d4fb5e3c 702
b720fedf 703 // State.
98ae9643 704 int yyn;
a85284cf 705 int yylen = 0;
d4fb5e3c 706
b720fedf 707 // Error handling.
98ae9643
AD
708 int yynerrs_ = 0;
709 int yyerrstatus_ = 0;
dbcdae2d 710
6082531a 711 /// The lookahead symbol.
2ea7730c 712 symbol_type yyla;]b4_locations_if([[
6082531a 713
98ae9643 714 /// The locations where the error started and ended.
44c2b42d 715 stack_symbol_type yyerror_range[3];]])[
dbcdae2d 716
e1f93869 717 /// $$ and @@$.
bc0b0477 718 stack_symbol_type yylhs;
dbcdae2d 719
ff348970 720 /// The return value of parse ().
98ae9643 721 int yyresult;
ad745863 722
7e1fabbe
AD
723 // FIXME: This shoud be completely indented. It is not yet to
724 // avoid gratuitous conflicts when merging into the master branch.
725 try
726 {
98ae9643 727 YYCDEBUG << "Starting parse" << std::endl;
451364ed 728
451364ed 729]m4_ifdef([b4_initial_action], [
4323e0da 730b4_dollar_pushdef([yyla.value], [], [yyla.location])dnl
ac826bc4 731 // User initialization code.
8ec0a172 732 b4_user_initial_action
cd735a8c 733b4_dollar_popdef])[]dnl
451364ed 734
8901f32e 735 [ /* Initialize the stack. The initial state will be set in
98ae9643
AD
736 yynewstate, since the latter expects the semantical and the
737 location values to have been already stored, initialize these
738 stacks with a primary value. */
8901f32e 739 yystack_ = stack_type (0);
eeaf1dc6 740 yypush_ (YY_NULL, 0, yyla);
98ae9643 741
7580c379 742 // A new symbol was pushed on the stack.
98ae9643 743 yynewstate:
7580c379 744 YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
868d2d96 745
ac826bc4 746 // Accept?
7580c379 747 if (yystack_[0].state == yyfinal_)
868d2d96
JD
748 goto yyacceptlab;
749
98ae9643
AD
750 goto yybackup;
751
ac826bc4 752 // Backup.
98ae9643
AD
753 yybackup:
754
ac826bc4 755 // Try to take a decision without lookahead.
7580c379 756 yyn = yypact_[yystack_[0].state];
f2b30bdf 757 if (yy_pact_value_is_default_ (yyn))
98ae9643
AD
758 goto yydefault;
759
ac826bc4 760 // Read a lookahead token.
39be9022 761 if (yyempty)
98ae9643 762 {
09277875 763 YYCDEBUG << "Reading a token: ";
a6552c5d 764 try
64b3612a 765 {]b4_token_ctor_if([[
1dbaf37f 766 symbol_type yylookahead (]b4_lex[);
64b3612a
AD
767 yyla.move (yylookahead);]], [[
768 yyla.type = yytranslate_ (]b4_lex[);]])[
77a1a208 769 }
a6552c5d 770 catch (const syntax_error& yyexc)
77a1a208
AD
771 {
772 error (yyexc);
773 goto yyerrlab1;
774 }
39be9022 775 yyempty = false;
98ae9643 776 }
aba12ad1 777 YY_SYMBOL_PRINT ("Next token is", yyla);
98ae9643 778
1f7d007b
AD
779 /* If the proper action on seeing token YYLA.TYPE is to reduce or
780 to detect an error, take that action. */
781 yyn += yyla.type;
782 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type)
98ae9643
AD
783 goto yydefault;
784
ac826bc4 785 // Reduce or error.
98ae9643
AD
786 yyn = yytable_[yyn];
787 if (yyn <= 0)
788 {
e9690142
JD
789 if (yy_table_value_is_error_ (yyn))
790 goto yyerrlab;
791 yyn = -yyn;
792 goto yyreduce;
98ae9643
AD
793 }
794
ac826bc4 795 // Discard the token being shifted.
39be9022 796 yyempty = true;
98ae9643 797
ac826bc4 798 // Count tokens shifted since error; after three, turn off error status.
98ae9643
AD
799 if (yyerrstatus_)
800 --yyerrstatus_;
801
ac826bc4 802 // Shift the lookahead token.
7580c379 803 yypush_ ("Shifting", yyn, yyla);
98ae9643
AD
804 goto yynewstate;
805
806 /*-----------------------------------------------------------.
807 | yydefault -- do the default action for the current state. |
808 `-----------------------------------------------------------*/
809 yydefault:
7580c379 810 yyn = yydefact_[yystack_[0].state];
98ae9643
AD
811 if (yyn == 0)
812 goto yyerrlab;
813 goto yyreduce;
814
815 /*-----------------------------.
816 | yyreduce -- Do a reduction. |
817 `-----------------------------*/
818 yyreduce:
c4dc4c46 819 yylen = yyr2_[yyn];
7580c379 820 yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([
5ab8c47b 821 /* Variants are always initialized to an empty instance of the
3eead995
AD
822 correct type. The default $$=$1 action is NOT applied when using
823 variants. */
c4dc4c46 824 b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [build])],[
a85284cf 825 /* If YYLEN is nonzero, implement the default value of the action:
98ae9643
AD
826 `$$ = $1'. Otherwise, use the top of the stack.
827
e1f93869 828 Otherwise, the following line sets YYLHS.VALUE to garbage.
98ae9643
AD
829 This behavior is undocumented and Bison
830 users should not rely upon it. */
831 if (yylen)
e1f93869 832 yylhs.value = yystack_@{yylen - 1@}.value;
98ae9643 833 else
e1f93869 834 yylhs.value = yystack_@{0@}.value;])[
2ea7730c
AD
835]b4_locations_if([dnl
836[
8901f32e 837 // Compute the default @@$.
2b548aa6 838 {
bc0b0477 839 slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
e1f93869 840 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
2ea7730c 841 }]])[
8901f32e
AD
842
843 // Perform the reduction.
98ae9643 844 YY_REDUCE_PRINT (yyn);
ff601366 845 try
98ae9643 846 {
77a1a208
AD
847 switch (yyn)
848 {
30bb2edc 849]b4_user_actions[
77a1a208
AD
850 default:
851 break;
852 }
98ae9643 853 }
ff601366 854 catch (const syntax_error& yyexc)
77a1a208
AD
855 {
856 error (yyexc);
857 YYERROR;
858 }
1f7d007b 859 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
98ae9643 860 yypop_ (yylen);
a85284cf 861 yylen = 0;
98ae9643 862 YY_STACK_PRINT ();
98ae9643 863
ac826bc4 864 // Shift the result of the reduction.
eeaf1dc6 865 yypush_ (YY_NULL, yylhs);
98ae9643
AD
866 goto yynewstate;
867
9c6a8966
AD
868 /*--------------------------------------.
869 | yyerrlab -- here on detecting error. |
870 `--------------------------------------*/
98ae9643 871 yyerrlab:
ac826bc4 872 // If not already recovering from an error, report this error.
98ae9643
AD
873 if (!yyerrstatus_)
874 {
e9690142 875 ++yynerrs_;
710c4a65 876 error (]b4_join(b4_locations_if([yyla.location]),
d2060f06
JD
877 [[yysyntax_error_ (yystack_[0].state,
878 yyempty ? yyempty_ : yyla.type)]])[);
98ae9643
AD
879 }
880
2ea7730c 881]b4_locations_if([[
44c2b42d 882 yyerror_range[1].location = yyla.location;]])[
98ae9643
AD
883 if (yyerrstatus_ == 3)
884 {
e9690142 885 /* If just tried and failed to reuse lookahead token after an
27cb5b59
AD
886 error, discard it. */
887
ac826bc4 888 // Return failure if at end of input.
aba12ad1 889 if (yyla.type == yyeof_)
27cb5b59 890 YYABORT;
d59beda0 891 else if (!yyempty)
39be9022 892 {
27cb5b59 893 yy_destroy_ ("Error: discarding", yyla);
39be9022 894 yyempty = true;
e9690142 895 }
98ae9643
AD
896 }
897
ac826bc4 898 // Else will try to reuse lookahead token after shifting the error token.
98ae9643
AD
899 goto yyerrlab1;
900
901
902 /*---------------------------------------------------.
903 | yyerrorlab -- error raised explicitly by YYERROR. |
904 `---------------------------------------------------*/
905 yyerrorlab:
906
907 /* Pacify compilers like GCC when the user code never invokes
908 YYERROR and the label yyerrorlab therefore never appears in user
909 code. */
910 if (false)
c4dc4c46 911 goto yyerrorlab;]b4_locations_if([[
44c2b42d 912 yyerror_range[1].location = yystack_[yylen - 1].location;]])b4_variant_if([[
c4dc4c46 913 /* $$ was initialized before running the user action. */
97ae878e
AD
914 YY_SYMBOL_PRINT ("Error: discarding", yylhs);
915 yylhs.~stack_symbol_type();]])[
e672a4ba 916 /* Do not reclaim the symbols of the rule whose action triggered
9d9b8b70 917 this YYERROR. */
98ae9643 918 yypop_ (yylen);
a85284cf 919 yylen = 0;
98ae9643
AD
920 goto yyerrlab1;
921
922 /*-------------------------------------------------------------.
923 | yyerrlab1 -- common code for both syntax error and YYERROR. |
924 `-------------------------------------------------------------*/
925 yyerrlab1:
ac826bc4 926 yyerrstatus_ = 3; // Each real token shifted decrements this.
e1f93869 927 {
bc0b0477 928 stack_symbol_type error_token;
e1f93869
AD
929 for (;;)
930 {
7580c379 931 yyn = yypact_[yystack_[0].state];
f2b30bdf 932 if (!yy_pact_value_is_default_ (yyn))
e1f93869
AD
933 {
934 yyn += yyterror_;
935 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
936 {
937 yyn = yytable_[yyn];
938 if (0 < yyn)
939 break;
940 }
941 }
98ae9643 942
e1f93869
AD
943 // Pop the current state because it cannot handle the error token.
944 if (yystack_.size () == 1)
945 YYABORT;
2ea7730c 946]b4_locations_if([[
44c2b42d 947 yyerror_range[1].location = yystack_[0].location;]])[
1f7d007b 948 yy_destroy_ ("Error: popping", yystack_[0]);
e1f93869 949 yypop_ ();
e1f93869
AD
950 YY_STACK_PRINT ();
951 }
2ea7730c 952]b4_locations_if([[
44c2b42d
JD
953 yyerror_range[2].location = yyla.location;
954 YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
e1f93869 955
ac826bc4 956 // Shift the error token.
7580c379 957 error_token.state = yyn;
e9b0834e 958 yypush_ ("Shifting", error_token);
e1f93869 959 }
98ae9643
AD
960 goto yynewstate;
961
ac826bc4 962 // Accept.
98ae9643
AD
963 yyacceptlab:
964 yyresult = 0;
965 goto yyreturn;
966
ac826bc4 967 // Abort.
98ae9643
AD
968 yyabortlab:
969 yyresult = 1;
970 goto yyreturn;
971
972 yyreturn:
39be9022 973 if (!yyempty)
1f7d007b 974 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
98ae9643 975
e672a4ba 976 /* Do not reclaim the symbols of the rule whose action triggered
9d9b8b70 977 this YYABORT or YYACCEPT. */
a85284cf 978 yypop_ (yylen);
23d13411 979 while (1 < yystack_.size ())
98ae9643 980 {
e9690142
JD
981 yy_destroy_ ("Cleanup: popping", yystack_[0]);
982 yypop_ ();
98ae9643
AD
983 }
984
985 return yyresult;
986 }
7e1fabbe
AD
987 catch (...)
988 {
25a6ad2f
AD
989 YYCDEBUG << "Exception caught: cleaning lookahead and stack"
990 << std::endl;
991 // Do not try to display the values of the reclaimed symbols,
992 // as their printer might throw an exception.
23d13411
AD
993 if (!yyempty)
994 yy_destroy_ (YY_NULL, yyla);
7e1fabbe 995
23d13411 996 while (1 < yystack_.size ())
7e1fabbe 997 {
23d13411 998 yy_destroy_ (YY_NULL, yystack_[0]);
7e1fabbe
AD
999 yypop_ ();
1000 }
1001 throw;
1002 }
98ae9643 1003 }
2b548aa6 1004
a6552c5d
AD
1005 void
1006 ]b4_parser_class_name[::error (const syntax_error& yyexc)
1007 {
710c4a65 1008 error (]b4_join(b4_locations_if([yyexc.location]),
a6552c5d
AD
1009 [[yyexc.what()]])[);
1010 }
1011
98ae9643
AD
1012 // Generate an error message.
1013 std::string
422c18f4 1014 ]b4_parser_class_name[::yysyntax_error_ (]dnl
38cea49b
AD
1015b4_error_verbose_if([state_type yystate, symbol_number_type yytoken],
1016 [state_type, symbol_number_type])[) const
25a648d8
JD
1017 {]b4_error_verbose_if([[
1018 std::string yyres;
d2060f06
JD
1019 // Number of reported tokens (one for the "unexpected", one per
1020 // "expected").
1021 size_t yycount = 0;
1022 // Its maximum.
1023 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1024 // Arguments of yyformat.
1025 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1026
1027 /* There are many possibilities here to consider:
1028 - If this state is a consistent state with a default action, then
1029 the only way this function was invoked is if the default action
1030 is an error action. In that case, don't check for expected
1031 tokens because there are none.
1032 - The only way there can be no lookahead present (in yytoken) is
1033 if this state is a consistent state with a default action.
1034 Thus, detecting the absence of a lookahead is sufficient to
1035 determine that there is no unexpected or expected token to
1036 report. In that case, just report a simple "syntax error".
1037 - Don't assume there isn't a lookahead just because this state is
1038 a consistent state with a default action. There might have
1039 been a previous inconsistent state, consistent state with a
1040 non-default action, or user semantic action that manipulated
1041 yyla. (However, yyla is currently not documented for users.)
1042 - Of course, the expected token list depends on states to have
1043 correct lookahead information, and it depends on the parser not
1044 to perform extra reductions after fetching a lookahead from the
1045 scanner and before detecting a syntax error. Thus, state
1046 merging (from LALR or IELR) and default reductions corrupt the
1047 expected token list. However, the list is correct for
1048 canonical LR with one exception: it will still contain any
1049 token that will not be accepted due to an error action in a
1050 later state.
1051 */
1052 if (yytoken != yyempty_)
98ae9643 1053 {
d2060f06
JD
1054 yyarg[yycount++] = yytname_[yytoken];
1055 int yyn = yypact_[yystate];
1056 if (!yy_pact_value_is_default_ (yyn))
1057 {
b4bbc4a0
JD
1058 /* Start YYX at -YYN if negative to avoid negative indexes in
1059 YYCHECK. In other words, skip the first -YYN actions for
1060 this state because they are default actions. */
1061 int yyxbegin = yyn < 0 ? -yyn : 0;
ac826bc4 1062 // Stay within bounds of both yycheck and yytname.
b4bbc4a0
JD
1063 int yychecklim = yylast_ - yyn + 1;
1064 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
b4bbc4a0
JD
1065 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1066 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
1067 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
1068 {
1069 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1070 {
1071 yycount = 1;
1072 break;
1073 }
1074 else
1075 yyarg[yycount++] = yytname_[yyx];
1076 }
d2060f06
JD
1077 }
1078 }
a0ffc175 1079
ef51bfa7 1080 char const* yyformat = YY_NULL;
b4bbc4a0
JD
1081 switch (yycount)
1082 {
1083#define YYCASE_(N, S) \
1084 case N: \
1085 yyformat = S; \
1086 break
d2060f06 1087 YYCASE_(0, YY_("syntax error"));
b4bbc4a0
JD
1088 YYCASE_(1, YY_("syntax error, unexpected %s"));
1089 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1090 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1091 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1092 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
a0ffc175 1093#undef YYCASE_
98ae9643 1094 }
d2060f06 1095
b4bbc4a0
JD
1096 // Argument number.
1097 size_t yyi = 0;
1098 for (char const* yyp = yyformat; *yyp; ++yyp)
1099 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
1100 {
1101 yyres += yytnamerr_ (yyarg[yyi++]);
1102 ++yyp;
1103 }
1104 else
1105 yyres += *yyp;
25a648d8
JD
1106 return yyres;]], [[
1107 return YY_("syntax error");]])[
98ae9643 1108 }
a08460b0 1109
5348bfbe 1110
98ae9643 1111 const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
2b548aa6 1112
0fddb3d5
AD
1113 const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1114
ba206cf4 1115]b4_parser_tables_define[
2b548aa6 1116
5f108727 1117]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
ac826bc4
AD
1118 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1119 // First, the terminals, then, starting at \a yyntokens_, nonterminals.
98ae9643
AD
1120 const char*
1121 const ]b4_parser_class_name[::yytname_[] =
1122 {
8901f32e 1123 ]b4_tname[
98ae9643 1124 };
2b548aa6 1125
5f108727 1126]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
ba206cf4 1127]b4_integral_parser_table_define([rline], [b4_rline])[
5348bfbe 1128
98ae9643
AD
1129 // Print the state stack on the debug stream.
1130 void
1131 ]b4_parser_class_name[::yystack_print_ ()
1132 {
1133 *yycdebug_ << "Stack now";
8901f32e
AD
1134 for (stack_type::const_iterator
1135 i = yystack_.begin (),
1136 i_end = yystack_.end ();
e9690142 1137 i != i_end; ++i)
8901f32e 1138 *yycdebug_ << ' ' << i->state;
98ae9643
AD
1139 *yycdebug_ << std::endl;
1140 }
25f66e1a 1141
98ae9643
AD
1142 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1143 void
d1ff7a7c 1144 ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
98ae9643
AD
1145 {
1146 unsigned int yylno = yyrline_[yyrule];
d1ff7a7c 1147 int yynrhs = yyr2_[yyrule];
ac826bc4 1148 // Print the symbols being reduced, and their result.
98ae9643 1149 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
e9690142 1150 << " (line " << yylno << "):" << std::endl;
ac826bc4 1151 // The symbols being reduced.
d1ff7a7c
AD
1152 for (int yyi = 0; yyi < yynrhs; yyi++)
1153 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
1f7d007b 1154 ]b4_rhs_data(yynrhs, yyi + 1)[);
98ae9643 1155 }
5f108727 1156#endif // ]b4_api_PREFIX[DEBUG
69e2658b 1157
e36ec1f4 1158]b4_token_ctor_if([], [b4_yytranslate_define])[
793fbca5 1159]b4_namespace_close[
8901f32e 1160]b4_epilogue[]dnl
1c7ec959 1161b4_output_end()
064e42b0
AD
1162
1163
a9ce3f54 1164m4_popdef([b4_copyright_years])dnl