1 # C++ skeleton for Bison
3 # Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
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.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <https://www.gnu.org/licenses/>.
18 m4_include(b4_skeletonsdir
/[c
++.m4
])
20 # api.value.type=variant is valid.
21 m4_define([b4_value_type_setup_variant
])
24 b4_percent_define_default([[parse
.lac
]], [[none
]])
25 b4_percent_define_check_values([[[[parse
.lac
]], [[full
]], [[none
]]]])
26 b4_define_flag_if([lac
])
27 m4_define([b4_lac_flag
],
28 [m4_if(b4_percent_define_get([[parse
.lac
]]),
29 [none
], [[0]], [[1]])])
32 # b4_tname_if(TNAME-NEEDED, TNAME-NOT-NEEDED)
33 # -------------------------------------------
34 m4_define([b4_tname_if
],
35 [m4_case(b4_percent_define_get([[parse
.error
]]),
37 [b4_token_table_if([$
1],
41 # b4_integral_parser_table_declare(TABLE-NAME, CONTENT, COMMENT)
42 # --------------------------------------------------------------
43 # Declare "parser::yy<TABLE-NAME>_" whose contents is CONTENT.
44 m4_define([b4_integral_parser_table_declare
],
45 [m4_ifval([$
3], [b4_comment([$
3], [ ])
47 static const b4_int_type_for([$
2]) yy$
1_
[[]];dnl
50 # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
51 # -------------------------------------------------------------
52 # Define "parser::yy<TABLE-NAME>_" whose contents is CONTENT.
53 m4_define([b4_integral_parser_table_define
],
54 [ const b4_int_type_for([$
2])
55 b4_parser_class::yy$
1_
[[]] =
64 m4_define([b4_symbol_kind
],
65 [symbol_kind::b4_symbol_kind_base($@
)])
68 # b4_symbol_value_template(VAL, SYMBOL-NUM, [TYPE])
69 # -------------------------------------------------
70 # Same as b4_symbol_value, but used in a template method. It makes
71 # a difference when using variants. Note that b4_value_type_setup_union
72 # overrides b4_symbol_value, so we must override it again.
73 m4_copy([b4_symbol_value
], [b4_symbol_value_template
])
74 m4_append([b4_value_type_setup_union
],
75 [m4_copy_force([b4_symbol_value_union
], [b4_symbol_value_template
])])
77 # b4_lhs_value(SYMBOL-NUM, [TYPE])
78 # --------------------------------
80 m4_define([b4_lhs_value
],
81 [b4_symbol_value([yylhs
.value
], [$
1], [$
2])])
87 m4_define([b4_lhs_location
],
91 # b4_rhs_data(RULE-LENGTH, POS)
92 # -----------------------------
94 m4_define([b4_rhs_data
],
95 [yystack_@
{b4_subtract($@
)@
}])
98 # b4_rhs_state(RULE-LENGTH, POS)
99 # ------------------------------
100 # The state corresponding to the symbol #POS, where the current
101 # rule has RULE-LENGTH symbols on RHS.
102 m4_define([b4_rhs_state
],
103 [b4_rhs_data([$
1], [$
2]).state
])
106 # b4_rhs_value(RULE-LENGTH, POS, SYMBOL-NUM, [TYPE])
107 # --------------------------------------------------
109 m4_define([_b4_rhs_value
],
110 [b4_symbol_value([b4_rhs_data([$
1], [$
2]).value
], [$
3], [$
4])])
112 m4_define([b4_rhs_value
],
113 [b4_percent_define_ifdef([api
.value
.automove
],
114 [YY_MOVE (_b4_rhs_value($@
))],
115 [_b4_rhs_value($@
)])])
118 # b4_rhs_location(RULE-LENGTH, POS)
119 # ---------------------------------
120 # Expansion of @POS, where the current rule has RULE-LENGTH symbols
122 m4_define([b4_rhs_location
],
123 [b4_rhs_data([$
1], [$
2]).location
])
126 # b4_symbol_action(SYMBOL-NUM, KIND)
127 # ----------------------------------
128 # Run the action KIND (destructor or printer) for SYMBOL-NUM.
129 # Same as in C, but using references instead of pointers.
130 m4_define([b4_symbol_action
],
131 [b4_symbol_if([$
1], [has_$
2],
132 [m4_pushdef([b4_symbol_value
], m4_defn([b4_symbol_value_template
]))[]dnl
133 b4_dollar_pushdef([yysym
.value
],
137 _b4_symbol_case([$
1])[]dnl
138 b4_syncline([b4_symbol([$
1], [$
2_line
])], [b4_symbol([$
1], [$
2_file
])])dnl
139 b4_symbol([$
1], [$
2])
140 b4_syncline([@oline@
], [@ofile@
])dnl
143 m4_popdef([b4_symbol_value
])[]dnl
144 b4_dollar_popdef
[]dnl
151 m4_define([b4_yylex
],
153 [b4_function_call([yylex
],
154 [symbol_type
], m4_ifdef([b4_lex_param
], b4_lex_param
))],
155 [b4_function_call([yylex
], [int],
156 [[value_type
*], [&yyla
.value
]][]dnl
157 b4_locations_if([, [[location_type
*], [&yyla
.location
]]])dnl
158 m4_ifdef([b4_lex_param
], [, ]b4_lex_param
))])])
161 m4_pushdef([b4_copyright_years
],
162 [2002-2015, 2018-2021])
164 m4_define([b4_parser_class
],
165 [b4_percent_define_get([[api
.parser
.class]])])
167 b4_bison_locations_if([# Backward compatibility.
168 m4_define([b4_location_constructors
])
169 m4_include(b4_skeletonsdir
/[location
.cc
])])
170 m4_include(b4_skeletonsdir
/[stack
.hh
])
171 b4_variant_if([m4_include(b4_skeletonsdir
/[variant
.hh
])])
174 # b4_shared_declarations(hh|cc)
175 # -----------------------------
176 # Declaration that might either go into the header (if --header, $1 = hh)
177 # or in the implementation file.
178 m4_define([b4_shared_declarations
],
179 [b4_percent_code_get([[requires
]])[
180 ]b4_parse_assert_if([# include <cassert>])[
181 # include <cstdlib> // std::abort
183 # include <stdexcept>
188 ]m4_ifdef([b4_location_include
],
189 [[# include ]b4_location_include])[
190 ]b4_variant_if([b4_variant_includes
])[
192 ]b4_attribute_define
[
200 ]b4_bison_locations_if([m4_ifndef([b4_location_file
],
201 [b4_location_define
])])[
204 class ]b4_parser_class
[
207 ]b4_public_types_declare
[
208 ]b4_symbol_type_define
[
209 /// Build a parser object.
210 ]b4_parser_class
[ (]b4_parse_param_decl
[);
211 virtual ~]b4_parser_class
[ ();
213 #if 201103L <= YY_CPLUSPLUS
215 ]b4_parser_class
[ (const ]b4_parser_class
[&) = delete;
217 ]b4_parser_class
[& operator= (const ]b4_parser_class
[&) = delete;
220 /// Parse. An alias for parse ().
221 /// \returns 0 iff parsing succeeded.
225 /// \returns 0 iff parsing succeeded.
226 virtual int parse ();
228 #if ]b4_api_PREFIX[DEBUG
229 /// The current debugging stream.
230 std::ostream
& debug_stream () const YY_ATTRIBUTE_PURE
;
231 /// Set the current debugging stream.
232 void set_debug_stream (std::ostream
&);
234 /// Type for debugging levels.
235 typedef int debug_level_type
;
236 /// The current debugging level.
237 debug_level_type
debug_level () const YY_ATTRIBUTE_PURE
;
238 /// Set the current debugging level.
239 void set_debug_level (debug_level_type l
);
242 /// Report a syntax error.]b4_locations_if([[
243 /// \param loc where the syntax error is found.]])[
244 /// \param msg a description of the syntax error.
245 virtual void error (]b4_locations_if([[const location_type
& loc
, ]])[const std::string
& msg
);
247 /// Report a syntax error.
248 void error (const syntax_error
& err
);
250 ]b4_parse_error_bmatch(
252 [[ /// The user-facing name of the symbol whose (internal) number is
253 /// YYSYMBOL. No bounds checking.
254 static const char *symbol_name (symbol_kind_type yysymbol
);]],
256 [[#if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
257 /// The user-facing name of the symbol whose (internal) number is
258 /// YYSYMBOL. No bounds checking.
259 static const char *symbol_name (symbol_kind_type yysymbol
);
260 #endif // #if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
263 [[ /// The user-facing name of the symbol whose (internal) number is
264 /// YYSYMBOL. No bounds checking.
265 static std::string
symbol_name (symbol_kind_type yysymbol
);]])[
267 ]b4_token_constructor_define
[
268 ]b4_parse_error_bmatch([custom\
|detailed\
|verbose
], [[
272 context (const ]b4_parser_class
[& yyparser
, const symbol_type
& yyla
);
273 const symbol_type
& lookahead () const YY_NOEXCEPT
{ return yyla_
; }
274 symbol_kind_type
token () const YY_NOEXCEPT
{ return yyla_
.kind (); }]b4_locations_if([[
275 const location_type
& location () const YY_NOEXCEPT
{ return yyla_
.location
; }
277 /// Put in YYARG at most YYARGN of the expected tokens, and return the
278 /// number of tokens stored in YYARG. If YYARG is null, return the
279 /// number of expected tokens (guaranteed to be less than YYNTOKENS).
280 int expected_tokens (symbol_kind_type yyarg
[], int yyargn
) const;
283 const ]b4_parser_class
[& yyparser_
;
284 const symbol_type
& yyla_
;
288 #if YY_CPLUSPLUS < 201103L
290 ]b4_parser_class
[ (const ]b4_parser_class
[&);
292 ]b4_parser_class
[& operator= (const ]b4_parser_class
[&);
295 /// Check the lookahead yytoken.
296 /// \returns true iff the token will be eventually shifted.
297 bool yy_lac_check_ (symbol_kind_type yytoken
) const;
298 /// Establish the initial context if no initial context currently exists.
299 /// \returns true iff the token will be eventually shifted.
300 bool yy_lac_establish_ (symbol_kind_type yytoken
);
301 /// Discard any previous initial lookahead context because of event.
302 /// \param event the event which caused the lookahead to be discarded.
303 /// Only used for debbuging output.
304 void yy_lac_discard_ (const char* event
);]])[
306 /// Stored state numbers (used for stacks).
307 typedef ]b4_int_type(0, m4_eval(b4_states_number
- 1))[ state_type
;
308 ]b4_parse_error_bmatch(
310 /// Report a syntax error
311 /// \param yyctx the context in which the error occurred.
312 void report_syntax_error (const context
& yyctx
) const;]],
313 [detailed\
|verbose
], [[
314 /// The arguments of the error message.
315 int yy_syntax_error_arguments_ (const context
& yyctx
,
316 symbol_kind_type yyarg
[], int yyargn
) const;
318 /// Generate an error message.
319 /// \param yyctx the context in which the error occurred.
320 virtual std::string
yysyntax_error_ (const context
& yyctx
) const;]])[
321 /// Compute post-reduction state.
322 /// \param yystate the current state
323 /// \param yysym the nonterminal to push on the stack
324 static state_type
yy_lr_goto_state_ (state_type yystate
, int yysym
);
326 /// Whether the given \c yypact_ value indicates a defaulted state.
327 /// \param yyvalue the value to check
328 static bool yy_pact_value_is_default_ (int yyvalue
);
330 /// Whether the given \c yytable_ value indicates a syntax error.
331 /// \param yyvalue the value to check
332 static bool yy_table_value_is_error_ (int yyvalue
);
334 static const ]b4_int_type(b4_pact_ninf
, b4_pact_ninf
)[ yypact_ninf_
;
335 static const ]b4_int_type(b4_table_ninf
, b4_table_ninf
)[ yytable_ninf_
;
337 /// Convert a scanner token kind \a t to a symbol kind.
338 /// In theory \a t should be a token_kind_type, but character literals
339 /// are valid, yet not members of the token_type enum.
340 static symbol_kind_type
yytranslate_ (int t
);
342 ]b4_parse_error_bmatch(
344 [[#if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
345 /// For a symbol, its name in clear.
346 static const char* const yytname_
[];
347 #endif // #if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
350 [[ /// Convert the symbol name \a n to a form suitable for a diagnostic.
351 static std::string
yytnamerr_ (const char *yystr
);
353 /// For a symbol, its name in clear.
354 static const char* const yytname_
[];
358 ]b4_parser_tables_declare
[
360 #if ]b4_api_PREFIX[DEBUG
361 ]b4_integral_parser_table_declare([rline
], [b4_rline
],
362 [[YYRLINE
[YYN
] -- Source line where rule number YYN was defined
.]])[
363 /// Report on the debug stream that the rule \a r is going to be reduced.
364 virtual void yy_reduce_print_ (int r
) const;
365 /// Print the state stack on the debug stream.
366 virtual void yy_stack_print_ () const;
371 std::ostream
* yycdebug_
;
373 /// \brief Display a symbol kind, value and location.
374 /// \param yyo The output stream.
375 /// \param yysym The symbol.
376 template <typename Base
>
377 void yy_print_ (std::ostream
& yyo
, const basic_symbol
<Base
>& yysym
) const;
380 /// \brief Reclaim the memory associated to a symbol.
381 /// \param yymsg Why this token is reclaimed.
382 /// If null, print nothing.
383 /// \param yysym The symbol.
384 template <typename Base
>
385 void yy_destroy_ (const char* yymsg
, basic_symbol
<Base
>& yysym
) const;
388 /// Type access provider for state based symbols.
391 /// Default constructor.
392 by_state () YY_NOEXCEPT
;
394 /// The symbol kind as needed by the constructor.
395 typedef state_type kind_type
;
398 by_state (kind_type s
) YY_NOEXCEPT
;
400 /// Copy constructor.
401 by_state (const by_state
& that
) YY_NOEXCEPT
;
403 /// Record that this symbol is empty.
404 void clear () YY_NOEXCEPT
;
406 /// Steal the symbol kind from \a that.
407 void move (by_state
& that
);
409 /// The symbol kind (corresponding to \a state).
410 /// \a ]b4_symbol(empty, kind)[ when empty.
411 symbol_kind_type
kind () const YY_NOEXCEPT
;
413 /// The state number used to denote an empty symbol.
414 /// We use the initial state, as it does not have a value.
415 enum { empty_state
= 0 };
418 /// \a empty when empty.
422 /// "Internal" symbol: element of the stack.
423 struct stack_symbol_type
: basic_symbol
<by_state
>
426 typedef basic_symbol
<by_state
> super_type
;
427 /// Construct an empty symbol.
428 stack_symbol_type ();
429 /// Move or copy construction.
430 stack_symbol_type (YY_RVREF (stack_symbol_type
) that
);
431 /// Steal the contents from \a sym to build this.
432 stack_symbol_type (state_type s
, YY_MOVE_REF (symbol_type
) sym
);
433 #if YY_CPLUSPLUS < 201103L
434 /// Assignment, needed by push_back by some old implementations.
435 /// Moves the contents of that.
436 stack_symbol_type
& operator= (stack_symbol_type
& that
);
438 /// Assignment, needed by push_back by other implementations.
439 /// Needed by some other old implementations.
440 stack_symbol_type
& operator= (const stack_symbol_type
& that
);
447 typedef stack
<stack_symbol_type
> stack_type
;
450 stack_type yystack_
;]b4_lac_if([[
451 /// The stack for LAC.
452 /// Logically, the yy_lac_stack's lifetime is confined to the function
453 /// yy_lac_check_. We just store it as a member of this class to hold
454 /// on to the memory and to avoid frequent reallocations.
455 /// Since yy_lac_check_ is const, this member must be mutable.
456 mutable std::vector
<state_type
> yylac_stack_
;
457 /// Whether an initial LAC context was established.
458 bool yy_lac_established_
;
461 /// Push a new state on the stack.
462 /// \param m a debug message to display
463 /// if null, no trace is output.
464 /// \param sym the symbol
465 /// \warning the contents of \a s.value is stolen.
466 void yypush_ (const char* m
, YY_MOVE_REF (stack_symbol_type
) sym
);
468 /// Push a new look ahead token on the state on the stack.
469 /// \param m a debug message to display
470 /// if null, no trace is output.
471 /// \param s the state
472 /// \param sym the symbol (for its value and location).
473 /// \warning the contents of \a sym.value is stolen.
474 void yypush_ (const char* m
, state_type s
, YY_MOVE_REF (symbol_type
) sym
);
476 /// Pop \a n symbols from the stack.
477 void yypop_ (int n
= 1);
482 yylast_
= ]b4_last
[, ///< Last index in yytable_.
483 yynnts_
= ]b4_nterms_number
[, ///< Number of nonterminal symbols.
484 yyfinal_
= ]b4_final_state_number
[ ///< Termination state number.
487 ]b4_parse_param_vars
[
488 ]b4_percent_code_get([[yy_bison_internal_hook
]])[
491 ]b4_token_ctor_if([b4_yytranslate_define([$
1])[
492 ]b4_public_types_define([$
1])])[
495 ]b4_percent_code_get([[provides
]])[
508 ]b4_output_begin([b4_spec_header_file
])[
509 ]b4_copyright([Skeleton interface
for Bison
LALR(1) parsers in C
++])[
512 ** \file ]b4_spec_mapped_header_file[
513 ** Define the ]b4_namespace_ref[::parser class.
516 // C++ LALR(1) parser skeleton written by Akim Demaille.
519 ]b4_cpp_guard_open([b4_spec_mapped_header_file
])[
520 ]b4_shared_declarations(hh
)[
521 ]b4_cpp_guard_close([b4_spec_mapped_header_file
])[
526 # --------------------- #
527 # Implementation file. #
528 # --------------------- #
530 ]b4_output_begin([b4_parser_file_name
])[
531 ]b4_copyright([Skeleton implementation
for Bison
LALR(1) parsers in C
++])[
533 ]b4_percent_code_get([[top
]])[]dnl
534 m4_if(b4_prefix
, [yy
], [],
536 // Take the name prefix into account.
537 [#]define yylex b4_prefix[]lex])[
539 ]b4_user_pre_prologue
[
541 ]b4_header_if([[#include "@basename(]b4_spec_header_file[@)"]],
542 [b4_shared_declarations([cc
])])[
544 ]b4_user_post_prologue
[
545 ]b4_percent_code_get
[
548 # if defined YYENABLE_NLS && YYENABLE_NLS
550 # include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
551 # define YY_(msgid) dgettext ("bison-runtime", msgid)
555 # define YY_(msgid) msgid
558 ]b4_has_translations_if([
560 # define N_(Msgid) Msgid
564 // Whether we are compiled with exception support.
565 #ifndef YY_EXCEPTIONS
566 # if defined __GNUC__ && !defined __EXCEPTIONS
567 # define YY_EXCEPTIONS 0
569 # define YY_EXCEPTIONS 1
573 ]b4_locations_if([dnl
574 [#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
575 ]b4_yylloc_default_define
])[
577 // Enable debugging if requested.
578 #if ]b4_api_PREFIX[DEBUG
580 // A pseudo ostream that takes yydebug_ into account.
581 # define YYCDEBUG if (yydebug_) (*yycdebug_)
583 # define YY_SYMBOL_PRINT(Title, Symbol) \
587 *yycdebug_ << Title << ' '; \
588 yy_print_ (*yycdebug_, Symbol); \
589 *yycdebug_ << '\n'; \
593 # define YY_REDUCE_PRINT(Rule) \
596 yy_reduce_print_ (Rule); \
599 # define YY_STACK_PRINT() \
602 yy_stack_print_ (); \
605 #else // !]b4_api_PREFIX[DEBUG
607 # define YYCDEBUG if (false) std::cerr
608 # define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol)
609 # define YY_REDUCE_PRINT(Rule) static_cast<void> (0)
610 # define YY_STACK_PRINT() static_cast<void> (0)
612 #endif // !]b4_api_PREFIX[DEBUG
614 #define yyerrok (yyerrstatus_ = 0)
615 #define yyclearin (yyla.clear ())
617 #define YYACCEPT goto yyacceptlab
618 #define YYABORT goto yyabortlab
619 #define YYERROR goto yyerrorlab
620 #define YYRECOVERING() (!!yyerrstatus_)
623 /// Build a parser object.
624 ]b4_parser_class::b4_parser_class
[ (]b4_parse_param_decl
[)
625 #if ]b4_api_PREFIX[DEBUG
627 yycdebug_ (&std::cerr
)]b4_lac_if([,], [m4_ifset([b4_parse_param
], [,])])[
629 ]b4_lac_if([ :], [m4_ifset([b4_parse_param
], [ :])])[
631 yy_lac_established_ (false)]m4_ifset([b4_parse_param
], [,])])[]b4_parse_param_cons
[
634 ]b4_parser_class::~b4_parser_class
[ ()
637 ]b4_parser_class
[::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
644 ]b4_token_ctor_if([], [b4_public_types_define([cc
])])[
647 ]b4_parser_class
[::by_state::by_state () YY_NOEXCEPT
648 : state (empty_state
)
651 ]b4_parser_class
[::by_state::by_state (const by_state
& that
) YY_NOEXCEPT
656 ]b4_parser_class
[::by_state::clear () YY_NOEXCEPT
662 ]b4_parser_class
[::by_state::move (by_state
& that
)
668 ]b4_parser_class
[::by_state::by_state (state_type s
) YY_NOEXCEPT
672 ]b4_parser_class
[::symbol_kind_type
673 ]b4_parser_class
[::by_state::kind () const YY_NOEXCEPT
675 if (state
== empty_state
)
676 return ]b4_symbol(empty
, kind
)[;
678 return YY_CAST (symbol_kind_type
, yystos_
[+state
]);
681 ]b4_parser_class
[::stack_symbol_type::stack_symbol_type ()
684 ]b4_parser_class
[::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type
) that
)
685 : super_type (YY_MOVE (that
.state
)]b4_variant_if([], [, YY_MOVE (that
.value
)])b4_locations_if([, YY_MOVE (that
.location
)])[)
687 b4_symbol_variant([that
.kind ()],
688 [value
], [YY_MOVE_OR_COPY
], [YY_MOVE (that
.value
)])])[
689 #if 201103L <= YY_CPLUSPLUS
691 that
.state
= empty_state
;
695 ]b4_parser_class
[::stack_symbol_type::stack_symbol_type (state_type s
, YY_MOVE_REF (symbol_type
) that
)
696 : super_type (s
]b4_variant_if([], [, YY_MOVE (that
.value
)])[]b4_locations_if([, YY_MOVE (that
.location
)])[)
698 b4_symbol_variant([that
.kind ()],
699 [value
], [move
], [YY_MOVE (that
.value
)])])[
701 that
.kind_
= ]b4_symbol(empty
, kind
)[;
704 #if YY_CPLUSPLUS < 201103L
705 ]b4_parser_class
[::stack_symbol_type
&
706 ]b4_parser_class
[::stack_symbol_type::operator= (const stack_symbol_type
& that
)
709 ]b4_variant_if([b4_symbol_variant([that
.kind ()],
710 [value
], [copy
], [that
.value
])],
711 [[value
= that
.value
;]])[]b4_locations_if([
712 location
= that
.location
;])[
716 ]b4_parser_class
[::stack_symbol_type
&
717 ]b4_parser_class
[::stack_symbol_type::operator= (stack_symbol_type
& that
)
720 ]b4_variant_if([b4_symbol_variant([that
.kind ()],
721 [value
], [move
], [that
.value
])],
722 [[value
= that
.value
;]])[]b4_locations_if([
723 location
= that
.location
;])[
725 that
.state
= empty_state
;
730 template <typename Base
>
732 ]b4_parser_class
[::yy_destroy_ (const char* yymsg
, basic_symbol
<Base
>& yysym
) const
735 YY_SYMBOL_PRINT (yymsg
, yysym
);]b4_variant_if([], [
738 b4_symbol_actions([destructor
], [yysym
.kind ()])])[
741 #if ]b4_api_PREFIX[DEBUG
742 template <typename Base
>
744 ]b4_parser_class
[::yy_print_ (std::ostream
& yyo
, const basic_symbol
<Base
>& yysym
) const
746 std::ostream
& yyoutput
= yyo
;
749 yyo
<< "empty symbol";
752 symbol_kind_type yykind
= yysym
.kind ();
753 yyo
<< (yykind
< YYNTOKENS
? "token" : "nterm")
754 << ' ' << yysym
.name () << " ("]b4_locations_if([
755 << yysym
.location
<< ": "])[;
756 ]b4_symbol_actions([printer
])[
763 ]b4_parser_class
[::yypush_ (const char* m
, YY_MOVE_REF (stack_symbol_type
) sym
)
766 YY_SYMBOL_PRINT (m
, sym
);
767 yystack_
.push (YY_MOVE (sym
));
771 ]b4_parser_class
[::yypush_ (const char* m
, state_type s
, YY_MOVE_REF (symbol_type
) sym
)
773 #if 201103L <= YY_CPLUSPLUS
774 yypush_ (m
, stack_symbol_type (s
, std::move (sym
)));
776 stack_symbol_type
ss (s
, sym
);
782 ]b4_parser_class
[::yypop_ (int n
)
787 #if ]b4_api_PREFIX[DEBUG
789 ]b4_parser_class
[::debug_stream () const
795 ]b4_parser_class
[::set_debug_stream (std::ostream
& o
)
801 ]b4_parser_class
[::debug_level_type
802 ]b4_parser_class
[::debug_level () const
808 ]b4_parser_class
[::set_debug_level (debug_level_type l
)
812 #endif // ]b4_api_PREFIX[DEBUG
814 ]b4_parser_class
[::state_type
815 ]b4_parser_class
[::yy_lr_goto_state_ (state_type yystate
, int yysym
)
817 int yyr
= yypgoto_
[yysym
- YYNTOKENS
] + yystate
;
818 if (0 <= yyr
&& yyr
<= yylast_
&& yycheck_
[yyr
] == yystate
)
819 return yytable_
[yyr
];
821 return yydefgoto_
[yysym
- YYNTOKENS
];
825 ]b4_parser_class
[::yy_pact_value_is_default_ (int yyvalue
)
827 return yyvalue
== yypact_ninf_
;
831 ]b4_parser_class
[::yy_table_value_is_error_ (int yyvalue
)
833 return yyvalue
== yytable_ninf_
;
837 ]b4_parser_class
[::operator() ()
843 ]b4_parser_class
[::parse ()
846 /// Length of the RHS of the rule being reduced.
851 int yyerrstatus_
= 0;
853 /// The lookahead symbol.
854 symbol_type yyla
;]b4_locations_if([[
856 /// The locations where the error started and ended.
857 stack_symbol_type yyerror_range
[3];]])[
859 /// The return value of parse ().
860 int yyresult
;]b4_lac_if([[
862 // Discard the LAC context in case there still is one left from a
863 // previous invocation.
864 yy_lac_discard_ ("init");]])[
868 #endif // YY_EXCEPTIONS
870 YYCDEBUG
<< "Starting parse\n";
872 ]m4_ifdef([b4_initial_action
], [
873 b4_dollar_pushdef([yyla
.value
], [], [], [yyla
.location
])dnl
874 b4_user_initial_action
875 b4_dollar_popdef
])[]dnl
877 [ /* Initialize the stack. The initial state will be set in
878 yynewstate, since the latter expects the semantical and the
879 location values to have been already stored, initialize these
880 stacks with a primary value. */
882 yypush_ (YY_NULLPTR
, 0, YY_MOVE (yyla
));
884 /*-----------------------------------------------.
885 | yynewstate -- push a new symbol on the stack. |
886 `-----------------------------------------------*/
888 YYCDEBUG
<< "Entering state " << int (yystack_
[0].state
) << '\n';
892 if (yystack_
[0].state
== yyfinal_
)
902 // Try to take a decision without lookahead.
903 yyn
= yypact_
[+yystack_
[0].state
];
904 if (yy_pact_value_is_default_ (yyn
))
907 // Read a lookahead token.
910 YYCDEBUG
<< "Reading a token\n";
913 #endif // YY_EXCEPTIONS
914 {]b4_token_ctor_if([[
915 symbol_type
yylookahead (]b4_yylex
[);
916 yyla
.move (yylookahead
);]], [[
917 yyla
.kind_
= yytranslate_ (]b4_yylex
[);]])[
920 catch (const syntax_error
& yyexc
)
922 YYCDEBUG
<< "Caught exception: " << yyexc
.what() << '\n';
926 #endif // YY_EXCEPTIONS
928 YY_SYMBOL_PRINT ("Next token is", yyla
);
930 if (yyla
.kind () == ]b4_symbol(error
, kind
)[)
932 // The scanner already issued an error message, process directly
933 // to error recovery. But do not keep the error token as
934 // lookahead, it is too special and may lead us to an endless
935 // loop in error recovery. */
936 yyla
.kind_
= ]b4_symbol(undef
, kind
)[;
940 /* If the proper action on seeing token YYLA.TYPE is to reduce or
941 to detect an error, take that action. */
943 if (yyn
< 0 || yylast_
< yyn
|| yycheck_
[yyn
] != yyla
.kind ())
945 if (!yy_lac_establish_ (yyla
.kind ()))
954 if (yy_table_value_is_error_ (yyn
))
955 goto yyerrlab
;]b4_lac_if([[
956 if (!yy_lac_establish_ (yyla
.kind ()))
963 // Count tokens shifted since error; after three, turn off error status.
967 // Shift the lookahead token.
968 yypush_ ("Shifting", state_type (yyn
), YY_MOVE (yyla
));]b4_lac_if([[
969 yy_lac_discard_ ("shift");]])[
973 /*-----------------------------------------------------------.
974 | yydefault -- do the default action for the current state. |
975 `-----------------------------------------------------------*/
977 yyn
= yydefact_
[+yystack_
[0].state
];
983 /*-----------------------------.
984 | yyreduce -- do a reduction. |
985 `-----------------------------*/
989 stack_symbol_type yylhs
;
990 yylhs
.state
= yy_lr_goto_state_ (yystack_
[yylen
].state
, yyr1_
[yyn
]);]b4_variant_if([[
991 /* Variants are always initialized to an empty instance of the
992 correct type. The default '$$ = $1' action is NOT applied
993 when using variants. */
994 ]b4_symbol_variant([[yyr1_@
{yyn@
}]], [yylhs
.value
], [emplace
])], [[
995 /* If YYLEN is nonzero, implement the default value of the
996 action: '$$ = $1'. Otherwise, use the top of the stack.
998 Otherwise, the following line sets YYLHS.VALUE to garbage.
999 This behavior is undocumented and Bison users should not rely
1002 yylhs
.value
= yystack_@
{yylen
- 1@
}.value
;
1004 yylhs
.value
= yystack_@
{0@
}.value
;]])[
1005 ]b4_locations_if([dnl
1007 // Default location.
1009 stack_type::slice
range (yystack_
, yylen
);
1010 YYLLOC_DEFAULT (yylhs
.location
, range
, yylen
);
1011 yyerror_range
[1].location
= yylhs
.location
;
1014 // Perform the reduction.
1015 YY_REDUCE_PRINT (yyn
);
1018 #endif // YY_EXCEPTIONS
1028 catch (const syntax_error
& yyexc
)
1030 YYCDEBUG
<< "Caught exception: " << yyexc
.what() << '\n';
1034 #endif // YY_EXCEPTIONS
1035 YY_SYMBOL_PRINT ("-> $$ =", yylhs
);
1039 // Shift the result of the reduction.
1040 yypush_ (YY_NULLPTR
, YY_MOVE (yylhs
));
1045 /*--------------------------------------.
1046 | yyerrlab -- here on detecting error. |
1047 `--------------------------------------*/
1049 // If not already recovering from an error, report this error.
1052 ++yynerrs_
;]b4_parse_error_case(
1054 std::string msg
= YY_("syntax error");
1055 error (]b4_join(b4_locations_if([yyla
.location
]), [[YY_MOVE (msg
)]])[);]],
1057 context
yyctx (*this, yyla
);
1058 report_syntax_error (yyctx
);]],
1060 context
yyctx (*this, yyla
);
1061 std::string msg
= yysyntax_error_ (yyctx
);
1062 error (]b4_join(b4_locations_if([yyla
.location
]), [[YY_MOVE (msg
)]])[);]])[
1066 yyerror_range
[1].location
= yyla
.location
;]])[
1067 if (yyerrstatus_
== 3)
1069 /* If just tried and failed to reuse lookahead token after an
1070 error, discard it. */
1072 // Return failure if at end of input.
1073 if (yyla
.kind () == ]b4_symbol(eof
, kind
)[)
1075 else if (!yyla
.empty ())
1077 yy_destroy_ ("Error: discarding", yyla
);
1082 // Else will try to reuse lookahead token after shifting the error token.
1086 /*---------------------------------------------------.
1087 | yyerrorlab -- error raised explicitly by YYERROR. |
1088 `---------------------------------------------------*/
1090 /* Pacify compilers when the user code never invokes YYERROR and
1091 the label yyerrorlab therefore never appears in user code. */
1095 /* Do not reclaim the symbols of the rule whose action triggered
1103 /*-------------------------------------------------------------.
1104 | yyerrlab1 -- common code for both syntax error and YYERROR. |
1105 `-------------------------------------------------------------*/
1107 yyerrstatus_
= 3; // Each real token shifted decrements this.
1108 // Pop stack until we find a state that shifts the error token.
1111 yyn
= yypact_
[+yystack_
[0].state
];
1112 if (!yy_pact_value_is_default_ (yyn
))
1114 yyn
+= ]b4_symbol(error
, kind
)[;
1115 if (0 <= yyn
&& yyn
<= yylast_
1116 && yycheck_
[yyn
] == ]b4_symbol(error
, kind
)[)
1118 yyn
= yytable_
[yyn
];
1124 // Pop the current state because it cannot handle the error token.
1125 if (yystack_
.size () == 1)
1128 yyerror_range
[1].location
= yystack_
[0].location
;]])[
1129 yy_destroy_ ("Error: popping", yystack_
[0]);
1134 stack_symbol_type error_token
;
1136 yyerror_range
[2].location
= yyla
.location
;
1137 YYLLOC_DEFAULT (error_token
.location
, yyerror_range
, 2);]])[
1139 // Shift the error token.]b4_lac_if([[
1140 yy_lac_discard_ ("error recovery");]])[
1141 error_token
.state
= state_type (yyn
);
1142 yypush_ ("Shifting", YY_MOVE (error_token
));
1147 /*-------------------------------------.
1148 | yyacceptlab -- YYACCEPT comes here. |
1149 `-------------------------------------*/
1155 /*-----------------------------------.
1156 | yyabortlab -- YYABORT comes here. |
1157 `-----------------------------------*/
1163 /*-----------------------------------------------------.
1164 | yyreturn -- parsing is finished, return the result. |
1165 `-----------------------------------------------------*/
1168 yy_destroy_ ("Cleanup: discarding lookahead", yyla
);
1170 /* Do not reclaim the symbols of the rule whose action triggered
1171 this YYABORT or YYACCEPT. */
1174 while (1 < yystack_
.size ())
1176 yy_destroy_ ("Cleanup: popping", yystack_
[0]);
1185 YYCDEBUG
<< "Exception caught: cleaning lookahead and stack\n";
1186 // Do not try to display the values of the reclaimed symbols,
1187 // as their printers might throw an exception.
1189 yy_destroy_ (YY_NULLPTR
, yyla
);
1191 while (1 < yystack_
.size ())
1193 yy_destroy_ (YY_NULLPTR
, yystack_
[0]);
1198 #endif // YY_EXCEPTIONS
1202 ]b4_parser_class
[::error (const syntax_error
& yyexc
)
1204 error (]b4_join(b4_locations_if([yyexc
.location
]),
1205 [[yyexc
.what ()]])[);
1208 ]b4_parse_error_bmatch([custom\
|detailed
],
1210 ]b4_parser_class
[::symbol_name (symbol_kind_type yysymbol
)
1212 static const char *const yy_sname
[] =
1215 };]b4_has_translations_if([[
1216 /* YYTRANSLATABLE[SYMBOL-NUM] -- Whether YY_SNAME[SYMBOL-NUM] is
1217 internationalizable. */
1218 static ]b4_int_type_for([b4_translatable
])[ yytranslatable
[] =
1222 return (yysymbol
< YYNTOKENS
&& yytranslatable
[yysymbol
]
1223 ? _(yy_sname
[yysymbol
])
1224 : yy_sname
[yysymbol
]);]], [[
1225 return yy_sname
[yysymbol
];]])[
1229 [[#if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
1231 ]b4_parser_class
[::symbol_name (symbol_kind_type yysymbol
)
1233 return yytname_
[yysymbol
];
1235 #endif // #if ]b4_api_PREFIX[DEBUG || ]b4_token_table_flag[
1238 [[ /* Return YYSTR after stripping away unnecessary quotes and
1239 backslashes, so that it's suitable for yyerror. The heuristic is
1240 that double-quoting is unnecessary unless the string contains an
1241 apostrophe, a comma, or backslash (other than backslash-backslash).
1242 YYSTR is taken from yytname. */
1244 ]b4_parser_class
[::yytnamerr_ (const char *yystr
)
1249 char const *yyp
= yystr
;
1256 goto do_not_strip_quotes
;
1260 goto do_not_strip_quotes
;
1272 do_not_strip_quotes
: ;
1279 ]b4_parser_class
[::symbol_name (symbol_kind_type yysymbol
)
1281 return yytnamerr_ (yytname_
[yysymbol
]);
1285 ]b4_parse_error_bmatch([custom\
|detailed\
|verbose
], [[
1286 // ]b4_parser_class[::context.
1287 ]b4_parser_class
[::context::context (const ]b4_parser_class
[& yyparser
, const symbol_type
& yyla
)
1288 : yyparser_ (yyparser
)
1293 ]b4_parser_class
[::context::expected_tokens (symbol_kind_type yyarg
[], int yyargn
) const
1295 // Actual number of expected tokens
1298 #if ]b4_api_PREFIX[DEBUG
1299 // Execute LAC once. We don't care if it is successful, we
1300 // only do it for the sake of debugging output.
1301 if (!yyparser_
.yy_lac_established_
)
1302 yyparser_
.yy_lac_check_ (yyla_
.kind ());
1305 for (int yyx
= 0; yyx
< YYNTOKENS
; ++yyx
)
1307 symbol_kind_type yysym
= YY_CAST (symbol_kind_type
, yyx
);
1308 if (yysym
!= ]b4_symbol(error
, kind
)[
1309 && yysym
!= ]b4_symbol(undef
, kind
)[
1310 && yyparser_
.yy_lac_check_ (yysym
))
1314 else if (yycount
== yyargn
)
1317 yyarg
[yycount
++] = yysym
;
1320 const int yyn
= yypact_
[+yyparser_
.yystack_
[0].state
];
1321 if (!yy_pact_value_is_default_ (yyn
))
1323 /* Start YYX at -YYN if negative to avoid negative indexes in
1324 YYCHECK. In other words, skip the first -YYN actions for
1325 this state because they are default actions. */
1326 const int yyxbegin
= yyn
< 0 ? -yyn
: 0;
1327 // Stay within bounds of both yycheck and yytname.
1328 const int yychecklim
= yylast_
- yyn
+ 1;
1329 const int yyxend
= yychecklim
< YYNTOKENS
? yychecklim
: YYNTOKENS
;
1330 for (int yyx
= yyxbegin
; yyx
< yyxend
; ++yyx
)
1331 if (yycheck_
[yyx
+ yyn
] == yyx
&& yyx
!= ]b4_symbol(error
, kind
)[
1332 && !yy_table_value_is_error_ (yytable_
[yyx
+ yyn
]))
1336 else if (yycount
== yyargn
)
1339 yyarg
[yycount
++] = YY_CAST (symbol_kind_type
, yyx
);
1343 if (yyarg
&& yycount
== 0 && 0 < yyargn
)
1344 yyarg
[0] = ]b4_symbol(empty
, kind
)[;
1352 ]b4_parser_class
[::yy_lac_check_ (symbol_kind_type yytoken
) const
1354 // Logically, the yylac_stack's lifetime is confined to this function.
1355 // Clear it, to get rid of potential left-overs from previous call.
1356 yylac_stack_
.clear ();
1357 // Reduce until we encounter a shift and thereby accept the token.
1358 #if ]b4_api_PREFIX[DEBUG
1359 YYCDEBUG
<< "LAC: checking lookahead " << symbol_name (yytoken
) << ':';
1361 std::ptrdiff_t lac_top
= 0;
1364 state_type top_state
= (yylac_stack_
.empty ()
1365 ? yystack_
[lac_top
].state
1366 : yylac_stack_
.back ());
1367 int yyrule
= yypact_
[+top_state
];
1368 if (yy_pact_value_is_default_ (yyrule
)
1369 || (yyrule
+= yytoken
) < 0 || yylast_
< yyrule
1370 || yycheck_
[yyrule
] != yytoken
)
1372 // Use the default action.
1373 yyrule
= yydefact_
[+top_state
];
1376 YYCDEBUG
<< " Err\n";
1382 // Use the action from yytable.
1383 yyrule
= yytable_
[yyrule
];
1384 if (yy_table_value_is_error_ (yyrule
))
1386 YYCDEBUG
<< " Err\n";
1391 YYCDEBUG
<< " S" << yyrule
<< '\n';
1396 // By now we know we have to simulate a reduce.
1397 YYCDEBUG
<< " R" << yyrule
- 1;
1398 // Pop the corresponding number of values from the stack.
1400 std::ptrdiff_t yylen
= yyr2_
[yyrule
];
1401 // First pop from the LAC stack as many tokens as possible.
1402 std::ptrdiff_t lac_size
= std::ptrdiff_t (yylac_stack_
.size ());
1403 if (yylen
< lac_size
)
1405 yylac_stack_
.resize (std::size_t (lac_size
- yylen
));
1410 yylac_stack_
.clear ();
1413 // Only afterwards look at the main stack.
1414 // We simulate popping elements by incrementing lac_top.
1417 // Keep top_state in sync with the updated stack.
1418 top_state
= (yylac_stack_
.empty ()
1419 ? yystack_
[lac_top
].state
1420 : yylac_stack_
.back ());
1421 // Push the resulting state of the reduction.
1422 state_type state
= yy_lr_goto_state_ (top_state
, yyr1_
[yyrule
]);
1423 YYCDEBUG
<< " G" << int (state
);
1424 yylac_stack_
.push_back (state
);
1428 // Establish the initial context if no initial context currently exists.
1430 ]b4_parser_class
[::yy_lac_establish_ (symbol_kind_type yytoken
)
1432 /* Establish the initial context for the current lookahead if no initial
1433 context is currently established.
1435 We define a context as a snapshot of the parser stacks. We define
1436 the initial context for a lookahead as the context in which the
1437 parser initially examines that lookahead in order to select a
1438 syntactic action. Thus, if the lookahead eventually proves
1439 syntactically unacceptable (possibly in a later context reached via a
1440 series of reductions), the initial context can be used to determine
1441 the exact set of tokens that would be syntactically acceptable in the
1442 lookahead's place. Moreover, it is the context after which any
1443 further semantic actions would be erroneous because they would be
1444 determined by a syntactically unacceptable token.
1446 yy_lac_establish_ should be invoked when a reduction is about to be
1447 performed in an inconsistent state (which, for the purposes of LAC,
1448 includes consistent states that don't know they're consistent because
1449 their default reductions have been disabled).
1451 For parse.lac=full, the implementation of yy_lac_establish_ is as
1452 follows. If no initial context is currently established for the
1453 current lookahead, then check if that lookahead can eventually be
1454 shifted if syntactic actions continue from the current context. */
1455 if (yy_lac_established_
)
1459 #if ]b4_api_PREFIX[DEBUG
1460 YYCDEBUG
<< "LAC: initial context established for "
1461 << symbol_name (yytoken
) << '\n';
1463 yy_lac_established_
= true;
1464 return yy_lac_check_ (yytoken
);
1468 // Discard any previous initial lookahead context.
1470 ]b4_parser_class
[::yy_lac_discard_ (const char* event
)
1472 /* Discard any previous initial lookahead context because of Event,
1473 which may be a lookahead change or an invalidation of the currently
1474 established initial context for the current lookahead.
1476 The most common example of a lookahead change is a shift. An example
1477 of both cases is syntax error recovery. That is, a syntax error
1478 occurs when the lookahead is syntactically erroneous for the
1479 currently established initial context, so error recovery manipulates
1480 the parser stacks to try to find a new initial context in which the
1481 current lookahead is syntactically acceptable. If it fails to find
1482 such a context, it discards the lookahead. */
1483 if (yy_lac_established_
)
1485 YYCDEBUG
<< "LAC: initial context discarded due to "
1487 yy_lac_established_
= false;
1491 ]b4_parse_error_bmatch([detailed\
|verbose
], [[
1493 ]b4_parser_class
[::yy_syntax_error_arguments_ (const context
& yyctx
,
1494 symbol_kind_type yyarg
[], int yyargn
) const
1496 /* There are many possibilities here to consider:
1497 - If this state is a consistent state with a default action, then
1498 the only way this function was invoked is if the default action
1499 is an error action. In that case, don't check for expected
1500 tokens because there are none.
1501 - The only way there can be no lookahead present (in yyla) is
1502 if this state is a consistent state with a default action.
1503 Thus, detecting the absence of a lookahead is sufficient to
1504 determine that there is no unexpected or expected token to
1505 report. In that case, just report a simple "syntax error".
1506 - Don't assume there isn't a lookahead just because this state is
1507 a consistent state with a default action. There might have
1508 been a previous inconsistent state, consistent state with a
1509 non-default action, or user semantic action that manipulated
1510 yyla. (However, yyla is currently not documented for users.)]b4_lac_if([[
1511 In the first two cases, it might appear that the current syntax
1512 error should have been detected in the previous state when
1513 yy_lac_check was invoked. However, at that time, there might
1514 have been a different syntax error that discarded a different
1515 initial context during error recovery, leaving behind the
1516 current lookahead.]], [[
1517 - Of course, the expected token list depends on states to have
1518 correct lookahead information, and it depends on the parser not
1519 to perform extra reductions after fetching a lookahead from the
1520 scanner and before detecting a syntax error. Thus, state merging
1521 (from LALR or IELR) and default reductions corrupt the expected
1522 token list. However, the list is correct for canonical LR with
1523 one exception: it will still contain any token that will not be
1524 accepted due to an error action in a later state.]])[
1527 if (!yyctx
.lookahead ().empty ())
1530 yyarg
[0] = yyctx
.token ();
1531 int yyn
= yyctx
.expected_tokens (yyarg
? yyarg
+ 1 : yyarg
, yyargn
- 1);
1537 // Generate an error message.
1539 ]b4_parser_class
[::yysyntax_error_ (const context
& yyctx
) const
1542 enum { YYARGS_MAX
= 5 };
1543 // Arguments of yyformat.
1544 symbol_kind_type yyarg
[YYARGS_MAX
];
1545 int yycount
= yy_syntax_error_arguments_ (yyctx
, yyarg
, YYARGS_MAX
);
1547 char const* yyformat
= YY_NULLPTR
;
1550 #define YYCASE_(N, S) \
1554 default: // Avoid compiler warnings.
1555 YYCASE_ (0, YY_("syntax error"));
1556 YYCASE_ (1, YY_("syntax error, unexpected %s"));
1557 YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
1558 YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1559 YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1560 YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1566 std::ptrdiff_t yyi
= 0;
1567 for (char const* yyp
= yyformat
; *yyp
; ++yyp
)
1568 if (yyp
[0] == '%' && yyp
[1] == 's' && yyi
< yycount
)
1570 yyres
+= symbol_name (yyarg
[yyi
++]);
1579 const ]b4_int_type(b4_pact_ninf
, b4_pact_ninf
) b4_parser_class::yypact_ninf_
= b4_pact_ninf
[;
1581 const ]b4_int_type(b4_table_ninf
, b4_table_ninf
) b4_parser_class::yytable_ninf_
= b4_table_ninf
[;
1583 ]b4_parser_tables_define
[
1585 ]b4_parse_error_bmatch([simple\
|verbose
],
1586 [[#if ]b4_api_PREFIX[DEBUG]b4_tname_if([[ || 1]])[
1587 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1588 // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
1590 const ]b4_parser_class
[::yytname_
[] =
1597 #if ]b4_api_PREFIX[DEBUG][
1598 ]b4_integral_parser_table_define([rline
], [b4_rline
])[
1601 ]b4_parser_class
[::yy_stack_print_ () const
1603 *yycdebug_
<< "Stack now";
1604 for (stack_type::const_iterator
1605 i
= yystack_
.begin (),
1606 i_end
= yystack_
.end ();
1608 *yycdebug_
<< ' ' << int (i
->state
);
1613 ]b4_parser_class
[::yy_reduce_print_ (int yyrule
) const
1615 int yylno
= yyrline_
[yyrule
];
1616 int yynrhs
= yyr2_
[yyrule
];
1617 // Print the symbols being reduced, and their result.
1618 *yycdebug_
<< "Reducing stack by rule " << yyrule
- 1
1619 << " (line " << yylno
<< "):\n";
1620 // The symbols being reduced.
1621 for (int yyi
= 0; yyi
< yynrhs
; yyi
++)
1622 YY_SYMBOL_PRINT (" $" << yyi
+ 1 << " =",
1623 ]b4_rhs_data(yynrhs
, yyi
+ 1)[);
1625 #endif // ]b4_api_PREFIX[DEBUG
1627 ]b4_token_ctor_if([], [b4_yytranslate_define([cc
])])[
1628 ]b4_namespace_close
[
1633 m4_popdef([b4_copyright_years
])dnl