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