]> git.saurik.com Git - bison.git/blob - data/lalr1.cc
NEWS: spell fixes.
[bison.git] / data / lalr1.cc
1 # C++ skeleton for Bison
2
3 # Copyright (C) 2002-2012 Free Software Foundation, Inc.
4
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.
9 #
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.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 m4_include(b4_pkgdatadir/[c++.m4])
19
20
21 # b4_integral_parser_table_declare(TABLE-NAME, CONTENT, COMMENT)
22 # --------------------------------------------------------------
23 # Declare "parser::yy<TABLE-NAME>_" which contents is CONTENT.
24 m4_define([b4_integral_parser_table_declare],
25 [m4_ifval([$3], [b4_c_comment([$3], [ ])
26 ])dnl
27 static const b4_int_type_for([$2]) yy$1_[[]];dnl
28 ])
29
30 # b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT)
31 # -------------------------------------------------------------
32 # Define "parser::yy<TABLE-NAME>_" which contents is CONTENT.
33 m4_define([b4_integral_parser_table_define],
34 [ const b4_int_type_for([$2])
35 b4_parser_class_name::yy$1_[[]] =
36 {
37 $2
38 };dnl
39 ])
40
41
42 # b4_symbol_value_template(VAL, [TYPE])
43 # -------------------------------------
44 # Same as b4_symbol_value, but used in a template method. It makes
45 # a difference when using variants.
46 m4_copy([b4_symbol_value], [b4_symbol_value_template])
47
48
49 # b4_lhs_value([TYPE])
50 # --------------------
51 # Expansion of $<TYPE>$.
52 m4_define([b4_lhs_value],
53 [b4_symbol_value([yylhs.value], [$1])])
54
55
56 # b4_lhs_location()
57 # -----------------
58 # Expansion of @$.
59 m4_define([b4_lhs_location],
60 [yylhs.location])
61
62
63 # b4_rhs_data(RULE-LENGTH, NUM)
64 # -----------------------------
65 # Return the data corresponding to the symbol #NUM, where the current
66 # rule has RULE-LENGTH symbols on RHS.
67 m4_define([b4_rhs_data],
68 [yystack_@{b4_subtract($@)@}])
69
70
71 # b4_rhs_state(RULE-LENGTH, NUM)
72 # ------------------------------
73 # The state corresponding to the symbol #NUM, where the current
74 # rule has RULE-LENGTH symbols on RHS.
75 m4_define([b4_rhs_state],
76 [b4_rhs_data([$1], [$2]).state])
77
78
79 # b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
80 # --------------------------------------
81 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
82 # symbols on RHS.
83 m4_define([b4_rhs_value],
84 [b4_symbol_value([b4_rhs_data([$1], [$2]).value], [$3])])
85
86
87 # b4_rhs_location(RULE-LENGTH, NUM)
88 # ---------------------------------
89 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
90 # on RHS.
91 m4_define([b4_rhs_location],
92 [b4_rhs_data([$1], [$2]).location])
93
94
95 # b4_symbol_action(SYMBOL-NUM, KIND)
96 # ----------------------------------
97 # Run the action KIND (destructor or printer) for SYMBOL-NUM.
98 # Same as in C, but using references instead of pointers.
99 m4_define([b4_symbol_action],
100 [b4_symbol_if([$1], [has_$2],
101 [m4_pushdef([b4_dollar_dollar],
102 [b4_symbol_value_template([yysym.value],
103 b4_symbol_if([$1], [has_type],
104 [b4_symbol([$1], [type])]))])dnl
105 m4_pushdef([b4_at_dollar], [yysym.location])dnl
106 b4_symbol_case_([$1])
107 b4_syncline([b4_symbol([$1], [$2_line])], ["b4_symbol([$1], [$2_file])"])
108 b4_symbol([$1], [$2])
109 b4_syncline([@oline@], [@ofile@])
110 break;
111
112 m4_popdef([b4_at_dollar])dnl
113 m4_popdef([b4_dollar_dollar])dnl
114 ])])
115
116
117 m4_pushdef([b4_copyright_years],
118 [2002-2012])
119
120 m4_define([b4_parser_class_name],
121 [b4_percent_define_get([[parser_class_name]])])
122
123 # The header is mandatory.
124 b4_defines_if([],
125 [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
126
127 b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
128 [# Backward compatibility.
129 m4_define([b4_location_constructors])
130 m4_include(b4_pkgdatadir/[location.cc])])])
131 m4_include(b4_pkgdatadir/[stack.hh])
132 b4_variant_if([m4_include(b4_pkgdatadir/[variant.hh])])
133
134 # We do want M4 expansion after # for CPP macros.
135 m4_changecom()
136 m4_divert_push(0)dnl
137 @output(b4_spec_defines_file@)@
138 b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++])
139 [
140 /**
141 ** \file ]b4_spec_defines_file[
142 ** Define the ]b4_namespace_ref[::parser class.
143 */
144
145 /* C++ LALR(1) parser skeleton written by Akim Demaille. */
146
147 ]b4_cpp_guard_open([b4_spec_defines_file])[
148
149 ]b4_percent_code_get([[requires]])[
150
151 ]b4_parse_assert_if([#include <cassert>])[
152 #include <stdexcept>
153 #include <string>
154 #include <iostream>
155 #include "stack.hh"
156 ]b4_locations_if([b4_percent_define_ifdef([[location_type]], [],
157 [[#include "location.hh"]])])[
158
159 ]b4_variant_if([b4_namespace_open
160 b4_variant_define
161 b4_namespace_close])[
162
163 ]b4_null_define[
164
165 /* Enabling traces. */
166 #ifndef YYDEBUG
167 # define YYDEBUG ]b4_parse_trace_if([1], [0])[
168 #endif
169
170 ]b4_namespace_open[
171
172 /// A Bison parser.
173 class ]b4_parser_class_name[
174 {
175 public:
176 ]b4_public_types_declare[
177 /// Build a parser object.
178 ]b4_parser_class_name[ (]b4_parse_param_decl[);
179 virtual ~]b4_parser_class_name[ ();
180
181 /// Parse.
182 /// \returns 0 iff parsing succeeded.
183 virtual int parse ();
184
185 #if YYDEBUG
186 /// The current debugging stream.
187 std::ostream& debug_stream () const;
188 /// Set the current debugging stream.
189 void set_debug_stream (std::ostream &);
190
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);
197 #endif
198
199 /// Report a syntax error.]b4_locations_if([
200 /// \param loc where the syntax error is found.])[
201 /// \param msg a description of the syntax error.
202 virtual void error (]b4_locations_if([const location_type& loc, ])[const std::string& msg);
203
204 /// Report a syntax error.
205 void error (const syntax_error& err);
206
207 private:
208 /// State numbers.
209 typedef int state_type;
210
211 /// Generate an error message.
212 /// \param yystate the state where the error occurred.
213 /// \param yytoken the lookahead token.
214 virtual std::string yysyntax_error_ (state_type yystate, int yytoken);
215
216 /// Compute post-reduction state.
217 /// \param yystate the current state
218 /// \param yylhs the nonterminal to push on the stack
219 state_type yy_lr_goto_state_ (state_type yystate, int yylhs);
220
221 /// Whether the given \c yypact_ value indicates a defaulted state.
222 /// \param yyvalue the value to check
223 static bool yy_pact_value_is_default_ (int yyvalue);
224
225 /// Whether the given \c yytable_ value indicates a syntax error.
226 /// \param yyvalue the value to check
227 static bool yy_table_value_is_error_ (int yyvalue);
228
229 /// Internal symbol numbers.
230 typedef ]b4_int_type_for([b4_translate])[ token_number_type;
231 static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
232 static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
233
234 // Tables.
235 ]b4_parser_tables_declare[]b4_error_verbose_if([
236
237 /// Convert the symbol name \a n to a form suitable for a diagnostic.
238 static std::string yytnamerr_ (const char *n);])[
239
240 ]b4_token_table_if([], [[#if YYDEBUG]])[
241 /// For a symbol, its name in clear.
242 static const char* const yytname_[];
243 ]b4_token_table_if([[#if YYDEBUG]])[
244 ]b4_integral_parser_table_declare([rline], [b4_rline],
245 [YYRLINE[YYN] -- Source line where rule number YYN was defined.])[
246 /// Report on the debug stream that the rule \a r is going to be reduced.
247 virtual void yy_reduce_print_ (int r);
248 /// Print the state stack on the debug stream.
249 virtual void yystack_print_ ();
250
251 // Debugging.
252 int yydebug_;
253 std::ostream* yycdebug_;
254 #endif // YYDEBUG
255
256 /// Convert a scanner token number \a t to a symbol number.
257 static inline token_number_type yytranslate_ (]b4_lex_symbol_if([token_type], [int])[ t);
258
259 #if YYDEBUG
260 /// \brief Display a symbol type, value and location.
261 /// \param yyo The output stream.
262 /// \param yysym The symbol.
263 template <typename Exact>
264 void yy_print_ (std::ostream& yyo,
265 const symbol_base_type<Exact>& yysym) const;
266 #endif
267
268 /// \brief Reclaim the memory associated to a symbol.
269 /// \param yymsg Why this token is reclaimed.
270 /// If null, print nothing.
271 /// \param s The symbol.
272 template <typename Exact>
273 inline void yy_destroy_ (const char* yymsg,
274 symbol_base_type<Exact>& yysym) const;
275
276 private:
277 /// Element of the stack: a state and its attributes.
278 struct stack_symbol_type : symbol_base_type<stack_symbol_type>
279 {
280 /// The parent class.
281 typedef symbol_base_type<stack_symbol_type> super_type;
282
283 /// Default constructor.
284 inline stack_symbol_type ();
285
286 /// Constructor.
287 inline stack_symbol_type (]b4_args([state_type s],
288 [const semantic_type& v],
289 b4_locations_if([const location_type& l]))[);
290
291 /// The state.
292 state_type state;
293
294 /// The type (corresponding to \a state).
295 inline int type_get_ () const;
296 };
297
298 /// Stack type.
299 typedef stack<stack_symbol_type> stack_type;
300
301 /// The stack.
302 stack_type yystack_;
303
304 /// Push a new state on the stack.
305 /// \param m a debug message to display
306 /// if null, no trace is output.
307 /// \param s the symbol
308 /// \warning the contents of \a s.value is stolen.
309 inline void yypush_ (const char* m, stack_symbol_type& s);
310
311 /// Push a new look ahead token on the state on the stack.
312 /// \param m a debug message to display
313 /// if null, no trace is output.
314 /// \param s the state
315 /// \param sym the symbol (for its value and location).
316 /// \warning the contents of \a s.value is stolen.
317 inline void yypush_ (const char* m, state_type s, symbol_type& sym);
318
319 /// Pop \a n symbols the three stacks.
320 inline void yypop_ (unsigned int n = 1);
321
322 /* Constants. */
323 enum
324 {
325 yyeof_ = 0,
326 yylast_ = ]b4_last[, //< Last index in yytable_.
327 yynnts_ = ]b4_nterms_number[, //< Number of nonterminal symbols.
328 yyempty_ = -2,
329 yyfinal_ = ]b4_final_state_number[, //< Termination state number.
330 yyterror_ = 1,
331 yyerrcode_ = 256,
332 yyntokens_ = ]b4_tokens_number[ //< Number of tokens.
333 };
334
335 ]b4_parse_param_vars[
336 };
337
338 ]b4_lex_symbol_if([b4_yytranslate_define
339 b4_public_types_define])[
340 ]b4_namespace_close[
341
342 ]b4_percent_define_flag_if([[global_tokens_and_yystype]],
343 [b4_token_defines(b4_tokens)
344
345 #ifndef ]b4_api_PREFIX[STYPE
346 /* Redirection for backward compatibility. */
347 # define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
348 #endif
349 ])[
350 ]b4_percent_code_get([[provides]])[
351 ]b4_cpp_guard_close([b4_spec_defines_file])
352 @output(b4_parser_file_name@)@
353 b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++])
354 b4_percent_code_get([[top]])[]dnl
355 m4_if(b4_prefix, [yy], [],
356 [
357 // Take the name prefix into account.
358 #define yylex b4_prefix[]lex])[
359
360 /* First part of user declarations. */
361 ]b4_user_pre_prologue[
362
363 #include "@basename(]b4_spec_defines_file[@)"
364
365 /* User implementation prologue. */
366 ]b4_user_post_prologue
367 b4_percent_code_get[]dnl
368
369 [#ifndef YY_
370 # if defined YYENABLE_NLS && YYENABLE_NLS
371 # if ENABLE_NLS
372 # include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
373 # define YY_(msgid) dgettext ("bison-runtime", msgid)
374 # endif
375 # endif
376 # ifndef YY_
377 # define YY_(msgid) msgid
378 # endif
379 #endif
380
381 ]b4_locations_if([dnl
382 [/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
383 If N is 0, then set CURRENT to the empty location which ends
384 the previous symbol: RHS[0] (always defined). */
385
386 #define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
387 #ifndef YYLLOC_DEFAULT
388 # define YYLLOC_DEFAULT(Current, Rhs, N) \
389 do \
390 if (N) \
391 { \
392 (Current).begin = YYRHSLOC (Rhs, 1).begin; \
393 (Current).end = YYRHSLOC (Rhs, N).end; \
394 } \
395 else \
396 { \
397 (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
398 } \
399 while (false)
400 #endif]])[
401
402 /* Suppress unused-variable warnings by "using" E. */
403 #define YYUSE(e) ((void) (e))
404
405 /* Enable debugging if requested. */
406 #if YYDEBUG
407
408 /* A pseudo ostream that takes yydebug_ into account. */
409 # define YYCDEBUG if (yydebug_) (*yycdebug_)
410
411 # define YY_SYMBOL_PRINT(Title, Symbol) \
412 do { \
413 if (yydebug_) \
414 { \
415 *yycdebug_ << Title << ' '; \
416 yy_print_ (*yycdebug_, Symbol); \
417 *yycdebug_ << std::endl; \
418 } \
419 } while (false)
420
421 # define YY_REDUCE_PRINT(Rule) \
422 do { \
423 if (yydebug_) \
424 yy_reduce_print_ (Rule); \
425 } while (false)
426
427 # define YY_STACK_PRINT() \
428 do { \
429 if (yydebug_) \
430 yystack_print_ (); \
431 } while (false)
432
433 #else /* !YYDEBUG */
434
435 # define YYCDEBUG if (false) std::cerr
436 # define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
437 # define YY_REDUCE_PRINT(Rule) static_cast<void>(0)
438 # define YY_STACK_PRINT() static_cast<void>(0)
439
440 #endif /* !YYDEBUG */
441
442 #define yyerrok (yyerrstatus_ = 0)
443 #define yyclearin (yyempty = true)
444
445 #define YYACCEPT goto yyacceptlab
446 #define YYABORT goto yyabortlab
447 #define YYERROR goto yyerrorlab
448 #define YYRECOVERING() (!!yyerrstatus_)
449
450 ]b4_namespace_open[]b4_error_verbose_if([[
451
452 /* Return YYSTR after stripping away unnecessary quotes and
453 backslashes, so that it's suitable for yyerror. The heuristic is
454 that double-quoting is unnecessary unless the string contains an
455 apostrophe, a comma, or backslash (other than backslash-backslash).
456 YYSTR is taken from yytname. */
457 std::string
458 ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
459 {
460 if (*yystr == '"')
461 {
462 std::string yyr = "";
463 char const *yyp = yystr;
464
465 for (;;)
466 switch (*++yyp)
467 {
468 case '\'':
469 case ',':
470 goto do_not_strip_quotes;
471
472 case '\\':
473 if (*++yyp != '\\')
474 goto do_not_strip_quotes;
475 /* Fall through. */
476 default:
477 yyr += *yyp;
478 break;
479
480 case '"':
481 return yyr;
482 }
483 do_not_strip_quotes: ;
484 }
485
486 return yystr;
487 }
488 ]])[
489
490 /// Build a parser object.
491 ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
492 :])[
493 #if YYDEBUG
494 ]m4_ifset([b4_parse_param], [ ], [ :])[yydebug_ (false),
495 yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
496 #endif]b4_parse_param_cons[
497 {
498 }
499
500 ]b4_parser_class_name::~b4_parser_class_name[ ()
501 {
502 }
503
504
505 /*---------------.
506 | Symbol types. |
507 `---------------*/
508
509 ]b4_lex_symbol_if([], [b4_public_types_define])[
510
511 // stack_symbol_type.
512 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type ()
513 : super_type ()
514 , state ()
515 {
516 }
517
518 ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (]b4_args(
519 [state_type s],
520 [const semantic_type& v],
521 b4_locations_if([const location_type& l]))[)
522 : super_type (v]b4_locations_if([, l])[)
523 , state (s)
524 {
525 }
526
527 int
528 ]b4_parser_class_name[::stack_symbol_type::type_get_ () const
529 {
530 return yystos_[state];
531 }
532
533
534 template <typename Exact>
535 void
536 ]b4_parser_class_name[::yy_destroy_ (const char* yymsg,
537 symbol_base_type<Exact>& yysym) const
538 {
539 if (yymsg)
540 YY_SYMBOL_PRINT (yymsg, yysym);
541
542 // User destructor.
543 int yytype = yysym.type_get ();
544 switch (yytype)
545 {
546 ]b4_symbol_foreach([b4_symbol_destructor])dnl
547 [ default:
548 break;
549 }]b4_variant_if([
550
551 // Type destructor.
552 b4_symbol_variant([[yytype]], [[yysym.value]], [[template destroy]])])[
553 }
554
555 #if YYDEBUG
556 template <typename Exact>
557 void
558 ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
559 const symbol_base_type<Exact>& yysym) const
560 {
561 std::ostream& yyoutput = yyo;
562 YYUSE (yyoutput);
563 int yytype = yysym.type_get ();
564 yyo << (yytype < yyntokens_ ? "token" : "nterm")
565 << ' ' << yytname_[yytype] << " ("]b4_locations_if([
566 << yysym.location << ": "])[;
567 switch (yytype)
568 {
569 ]b4_symbol_foreach([b4_symbol_printer])dnl
570 [ default:
571 break;
572 }
573 yyo << ')';
574 }
575 #endif
576
577 void
578 ]b4_parser_class_name[::yypush_ (const char* m, state_type s,
579 symbol_type& sym)
580 {
581 if (m)
582 YY_SYMBOL_PRINT (m, sym);
583 ]b4_variant_if(
584 [[ yystack_.push (stack_symbol_type (]b4_args(
585 [s],
586 [semantic_type()],
587 b4_locations_if([sym.location]))[));
588 ]b4_symbol_variant([[yystos_[s]]], [[yystack_[0].value]],
589 [build], [sym.value])],
590 [[ yystack_.push (stack_symbol_type (]b4_args(
591 [s],
592 [sym.value],
593 b4_locations_if([sym.location]))[));]])[
594 }
595
596 void
597 ]b4_parser_class_name[::yypush_ (const char* m, stack_symbol_type& s)
598 {
599 if (m)
600 YY_SYMBOL_PRINT (m, s);
601 ]b4_variant_if(
602 [[ yystack_.push (stack_symbol_type (]b4_args(
603 [s.state],
604 [semantic_type()],
605 b4_locations_if([s.location]))[));
606 ]b4_symbol_variant([[yystos_[s.state]]], [[yystack_[0].value]],
607 [build], [s.value])],
608 [ yystack_.push (s);])[
609 }
610
611 void
612 ]b4_parser_class_name[::yypop_ (unsigned int n)
613 {
614 yystack_.pop (n);
615 }
616
617 #if YYDEBUG
618 std::ostream&
619 ]b4_parser_class_name[::debug_stream () const
620 {
621 return *yycdebug_;
622 }
623
624 void
625 ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
626 {
627 yycdebug_ = &o;
628 }
629
630
631 ]b4_parser_class_name[::debug_level_type
632 ]b4_parser_class_name[::debug_level () const
633 {
634 return yydebug_;
635 }
636
637 void
638 ]b4_parser_class_name[::set_debug_level (debug_level_type l)
639 {
640 yydebug_ = l;
641 }
642 #endif // YYDEBUG
643
644 inline ]b4_parser_class_name[::state_type
645 ]b4_parser_class_name[::yy_lr_goto_state_ (state_type yystate, int yylhs)
646 {
647 int yyr = yypgoto_[yylhs - yyntokens_] + yystate;
648 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
649 return yytable_[yyr];
650 else
651 return yydefgoto_[yylhs - yyntokens_];
652 }
653
654 inline bool
655 ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
656 {
657 return yyvalue == yypact_ninf_;
658 }
659
660 inline bool
661 ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
662 {
663 return yyvalue == yytable_ninf_;
664 }
665
666 int
667 ]b4_parser_class_name[::parse ()
668 {
669 /// Whether yyla contains a lookahead.
670 bool yyempty = true;
671
672 /* State. */
673 int yyn;
674 int yylen = 0;
675
676 /* Error handling. */
677 int yynerrs_ = 0;
678 int yyerrstatus_ = 0;
679
680 /// The lookahead symbol.
681 symbol_type yyla;]b4_locations_if([[
682
683 /// The locations where the error started and ended.
684 stack_symbol_type yyerror_range[3];]])[
685
686 /// $$ and @@$.
687 stack_symbol_type yylhs;
688
689 /// The return value of parse().
690 int yyresult;
691
692 YYCDEBUG << "Starting parse" << std::endl;
693
694 ]m4_ifdef([b4_initial_action], [
695 m4_pushdef([b4_at_dollar], [yyla.location])dnl
696 m4_pushdef([b4_dollar_dollar], [yyla.value])dnl
697 /* User initialization code. */
698 b4_user_initial_action
699 m4_popdef([b4_dollar_dollar])dnl
700 m4_popdef([b4_at_dollar])])dnl
701
702 [ /* Initialize the stack. The initial state will be set in
703 yynewstate, since the latter expects the semantical and the
704 location values to have been already stored, initialize these
705 stacks with a primary value. */
706 yystack_ = stack_type (0);
707 yypush_ (YY_NULL, 0, yyla);
708
709 // A new symbol was pushed on the stack.
710 yynewstate:
711 YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
712
713 /* Accept? */
714 if (yystack_[0].state == yyfinal_)
715 goto yyacceptlab;
716
717 goto yybackup;
718
719 /* Backup. */
720 yybackup:
721
722 /* Try to take a decision without lookahead. */
723 yyn = yypact_[yystack_[0].state];
724 if (yy_pact_value_is_default_ (yyn))
725 goto yydefault;
726
727 /* Read a lookahead token. */
728 if (yyempty)
729 {
730 YYCDEBUG << "Reading a token: ";
731 try
732 {
733 ]b4_lex_symbol_if(
734 [ yyla = b4_c_function_call([yylex], [symbol_type],
735 m4_ifdef([b4_lex_param], b4_lex_param));],
736 [ yyla.type = yytranslate_ (b4_c_function_call([yylex], [int],
737 [b4_api_PREFIX[STYPE*], [&yyla.value]][]dnl
738 b4_locations_if([, [[location*], [&yyla.location]]])dnl
739 m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
740 }
741 catch (const syntax_error& yyexc)
742 {
743 error (yyexc);
744 goto yyerrlab1;
745 }
746 yyempty = false;
747 }
748 YY_SYMBOL_PRINT ("Next token is", yyla);
749
750 /* If the proper action on seeing token YYLA.TYPE is to reduce or
751 to detect an error, take that action. */
752 yyn += yyla.type;
753 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type)
754 goto yydefault;
755
756 /* Reduce or error. */
757 yyn = yytable_[yyn];
758 if (yyn <= 0)
759 {
760 if (yy_table_value_is_error_ (yyn))
761 goto yyerrlab;
762 yyn = -yyn;
763 goto yyreduce;
764 }
765
766 /* Discard the token being shifted. */
767 yyempty = true;
768
769 /* Count tokens shifted since error; after three, turn off error
770 status. */
771 if (yyerrstatus_)
772 --yyerrstatus_;
773
774 /* Shift the lookahead token. */
775 yypush_ ("Shifting", yyn, yyla);
776 goto yynewstate;
777
778 /*-----------------------------------------------------------.
779 | yydefault -- do the default action for the current state. |
780 `-----------------------------------------------------------*/
781 yydefault:
782 yyn = yydefact_[yystack_[0].state];
783 if (yyn == 0)
784 goto yyerrlab;
785 goto yyreduce;
786
787 /*-----------------------------.
788 | yyreduce -- Do a reduction. |
789 `-----------------------------*/
790 yyreduce:
791 yylen = yyr2_[yyn];
792 yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);]b4_variant_if([
793 /* Variants are always initialized to an empty instance of the
794 correct type. The default $$=$1 action is NOT applied when using
795 variants. */
796 b4_symbol_variant([[yyr1_@{yyn@}]], [yylhs.value], [build])],[
797 /* If YYLEN is nonzero, implement the default value of the action:
798 `$$ = $1'. Otherwise, use the top of the stack.
799
800 Otherwise, the following line sets YYLHS.VALUE to garbage.
801 This behavior is undocumented and Bison
802 users should not rely upon it. */
803 if (yylen)
804 yylhs.value = yystack_@{yylen - 1@}.value;
805 else
806 yylhs.value = yystack_@{0@}.value;])[
807 ]b4_locations_if([dnl
808 [
809 // Compute the default @@$.
810 {
811 slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
812 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
813 }]])[
814
815 // Perform the reduction.
816 YY_REDUCE_PRINT (yyn);
817 try
818 {
819 switch (yyn)
820 {
821 ]b4_user_actions[
822 default:
823 break;
824 }
825 }
826 catch (const syntax_error& yyexc)
827 {
828 error (yyexc);
829 YYERROR;
830 }
831 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
832 ]b4_variant_if([[
833 // Destroy the rhs symbols.
834 for (int i = 0; i < yylen; ++i)
835 // Destroy a variant which value may have been swapped with
836 // yylhs.value (for instance if the action was "std::swap($$,
837 // $1)"). The value of yylhs.value (hence possibly one of these
838 // rhs symbols) depends on the default construction for this
839 // type. In the case of pointers for instance, no
840 // initialization is done, so the value is junk. Therefore do
841 // not try to report the value of symbols about to be destroyed
842 // in the debug trace, it's possibly junk. Hence yymsg = 0.
843 // Besides, that keeps exactly the same traces as with the other
844 // Bison skeletons.
845 yy_destroy_ (YY_NULL, yystack_[i]);]])[
846
847 yypop_ (yylen);
848 yylen = 0;
849 YY_STACK_PRINT ();
850
851 /* Shift the result of the reduction. */
852 yypush_ (YY_NULL, yylhs);
853 goto yynewstate;
854
855 /*--------------------------------------.
856 | yyerrlab -- here on detecting error. |
857 `--------------------------------------*/
858 yyerrlab:
859 /* If not already recovering from an error, report this error. */
860 if (!yyerrstatus_)
861 {
862 ++yynerrs_;
863 error (]b4_args(b4_locations_if([yyla.location]),
864 [[yysyntax_error_ (yystack_[0].state,
865 yyempty ? yyempty_ : yyla.type)]])[);
866 }
867
868 ]b4_locations_if([[
869 yyerror_range[1].location = yyla.location;]])[
870 if (yyerrstatus_ == 3)
871 {
872 /* If just tried and failed to reuse lookahead token after an
873 error, discard it. */
874
875 /* Return failure if at end of input. */
876 if (yyla.type == yyeof_)
877 YYABORT;
878 else if (!yyempty)
879 {
880 yy_destroy_ ("Error: discarding", yyla);
881 yyempty = true;
882 }
883 }
884
885 /* Else will try to reuse lookahead token after shifting the error
886 token. */
887 goto yyerrlab1;
888
889
890 /*---------------------------------------------------.
891 | yyerrorlab -- error raised explicitly by YYERROR. |
892 `---------------------------------------------------*/
893 yyerrorlab:
894
895 /* Pacify compilers like GCC when the user code never invokes
896 YYERROR and the label yyerrorlab therefore never appears in user
897 code. */
898 if (false)
899 goto yyerrorlab;]b4_locations_if([[
900 yyerror_range[1].location = yystack_[yylen - 1].location;]])b4_variant_if([[
901 /* $$ was initialized before running the user action. */
902 yy_destroy_ ("Error: discarding", yylhs);]])[
903 /* Do not reclaim the symbols of the rule which action triggered
904 this YYERROR. */
905 yypop_ (yylen);
906 yylen = 0;
907 goto yyerrlab1;
908
909 /*-------------------------------------------------------------.
910 | yyerrlab1 -- common code for both syntax error and YYERROR. |
911 `-------------------------------------------------------------*/
912 yyerrlab1:
913 yyerrstatus_ = 3; /* Each real token shifted decrements this. */
914 {
915 stack_symbol_type error_token;
916 for (;;)
917 {
918 yyn = yypact_[yystack_[0].state];
919 if (!yy_pact_value_is_default_ (yyn))
920 {
921 yyn += yyterror_;
922 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
923 {
924 yyn = yytable_[yyn];
925 if (0 < yyn)
926 break;
927 }
928 }
929
930 // Pop the current state because it cannot handle the error token.
931 if (yystack_.size () == 1)
932 YYABORT;
933 ]b4_locations_if([[
934 yyerror_range[1].location = yystack_[0].location;]])[
935 yy_destroy_ ("Error: popping", yystack_[0]);
936 yypop_ ();
937 YY_STACK_PRINT ();
938 }
939 ]b4_locations_if([[
940 yyerror_range[2].location = yyla.location;
941 YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);]])[
942
943 /* Shift the error token. */
944 error_token.state = yyn;
945 yypush_ ("Shifting", error_token);
946 }
947 goto yynewstate;
948
949 /* Accept. */
950 yyacceptlab:
951 yyresult = 0;
952 goto yyreturn;
953
954 /* Abort. */
955 yyabortlab:
956 yyresult = 1;
957 goto yyreturn;
958
959 yyreturn:
960 if (!yyempty)
961 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
962
963 /* Do not reclaim the symbols of the rule which action triggered
964 this YYABORT or YYACCEPT. */
965 yypop_ (yylen);
966 while (yystack_.size () != 1)
967 {
968 yy_destroy_ ("Cleanup: popping", yystack_[0]);
969 yypop_ ();
970 }
971
972 return yyresult;
973 }
974
975 void
976 ]b4_parser_class_name[::error (const syntax_error& yyexc)
977 {
978 error (]b4_args(b4_locations_if([yyexc.location]),
979 [[yyexc.what()]])[);
980 }
981
982 // Generate an error message.
983 std::string
984 ]b4_parser_class_name[::yysyntax_error_ (]dnl
985 b4_error_verbose_if([state_type yystate, int yytoken],
986 [int, int])[)
987 {]b4_error_verbose_if([[
988 std::string yyres;
989 // Number of reported tokens (one for the "unexpected", one per
990 // "expected").
991 size_t yycount = 0;
992 // Its maximum.
993 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
994 // Arguments of yyformat.
995 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
996
997 /* There are many possibilities here to consider:
998 - If this state is a consistent state with a default action, then
999 the only way this function was invoked is if the default action
1000 is an error action. In that case, don't check for expected
1001 tokens because there are none.
1002 - The only way there can be no lookahead present (in yytoken) is
1003 if this state is a consistent state with a default action.
1004 Thus, detecting the absence of a lookahead is sufficient to
1005 determine that there is no unexpected or expected token to
1006 report. In that case, just report a simple "syntax error".
1007 - Don't assume there isn't a lookahead just because this state is
1008 a consistent state with a default action. There might have
1009 been a previous inconsistent state, consistent state with a
1010 non-default action, or user semantic action that manipulated
1011 yyla. (However, yyla is currently not documented for users.)
1012 - Of course, the expected token list depends on states to have
1013 correct lookahead information, and it depends on the parser not
1014 to perform extra reductions after fetching a lookahead from the
1015 scanner and before detecting a syntax error. Thus, state
1016 merging (from LALR or IELR) and default reductions corrupt the
1017 expected token list. However, the list is correct for
1018 canonical LR with one exception: it will still contain any
1019 token that will not be accepted due to an error action in a
1020 later state.
1021 */
1022 if (yytoken != yyempty_)
1023 {
1024 yyarg[yycount++] = yytname_[yytoken];
1025 int yyn = yypact_[yystate];
1026 if (!yy_pact_value_is_default_ (yyn))
1027 {
1028 /* Start YYX at -YYN if negative to avoid negative indexes in
1029 YYCHECK. In other words, skip the first -YYN actions for
1030 this state because they are default actions. */
1031 int yyxbegin = yyn < 0 ? -yyn : 0;
1032 /* Stay within bounds of both yycheck and yytname. */
1033 int yychecklim = yylast_ - yyn + 1;
1034 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
1035 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
1036 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
1037 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
1038 {
1039 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1040 {
1041 yycount = 1;
1042 break;
1043 }
1044 else
1045 yyarg[yycount++] = yytname_[yyx];
1046 }
1047 }
1048 }
1049
1050 char const* yyformat = YY_NULL;
1051 switch (yycount)
1052 {
1053 #define YYCASE_(N, S) \
1054 case N: \
1055 yyformat = S; \
1056 break
1057 YYCASE_(0, YY_("syntax error"));
1058 YYCASE_(1, YY_("syntax error, unexpected %s"));
1059 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1060 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1061 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1062 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1063 #undef YYCASE_
1064 }
1065
1066 // Argument number.
1067 size_t yyi = 0;
1068 for (char const* yyp = yyformat; *yyp; ++yyp)
1069 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
1070 {
1071 yyres += yytnamerr_ (yyarg[yyi++]);
1072 ++yyp;
1073 }
1074 else
1075 yyres += *yyp;
1076 return yyres;]], [[
1077 return YY_("syntax error");]])[
1078 }
1079
1080
1081 const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
1082
1083 const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
1084
1085 ]b4_parser_tables_define[
1086
1087 ]b4_token_table_if([], [[#if YYDEBUG]])[
1088 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1089 First, the terminals, then, starting at \a yyntokens_, nonterminals. */
1090 const char*
1091 const ]b4_parser_class_name[::yytname_[] =
1092 {
1093 ]b4_tname[
1094 };
1095
1096 ]b4_token_table_if([[#if YYDEBUG]])[
1097 ]b4_integral_parser_table_define([rline], [b4_rline])[
1098
1099 // Print the state stack on the debug stream.
1100 void
1101 ]b4_parser_class_name[::yystack_print_ ()
1102 {
1103 *yycdebug_ << "Stack now";
1104 for (stack_type::const_iterator
1105 i = yystack_.begin (),
1106 i_end = yystack_.end ();
1107 i != i_end; ++i)
1108 *yycdebug_ << ' ' << i->state;
1109 *yycdebug_ << std::endl;
1110 }
1111
1112 // Report on the debug stream that the rule \a yyrule is going to be reduced.
1113 void
1114 ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
1115 {
1116 unsigned int yylno = yyrline_[yyrule];
1117 int yynrhs = yyr2_[yyrule];
1118 /* Print the symbols being reduced, and their result. */
1119 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
1120 << " (line " << yylno << "):" << std::endl;
1121 /* The symbols being reduced. */
1122 for (int yyi = 0; yyi < yynrhs; yyi++)
1123 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
1124 ]b4_rhs_data(yynrhs, yyi + 1)[);
1125 }
1126 #endif // YYDEBUG
1127
1128 ]b4_lex_symbol_if([], [b4_yytranslate_define])[
1129 ]b4_namespace_close[
1130 ]b4_epilogue[]dnl
1131 m4_divert_pop(0)
1132 m4_popdef([b4_copyright_years])dnl