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