]> git.saurik.com Git - bison.git/blame - data/lalr1.cc
c++: clean up the handling of empty symbols
[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
26f95f5f 291 /// Steal the symbol type from \a that.
b20e797a 292 void move (by_state& that);
97ae878e 293
26f95f5f 294 /// The (internal) type number (corresponding to \a state).
5422471c 295 /// \a empty_symbol when empty.
26f95f5f 296 symbol_number_type type_get () const;
1dbaf37f 297
8a4ec359 298 /// The state number used to denote an empty symbol.
5422471c 299 enum { empty_state = -1 };
675d9fe4 300
26f95f5f 301 /// The state.
8a4ec359 302 /// \a empty when empty.
26f95f5f 303 state_type state;
1f7d007b 304 };
57295d14 305
1dbaf37f 306 /// "Internal" symbol: element of the stack.
97ae878e
AD
307 struct stack_symbol_type : basic_symbol<by_state>
308 {
309 /// Superclass.
310 typedef basic_symbol<by_state> super_type;
311 /// Construct an empty symbol.
312 stack_symbol_type ();
313 /// Steal the contents from \a sym to build this.
314 stack_symbol_type (state_type s, symbol_type& sym);
7d1aa2d6 315 /// Assignment, needed by push_back.
97ae878e
AD
316 stack_symbol_type& operator= (const stack_symbol_type& that);
317 };
1dbaf37f 318
8901f32e 319 /// Stack type.
bc0b0477 320 typedef stack<stack_symbol_type> stack_type;
8901f32e
AD
321
322 /// The stack.
323 stack_type yystack_;
324
7dedf26e 325 /// Push a new state on the stack.
9380cfd0
AD
326 /// \param m a debug message to display
327 /// if null, no trace is output.
e9b0834e
AD
328 /// \param s the symbol
329 /// \warning the contents of \a s.value is stolen.
b20e797a 330 void yypush_ (const char* m, stack_symbol_type& s);
7dedf26e 331
1f7d007b
AD
332 /// Push a new look ahead token on the state on the stack.
333 /// \param m a debug message to display
334 /// if null, no trace is output.
335 /// \param s the state
336 /// \param sym the symbol (for its value and location).
337 /// \warning the contents of \a s.value is stolen.
b20e797a 338 void yypush_ (const char* m, state_type s, symbol_type& sym);
1f7d007b 339
52d5733f 340 /// Pop \a n symbols the three stacks.
b20e797a 341 void yypop_ (unsigned int n = 1);
52d5733f 342
8a4ec359 343 /// Constants.
914202bd
AD
344 enum
345 {
346 yyeof_ = 0,
a8107123
AD
347 yylast_ = ]b4_last[, ///< Last index in yytable_.
348 yynnts_ = ]b4_nterms_number[, ///< Number of nonterminal symbols.
a8107123 349 yyfinal_ = ]b4_final_state_number[, ///< Termination state number.
914202bd
AD
350 yyterror_ = 1,
351 yyerrcode_ = 256,
a8107123 352 yyntokens_ = ]b4_tokens_number[ ///< Number of tokens.
914202bd
AD
353 };
354
caf37a36 355]b4_parse_param_vars[
2b548aa6 356 };
1c4af381 357
e36ec1f4 358]b4_token_ctor_if([b4_yytranslate_define
0623bacc 359b4_public_types_define])[
793fbca5 360]b4_namespace_close[
2b548aa6 361
592d0b1e 362]b4_percent_define_flag_if([[global_tokens_and_yystype]],
6687da34 363[b4_token_defines
fb9712a9 364
4b3847c3 365#ifndef ]b4_api_PREFIX[STYPE
ac826bc4 366 // Redirection for backward compatibility.
4b3847c3 367# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
fb9712a9 368#endif
22172d47
AD
369])[
370]b4_percent_code_get([[provides]])[
d27c5e65
AD
371]])
372
85f0b29e 373b4_defines_if(
eaf690a7 374[b4_output_begin([b4_spec_defines_file])
d27c5e65
AD
375b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
376[
377/**
378 ** \file ]b4_spec_defines_file[
379 ** Define the ]b4_namespace_ref[::parser class.
380 */
381
ac826bc4 382// C++ LALR(1) parser skeleton written by Akim Demaille.
d27c5e65
AD
383
384]b4_cpp_guard_open([b4_spec_defines_file])[
385]b4_shared_declarations[
22172d47 386]b4_cpp_guard_close([b4_spec_defines_file])
1c7ec959 387b4_output_end()
85f0b29e
AD
388])
389
390
1c7ec959 391b4_output_begin([b4_parser_file_name])
a9ce3f54 392b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])
a4e25e1d 393b4_percent_code_get([[top]])[]dnl
aa08666d 394m4_if(b4_prefix, [yy], [],
c5b95ccf
AD
395[
396// Take the name prefix into account.
9bc0dd67
JD
397#define yylex b4_prefix[]lex])[
398
28427f57 399// First part of user declarations.
c944f7f2 400]b4_user_pre_prologue[
9bc0dd67 401
28427f57
AD
402]b4_null_define[
403
85f0b29e
AD
404]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
405 [b4_shared_declarations])[
50997c6e 406
ac826bc4 407// User implementation prologue.
771dc643
AD
408]b4_user_post_prologue[
409]b4_percent_code_get[
410
771dc643 411#ifndef YY_
ae93128c 412# if defined YYENABLE_NLS && YYENABLE_NLS
30757c8c 413# if ENABLE_NLS
ac826bc4 414# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
30757c8c
PE
415# define YY_(msgid) dgettext ("bison-runtime", msgid)
416# endif
417# endif
418# ifndef YY_
419# define YY_(msgid) msgid
420# endif
989b5b8e
AD
421#endif
422
38435078 423]b4_locations_if([dnl
ccdc1577
AD
424[#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
425]b4_yylloc_default_define])[
38435078 426
ac826bc4
AD
427// Suppress unused-variable warnings by "using" E.
428#define YYUSE(E) ((void) (E))
2a4647a3 429
ac826bc4 430// Enable debugging if requested.
5f108727 431#if ]b4_api_PREFIX[DEBUG
284acc8b 432
ac826bc4 433// A pseudo ostream that takes yydebug_ into account.
fa7b79c0
PE
434# define YYCDEBUG if (yydebug_) (*yycdebug_)
435
1f7d007b 436# define YY_SYMBOL_PRINT(Title, Symbol) \
57295d14
AD
437 do { \
438 if (yydebug_) \
439 { \
440 *yycdebug_ << Title << ' '; \
1f7d007b 441 yy_print_ (*yycdebug_, Symbol); \
57295d14
AD
442 *yycdebug_ << std::endl; \
443 } \
8901f32e 444 } while (false)
284acc8b 445
e9690142
JD
446# define YY_REDUCE_PRINT(Rule) \
447 do { \
8901f32e 448 if (yydebug_) \
e9690142 449 yy_reduce_print_ (Rule); \
8901f32e 450 } while (false)
284acc8b 451
e9690142
JD
452# define YY_STACK_PRINT() \
453 do { \
8901f32e
AD
454 if (yydebug_) \
455 yystack_print_ (); \
456 } while (false)
284acc8b 457
ac826bc4 458#else // !]b4_api_PREFIX[DEBUG
284acc8b 459
a36b333c 460# define YYCDEBUG if (false) std::cerr
beadb220 461# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
1f7d007b
AD
462# define YY_REDUCE_PRINT(Rule) static_cast<void>(0)
463# define YY_STACK_PRINT() static_cast<void>(0)
284acc8b 464
ac826bc4 465#endif // !]b4_api_PREFIX[DEBUG
2b548aa6 466
39be9022
AD
467#define yyerrok (yyerrstatus_ = 0)
468#define yyclearin (yyempty = true)
98e26a92 469
39be9022
AD
470#define YYACCEPT goto yyacceptlab
471#define YYABORT goto yyabortlab
472#define YYERROR goto yyerrorlab
98e26a92 473#define YYRECOVERING() (!!yyerrstatus_)
60a777aa 474
422c18f4 475]b4_namespace_open[]b4_error_verbose_if([[
9e0876fb 476
aa08666d
AD
477 /* Return YYSTR after stripping away unnecessary quotes and
478 backslashes, so that it's suitable for yyerror. The heuristic is
479 that double-quoting is unnecessary unless the string contains an
480 apostrophe, a comma, or backslash (other than backslash-backslash).
481 YYSTR is taken from yytname. */
482 std::string
483 ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
484 {
485 if (*yystr == '"')
486 {
487 std::string yyr = "";
488 char const *yyp = yystr;
193d7c70 489
aa08666d
AD
490 for (;;)
491 switch (*++yyp)
492 {
493 case '\'':
494 case ',':
495 goto do_not_strip_quotes;
193d7c70 496
aa08666d
AD
497 case '\\':
498 if (*++yyp != '\\')
499 goto do_not_strip_quotes;
ac826bc4 500 // Fall through.
aa08666d
AD
501 default:
502 yyr += *yyp;
503 break;
193d7c70 504
aa08666d
AD
505 case '"':
506 return yyr;
507 }
508 do_not_strip_quotes: ;
509 }
193d7c70 510
aa08666d
AD
511 return yystr;
512 }
422c18f4 513]])[
9e0876fb 514
98ae9643 515 /// Build a parser object.
fa7b79c0
PE
516 ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
517 :])[
5f108727 518#if ]b4_api_PREFIX[DEBUG
fa7b79c0
PE
519 ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
520 yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
521#endif]b4_parse_param_cons[
5f87211c 522 {}
a0e68930 523
98ae9643 524 ]b4_parser_class_name::~b4_parser_class_name[ ()
5f87211c 525 {}
a0e68930 526
a0e68930 527
1f7d007b
AD
528 /*---------------.
529 | Symbol types. |
530 `---------------*/
531
e36ec1f4 532]b4_token_ctor_if([], [b4_public_types_define])[
2873fdf8 533
1dbaf37f 534 // by_state.
b20e797a 535 inline
1dbaf37f 536 ]b4_parser_class_name[::by_state::by_state ()
5422471c 537 : state (empty_state)
1dbaf37f 538 {}
1f7d007b 539
b20e797a 540 inline
1dbaf37f
TR
541 ]b4_parser_class_name[::by_state::by_state (const by_state& other)
542 : state (other.state)
543 {}
544
b20e797a
TR
545 inline
546 void
547 ]b4_parser_class_name[::by_state::move (by_state& that)
548 {
549 state = that.state;
5422471c 550 that.state = empty_state;
b20e797a
TR
551 }
552
553 inline
1dbaf37f
TR
554 ]b4_parser_class_name[::by_state::by_state (state_type s)
555 : state (s)
556 {}
1f7d007b 557
b20e797a 558 inline
26f95f5f 559 ]b4_parser_class_name[::symbol_number_type
1dbaf37f 560 ]b4_parser_class_name[::by_state::type_get () const
1f7d007b 561 {
5422471c 562 return state == empty_state ? empty_symbol : yystos_[state];
97ae878e
AD
563 }
564
565 inline
566 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type ()
567 {}
568
569
570 inline
23be254e
AD
571 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
572 : super_type (s]b4_locations_if([, that.location])[)
573 {
574 ]b4_variant_if([b4_symbol_variant([that.type_get ()],
575 [value], [move], [that.value])],
576 [[value = that.value;]])[
577 // that is emptied.
5422471c 578 that.type = empty_symbol;
97ae878e
AD
579 }
580
581 inline
582 ]b4_parser_class_name[::stack_symbol_type&
583 ]b4_parser_class_name[::stack_symbol_type::operator= (const stack_symbol_type& that)
584 {
23be254e
AD
585 state = that.state;
586 ]b4_variant_if([b4_symbol_variant([that.type_get ()],
587 [value], [copy], [that.value])],
588 [[value = that.value;]])[]b4_locations_if([
97ae878e
AD
589 location = that.location;])[
590 return *this;
1f7d007b
AD
591 }
592
5f87211c 593
1dbaf37f 594 template <typename Base>
b20e797a 595 inline
98ae9643 596 void
5f87211c 597 ]b4_parser_class_name[::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
98ae9643 598 {
8901f32e 599 if (yymsg)
97ae878e 600 YY_SYMBOL_PRINT (yymsg, yysym);]b4_variant_if([], [
98ae9643 601
8901f32e 602 // User destructor.
cc8962bd 603 b4_symbol_actions([destructor], [yysym.type_get ()])])[
8901f32e
AD
604 }
605
ccdc1577 606#if ]b4_api_PREFIX[DEBUG
1dbaf37f 607 template <typename Base>
1f7d007b 608 void
5de9c593 609 ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
1dbaf37f 610 const basic_symbol<Base>& yysym) const
8901f32e 611 {
c5026327
AD
612 std::ostream& yyoutput = yyo;
613 YYUSE (yyoutput);
26f95f5f 614 symbol_number_type yytype = yysym.type_get ();
1f7d007b 615 yyo << (yytype < yyntokens_ ? "token" : "nterm")
2ea7730c
AD
616 << ' ' << yytname_[yytype] << " ("]b4_locations_if([
617 << yysym.location << ": "])[;
cc8962bd 618 ]b4_symbol_actions([printer])[
1f7d007b 619 yyo << ')';
8901f32e 620 }
1f7d007b 621#endif
8901f32e 622
b20e797a 623 inline
1f7d007b 624 void
5f87211c 625 ]b4_parser_class_name[::yypush_ (const char* m, state_type s, symbol_type& sym)
8901f32e 626 {
97ae878e
AD
627 stack_symbol_type t (s, sym);
628 yypush_ (m, t);
98ae9643 629 }
60a777aa 630
b20e797a 631 inline
7dedf26e 632 void
bc0b0477 633 ]b4_parser_class_name[::yypush_ (const char* m, stack_symbol_type& s)
7dedf26e 634 {
9380cfd0 635 if (m)
1f7d007b 636 YY_SYMBOL_PRINT (m, s);
97ae878e 637 yystack_.push (s);
7dedf26e
AD
638 }
639
b20e797a 640 inline
98ae9643
AD
641 void
642 ]b4_parser_class_name[::yypop_ (unsigned int n)
643 {
8901f32e 644 yystack_.pop (n);
98ae9643 645 }
52d5733f 646
5f108727 647#if ]b4_api_PREFIX[DEBUG
98ae9643
AD
648 std::ostream&
649 ]b4_parser_class_name[::debug_stream () const
650 {
651 return *yycdebug_;
652 }
9a1e9989 653
98ae9643
AD
654 void
655 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
656 {
657 yycdebug_ = &o;
658 }
9a1e9989
AD
659
660
98ae9643
AD
661 ]b4_parser_class_name[::debug_level_type
662 ]b4_parser_class_name[::debug_level () const
663 {
664 return yydebug_;
665 }
a3cb6248 666
98ae9643
AD
667 void
668 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
669 {
670 yydebug_ = l;
671 }
ccdc1577 672#endif // ]b4_api_PREFIX[DEBUG
a3cb6248 673
7580c379 674 inline ]b4_parser_class_name[::state_type
edb2e905 675 ]b4_parser_class_name[::yy_lr_goto_state_ (state_type yystate, int yysym)
7580c379 676 {
edb2e905 677 int yyr = yypgoto_[yysym - yyntokens_] + yystate;
7580c379
AD
678 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
679 return yytable_[yyr];
680 else
edb2e905 681 return yydefgoto_[yysym - yyntokens_];
7580c379
AD
682 }
683
f2b30bdf
JD
684 inline bool
685 ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
686 {
687 return yyvalue == yypact_ninf_;
688 }
689
690 inline bool
691 ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
692 {
aa0cb40d 693 return yyvalue == yytable_ninf_;
f2b30bdf
JD
694 }
695
98ae9643
AD
696 int
697 ]b4_parser_class_name[::parse ()
698 {
b720fedf 699 // State.
98ae9643 700 int yyn;
5c774121 701 /// Length of the RHS of the rule being reduced.
a85284cf 702 int yylen = 0;
d4fb5e3c 703
b720fedf 704 // Error handling.
98ae9643
AD
705 int yynerrs_ = 0;
706 int yyerrstatus_ = 0;
dbcdae2d 707
8a4ec359
AD
708 /// Whether yyla contains a lookahead.
709 bool yyempty = true;
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
ff348970 717 /// The return value of parse ().
98ae9643 718 int yyresult;
ad745863 719
7e1fabbe
AD
720 // FIXME: This shoud be completely indented. It is not yet to
721 // avoid gratuitous conflicts when merging into the master branch.
722 try
723 {
98ae9643 724 YYCDEBUG << "Starting parse" << std::endl;
451364ed 725
451364ed 726]m4_ifdef([b4_initial_action], [
4323e0da 727b4_dollar_pushdef([yyla.value], [], [yyla.location])dnl
ac826bc4 728 // User initialization code.
8ec0a172 729 b4_user_initial_action
cd735a8c 730b4_dollar_popdef])[]dnl
451364ed 731
8901f32e 732 [ /* Initialize the stack. The initial state will be set in
98ae9643
AD
733 yynewstate, since the latter expects the semantical and the
734 location values to have been already stored, initialize these
735 stacks with a primary value. */
cc8962bd 736 yystack_.clear ();
8d0b7cef 737 yypush_ (YY_NULLPTR, 0, yyla);
98ae9643 738
7580c379 739 // A new symbol was pushed on the stack.
98ae9643 740 yynewstate:
7580c379 741 YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
868d2d96 742
ac826bc4 743 // Accept?
7580c379 744 if (yystack_[0].state == yyfinal_)
868d2d96
JD
745 goto yyacceptlab;
746
98ae9643
AD
747 goto yybackup;
748
ac826bc4 749 // Backup.
98ae9643
AD
750 yybackup:
751
ac826bc4 752 // Try to take a decision without lookahead.
7580c379 753 yyn = yypact_[yystack_[0].state];
f2b30bdf 754 if (yy_pact_value_is_default_ (yyn))
98ae9643
AD
755 goto yydefault;
756
ac826bc4 757 // Read a lookahead token.
39be9022 758 if (yyempty)
98ae9643 759 {
09277875 760 YYCDEBUG << "Reading a token: ";
a6552c5d 761 try
64b3612a 762 {]b4_token_ctor_if([[
1dbaf37f 763 symbol_type yylookahead (]b4_lex[);
64b3612a
AD
764 yyla.move (yylookahead);]], [[
765 yyla.type = yytranslate_ (]b4_lex[);]])[
77a1a208 766 }
a6552c5d 767 catch (const syntax_error& yyexc)
77a1a208
AD
768 {
769 error (yyexc);
770 goto yyerrlab1;
771 }
39be9022 772 yyempty = false;
98ae9643 773 }
aba12ad1 774 YY_SYMBOL_PRINT ("Next token is", yyla);
98ae9643 775
1f7d007b
AD
776 /* If the proper action on seeing token YYLA.TYPE is to reduce or
777 to detect an error, take that action. */
26f95f5f
AD
778 yyn += yyla.type_get ();
779 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
98ae9643
AD
780 goto yydefault;
781
ac826bc4 782 // Reduce or error.
98ae9643
AD
783 yyn = yytable_[yyn];
784 if (yyn <= 0)
785 {
e9690142
JD
786 if (yy_table_value_is_error_ (yyn))
787 goto yyerrlab;
788 yyn = -yyn;
789 goto yyreduce;
98ae9643
AD
790 }
791
ac826bc4 792 // Discard the token being shifted.
39be9022 793 yyempty = true;
98ae9643 794
ac826bc4 795 // Count tokens shifted since error; after three, turn off error status.
98ae9643
AD
796 if (yyerrstatus_)
797 --yyerrstatus_;
798
ac826bc4 799 // Shift the lookahead token.
7580c379 800 yypush_ ("Shifting", yyn, yyla);
98ae9643
AD
801 goto yynewstate;
802
803 /*-----------------------------------------------------------.
804 | yydefault -- do the default action for the current state. |
805 `-----------------------------------------------------------*/
806 yydefault:
7580c379 807 yyn = yydefact_[yystack_[0].state];
98ae9643
AD
808 if (yyn == 0)
809 goto yyerrlab;
810 goto yyreduce;
811
812 /*-----------------------------.
813 | yyreduce -- Do a reduction. |
814 `-----------------------------*/
815 yyreduce:
c4dc4c46 816 yylen = yyr2_[yyn];
5c774121
AD
817 {
818 stack_symbol_type yylhs;
44186fc4
AD
819 yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([
820 /* Variants are always initialized to an empty instance of the
821 correct type. The default '$$ = $1' action is NOT applied
822 when using variants. */
823 b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [build])], [
824 /* If YYLEN is nonzero, implement the default value of the
825 action: '$$ = $1'. Otherwise, use the top of the stack.
826
827 Otherwise, the following line sets YYLHS.VALUE to garbage.
828 This behavior is undocumented and Bison users should not rely
829 upon it. */
830 if (yylen)
831 yylhs.value = yystack_@{yylen - 1@}.value;
832 else
833 yylhs.value = yystack_@{0@}.value;])[
2ea7730c
AD
834]b4_locations_if([dnl
835[
44186fc4 836 // Compute the default @@$.
98ae9643 837 {
44186fc4
AD
838 slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
839 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
840 }]])[
841
842 // Perform the reduction.
843 YY_REDUCE_PRINT (yyn);
844 try
845 {
846 switch (yyn)
847 {
30bb2edc 848]b4_user_actions[
44186fc4
AD
849 default:
850 break;
851 }
852 }
853 catch (const syntax_error& yyexc)
854 {
855 error (yyexc);
856 YYERROR;
857 }
858 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
859 yypop_ (yylen);
860 yylen = 0;
861 YY_STACK_PRINT ();
862
863 // Shift the result of the reduction.
864 yypush_ (YY_NULLPTR, yylhs);
5c774121 865 }
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 877 [[yysyntax_error_ (yystack_[0].state,
5422471c 878 yyempty ? empty_symbol : yyla.type_get ())]])[);
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.
26f95f5f 889 if (yyla.type_get () == 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([[
5c774121 912 yyerror_range[1].location = yystack_[yylen - 1].location;]])[
e672a4ba 913 /* Do not reclaim the symbols of the rule whose action triggered
9d9b8b70 914 this YYERROR. */
98ae9643 915 yypop_ (yylen);
a85284cf 916 yylen = 0;
98ae9643
AD
917 goto yyerrlab1;
918
919 /*-------------------------------------------------------------.
920 | yyerrlab1 -- common code for both syntax error and YYERROR. |
921 `-------------------------------------------------------------*/
922 yyerrlab1:
ac826bc4 923 yyerrstatus_ = 3; // Each real token shifted decrements this.
e1f93869 924 {
bc0b0477 925 stack_symbol_type error_token;
e1f93869
AD
926 for (;;)
927 {
7580c379 928 yyn = yypact_[yystack_[0].state];
f2b30bdf 929 if (!yy_pact_value_is_default_ (yyn))
e1f93869
AD
930 {
931 yyn += yyterror_;
932 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
933 {
934 yyn = yytable_[yyn];
935 if (0 < yyn)
936 break;
937 }
938 }
98ae9643 939
e1f93869
AD
940 // Pop the current state because it cannot handle the error token.
941 if (yystack_.size () == 1)
942 YYABORT;
2ea7730c 943]b4_locations_if([[
44c2b42d 944 yyerror_range[1].location = yystack_[0].location;]])[
1f7d007b 945 yy_destroy_ ("Error: popping", yystack_[0]);
e1f93869 946 yypop_ ();
e1f93869
AD
947 YY_STACK_PRINT ();
948 }
2ea7730c 949]b4_locations_if([[
44c2b42d
JD
950 yyerror_range[2].location = yyla.location;
951 YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
e1f93869 952
ac826bc4 953 // Shift the error token.
7580c379 954 error_token.state = yyn;
e9b0834e 955 yypush_ ("Shifting", error_token);
e1f93869 956 }
98ae9643
AD
957 goto yynewstate;
958
ac826bc4 959 // Accept.
98ae9643
AD
960 yyacceptlab:
961 yyresult = 0;
962 goto yyreturn;
963
ac826bc4 964 // Abort.
98ae9643
AD
965 yyabortlab:
966 yyresult = 1;
967 goto yyreturn;
968
969 yyreturn:
39be9022 970 if (!yyempty)
1f7d007b 971 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
98ae9643 972
e672a4ba 973 /* Do not reclaim the symbols of the rule whose action triggered
9d9b8b70 974 this YYABORT or YYACCEPT. */
a85284cf 975 yypop_ (yylen);
23d13411 976 while (1 < yystack_.size ())
98ae9643 977 {
e9690142
JD
978 yy_destroy_ ("Cleanup: popping", yystack_[0]);
979 yypop_ ();
98ae9643
AD
980 }
981
982 return yyresult;
983 }
7e1fabbe
AD
984 catch (...)
985 {
25a6ad2f
AD
986 YYCDEBUG << "Exception caught: cleaning lookahead and stack"
987 << std::endl;
988 // Do not try to display the values of the reclaimed symbols,
989 // as their printer might throw an exception.
23d13411 990 if (!yyempty)
8d0b7cef 991 yy_destroy_ (YY_NULLPTR, yyla);
7e1fabbe 992
23d13411 993 while (1 < yystack_.size ())
7e1fabbe 994 {
8d0b7cef 995 yy_destroy_ (YY_NULLPTR, yystack_[0]);
7e1fabbe
AD
996 yypop_ ();
997 }
998 throw;
999 }
98ae9643 1000 }
2b548aa6 1001
a6552c5d
AD
1002 void
1003 ]b4_parser_class_name[::error (const syntax_error& yyexc)
1004 {
710c4a65 1005 error (]b4_join(b4_locations_if([yyexc.location]),
a6552c5d
AD
1006 [[yyexc.what()]])[);
1007 }
1008
98ae9643
AD
1009 // Generate an error message.
1010 std::string
422c18f4 1011 ]b4_parser_class_name[::yysyntax_error_ (]dnl
38cea49b
AD
1012b4_error_verbose_if([state_type yystate, symbol_number_type yytoken],
1013 [state_type, symbol_number_type])[) const
25a648d8 1014 {]b4_error_verbose_if([[
d2060f06
JD
1015 // Number of reported tokens (one for the "unexpected", one per
1016 // "expected").
1017 size_t yycount = 0;
1018 // Its maximum.
1019 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1020 // Arguments of yyformat.
1021 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1022
1023 /* There are many possibilities here to consider:
1024 - If this state is a consistent state with a default action, then
1025 the only way this function was invoked is if the default action
1026 is an error action. In that case, don't check for expected
1027 tokens because there are none.
1028 - The only way there can be no lookahead present (in yytoken) is
1029 if this state is a consistent state with a default action.
1030 Thus, detecting the absence of a lookahead is sufficient to
1031 determine that there is no unexpected or expected token to
1032 report. In that case, just report a simple "syntax error".
1033 - Don't assume there isn't a lookahead just because this state is
1034 a consistent state with a default action. There might have
1035 been a previous inconsistent state, consistent state with a
1036 non-default action, or user semantic action that manipulated
1037 yyla. (However, yyla is currently not documented for users.)
1038 - Of course, the expected token list depends on states to have
1039 correct lookahead information, and it depends on the parser not
1040 to perform extra reductions after fetching a lookahead from the
1041 scanner and before detecting a syntax error. Thus, state
1042 merging (from LALR or IELR) and default reductions corrupt the
1043 expected token list. However, the list is correct for
1044 canonical LR with one exception: it will still contain any
1045 token that will not be accepted due to an error action in a
1046 later state.
1047 */
5422471c 1048 if (yytoken != empty_symbol)
98ae9643 1049 {
d2060f06
JD
1050 yyarg[yycount++] = yytname_[yytoken];
1051 int yyn = yypact_[yystate];
1052 if (!yy_pact_value_is_default_ (yyn))
1053 {
b4bbc4a0
JD
1054 /* Start YYX at -YYN if negative to avoid negative indexes in
1055 YYCHECK. In other words, skip the first -YYN actions for
1056 this state because they are default actions. */
1057 int yyxbegin = yyn < 0 ? -yyn : 0;
ac826bc4 1058 // Stay within bounds of both yycheck and yytname.
b4bbc4a0
JD
1059 int yychecklim = yylast_ - yyn + 1;
1060 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
b4bbc4a0
JD
1061 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1062 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
1063 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
1064 {
1065 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1066 {
1067 yycount = 1;
1068 break;
1069 }
1070 else
1071 yyarg[yycount++] = yytname_[yyx];
1072 }
d2060f06
JD
1073 }
1074 }
a0ffc175 1075
8d0b7cef 1076 char const* yyformat = YY_NULLPTR;
b4bbc4a0
JD
1077 switch (yycount)
1078 {
1079#define YYCASE_(N, S) \
1080 case N: \
1081 yyformat = S; \
1082 break
d2060f06 1083 YYCASE_(0, YY_("syntax error"));
b4bbc4a0
JD
1084 YYCASE_(1, YY_("syntax error, unexpected %s"));
1085 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1086 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1087 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1088 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
a0ffc175 1089#undef YYCASE_
98ae9643 1090 }
d2060f06 1091
8a4ec359 1092 std::string yyres;
b4bbc4a0
JD
1093 // Argument number.
1094 size_t yyi = 0;
1095 for (char const* yyp = yyformat; *yyp; ++yyp)
1096 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
1097 {
1098 yyres += yytnamerr_ (yyarg[yyi++]);
1099 ++yyp;
1100 }
1101 else
1102 yyres += *yyp;
25a648d8
JD
1103 return yyres;]], [[
1104 return YY_("syntax error");]])[
98ae9643 1105 }
a08460b0 1106
5348bfbe 1107
98ae9643 1108 const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
2b548aa6 1109
0fddb3d5
AD
1110 const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1111
ba206cf4 1112]b4_parser_tables_define[
2b548aa6 1113
5f108727 1114]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
ac826bc4
AD
1115 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1116 // First, the terminals, then, starting at \a yyntokens_, nonterminals.
98ae9643
AD
1117 const char*
1118 const ]b4_parser_class_name[::yytname_[] =
1119 {
8901f32e 1120 ]b4_tname[
98ae9643 1121 };
2b548aa6 1122
5f108727 1123]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
ba206cf4 1124]b4_integral_parser_table_define([rline], [b4_rline])[
5348bfbe 1125
98ae9643
AD
1126 // Print the state stack on the debug stream.
1127 void
1128 ]b4_parser_class_name[::yystack_print_ ()
1129 {
1130 *yycdebug_ << "Stack now";
8901f32e
AD
1131 for (stack_type::const_iterator
1132 i = yystack_.begin (),
1133 i_end = yystack_.end ();
e9690142 1134 i != i_end; ++i)
8901f32e 1135 *yycdebug_ << ' ' << i->state;
98ae9643
AD
1136 *yycdebug_ << std::endl;
1137 }
25f66e1a 1138
98ae9643
AD
1139 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1140 void
d1ff7a7c 1141 ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
98ae9643
AD
1142 {
1143 unsigned int yylno = yyrline_[yyrule];
d1ff7a7c 1144 int yynrhs = yyr2_[yyrule];
ac826bc4 1145 // Print the symbols being reduced, and their result.
98ae9643 1146 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
e9690142 1147 << " (line " << yylno << "):" << std::endl;
ac826bc4 1148 // The symbols being reduced.
d1ff7a7c
AD
1149 for (int yyi = 0; yyi < yynrhs; yyi++)
1150 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
1f7d007b 1151 ]b4_rhs_data(yynrhs, yyi + 1)[);
98ae9643 1152 }
5f108727 1153#endif // ]b4_api_PREFIX[DEBUG
69e2658b 1154
e36ec1f4 1155]b4_token_ctor_if([], [b4_yytranslate_define])[
793fbca5 1156]b4_namespace_close[
8901f32e 1157]b4_epilogue[]dnl
1c7ec959 1158b4_output_end()
064e42b0
AD
1159
1160
a9ce3f54 1161m4_popdef([b4_copyright_years])dnl