git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@22291 e7fa87d3-cd2b-0410-9028-fcbf551c1848
		
			
				
	
	
		
			1144 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			1144 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
# C++ skeleton for Bison
 | 
						|
 | 
						|
# Copyright (C) 2002-2012 Free Software Foundation, Inc.
 | 
						|
 | 
						|
# This program is free software: you can redistribute it and/or modify
 | 
						|
# it under the terms of the GNU General Public License as published by
 | 
						|
# the Free Software Foundation, either version 3 of the License, or
 | 
						|
# (at your option) any later version.
 | 
						|
#
 | 
						|
# This program is distributed in the hope that it will be useful,
 | 
						|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
# GNU General Public License for more details.
 | 
						|
#
 | 
						|
# You should have received a copy of the GNU General Public License
 | 
						|
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
m4_include(b4_pkgdatadir/[c++.m4])
 | 
						|
 | 
						|
m4_define([b4_parser_class_name],
 | 
						|
          [b4_percent_define_get([[parser_class_name]])])
 | 
						|
 | 
						|
# The header is mandatory.
 | 
						|
b4_defines_if([],
 | 
						|
              [b4_fatal([b4_skeleton[: using %%defines is mandatory]])])
 | 
						|
 | 
						|
b4_percent_define_ifdef([[api.location.type]], [],
 | 
						|
  [# Backward compatibility.
 | 
						|
  m4_define([b4_location_constructors])
 | 
						|
  m4_include(b4_pkgdatadir/[location.cc])])
 | 
						|
m4_include(b4_pkgdatadir/[stack.hh])
 | 
						|
 | 
						|
b4_defines_if(
 | 
						|
[b4_output_begin([b4_spec_defines_file])
 | 
						|
b4_copyright([Skeleton interface for Bison LALR(1) parsers in C++],
 | 
						|
             [2002-2012])
 | 
						|
[
 | 
						|
/**
 | 
						|
 ** \file ]b4_spec_defines_file[
 | 
						|
 ** Define the ]b4_namespace_ref[::parser class.
 | 
						|
 */
 | 
						|
 | 
						|
/* C++ LALR(1) parser skeleton written by Akim Demaille.  */
 | 
						|
 | 
						|
]b4_cpp_guard_open([b4_spec_defines_file])[
 | 
						|
 | 
						|
]b4_percent_code_get([[requires]])[
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <iostream>
 | 
						|
#include "stack.hh"
 | 
						|
]b4_percent_define_ifdef([[api.location.type]], [],
 | 
						|
                         [[#include "location.hh"]])[
 | 
						|
 | 
						|
]b4_YYDEBUG_define[
 | 
						|
 | 
						|
]b4_namespace_open[
 | 
						|
 | 
						|
  /// A Bison parser.
 | 
						|
  class ]b4_parser_class_name[
 | 
						|
  {
 | 
						|
  public:
 | 
						|
    /// Symbol semantic values.
 | 
						|
#ifndef ]b4_api_PREFIX[STYPE
 | 
						|
]m4_ifdef([b4_stype],
 | 
						|
[    union semantic_type
 | 
						|
    {
 | 
						|
b4_user_stype
 | 
						|
    };],
 | 
						|
[m4_if(b4_tag_seen_flag, 0,
 | 
						|
[[    typedef int semantic_type;]],
 | 
						|
[[    typedef ]b4_api_PREFIX[STYPE semantic_type;]])])[
 | 
						|
#else
 | 
						|
    typedef ]b4_api_PREFIX[STYPE semantic_type;
 | 
						|
#endif
 | 
						|
    /// Symbol locations.
 | 
						|
    typedef ]b4_percent_define_get([[api.location.type]],
 | 
						|
                                   [[location]])[ location_type;
 | 
						|
    /// Tokens.
 | 
						|
    struct token
 | 
						|
    {
 | 
						|
      ]b4_token_enums(b4_tokens)[
 | 
						|
    };
 | 
						|
    /// Token type.
 | 
						|
    typedef token::yytokentype token_type;
 | 
						|
 | 
						|
    /// Build a parser object.
 | 
						|
    ]b4_parser_class_name[ (]b4_parse_param_decl[);
 | 
						|
    virtual ~]b4_parser_class_name[ ();
 | 
						|
 | 
						|
    /// Parse.
 | 
						|
    /// \returns  0 iff parsing succeeded.
 | 
						|
    virtual int parse ();
 | 
						|
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
    /// The current debugging stream.
 | 
						|
    std::ostream& debug_stream () const;
 | 
						|
    /// Set the current debugging stream.
 | 
						|
    void set_debug_stream (std::ostream &);
 | 
						|
 | 
						|
    /// Type for debugging levels.
 | 
						|
    typedef int debug_level_type;
 | 
						|
    /// The current debugging level.
 | 
						|
    debug_level_type debug_level () const;
 | 
						|
    /// Set the current debugging level.
 | 
						|
    void set_debug_level (debug_level_type l);
 | 
						|
#endif
 | 
						|
 | 
						|
  private:
 | 
						|
    /// Report a syntax error.
 | 
						|
    /// \param loc    where the syntax error is found.
 | 
						|
    /// \param msg    a description of the syntax error.
 | 
						|
    virtual void error (const location_type& loc, const std::string& msg);
 | 
						|
 | 
						|
    /// Generate an error message.
 | 
						|
    /// \param state   the state where the error occurred.
 | 
						|
    /// \param tok     the lookahead token.
 | 
						|
    virtual std::string yysyntax_error_ (int yystate, int tok);
 | 
						|
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
    /// \brief Report a symbol value on the debug stream.
 | 
						|
    /// \param yytype       The token type.
 | 
						|
    /// \param yyvaluep     Its semantic value.
 | 
						|
    /// \param yylocationp  Its location.
 | 
						|
    virtual void yy_symbol_value_print_ (int yytype,
 | 
						|
					 const semantic_type* yyvaluep,
 | 
						|
					 const location_type* yylocationp);
 | 
						|
    /// \brief Report a symbol on the debug stream.
 | 
						|
    /// \param yytype       The token type.
 | 
						|
    /// \param yyvaluep     Its semantic value.
 | 
						|
    /// \param yylocationp  Its location.
 | 
						|
    virtual void yy_symbol_print_ (int yytype,
 | 
						|
				   const semantic_type* yyvaluep,
 | 
						|
				   const location_type* yylocationp);
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
    /// State numbers.
 | 
						|
    typedef int state_type;
 | 
						|
    /// State stack type.
 | 
						|
    typedef stack<state_type>    state_stack_type;
 | 
						|
    /// Semantic value stack type.
 | 
						|
    typedef stack<semantic_type> semantic_stack_type;
 | 
						|
    /// location stack type.
 | 
						|
    typedef stack<location_type> location_stack_type;
 | 
						|
 | 
						|
    /// The state stack.
 | 
						|
    state_stack_type yystate_stack_;
 | 
						|
    /// The semantic value stack.
 | 
						|
    semantic_stack_type yysemantic_stack_;
 | 
						|
    /// The location stack.
 | 
						|
    location_stack_type yylocation_stack_;
 | 
						|
 | 
						|
    /// Whether the given \c yypact_ value indicates a defaulted state.
 | 
						|
    /// \param yyvalue   the value to check
 | 
						|
    static bool yy_pact_value_is_default_ (int yyvalue);
 | 
						|
 | 
						|
    /// Whether the given \c yytable_ value indicates a syntax error.
 | 
						|
    /// \param yyvalue   the value to check
 | 
						|
    static bool yy_table_value_is_error_ (int yyvalue);
 | 
						|
 | 
						|
    /// Internal symbol numbers.
 | 
						|
    typedef ]b4_int_type_for([b4_translate])[ token_number_type;
 | 
						|
    /* Tables.  */
 | 
						|
    /// For a state, the index in \a yytable_ of its portion.
 | 
						|
    static const ]b4_int_type_for([b4_pact])[ yypact_[];
 | 
						|
    static const ]b4_int_type(b4_pact_ninf, b4_pact_ninf)[ yypact_ninf_;
 | 
						|
 | 
						|
    /// For a state, default reduction number.
 | 
						|
    /// Unless\a  yytable_ specifies something else to do.
 | 
						|
    /// Zero means the default is an error.
 | 
						|
    static const ]b4_int_type_for([b4_defact])[ yydefact_[];
 | 
						|
 | 
						|
    static const ]b4_int_type_for([b4_pgoto])[ yypgoto_[];
 | 
						|
    static const ]b4_int_type_for([b4_defgoto])[ yydefgoto_[];
 | 
						|
 | 
						|
    /// What to do in a state.
 | 
						|
    /// \a yytable_[yypact_[s]]: what to do in state \a s.
 | 
						|
    /// - if positive, shift that token.
 | 
						|
    /// - if negative, reduce the rule which number is the opposite.
 | 
						|
    /// - if zero, do what YYDEFACT says.
 | 
						|
    static const ]b4_int_type_for([b4_table])[ yytable_[];
 | 
						|
    static const ]b4_int_type(b4_table_ninf, b4_table_ninf)[ yytable_ninf_;
 | 
						|
 | 
						|
    static const ]b4_int_type_for([b4_check])[ yycheck_[];
 | 
						|
 | 
						|
    /// For a state, its accessing symbol.
 | 
						|
    static const ]b4_int_type_for([b4_stos])[ yystos_[];
 | 
						|
 | 
						|
    /// For a rule, its LHS.
 | 
						|
    static const ]b4_int_type_for([b4_r1])[ yyr1_[];
 | 
						|
    /// For a rule, its RHS length.
 | 
						|
    static const ]b4_int_type_for([b4_r2])[ yyr2_[]; ]b4_error_verbose_if([
 | 
						|
 | 
						|
    /// Convert the symbol name \a n to a form suitable for a diagnostic.
 | 
						|
    static std::string yytnamerr_ (const char *n);])[
 | 
						|
 | 
						|
]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
 | 
						|
    /// For a symbol, its name in clear.
 | 
						|
    static const char* const yytname_[];
 | 
						|
]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
 | 
						|
    /// A type to store symbol numbers and -1.
 | 
						|
    typedef ]b4_int_type_for([b4_rhs])[ rhs_number_type;
 | 
						|
    /// A `-1'-separated list of the rules' RHS.
 | 
						|
    static const rhs_number_type yyrhs_[];
 | 
						|
    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
 | 
						|
    static const ]b4_int_type_for([b4_prhs])[ yyprhs_[];
 | 
						|
    /// For each rule, its source line number.
 | 
						|
    static const ]b4_int_type_for([b4_rline])[ yyrline_[];
 | 
						|
    /// For each scanner token number, its symbol number.
 | 
						|
    static const ]b4_int_type_for([b4_toknum])[ yytoken_number_[];
 | 
						|
    /// Report on the debug stream that the rule \a r is going to be reduced.
 | 
						|
    virtual void yy_reduce_print_ (int r);
 | 
						|
    /// Print the state stack on the debug stream.
 | 
						|
    virtual void yystack_print_ ();
 | 
						|
 | 
						|
    /* Debugging.  */
 | 
						|
    int yydebug_;
 | 
						|
    std::ostream* yycdebug_;
 | 
						|
#endif
 | 
						|
 | 
						|
    /// Convert a scanner token number \a t to a symbol number.
 | 
						|
    token_number_type yytranslate_ (int t);
 | 
						|
 | 
						|
    /// \brief Reclaim the memory associated to a symbol.
 | 
						|
    /// \param yymsg        Why this token is reclaimed.
 | 
						|
    ///                     If null, do not display the symbol, just free it.
 | 
						|
    /// \param yytype       The symbol type.
 | 
						|
    /// \param yyvaluep     Its semantic value.
 | 
						|
    /// \param yylocationp  Its location.
 | 
						|
    inline void yydestruct_ (const char* yymsg,
 | 
						|
			     int yytype,
 | 
						|
			     semantic_type* yyvaluep,
 | 
						|
			     location_type* yylocationp);
 | 
						|
 | 
						|
    /// Pop \a n symbols the three stacks.
 | 
						|
    inline void yypop_ (unsigned int n = 1);
 | 
						|
 | 
						|
    /* Constants.  */
 | 
						|
    static const int yyeof_;
 | 
						|
    /* LAST_ -- Last index in TABLE_.  */
 | 
						|
    static const int yylast_;
 | 
						|
    static const int yynnts_;
 | 
						|
    static const int yyempty_;
 | 
						|
    static const int yyfinal_;
 | 
						|
    static const int yyterror_;
 | 
						|
    static const int yyerrcode_;
 | 
						|
    static const int yyntokens_;
 | 
						|
    static const unsigned int yyuser_token_number_max_;
 | 
						|
    static const token_number_type yyundef_token_;
 | 
						|
]b4_parse_param_vars[
 | 
						|
  };
 | 
						|
]b4_namespace_close[
 | 
						|
 | 
						|
]b4_percent_define_flag_if([[global_tokens_and_yystype]],
 | 
						|
[b4_token_defines(b4_tokens)
 | 
						|
 | 
						|
#ifndef ]b4_api_PREFIX[STYPE
 | 
						|
 /* Redirection for backward compatibility.  */
 | 
						|
# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class_name::semantic_type
 | 
						|
#endif
 | 
						|
])[
 | 
						|
]b4_percent_code_get([[provides]])[
 | 
						|
]b4_cpp_guard_close([b4_spec_defines_file])
 | 
						|
b4_output_end()
 | 
						|
])
 | 
						|
 | 
						|
 | 
						|
b4_output_begin([b4_parser_file_name])
 | 
						|
b4_copyright([Skeleton implementation for Bison LALR(1) parsers in C++],
 | 
						|
             [2002-2012])
 | 
						|
b4_percent_code_get([[top]])[]dnl
 | 
						|
m4_if(b4_prefix, [yy], [],
 | 
						|
[
 | 
						|
// Take the name prefix into account.
 | 
						|
#define yylex   b4_prefix[]lex])[
 | 
						|
 | 
						|
/* First part of user declarations.  */
 | 
						|
]b4_user_pre_prologue[
 | 
						|
 | 
						|
]b4_defines_if([[
 | 
						|
#include "@basename(]b4_spec_defines_file[@)"]])[
 | 
						|
 | 
						|
/* User implementation prologue.  */
 | 
						|
]b4_user_post_prologue[
 | 
						|
]b4_percent_code_get[
 | 
						|
 | 
						|
]b4_null_define[
 | 
						|
 | 
						|
#ifndef YY_
 | 
						|
# if defined YYENABLE_NLS && YYENABLE_NLS
 | 
						|
#  if ENABLE_NLS
 | 
						|
#   include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
 | 
						|
#   define YY_(msgid) dgettext ("bison-runtime", msgid)
 | 
						|
#  endif
 | 
						|
# endif
 | 
						|
# ifndef YY_
 | 
						|
#  define YY_(msgid) msgid
 | 
						|
# endif
 | 
						|
#endif
 | 
						|
 | 
						|
#define YYRHSLOC(Rhs, K) ((Rhs)[K])
 | 
						|
]b4_yylloc_default_define[
 | 
						|
 | 
						|
/* Suppress unused-variable warnings by "using" E.  */
 | 
						|
#define YYUSE(e) ((void) (e))
 | 
						|
 | 
						|
/* Enable debugging if requested.  */
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
 | 
						|
/* A pseudo ostream that takes yydebug_ into account.  */
 | 
						|
# define YYCDEBUG if (yydebug_) (*yycdebug_)
 | 
						|
 | 
						|
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)	\
 | 
						|
do {							\
 | 
						|
  if (yydebug_)						\
 | 
						|
    {							\
 | 
						|
      *yycdebug_ << Title << ' ';			\
 | 
						|
      yy_symbol_print_ ((Type), (Value), (Location));	\
 | 
						|
      *yycdebug_ << std::endl;				\
 | 
						|
    }							\
 | 
						|
} while (false)
 | 
						|
 | 
						|
# define YY_REDUCE_PRINT(Rule)		\
 | 
						|
do {					\
 | 
						|
  if (yydebug_)				\
 | 
						|
    yy_reduce_print_ (Rule);		\
 | 
						|
} while (false)
 | 
						|
 | 
						|
# define YY_STACK_PRINT()		\
 | 
						|
do {					\
 | 
						|
  if (yydebug_)				\
 | 
						|
    yystack_print_ ();			\
 | 
						|
} while (false)
 | 
						|
 | 
						|
#else /* !]b4_api_PREFIX[DEBUG */
 | 
						|
 | 
						|
# define YYCDEBUG if (false) std::cerr
 | 
						|
# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type)
 | 
						|
# define YY_REDUCE_PRINT(Rule)        static_cast<void>(0)
 | 
						|
# define YY_STACK_PRINT()             static_cast<void>(0)
 | 
						|
 | 
						|
#endif /* !]b4_api_PREFIX[DEBUG */
 | 
						|
 | 
						|
#define yyerrok		(yyerrstatus_ = 0)
 | 
						|
#define yyclearin	(yychar = yyempty_)
 | 
						|
 | 
						|
#define YYACCEPT	goto yyacceptlab
 | 
						|
#define YYABORT		goto yyabortlab
 | 
						|
#define YYERROR		goto yyerrorlab
 | 
						|
#define YYRECOVERING()  (!!yyerrstatus_)
 | 
						|
 | 
						|
]b4_namespace_open[]b4_error_verbose_if([[
 | 
						|
 | 
						|
  /* Return YYSTR after stripping away unnecessary quotes and
 | 
						|
     backslashes, so that it's suitable for yyerror.  The heuristic is
 | 
						|
     that double-quoting is unnecessary unless the string contains an
 | 
						|
     apostrophe, a comma, or backslash (other than backslash-backslash).
 | 
						|
     YYSTR is taken from yytname.  */
 | 
						|
  std::string
 | 
						|
  ]b4_parser_class_name[::yytnamerr_ (const char *yystr)
 | 
						|
  {
 | 
						|
    if (*yystr == '"')
 | 
						|
      {
 | 
						|
        std::string yyr = "";
 | 
						|
        char const *yyp = yystr;
 | 
						|
 | 
						|
        for (;;)
 | 
						|
          switch (*++yyp)
 | 
						|
            {
 | 
						|
            case '\'':
 | 
						|
            case ',':
 | 
						|
              goto do_not_strip_quotes;
 | 
						|
 | 
						|
            case '\\':
 | 
						|
              if (*++yyp != '\\')
 | 
						|
                goto do_not_strip_quotes;
 | 
						|
              /* Fall through.  */
 | 
						|
            default:
 | 
						|
              yyr += *yyp;
 | 
						|
              break;
 | 
						|
 | 
						|
            case '"':
 | 
						|
              return yyr;
 | 
						|
            }
 | 
						|
      do_not_strip_quotes: ;
 | 
						|
      }
 | 
						|
 | 
						|
    return yystr;
 | 
						|
  }
 | 
						|
]])[
 | 
						|
 | 
						|
  /// Build a parser object.
 | 
						|
  ]b4_parser_class_name::b4_parser_class_name[ (]b4_parse_param_decl[)]m4_ifset([b4_parse_param], [
 | 
						|
    :])[
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
    ]m4_ifset([b4_parse_param], [  ], [ :])[yydebug_ (false),
 | 
						|
      yycdebug_ (&std::cerr)]m4_ifset([b4_parse_param], [,])[
 | 
						|
#endif]b4_parse_param_cons[
 | 
						|
  {
 | 
						|
  }
 | 
						|
 | 
						|
  ]b4_parser_class_name::~b4_parser_class_name[ ()
 | 
						|
  {
 | 
						|
  }
 | 
						|
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
  /*--------------------------------.
 | 
						|
  | Print this symbol on YYOUTPUT.  |
 | 
						|
  `--------------------------------*/
 | 
						|
 | 
						|
  inline void
 | 
						|
  ]b4_parser_class_name[::yy_symbol_value_print_ (int yytype,
 | 
						|
			   const semantic_type* yyvaluep, const location_type* yylocationp)
 | 
						|
  {
 | 
						|
    YYUSE (yylocationp);
 | 
						|
    YYUSE (yyvaluep);
 | 
						|
    std::ostream& yyo = debug_stream ();
 | 
						|
    std::ostream& yyoutput = yyo;
 | 
						|
    YYUSE (yyoutput);
 | 
						|
    switch (yytype)
 | 
						|
      {
 | 
						|
  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_printers]))dnl
 | 
						|
[       default:
 | 
						|
	  break;
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::yy_symbol_print_ (int yytype,
 | 
						|
			   const semantic_type* yyvaluep, const location_type* yylocationp)
 | 
						|
  {
 | 
						|
    *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
 | 
						|
	       << ' ' << yytname_[yytype] << " ("
 | 
						|
	       << *yylocationp << ": ";
 | 
						|
    yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
 | 
						|
    *yycdebug_ << ')';
 | 
						|
  }
 | 
						|
#endif
 | 
						|
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::yydestruct_ (const char* yymsg,
 | 
						|
			   int yytype, semantic_type* yyvaluep, location_type* yylocationp)
 | 
						|
  {
 | 
						|
    YYUSE (yylocationp);
 | 
						|
    YYUSE (yymsg);
 | 
						|
    YYUSE (yyvaluep);
 | 
						|
 | 
						|
    if (yymsg)
 | 
						|
      YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 | 
						|
 | 
						|
    switch (yytype)
 | 
						|
      {
 | 
						|
  ]m4_map([b4_symbol_actions], m4_defn([b4_symbol_destructors]))[
 | 
						|
	default:
 | 
						|
	  break;
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::yypop_ (unsigned int n)
 | 
						|
  {
 | 
						|
    yystate_stack_.pop (n);
 | 
						|
    yysemantic_stack_.pop (n);
 | 
						|
    yylocation_stack_.pop (n);
 | 
						|
  }
 | 
						|
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
  std::ostream&
 | 
						|
  ]b4_parser_class_name[::debug_stream () const
 | 
						|
  {
 | 
						|
    return *yycdebug_;
 | 
						|
  }
 | 
						|
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::set_debug_stream (std::ostream& o)
 | 
						|
  {
 | 
						|
    yycdebug_ = &o;
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  ]b4_parser_class_name[::debug_level_type
 | 
						|
  ]b4_parser_class_name[::debug_level () const
 | 
						|
  {
 | 
						|
    return yydebug_;
 | 
						|
  }
 | 
						|
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::set_debug_level (debug_level_type l)
 | 
						|
  {
 | 
						|
    yydebug_ = l;
 | 
						|
  }
 | 
						|
#endif
 | 
						|
 | 
						|
  inline bool
 | 
						|
  ]b4_parser_class_name[::yy_pact_value_is_default_ (int yyvalue)
 | 
						|
  {
 | 
						|
    return yyvalue == yypact_ninf_;
 | 
						|
  }
 | 
						|
 | 
						|
  inline bool
 | 
						|
  ]b4_parser_class_name[::yy_table_value_is_error_ (int yyvalue)
 | 
						|
  {
 | 
						|
    return yyvalue == yytable_ninf_;
 | 
						|
  }
 | 
						|
 | 
						|
  int
 | 
						|
  ]b4_parser_class_name[::parse ()
 | 
						|
  {
 | 
						|
    /// Lookahead and lookahead in internal form.
 | 
						|
    int yychar = yyempty_;
 | 
						|
    int yytoken = 0;
 | 
						|
 | 
						|
    // State.
 | 
						|
    int yyn;
 | 
						|
    int yylen = 0;
 | 
						|
    int yystate = 0;
 | 
						|
 | 
						|
    // Error handling.
 | 
						|
    int yynerrs_ = 0;
 | 
						|
    int yyerrstatus_ = 0;
 | 
						|
 | 
						|
    /// Semantic value of the lookahead.
 | 
						|
    static semantic_type yyval_default;
 | 
						|
    semantic_type yylval = yyval_default;
 | 
						|
    /// Location of the lookahead.
 | 
						|
    location_type yylloc;
 | 
						|
    /// The locations where the error started and ended.
 | 
						|
    location_type yyerror_range[3];
 | 
						|
 | 
						|
    /// $$.
 | 
						|
    semantic_type yyval;
 | 
						|
    /// @@$.
 | 
						|
    location_type yyloc;
 | 
						|
 | 
						|
    int yyresult;
 | 
						|
 | 
						|
    // FIXME: This shoud be completely indented.  It is not yet to
 | 
						|
    // avoid gratuitous conflicts when merging into the master branch.
 | 
						|
    try
 | 
						|
      {
 | 
						|
    YYCDEBUG << "Starting parse" << std::endl;
 | 
						|
 | 
						|
]m4_ifdef([b4_initial_action], [
 | 
						|
b4_dollar_pushdef([yylval], [], [yylloc])dnl
 | 
						|
/* User initialization code.  */
 | 
						|
b4_user_initial_action
 | 
						|
b4_dollar_popdef])[]dnl
 | 
						|
 | 
						|
  [  /* Initialize the stacks.  The initial state will be pushed in
 | 
						|
       yynewstate, since the latter expects the semantical and the
 | 
						|
       location values to have been already stored, initialize these
 | 
						|
       stacks with a primary value.  */
 | 
						|
    yystate_stack_ = state_stack_type (0);
 | 
						|
    yysemantic_stack_ = semantic_stack_type (0);
 | 
						|
    yylocation_stack_ = location_stack_type (0);
 | 
						|
    yysemantic_stack_.push (yylval);
 | 
						|
    yylocation_stack_.push (yylloc);
 | 
						|
 | 
						|
    /* New state.  */
 | 
						|
  yynewstate:
 | 
						|
    yystate_stack_.push (yystate);
 | 
						|
    YYCDEBUG << "Entering state " << yystate << std::endl;
 | 
						|
 | 
						|
    /* Accept?  */
 | 
						|
    if (yystate == yyfinal_)
 | 
						|
      goto yyacceptlab;
 | 
						|
 | 
						|
    goto yybackup;
 | 
						|
 | 
						|
    /* Backup.  */
 | 
						|
  yybackup:
 | 
						|
 | 
						|
    /* Try to take a decision without lookahead.  */
 | 
						|
    yyn = yypact_[yystate];
 | 
						|
    if (yy_pact_value_is_default_ (yyn))
 | 
						|
      goto yydefault;
 | 
						|
 | 
						|
    /* Read a lookahead token.  */
 | 
						|
    if (yychar == yyempty_)
 | 
						|
      {
 | 
						|
        YYCDEBUG << "Reading a token: ";
 | 
						|
        yychar = ]b4_c_function_call([yylex], [int],
 | 
						|
                                     [b4_api_PREFIX[STYPE*], [&yylval]][]dnl
 | 
						|
b4_locations_if([, [[location*], [&yylloc]]])dnl
 | 
						|
m4_ifdef([b4_lex_param], [, ]b4_lex_param))[;
 | 
						|
      }
 | 
						|
 | 
						|
    /* Convert token to internal form.  */
 | 
						|
    if (yychar <= yyeof_)
 | 
						|
      {
 | 
						|
	yychar = yytoken = yyeof_;
 | 
						|
	YYCDEBUG << "Now at end of input." << std::endl;
 | 
						|
      }
 | 
						|
    else
 | 
						|
      {
 | 
						|
	yytoken = yytranslate_ (yychar);
 | 
						|
	YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
 | 
						|
      }
 | 
						|
 | 
						|
    /* If the proper action on seeing token YYTOKEN is to reduce or to
 | 
						|
       detect an error, take that action.  */
 | 
						|
    yyn += yytoken;
 | 
						|
    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
 | 
						|
      goto yydefault;
 | 
						|
 | 
						|
    /* Reduce or error.  */
 | 
						|
    yyn = yytable_[yyn];
 | 
						|
    if (yyn <= 0)
 | 
						|
      {
 | 
						|
	if (yy_table_value_is_error_ (yyn))
 | 
						|
	  goto yyerrlab;
 | 
						|
	yyn = -yyn;
 | 
						|
	goto yyreduce;
 | 
						|
      }
 | 
						|
 | 
						|
    /* Shift the lookahead token.  */
 | 
						|
    YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 | 
						|
 | 
						|
    /* Discard the token being shifted.  */
 | 
						|
    yychar = yyempty_;
 | 
						|
 | 
						|
    yysemantic_stack_.push (yylval);
 | 
						|
    yylocation_stack_.push (yylloc);
 | 
						|
 | 
						|
    /* Count tokens shifted since error; after three, turn off error
 | 
						|
       status.  */
 | 
						|
    if (yyerrstatus_)
 | 
						|
      --yyerrstatus_;
 | 
						|
 | 
						|
    yystate = yyn;
 | 
						|
    goto yynewstate;
 | 
						|
 | 
						|
  /*-----------------------------------------------------------.
 | 
						|
  | yydefault -- do the default action for the current state.  |
 | 
						|
  `-----------------------------------------------------------*/
 | 
						|
  yydefault:
 | 
						|
    yyn = yydefact_[yystate];
 | 
						|
    if (yyn == 0)
 | 
						|
      goto yyerrlab;
 | 
						|
    goto yyreduce;
 | 
						|
 | 
						|
  /*-----------------------------.
 | 
						|
  | yyreduce -- Do a reduction.  |
 | 
						|
  `-----------------------------*/
 | 
						|
  yyreduce:
 | 
						|
    yylen = yyr2_[yyn];
 | 
						|
    /* If YYLEN is nonzero, implement the default value of the action:
 | 
						|
       `$$ = $1'.  Otherwise, use the top of the stack.
 | 
						|
 | 
						|
       Otherwise, the following line sets YYVAL to garbage.
 | 
						|
       This behavior is undocumented and Bison
 | 
						|
       users should not rely upon it.  */
 | 
						|
    if (yylen)
 | 
						|
      yyval = yysemantic_stack_[yylen - 1];
 | 
						|
    else
 | 
						|
      yyval = yysemantic_stack_[0];
 | 
						|
 | 
						|
    // Compute the default @@$.
 | 
						|
    {
 | 
						|
      slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
 | 
						|
      YYLLOC_DEFAULT (yyloc, slice, yylen);
 | 
						|
    }
 | 
						|
 | 
						|
    // Perform the reduction.
 | 
						|
    YY_REDUCE_PRINT (yyn);
 | 
						|
    switch (yyn)
 | 
						|
      {
 | 
						|
        ]b4_user_actions[
 | 
						|
      default:
 | 
						|
        break;
 | 
						|
      }
 | 
						|
 | 
						|
    /* User semantic actions sometimes alter yychar, and that requires
 | 
						|
       that yytoken be updated with the new translation.  We take the
 | 
						|
       approach of translating immediately before every use of yytoken.
 | 
						|
       One alternative is translating here after every semantic action,
 | 
						|
       but that translation would be missed if the semantic action
 | 
						|
       invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
 | 
						|
       yychar.  In the case of YYABORT or YYACCEPT, an incorrect
 | 
						|
       destructor might then be invoked immediately.  In the case of
 | 
						|
       YYERROR, subsequent parser actions might lead to an incorrect
 | 
						|
       destructor call or verbose syntax error message before the
 | 
						|
       lookahead is translated.  */
 | 
						|
    YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
 | 
						|
 | 
						|
    yypop_ (yylen);
 | 
						|
    yylen = 0;
 | 
						|
    YY_STACK_PRINT ();
 | 
						|
 | 
						|
    yysemantic_stack_.push (yyval);
 | 
						|
    yylocation_stack_.push (yyloc);
 | 
						|
 | 
						|
    /* Shift the result of the reduction.  */
 | 
						|
    yyn = yyr1_[yyn];
 | 
						|
    yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
 | 
						|
    if (0 <= yystate && yystate <= yylast_
 | 
						|
	&& yycheck_[yystate] == yystate_stack_[0])
 | 
						|
      yystate = yytable_[yystate];
 | 
						|
    else
 | 
						|
      yystate = yydefgoto_[yyn - yyntokens_];
 | 
						|
    goto yynewstate;
 | 
						|
 | 
						|
  /*------------------------------------.
 | 
						|
  | yyerrlab -- here on detecting error |
 | 
						|
  `------------------------------------*/
 | 
						|
  yyerrlab:
 | 
						|
    /* Make sure we have latest lookahead translation.  See comments at
 | 
						|
       user semantic actions for why this is necessary.  */
 | 
						|
    yytoken = yytranslate_ (yychar);
 | 
						|
 | 
						|
    /* If not already recovering from an error, report this error.  */
 | 
						|
    if (!yyerrstatus_)
 | 
						|
      {
 | 
						|
	++yynerrs_;
 | 
						|
	if (yychar == yyempty_)
 | 
						|
	  yytoken = yyempty_;
 | 
						|
	error (yylloc, yysyntax_error_ (yystate, yytoken));
 | 
						|
      }
 | 
						|
 | 
						|
    yyerror_range[1] = yylloc;
 | 
						|
    if (yyerrstatus_ == 3)
 | 
						|
      {
 | 
						|
        /* If just tried and failed to reuse lookahead token after an
 | 
						|
           error, discard it.  */
 | 
						|
        if (yychar <= yyeof_)
 | 
						|
          {
 | 
						|
            /* Return failure if at end of input.  */
 | 
						|
            if (yychar == yyeof_)
 | 
						|
              YYABORT;
 | 
						|
          }
 | 
						|
        else
 | 
						|
          {
 | 
						|
            yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
 | 
						|
            yychar = yyempty_;
 | 
						|
          }
 | 
						|
      }
 | 
						|
 | 
						|
    /* Else will try to reuse lookahead token after shifting the error
 | 
						|
       token.  */
 | 
						|
    goto yyerrlab1;
 | 
						|
 | 
						|
 | 
						|
  /*---------------------------------------------------.
 | 
						|
  | yyerrorlab -- error raised explicitly by YYERROR.  |
 | 
						|
  `---------------------------------------------------*/
 | 
						|
  yyerrorlab:
 | 
						|
 | 
						|
    /* Pacify compilers like GCC when the user code never invokes
 | 
						|
       YYERROR and the label yyerrorlab therefore never appears in user
 | 
						|
       code.  */
 | 
						|
    if (false)
 | 
						|
      goto yyerrorlab;
 | 
						|
 | 
						|
    yyerror_range[1] = yylocation_stack_[yylen - 1];
 | 
						|
    /* Do not reclaim the symbols of the rule which action triggered
 | 
						|
       this YYERROR.  */
 | 
						|
    yypop_ (yylen);
 | 
						|
    yylen = 0;
 | 
						|
    yystate = yystate_stack_[0];
 | 
						|
    goto yyerrlab1;
 | 
						|
 | 
						|
  /*-------------------------------------------------------------.
 | 
						|
  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 | 
						|
  `-------------------------------------------------------------*/
 | 
						|
  yyerrlab1:
 | 
						|
    yyerrstatus_ = 3;	/* Each real token shifted decrements this.  */
 | 
						|
 | 
						|
    for (;;)
 | 
						|
      {
 | 
						|
	yyn = yypact_[yystate];
 | 
						|
	if (!yy_pact_value_is_default_ (yyn))
 | 
						|
	{
 | 
						|
	  yyn += yyterror_;
 | 
						|
	  if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
 | 
						|
	    {
 | 
						|
	      yyn = yytable_[yyn];
 | 
						|
	      if (0 < yyn)
 | 
						|
		break;
 | 
						|
	    }
 | 
						|
	}
 | 
						|
 | 
						|
	/* Pop the current state because it cannot handle the error token.  */
 | 
						|
	if (yystate_stack_.height () == 1)
 | 
						|
	  YYABORT;
 | 
						|
 | 
						|
	yyerror_range[1] = yylocation_stack_[0];
 | 
						|
	yydestruct_ ("Error: popping",
 | 
						|
		     yystos_[yystate],
 | 
						|
		     &yysemantic_stack_[0], &yylocation_stack_[0]);
 | 
						|
	yypop_ ();
 | 
						|
	yystate = yystate_stack_[0];
 | 
						|
	YY_STACK_PRINT ();
 | 
						|
      }
 | 
						|
 | 
						|
    yyerror_range[2] = yylloc;
 | 
						|
    // Using YYLLOC is tempting, but would change the location of
 | 
						|
    // the lookahead.  YYLOC is available though.
 | 
						|
    YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
 | 
						|
    yysemantic_stack_.push (yylval);
 | 
						|
    yylocation_stack_.push (yyloc);
 | 
						|
 | 
						|
    /* Shift the error token.  */
 | 
						|
    YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
 | 
						|
		     &yysemantic_stack_[0], &yylocation_stack_[0]);
 | 
						|
 | 
						|
    yystate = yyn;
 | 
						|
    goto yynewstate;
 | 
						|
 | 
						|
    /* Accept.  */
 | 
						|
  yyacceptlab:
 | 
						|
    yyresult = 0;
 | 
						|
    goto yyreturn;
 | 
						|
 | 
						|
    /* Abort.  */
 | 
						|
  yyabortlab:
 | 
						|
    yyresult = 1;
 | 
						|
    goto yyreturn;
 | 
						|
 | 
						|
  yyreturn:
 | 
						|
    if (yychar != yyempty_)
 | 
						|
      {
 | 
						|
        /* Make sure we have latest lookahead translation.  See comments
 | 
						|
           at user semantic actions for why this is necessary.  */
 | 
						|
        yytoken = yytranslate_ (yychar);
 | 
						|
        yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval,
 | 
						|
                     &yylloc);
 | 
						|
      }
 | 
						|
 | 
						|
    /* Do not reclaim the symbols of the rule which action triggered
 | 
						|
       this YYABORT or YYACCEPT.  */
 | 
						|
    yypop_ (yylen);
 | 
						|
    while (1 < yystate_stack_.height ())
 | 
						|
      {
 | 
						|
        yydestruct_ ("Cleanup: popping",
 | 
						|
                     yystos_[yystate_stack_[0]],
 | 
						|
                     &yysemantic_stack_[0],
 | 
						|
                     &yylocation_stack_[0]);
 | 
						|
        yypop_ ();
 | 
						|
      }
 | 
						|
 | 
						|
    return yyresult;
 | 
						|
    }
 | 
						|
    catch (...)
 | 
						|
      {
 | 
						|
        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
 | 
						|
                 << std::endl;
 | 
						|
        // Do not try to display the values of the reclaimed symbols,
 | 
						|
        // as their printer might throw an exception.
 | 
						|
        if (yychar != yyempty_)
 | 
						|
          {
 | 
						|
            /* Make sure we have latest lookahead translation.  See
 | 
						|
               comments at user semantic actions for why this is
 | 
						|
               necessary.  */
 | 
						|
            yytoken = yytranslate_ (yychar);
 | 
						|
            yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc);
 | 
						|
          }
 | 
						|
 | 
						|
        while (1 < yystate_stack_.height ())
 | 
						|
          {
 | 
						|
            yydestruct_ (YY_NULL,
 | 
						|
                         yystos_[yystate_stack_[0]],
 | 
						|
                         &yysemantic_stack_[0],
 | 
						|
                         &yylocation_stack_[0]);
 | 
						|
            yypop_ ();
 | 
						|
          }
 | 
						|
        throw;
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  // Generate an error message.
 | 
						|
  std::string
 | 
						|
  ]b4_parser_class_name[::yysyntax_error_ (]dnl
 | 
						|
b4_error_verbose_if([int yystate, int yytoken],
 | 
						|
                    [int, int])[)
 | 
						|
  {]b4_error_verbose_if([[
 | 
						|
    std::string yyres;
 | 
						|
    // Number of reported tokens (one for the "unexpected", one per
 | 
						|
    // "expected").
 | 
						|
    size_t yycount = 0;
 | 
						|
    // Its maximum.
 | 
						|
    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
 | 
						|
    // Arguments of yyformat.
 | 
						|
    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
 | 
						|
 | 
						|
    /* There are many possibilities here to consider:
 | 
						|
       - If this state is a consistent state with a default action, then
 | 
						|
         the only way this function was invoked is if the default action
 | 
						|
         is an error action.  In that case, don't check for expected
 | 
						|
         tokens because there are none.
 | 
						|
       - The only way there can be no lookahead present (in yytoken) is
 | 
						|
         if this state is a consistent state with a default action.
 | 
						|
         Thus, detecting the absence of a lookahead is sufficient to
 | 
						|
         determine that there is no unexpected or expected token to
 | 
						|
         report.  In that case, just report a simple "syntax error".
 | 
						|
       - Don't assume there isn't a lookahead just because this state is
 | 
						|
         a consistent state with a default action.  There might have
 | 
						|
         been a previous inconsistent state, consistent state with a
 | 
						|
         non-default action, or user semantic action that manipulated
 | 
						|
         yychar.
 | 
						|
       - Of course, the expected token list depends on states to have
 | 
						|
         correct lookahead information, and it depends on the parser not
 | 
						|
         to perform extra reductions after fetching a lookahead from the
 | 
						|
         scanner and before detecting a syntax error.  Thus, state
 | 
						|
         merging (from LALR or IELR) and default reductions corrupt the
 | 
						|
         expected token list.  However, the list is correct for
 | 
						|
         canonical LR with one exception: it will still contain any
 | 
						|
         token that will not be accepted due to an error action in a
 | 
						|
         later state.
 | 
						|
    */
 | 
						|
    if (yytoken != yyempty_)
 | 
						|
      {
 | 
						|
        yyarg[yycount++] = yytname_[yytoken];
 | 
						|
        int yyn = yypact_[yystate];
 | 
						|
        if (!yy_pact_value_is_default_ (yyn))
 | 
						|
          {
 | 
						|
            /* Start YYX at -YYN if negative to avoid negative indexes in
 | 
						|
               YYCHECK.  In other words, skip the first -YYN actions for
 | 
						|
               this state because they are default actions.  */
 | 
						|
            int yyxbegin = yyn < 0 ? -yyn : 0;
 | 
						|
            /* Stay within bounds of both yycheck and yytname.  */
 | 
						|
            int yychecklim = yylast_ - yyn + 1;
 | 
						|
            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
 | 
						|
            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
 | 
						|
              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
 | 
						|
                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
 | 
						|
                {
 | 
						|
                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
 | 
						|
                    {
 | 
						|
                      yycount = 1;
 | 
						|
                      break;
 | 
						|
                    }
 | 
						|
                  else
 | 
						|
                    yyarg[yycount++] = yytname_[yyx];
 | 
						|
                }
 | 
						|
          }
 | 
						|
      }
 | 
						|
 | 
						|
    char const* yyformat = YY_NULL;
 | 
						|
    switch (yycount)
 | 
						|
      {
 | 
						|
#define YYCASE_(N, S)                         \
 | 
						|
        case N:                               \
 | 
						|
          yyformat = S;                       \
 | 
						|
        break
 | 
						|
        YYCASE_(0, YY_("syntax error"));
 | 
						|
        YYCASE_(1, YY_("syntax error, unexpected %s"));
 | 
						|
        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
 | 
						|
        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
 | 
						|
        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
 | 
						|
        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
 | 
						|
#undef YYCASE_
 | 
						|
      }
 | 
						|
 | 
						|
    // Argument number.
 | 
						|
    size_t yyi = 0;
 | 
						|
    for (char const* yyp = yyformat; *yyp; ++yyp)
 | 
						|
      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
 | 
						|
        {
 | 
						|
          yyres += yytnamerr_ (yyarg[yyi++]);
 | 
						|
          ++yyp;
 | 
						|
        }
 | 
						|
      else
 | 
						|
        yyres += *yyp;
 | 
						|
    return yyres;]], [[
 | 
						|
    return YY_("syntax error");]])[
 | 
						|
  }
 | 
						|
 | 
						|
 | 
						|
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
 | 
						|
     STATE-NUM.  */
 | 
						|
  const ]b4_int_type(b4_pact_ninf, b4_pact_ninf) b4_parser_class_name::yypact_ninf_ = b4_pact_ninf[;
 | 
						|
  const ]b4_int_type_for([b4_pact])[
 | 
						|
  ]b4_parser_class_name[::yypact_[] =
 | 
						|
  {
 | 
						|
    ]b4_pact[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYDEFACT[S] -- default reduction number in state S.  Performed when
 | 
						|
     YYTABLE doesn't specify something else to do.  Zero means the
 | 
						|
     default is an error.  */
 | 
						|
  const ]b4_int_type_for([b4_defact])[
 | 
						|
  ]b4_parser_class_name[::yydefact_[] =
 | 
						|
  {
 | 
						|
    ]b4_defact[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYPGOTO[NTERM-NUM].  */
 | 
						|
  const ]b4_int_type_for([b4_pgoto])[
 | 
						|
  ]b4_parser_class_name[::yypgoto_[] =
 | 
						|
  {
 | 
						|
    ]b4_pgoto[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYDEFGOTO[NTERM-NUM].  */
 | 
						|
  const ]b4_int_type_for([b4_defgoto])[
 | 
						|
  ]b4_parser_class_name[::yydefgoto_[] =
 | 
						|
  {
 | 
						|
    ]b4_defgoto[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
 | 
						|
     positive, shift that token.  If negative, reduce the rule which
 | 
						|
     number is the opposite.  If YYTABLE_NINF_, syntax error.  */
 | 
						|
  const ]b4_int_type(b4_table_ninf, b4_table_ninf) b4_parser_class_name::yytable_ninf_ = b4_table_ninf[;
 | 
						|
  const ]b4_int_type_for([b4_table])[
 | 
						|
  ]b4_parser_class_name[::yytable_[] =
 | 
						|
  {
 | 
						|
    ]b4_table[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYCHECK.  */
 | 
						|
  const ]b4_int_type_for([b4_check])[
 | 
						|
  ]b4_parser_class_name[::yycheck_[] =
 | 
						|
  {
 | 
						|
    ]b4_check[
 | 
						|
  };
 | 
						|
 | 
						|
  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
 | 
						|
     symbol of state STATE-NUM.  */
 | 
						|
  const ]b4_int_type_for([b4_stos])[
 | 
						|
  ]b4_parser_class_name[::yystos_[] =
 | 
						|
  {
 | 
						|
    ]b4_stos[
 | 
						|
  };
 | 
						|
 | 
						|
#if ]b4_api_PREFIX[DEBUG
 | 
						|
  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
 | 
						|
     to YYLEX-NUM.  */
 | 
						|
  const ]b4_int_type_for([b4_toknum])[
 | 
						|
  ]b4_parser_class_name[::yytoken_number_[] =
 | 
						|
  {
 | 
						|
    ]b4_toknum[
 | 
						|
  };
 | 
						|
#endif
 | 
						|
 | 
						|
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 | 
						|
  const ]b4_int_type_for([b4_r1])[
 | 
						|
  ]b4_parser_class_name[::yyr1_[] =
 | 
						|
  {
 | 
						|
    ]b4_r1[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 | 
						|
  const ]b4_int_type_for([b4_r2])[
 | 
						|
  ]b4_parser_class_name[::yyr2_[] =
 | 
						|
  {
 | 
						|
    ]b4_r2[
 | 
						|
  };
 | 
						|
 | 
						|
]b4_token_table_if([], [[#if ]b4_api_PREFIX[DEBUG]])[
 | 
						|
  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
 | 
						|
     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
 | 
						|
  const char*
 | 
						|
  const ]b4_parser_class_name[::yytname_[] =
 | 
						|
  {
 | 
						|
    ]b4_tname[
 | 
						|
  };
 | 
						|
 | 
						|
]b4_token_table_if([[#if ]b4_api_PREFIX[DEBUG]])[
 | 
						|
  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 | 
						|
  const ]b4_parser_class_name[::rhs_number_type
 | 
						|
  ]b4_parser_class_name[::yyrhs_[] =
 | 
						|
  {
 | 
						|
    ]b4_rhs[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
 | 
						|
     YYRHS.  */
 | 
						|
  const ]b4_int_type_for([b4_prhs])[
 | 
						|
  ]b4_parser_class_name[::yyprhs_[] =
 | 
						|
  {
 | 
						|
    ]b4_prhs[
 | 
						|
  };
 | 
						|
 | 
						|
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 | 
						|
  const ]b4_int_type_for([b4_rline])[
 | 
						|
  ]b4_parser_class_name[::yyrline_[] =
 | 
						|
  {
 | 
						|
    ]b4_rline[
 | 
						|
  };
 | 
						|
 | 
						|
  // Print the state stack on the debug stream.
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::yystack_print_ ()
 | 
						|
  {
 | 
						|
    *yycdebug_ << "Stack now";
 | 
						|
    for (state_stack_type::const_iterator i = yystate_stack_.begin ();
 | 
						|
	 i != yystate_stack_.end (); ++i)
 | 
						|
      *yycdebug_ << ' ' << *i;
 | 
						|
    *yycdebug_ << std::endl;
 | 
						|
  }
 | 
						|
 | 
						|
  // Report on the debug stream that the rule \a yyrule is going to be reduced.
 | 
						|
  void
 | 
						|
  ]b4_parser_class_name[::yy_reduce_print_ (int yyrule)
 | 
						|
  {
 | 
						|
    unsigned int yylno = yyrline_[yyrule];
 | 
						|
    int yynrhs = yyr2_[yyrule];
 | 
						|
    /* Print the symbols being reduced, and their result.  */
 | 
						|
    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
 | 
						|
	       << " (line " << yylno << "):" << std::endl;
 | 
						|
    /* The symbols being reduced.  */
 | 
						|
    for (int yyi = 0; yyi < yynrhs; yyi++)
 | 
						|
      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
 | 
						|
		       yyrhs_[yyprhs_[yyrule] + yyi],
 | 
						|
		       &]b4_rhs_value(yynrhs, yyi + 1)[,
 | 
						|
		       &]b4_rhs_location(yynrhs, yyi + 1)[);
 | 
						|
  }
 | 
						|
#endif // ]b4_api_PREFIX[DEBUG
 | 
						|
 | 
						|
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 | 
						|
  ]b4_parser_class_name[::token_number_type
 | 
						|
  ]b4_parser_class_name[::yytranslate_ (int t)
 | 
						|
  {
 | 
						|
    static
 | 
						|
    const token_number_type
 | 
						|
    translate_table[] =
 | 
						|
    {
 | 
						|
      ]b4_translate[
 | 
						|
    };
 | 
						|
    if ((unsigned int) t <= yyuser_token_number_max_)
 | 
						|
      return translate_table[t];
 | 
						|
    else
 | 
						|
      return yyundef_token_;
 | 
						|
  }
 | 
						|
 | 
						|
  const int ]b4_parser_class_name[::yyeof_ = 0;
 | 
						|
  const int ]b4_parser_class_name[::yylast_ = ]b4_last[;
 | 
						|
  const int ]b4_parser_class_name[::yynnts_ = ]b4_nterms_number[;
 | 
						|
  const int ]b4_parser_class_name[::yyempty_ = -2;
 | 
						|
  const int ]b4_parser_class_name[::yyfinal_ = ]b4_final_state_number[;
 | 
						|
  const int ]b4_parser_class_name[::yyterror_ = 1;
 | 
						|
  const int ]b4_parser_class_name[::yyerrcode_ = 256;
 | 
						|
  const int ]b4_parser_class_name[::yyntokens_ = ]b4_tokens_number[;
 | 
						|
 | 
						|
  const unsigned int ]b4_parser_class_name[::yyuser_token_number_max_ = ]b4_user_token_number_max[;
 | 
						|
  const ]b4_parser_class_name[::token_number_type ]b4_parser_class_name[::yyundef_token_ = ]b4_undef_token_number[;
 | 
						|
 | 
						|
]b4_namespace_close[
 | 
						|
]b4_epilogue[]dnl
 | 
						|
b4_output_end()
 |