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