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
18m4_include(b4_pkgdatadir/[c++.m4])
19
20m4_define([b4_parser_class_name],
21          [b4_percent_define_get([[parser_class_name]])])
22
23# The header is mandatory.
24b4_defines_if([],
25              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
26
27b4_percent_define_ifdef([[api.location.type]], [],
28  [# Backward compatibility.
29  m4_define([b4_location_constructors])
30  m4_include(b4_pkgdatadir/[location.cc])])
31m4_include(b4_pkgdatadir/[stack.hh])
32
33b4_defines_if(
34[b4_output_begin([b4_spec_defines_file])
35b4_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    {
68b4_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])
265b4_output_end()
266])
267
268
269b4_output_begin([b4_parser_file_name])
270b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++],
271             [2002-2012])
272b4_percent_code_get([[top]])[]dnl
273m4_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)	\
315do {							\
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)		\
325do {					\
326  if (yydebug_)				\
327    yy_reduce_print_ (Rule);		\
328} while (false)
329
330# define YY_STACK_PRINT()		\
331do {					\
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], [
546b4_dollar_pushdef([yylval], [], [yylloc])dnl
547/* User initialization code.  */
548b4_user_initial_action
549b4_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
586b4_locations_if([, [[location*], [&yylloc]]])dnl
587m4_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
875b4_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
1143b4_output_end()
1144