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