]> git.saurik.com Git - bison.git/blame - data/lalr1.cc
tests: fix 'find' portability issues
[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
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],
7d6bad19 134 [2002-2013])
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
AD
159
160]b4_YYDEBUG_define[
50997c6e 161
93549bcd 162]b4_namespace_open[
4162fa07 163
5de5b987
AD
164]b4_defines_if([],
165[b4_stack_define
bcd80897
AD
166b4_bison_locations_if([b4_position_define
167b4_location_define])])[
69e2658b 168
93549bcd 169]b4_variant_if([b4_variant_define])[
3f3eed27 170
efeed023 171 /// A Bison parser.
07fed891 172 class ]b4_parser_class_name[
2b548aa6 173 {
fb9712a9 174 public:
4f84717d 175]b4_public_types_declare[
efeed023 176 /// Build a parser object.
98ae9643
AD
177 ]b4_parser_class_name[ (]b4_parse_param_decl[);
178 virtual ~]b4_parser_class_name[ ();
2b548aa6 179
f69a4142
AD
180 /// Parse.
181 /// \returns 0 iff parsing succeeded.
e019c247 182 virtual int parse ();
2b548aa6 183
5f108727 184#if ]b4_api_PREFIX[DEBUG
f69a4142 185 /// The current debugging stream.
9a1e9989
AD
186 std::ostream& debug_stream () const;
187 /// Set the current debugging stream.
188 void set_debug_stream (std::ostream &);
189
a3cb6248
AD
190 /// Type for debugging levels.
191 typedef int debug_level_type;
192 /// The current debugging level.
193 debug_level_type debug_level () const;
194 /// Set the current debugging level.
195 void set_debug_level (debug_level_type l);
52cbbe84 196#endif
a3cb6248 197
34904c57
AD
198 /// Report a syntax error.]b4_locations_if([[
199 /// \param loc where the syntax error is found.]])[
efeed023 200 /// \param msg a description of the syntax error.
34904c57 201 virtual void error (]b4_locations_if([[const location_type& loc, ]])[const std::string& msg);
efeed023 202
a6552c5d
AD
203 /// Report a syntax error.
204 void error (const syntax_error& err);
205
49572920 206 private:
e83be476
AD
207 /// This class is not copyable.
208 ]b4_parser_class_name[ (const ]b4_parser_class_name[&);
209 ]b4_parser_class_name[& operator= (const ]b4_parser_class_name[&);
210
e019c247 211 /// State numbers.
f479c6c6 212 typedef int state_type;
2b548aa6 213
ceb8b8e6
AD
214 /// Generate an error message.
215 /// \param yystate the state where the error occurred.
38cea49b
AD
216 /// \param yytoken the lookahead token type, or yyempty_.
217 virtual std::string yysyntax_error_ (state_type yystate,
218 symbol_number_type yytoken) const;
ceb8b8e6 219
7580c379
AD
220 /// Compute post-reduction state.
221 /// \param yystate the current state
222 /// \param yylhs the nonterminal to push on the stack
223 state_type yy_lr_goto_state_ (state_type yystate, int yylhs);
224
f2b30bdf
JD
225 /// Whether the given \c yypact_ value indicates a defaulted state.
226 /// \param yyvalue the value to check
227 static bool yy_pact_value_is_default_ (int yyvalue);
228
229 /// Whether the given \c yytable_ value indicates a syntax error.
230 /// \param yyvalue the value to check
231 static bool yy_table_value_is_error_ (int yyvalue);
232
617a8f12 233 static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
617a8f12 234 static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
efeed023 235
6f0a6f27 236 /// Convert a scanner token number \a t to a symbol number.
b20e797a 237 static token_number_type yytranslate_ (]b4_token_ctor_if([token_type], [int])[ t);
6f0a6f27 238
7aaaad6c
AD
239 // Tables.
240]b4_parser_tables_declare[]b4_error_verbose_if([
9e0876fb 241
9e0876fb 242 /// Convert the symbol name \a n to a form suitable for a diagnostic.
422c18f4 243 static std::string yytnamerr_ (const char *n);])[
2b548aa6 244
5f108727 245]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
258cddbc
AD
246 /// For a symbol, its name in clear.
247 static const char* const yytname_[];
5f108727 248]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
ba206cf4 249]b4_integral_parser_table_declare([rline], [b4_rline],
6f0a6f27 250 [[YYRLINE[YYN] -- Source line where rule number YYN was defined.]])[
efeed023 251 /// Report on the debug stream that the rule \a r is going to be reduced.
d1ff7a7c 252 virtual void yy_reduce_print_ (int r);
efeed023 253 /// Print the state stack on the debug stream.
f69a4142 254 virtual void yystack_print_ ();
fa7b79c0 255
7aaaad6c 256 // Debugging.
fa7b79c0
PE
257 int yydebug_;
258 std::ostream* yycdebug_;
f69a4142 259
1f7d007b
AD
260 /// \brief Display a symbol type, value and location.
261 /// \param yyo The output stream.
262 /// \param yysym The symbol.
1dbaf37f 263 template <typename Base>
23be254e 264 void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
57295d14
AD
265#endif
266
1f7d007b
AD
267 /// \brief Reclaim the memory associated to a symbol.
268 /// \param yymsg Why this token is reclaimed.
269 /// If null, print nothing.
270 /// \param s The symbol.
1dbaf37f 271 template <typename Base>
b20e797a 272 void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
1f7d007b 273
1dbaf37f
TR
274 private:
275 /// Type access provider for state based symbols.
276 struct by_state
1f7d007b
AD
277 {
278 /// Default constructor.
b20e797a 279 by_state ();
1f7d007b 280
26f95f5f
AD
281 /// The symbol type as needed by the constructor.
282 typedef state_type kind_type;
283
1f7d007b 284 /// Constructor.
26f95f5f 285 by_state (kind_type s);
1dbaf37f
TR
286
287 /// Copy constructor.
b20e797a 288 by_state (const by_state& other);
1f7d007b 289
26f95f5f 290 /// Steal the symbol type from \a that.
b20e797a 291 void move (by_state& that);
97ae878e 292
26f95f5f 293 /// The (internal) type number (corresponding to \a state).
675d9fe4 294 /// "empty" when empty.
26f95f5f 295 symbol_number_type type_get () const;
1dbaf37f 296
675d9fe4
AD
297 enum { empty = 0 };
298
26f95f5f
AD
299 /// The state.
300 state_type state;
1f7d007b 301 };
57295d14 302
1dbaf37f 303 /// "Internal" symbol: element of the stack.
97ae878e
AD
304 struct stack_symbol_type : basic_symbol<by_state>
305 {
306 /// Superclass.
307 typedef basic_symbol<by_state> super_type;
308 /// Construct an empty symbol.
309 stack_symbol_type ();
310 /// Steal the contents from \a sym to build this.
311 stack_symbol_type (state_type s, symbol_type& sym);
7d1aa2d6 312 /// Assignment, needed by push_back.
97ae878e
AD
313 stack_symbol_type& operator= (const stack_symbol_type& that);
314 };
1dbaf37f 315
8901f32e 316 /// Stack type.
bc0b0477 317 typedef stack<stack_symbol_type> stack_type;
8901f32e
AD
318
319 /// The stack.
320 stack_type yystack_;
321
7dedf26e 322 /// Push a new state on the stack.
9380cfd0
AD
323 /// \param m a debug message to display
324 /// if null, no trace is output.
e9b0834e
AD
325 /// \param s the symbol
326 /// \warning the contents of \a s.value is stolen.
b20e797a 327 void yypush_ (const char* m, stack_symbol_type& s);
7dedf26e 328
1f7d007b
AD
329 /// Push a new look ahead token on the state on the stack.
330 /// \param m a debug message to display
331 /// if null, no trace is output.
332 /// \param s the state
333 /// \param sym the symbol (for its value and location).
334 /// \warning the contents of \a s.value is stolen.
b20e797a 335 void yypush_ (const char* m, state_type s, symbol_type& sym);
1f7d007b 336
52d5733f 337 /// Pop \a n symbols the three stacks.
b20e797a 338 void yypop_ (unsigned int n = 1);
52d5733f 339
ac826bc4 340 // Constants.
914202bd
AD
341 enum
342 {
343 yyeof_ = 0,
344 yylast_ = ]b4_last[, //< Last index in yytable_.
345 yynnts_ = ]b4_nterms_number[, //< Number of nonterminal symbols.
346 yyempty_ = -2,
347 yyfinal_ = ]b4_final_state_number[, //< Termination state number.
348 yyterror_ = 1,
349 yyerrcode_ = 256,
f3bd3f78 350 yyntokens_ = ]b4_tokens_number[ //< Number of tokens.
914202bd
AD
351 };
352
caf37a36 353]b4_parse_param_vars[
2b548aa6 354 };
1c4af381 355
e36ec1f4 356]b4_token_ctor_if([b4_yytranslate_define
0623bacc 357b4_public_types_define])[
793fbca5 358]b4_namespace_close[
2b548aa6 359
592d0b1e 360]b4_percent_define_flag_if([[global_tokens_and_yystype]],
6687da34 361[b4_token_defines
fb9712a9 362
4b3847c3 363#ifndef ]b4_api_PREFIX[STYPE
ac826bc4 364 // Redirection for backward compatibility.
4b3847c3 365# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
fb9712a9 366#endif
22172d47
AD
367])[
368]b4_percent_code_get([[provides]])[
d27c5e65
AD
369]])
370
85f0b29e 371b4_defines_if(
eaf690a7 372[b4_output_begin([b4_spec_defines_file])
d27c5e65
AD
373b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
374[
375/**
376 ** \file ]b4_spec_defines_file[
377 ** Define the ]b4_namespace_ref[::parser class.
378 */
379
ac826bc4 380// C++ LALR(1) parser skeleton written by Akim Demaille.
d27c5e65
AD
381
382]b4_cpp_guard_open([b4_spec_defines_file])[
383]b4_shared_declarations[
22172d47 384]b4_cpp_guard_close([b4_spec_defines_file])
1c7ec959 385b4_output_end()
85f0b29e
AD
386])
387
388
1c7ec959 389b4_output_begin([b4_parser_file_name])
a9ce3f54 390b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])
a4e25e1d 391b4_percent_code_get([[top]])[]dnl
aa08666d 392m4_if(b4_prefix, [yy], [],
c5b95ccf
AD
393[
394// Take the name prefix into account.
9bc0dd67
JD
395#define yylex b4_prefix[]lex])[
396
28427f57 397// First part of user declarations.
c944f7f2 398]b4_user_pre_prologue[
9bc0dd67 399
28427f57
AD
400]b4_null_define[
401
85f0b29e
AD
402]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
403 [b4_shared_declarations])[
50997c6e 404
ac826bc4 405// User implementation prologue.
771dc643
AD
406]b4_user_post_prologue[
407]b4_percent_code_get[
408
771dc643 409#ifndef YY_
ae93128c 410# if defined YYENABLE_NLS && YYENABLE_NLS
30757c8c 411# if ENABLE_NLS
ac826bc4 412# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
30757c8c
PE
413# define YY_(msgid) dgettext ("bison-runtime", msgid)
414# endif
415# endif
416# ifndef YY_
417# define YY_(msgid) msgid
418# endif
989b5b8e
AD
419#endif
420
38435078 421]b4_locations_if([dnl
ccdc1577
AD
422[#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
423]b4_yylloc_default_define])[
38435078 424
ac826bc4
AD
425// Suppress unused-variable warnings by "using" E.
426#define YYUSE(E) ((void) (E))
2a4647a3 427
ac826bc4 428// Enable debugging if requested.
5f108727 429#if ]b4_api_PREFIX[DEBUG
284acc8b 430
ac826bc4 431// A pseudo ostream that takes yydebug_ into account.
fa7b79c0
PE
432# define YYCDEBUG if (yydebug_) (*yycdebug_)
433
1f7d007b 434# define YY_SYMBOL_PRINT(Title, Symbol) \
57295d14
AD
435 do { \
436 if (yydebug_) \
437 { \
438 *yycdebug_ << Title << ' '; \
1f7d007b 439 yy_print_ (*yycdebug_, Symbol); \
57295d14
AD
440 *yycdebug_ << std::endl; \
441 } \
8901f32e 442 } while (false)
284acc8b 443
e9690142
JD
444# define YY_REDUCE_PRINT(Rule) \
445 do { \
8901f32e 446 if (yydebug_) \
e9690142 447 yy_reduce_print_ (Rule); \
8901f32e 448 } while (false)
284acc8b 449
e9690142
JD
450# define YY_STACK_PRINT() \
451 do { \
8901f32e
AD
452 if (yydebug_) \
453 yystack_print_ (); \
454 } while (false)
284acc8b 455
ac826bc4 456#else // !]b4_api_PREFIX[DEBUG
284acc8b 457
a36b333c 458# define YYCDEBUG if (false) std::cerr
beadb220 459# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
1f7d007b
AD
460# define YY_REDUCE_PRINT(Rule) static_cast<void>(0)
461# define YY_STACK_PRINT() static_cast<void>(0)
284acc8b 462
ac826bc4 463#endif // !]b4_api_PREFIX[DEBUG
2b548aa6 464
39be9022
AD
465#define yyerrok (yyerrstatus_ = 0)
466#define yyclearin (yyempty = true)
98e26a92 467
39be9022
AD
468#define YYACCEPT goto yyacceptlab
469#define YYABORT goto yyabortlab
470#define YYERROR goto yyerrorlab
98e26a92 471#define YYRECOVERING() (!!yyerrstatus_)
60a777aa 472
422c18f4 473]b4_namespace_open[]b4_error_verbose_if([[
9e0876fb 474
aa08666d
AD
475 /* Return YYSTR after stripping away unnecessary quotes and
476 backslashes, so that it's suitable for yyerror. The heuristic is
477 that double-quoting is unnecessary unless the string contains an
478 apostrophe, a comma, or backslash (other than backslash-backslash).
479 YYSTR is taken from yytname. */
480 std::string
481 ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
482 {
483 if (*yystr == '"')
484 {
485 std::string yyr = "";
486 char const *yyp = yystr;
193d7c70 487
aa08666d
AD
488 for (;;)
489 switch (*++yyp)
490 {
491 case '\'':
492 case ',':
493 goto do_not_strip_quotes;
193d7c70 494
aa08666d
AD
495 case '\\':
496 if (*++yyp != '\\')
497 goto do_not_strip_quotes;
ac826bc4 498 // Fall through.
aa08666d
AD
499 default:
500 yyr += *yyp;
501 break;
193d7c70 502
aa08666d
AD
503 case '"':
504 return yyr;
505 }
506 do_not_strip_quotes: ;
507 }
193d7c70 508
aa08666d
AD
509 return yystr;
510 }
422c18f4 511]])[
9e0876fb 512
98ae9643 513 /// Build a parser object.
fa7b79c0
PE
514 ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
515 :])[
5f108727 516#if ]b4_api_PREFIX[DEBUG
fa7b79c0
PE
517 ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
518 yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
519#endif]b4_parse_param_cons[
5f87211c 520 {}
a0e68930 521
98ae9643 522 ]b4_parser_class_name::~b4_parser_class_name[ ()
5f87211c 523 {}
a0e68930 524
a0e68930 525
1f7d007b
AD
526 /*---------------.
527 | Symbol types. |
528 `---------------*/
529
e36ec1f4 530]b4_token_ctor_if([], [b4_public_types_define])[
2873fdf8 531
1dbaf37f 532 // by_state.
b20e797a 533 inline
1dbaf37f 534 ]b4_parser_class_name[::by_state::by_state ()
675d9fe4 535 : state (empty)
1dbaf37f 536 {}
1f7d007b 537
b20e797a 538 inline
1dbaf37f
TR
539 ]b4_parser_class_name[::by_state::by_state (const by_state& other)
540 : state (other.state)
541 {}
542
b20e797a
TR
543 inline
544 void
545 ]b4_parser_class_name[::by_state::move (by_state& that)
546 {
547 state = that.state;
675d9fe4 548 that.state = empty;
b20e797a
TR
549 }
550
551 inline
1dbaf37f
TR
552 ]b4_parser_class_name[::by_state::by_state (state_type s)
553 : state (s)
554 {}
1f7d007b 555
b20e797a 556 inline
26f95f5f 557 ]b4_parser_class_name[::symbol_number_type
1dbaf37f 558 ]b4_parser_class_name[::by_state::type_get () const
1f7d007b 559 {
675d9fe4 560 return state == empty ? 0 : yystos_[state];
97ae878e
AD
561 }
562
563 inline
564 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type ()
565 {}
566
567
568 inline
23be254e
AD
569 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
570 : super_type (s]b4_locations_if([, that.location])[)
571 {
572 ]b4_variant_if([b4_symbol_variant([that.type_get ()],
573 [value], [move], [that.value])],
574 [[value = that.value;]])[
575 // that is emptied.
675d9fe4 576 that.type = empty;
97ae878e
AD
577 }
578
579 inline
580 ]b4_parser_class_name[::stack_symbol_type&
581 ]b4_parser_class_name[::stack_symbol_type::operator= (const stack_symbol_type& that)
582 {
23be254e
AD
583 state = that.state;
584 ]b4_variant_if([b4_symbol_variant([that.type_get ()],
585 [value], [copy], [that.value])],
586 [[value = that.value;]])[]b4_locations_if([
97ae878e
AD
587 location = that.location;])[
588 return *this;
1f7d007b
AD
589 }
590
5f87211c 591
1dbaf37f 592 template <typename Base>
b20e797a 593 inline
98ae9643 594 void
5f87211c 595 ]b4_parser_class_name[::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
98ae9643 596 {
8901f32e 597 if (yymsg)
97ae878e 598 YY_SYMBOL_PRINT (yymsg, yysym);]b4_variant_if([], [
98ae9643 599
8901f32e 600 // User destructor.
cc8962bd 601 b4_symbol_actions([destructor], [yysym.type_get ()])])[
8901f32e
AD
602 }
603
ccdc1577 604#if ]b4_api_PREFIX[DEBUG
1dbaf37f 605 template <typename Base>
1f7d007b 606 void
5de9c593 607 ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
1dbaf37f 608 const basic_symbol<Base>& yysym) const
8901f32e 609 {
c5026327
AD
610 std::ostream& yyoutput = yyo;
611 YYUSE (yyoutput);
26f95f5f 612 symbol_number_type yytype = yysym.type_get ();
1f7d007b 613 yyo << (yytype < yyntokens_ ? "token" : "nterm")
2ea7730c
AD
614 << ' ' << yytname_[yytype] << " ("]b4_locations_if([
615 << yysym.location << ": "])[;
cc8962bd 616 ]b4_symbol_actions([printer])[
1f7d007b 617 yyo << ')';
8901f32e 618 }
1f7d007b 619#endif
8901f32e 620
b20e797a 621 inline
1f7d007b 622 void
5f87211c 623 ]b4_parser_class_name[::yypush_ (const char* m, state_type s, symbol_type& sym)
8901f32e 624 {
97ae878e
AD
625 stack_symbol_type t (s, sym);
626 yypush_ (m, t);
98ae9643 627 }
60a777aa 628
b20e797a 629 inline
7dedf26e 630 void
bc0b0477 631 ]b4_parser_class_name[::yypush_ (const char* m, stack_symbol_type& s)
7dedf26e 632 {
9380cfd0 633 if (m)
1f7d007b 634 YY_SYMBOL_PRINT (m, s);
97ae878e 635 yystack_.push (s);
7dedf26e
AD
636 }
637
b20e797a 638 inline
98ae9643
AD
639 void
640 ]b4_parser_class_name[::yypop_ (unsigned int n)
641 {
8901f32e 642 yystack_.pop (n);
98ae9643 643 }
52d5733f 644
5f108727 645#if ]b4_api_PREFIX[DEBUG
98ae9643
AD
646 std::ostream&
647 ]b4_parser_class_name[::debug_stream () const
648 {
649 return *yycdebug_;
650 }
9a1e9989 651
98ae9643
AD
652 void
653 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
654 {
655 yycdebug_ = &o;
656 }
9a1e9989
AD
657
658
98ae9643
AD
659 ]b4_parser_class_name[::debug_level_type
660 ]b4_parser_class_name[::debug_level () const
661 {
662 return yydebug_;
663 }
a3cb6248 664
98ae9643
AD
665 void
666 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
667 {
668 yydebug_ = l;
669 }
ccdc1577 670#endif // ]b4_api_PREFIX[DEBUG
a3cb6248 671
7580c379
AD
672 inline ]b4_parser_class_name[::state_type
673 ]b4_parser_class_name[::yy_lr_goto_state_ (state_type yystate, int yylhs)
674 {
675 int yyr = yypgoto_[yylhs - yyntokens_] + yystate;
676 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
677 return yytable_[yyr];
678 else
679 return yydefgoto_[yylhs - yyntokens_];
680 }
681
f2b30bdf
JD
682 inline bool
683 ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
684 {
685 return yyvalue == yypact_ninf_;
686 }
687
688 inline bool
689 ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
690 {
aa0cb40d 691 return yyvalue == yytable_ninf_;
f2b30bdf
JD
692 }
693
98ae9643
AD
694 int
695 ]b4_parser_class_name[::parse ()
696 {
39be9022
AD
697 /// Whether yyla contains a lookahead.
698 bool yyempty = true;
d4fb5e3c 699
b720fedf 700 // State.
98ae9643 701 int yyn;
a85284cf 702 int yylen = 0;
d4fb5e3c 703
b720fedf 704 // Error handling.
98ae9643
AD
705 int yynerrs_ = 0;
706 int yyerrstatus_ = 0;
dbcdae2d 707
6082531a 708 /// The lookahead symbol.
2ea7730c 709 symbol_type yyla;]b4_locations_if([[
6082531a 710
98ae9643 711 /// The locations where the error started and ended.
44c2b42d 712 stack_symbol_type yyerror_range[3];]])[
dbcdae2d 713
e1f93869 714 /// $$ and @@$.
bc0b0477 715 stack_symbol_type yylhs;
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 ();
eeaf1dc6 737 yypush_ (YY_NULL, 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];
7580c379 817 yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([
5ab8c47b 818 /* Variants are always initialized to an empty instance of the
3eead995
AD
819 correct type. The default $$=$1 action is NOT applied when using
820 variants. */
c4dc4c46 821 b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [build])],[
a85284cf 822 /* If YYLEN is nonzero, implement the default value of the action:
45eebca4 823 '$$ = $1'. Otherwise, use the top of the stack.
98ae9643 824
e1f93869 825 Otherwise, the following line sets YYLHS.VALUE to garbage.
98ae9643
AD
826 This behavior is undocumented and Bison
827 users should not rely upon it. */
828 if (yylen)
e1f93869 829 yylhs.value = yystack_@{yylen - 1@}.value;
98ae9643 830 else
e1f93869 831 yylhs.value = yystack_@{0@}.value;])[
2ea7730c
AD
832]b4_locations_if([dnl
833[
8901f32e 834 // Compute the default @@$.
2b548aa6 835 {
bc0b0477 836 slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
e1f93869 837 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
2ea7730c 838 }]])[
8901f32e
AD
839
840 // Perform the reduction.
98ae9643 841 YY_REDUCE_PRINT (yyn);
ff601366 842 try
98ae9643 843 {
77a1a208
AD
844 switch (yyn)
845 {
30bb2edc 846]b4_user_actions[
77a1a208
AD
847 default:
848 break;
849 }
98ae9643 850 }
ff601366 851 catch (const syntax_error& yyexc)
77a1a208
AD
852 {
853 error (yyexc);
854 YYERROR;
855 }
1f7d007b 856 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
98ae9643 857 yypop_ (yylen);
a85284cf 858 yylen = 0;
98ae9643 859 YY_STACK_PRINT ();
98ae9643 860
ac826bc4 861 // Shift the result of the reduction.
eeaf1dc6 862 yypush_ (YY_NULL, yylhs);
98ae9643
AD
863 goto yynewstate;
864
9c6a8966
AD
865 /*--------------------------------------.
866 | yyerrlab -- here on detecting error. |
867 `--------------------------------------*/
98ae9643 868 yyerrlab:
ac826bc4 869 // If not already recovering from an error, report this error.
98ae9643
AD
870 if (!yyerrstatus_)
871 {
e9690142 872 ++yynerrs_;
710c4a65 873 error (]b4_join(b4_locations_if([yyla.location]),
d2060f06 874 [[yysyntax_error_ (yystack_[0].state,
26f95f5f 875 yyempty ? yyempty_ : yyla.type_get ())]])[);
98ae9643
AD
876 }
877
2ea7730c 878]b4_locations_if([[
44c2b42d 879 yyerror_range[1].location = yyla.location;]])[
98ae9643
AD
880 if (yyerrstatus_ == 3)
881 {
e9690142 882 /* If just tried and failed to reuse lookahead token after an
27cb5b59
AD
883 error, discard it. */
884
ac826bc4 885 // Return failure if at end of input.
26f95f5f 886 if (yyla.type_get () == yyeof_)
27cb5b59 887 YYABORT;
d59beda0 888 else if (!yyempty)
39be9022 889 {
27cb5b59 890 yy_destroy_ ("Error: discarding", yyla);
39be9022 891 yyempty = true;
e9690142 892 }
98ae9643
AD
893 }
894
ac826bc4 895 // Else will try to reuse lookahead token after shifting the error token.
98ae9643
AD
896 goto yyerrlab1;
897
898
899 /*---------------------------------------------------.
900 | yyerrorlab -- error raised explicitly by YYERROR. |
901 `---------------------------------------------------*/
902 yyerrorlab:
903
904 /* Pacify compilers like GCC when the user code never invokes
905 YYERROR and the label yyerrorlab therefore never appears in user
906 code. */
907 if (false)
c4dc4c46 908 goto yyerrorlab;]b4_locations_if([[
44c2b42d 909 yyerror_range[1].location = yystack_[yylen - 1].location;]])b4_variant_if([[
c4dc4c46 910 /* $$ was initialized before running the user action. */
97ae878e
AD
911 YY_SYMBOL_PRINT ("Error: discarding", yylhs);
912 yylhs.~stack_symbol_type();]])[
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
AD
990 if (!yyempty)
991 yy_destroy_ (YY_NULL, yyla);
7e1fabbe 992
23d13411 993 while (1 < yystack_.size ())
7e1fabbe 994 {
23d13411 995 yy_destroy_ (YY_NULL, 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
JD
1014 {]b4_error_verbose_if([[
1015 std::string yyres;
d2060f06
JD
1016 // Number of reported tokens (one for the "unexpected", one per
1017 // "expected").
1018 size_t yycount = 0;
1019 // Its maximum.
1020 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1021 // Arguments of yyformat.
1022 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1023
1024 /* There are many possibilities here to consider:
1025 - If this state is a consistent state with a default action, then
1026 the only way this function was invoked is if the default action
1027 is an error action. In that case, don't check for expected
1028 tokens because there are none.
1029 - The only way there can be no lookahead present (in yytoken) is
1030 if this state is a consistent state with a default action.
1031 Thus, detecting the absence of a lookahead is sufficient to
1032 determine that there is no unexpected or expected token to
1033 report. In that case, just report a simple "syntax error".
1034 - Don't assume there isn't a lookahead just because this state is
1035 a consistent state with a default action. There might have
1036 been a previous inconsistent state, consistent state with a
1037 non-default action, or user semantic action that manipulated
1038 yyla. (However, yyla is currently not documented for users.)
1039 - Of course, the expected token list depends on states to have
1040 correct lookahead information, and it depends on the parser not
1041 to perform extra reductions after fetching a lookahead from the
1042 scanner and before detecting a syntax error. Thus, state
1043 merging (from LALR or IELR) and default reductions corrupt the
1044 expected token list. However, the list is correct for
1045 canonical LR with one exception: it will still contain any
1046 token that will not be accepted due to an error action in a
1047 later state.
1048 */
1049 if (yytoken != yyempty_)
98ae9643 1050 {
d2060f06
JD
1051 yyarg[yycount++] = yytname_[yytoken];
1052 int yyn = yypact_[yystate];
1053 if (!yy_pact_value_is_default_ (yyn))
1054 {
b4bbc4a0
JD
1055 /* Start YYX at -YYN if negative to avoid negative indexes in
1056 YYCHECK. In other words, skip the first -YYN actions for
1057 this state because they are default actions. */
1058 int yyxbegin = yyn < 0 ? -yyn : 0;
ac826bc4 1059 // Stay within bounds of both yycheck and yytname.
b4bbc4a0
JD
1060 int yychecklim = yylast_ - yyn + 1;
1061 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
b4bbc4a0
JD
1062 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1063 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
1064 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
1065 {
1066 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1067 {
1068 yycount = 1;
1069 break;
1070 }
1071 else
1072 yyarg[yycount++] = yytname_[yyx];
1073 }
d2060f06
JD
1074 }
1075 }
a0ffc175 1076
ef51bfa7 1077 char const* yyformat = YY_NULL;
b4bbc4a0
JD
1078 switch (yycount)
1079 {
1080#define YYCASE_(N, S) \
1081 case N: \
1082 yyformat = S; \
1083 break
d2060f06 1084 YYCASE_(0, YY_("syntax error"));
b4bbc4a0
JD
1085 YYCASE_(1, YY_("syntax error, unexpected %s"));
1086 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1087 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1088 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1089 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
a0ffc175 1090#undef YYCASE_
98ae9643 1091 }
d2060f06 1092
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