Blame d4_function/d4_function_parser.tab.cc

Packit a4aae4
// A Bison parser, made by GNU Bison 3.0.4.
Packit a4aae4
Packit a4aae4
// Skeleton implementation for Bison LALR(1) parsers in C++
Packit a4aae4
Packit a4aae4
// Copyright (C) 2002-2015 Free Software Foundation, Inc.
Packit a4aae4
Packit a4aae4
// This program is free software: you can redistribute it and/or modify
Packit a4aae4
// it under the terms of the GNU General Public License as published by
Packit a4aae4
// the Free Software Foundation, either version 3 of the License, or
Packit a4aae4
// (at your option) any later version.
Packit a4aae4
Packit a4aae4
// This program is distributed in the hope that it will be useful,
Packit a4aae4
// but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit a4aae4
// GNU General Public License for more details.
Packit a4aae4
Packit a4aae4
// You should have received a copy of the GNU General Public License
Packit a4aae4
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit a4aae4
Packit a4aae4
// As a special exception, you may create a larger work that contains
Packit a4aae4
// part or all of the Bison parser skeleton and distribute that work
Packit a4aae4
// under terms of your choice, so long as that work isn't itself a
Packit a4aae4
// parser generator using the skeleton or a modified version thereof
Packit a4aae4
// as a parser skeleton.  Alternatively, if you modify or redistribute
Packit a4aae4
// the parser skeleton itself, you may (at your option) remove this
Packit a4aae4
// special exception, which will cause the skeleton and the resulting
Packit a4aae4
// Bison output files to be licensed under the GNU General Public
Packit a4aae4
// License without this special exception.
Packit a4aae4
Packit a4aae4
// This special exception was added by the Free Software Foundation in
Packit a4aae4
// version 2.2 of Bison.
Packit a4aae4
Packit a4aae4
Packit a4aae4
// First part of user declarations.
Packit a4aae4
Packit a4aae4
#line 37 "d4_function_parser.tab.cc" // lalr1.cc:404
Packit a4aae4
Packit a4aae4
# ifndef YY_NULLPTR
Packit a4aae4
#  if defined __cplusplus && 201103L <= __cplusplus
Packit a4aae4
#   define YY_NULLPTR nullptr
Packit a4aae4
#  else
Packit a4aae4
#   define YY_NULLPTR 0
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
#include "d4_function_parser.tab.hh"
Packit a4aae4
Packit a4aae4
// User implementation prologue.
Packit a4aae4
Packit a4aae4
#line 51 "d4_function_parser.tab.cc" // lalr1.cc:412
Packit a4aae4
// Unqualified %code blocks.
Packit a4aae4
#line 77 "d4_function_parser.yy" // lalr1.cc:413
Packit a4aae4
Packit a4aae4
    #include "BaseType.h"
Packit a4aae4
    #include "DMR.h"
Packit a4aae4
    #include "D4RValue.h"
Packit a4aae4
    #include "ServerFunctionsList.h"
Packit a4aae4
   
Packit a4aae4
    #include "parser-util.h"
Packit a4aae4
Packit a4aae4
    /* include for all driver functions */
Packit a4aae4
    #include "D4FunctionEvaluator.h"
Packit a4aae4
Packit a4aae4
    using namespace libdap ;
Packit a4aae4
    
Packit a4aae4
    /* this is silly, but I can't figure out a way around it */
Packit a4aae4
    static int yylex(libdap::D4FunctionParser::semantic_type *yylval,
Packit a4aae4
                     libdap::location *loc,
Packit a4aae4
                     libdap::D4FunctionScanner  &scanner,
Packit a4aae4
                     libdap::D4FunctionEvaluator   &evaluator);
Packit a4aae4
Packit a4aae4
#line 73 "d4_function_parser.tab.cc" // lalr1.cc:413
Packit a4aae4
Packit a4aae4
Packit a4aae4
#ifndef YY_
Packit a4aae4
# if defined YYENABLE_NLS && YYENABLE_NLS
Packit a4aae4
#  if ENABLE_NLS
Packit a4aae4
#   include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
Packit a4aae4
#   define YY_(msgid) dgettext ("bison-runtime", msgid)
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
# ifndef YY_
Packit a4aae4
#  define YY_(msgid) msgid
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
Packit a4aae4
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
Packit a4aae4
   If N is 0, then set CURRENT to the empty location which ends
Packit a4aae4
   the previous symbol: RHS[0] (always defined).  */
Packit a4aae4
Packit a4aae4
# ifndef YYLLOC_DEFAULT
Packit a4aae4
#  define YYLLOC_DEFAULT(Current, Rhs, N)                               \
Packit a4aae4
    do                                                                  \
Packit a4aae4
      if (N)                                                            \
Packit a4aae4
        {                                                               \
Packit a4aae4
          (Current).begin  = YYRHSLOC (Rhs, 1).begin;                   \
Packit a4aae4
          (Current).end    = YYRHSLOC (Rhs, N).end;                     \
Packit a4aae4
        }                                                               \
Packit a4aae4
      else                                                              \
Packit a4aae4
        {                                                               \
Packit a4aae4
          (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end;      \
Packit a4aae4
        }                                                               \
Packit a4aae4
    while (/*CONSTCOND*/ false)
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
// Suppress unused-variable warnings by "using" E.
Packit a4aae4
#define YYUSE(E) ((void) (E))
Packit a4aae4
Packit a4aae4
// Enable debugging if requested.
Packit a4aae4
#if YYDEBUG
Packit a4aae4
Packit a4aae4
// A pseudo ostream that takes yydebug_ into account.
Packit a4aae4
# define YYCDEBUG if (yydebug_) (*yycdebug_)
Packit a4aae4
Packit a4aae4
# define YY_SYMBOL_PRINT(Title, Symbol)         \
Packit a4aae4
  do {                                          \
Packit a4aae4
    if (yydebug_)                               \
Packit a4aae4
    {                                           \
Packit a4aae4
      *yycdebug_ << Title << ' ';               \
Packit a4aae4
      yy_print_ (*yycdebug_, Symbol);           \
Packit a4aae4
      *yycdebug_ << std::endl;                  \
Packit a4aae4
    }                                           \
Packit a4aae4
  } while (false)
Packit a4aae4
Packit a4aae4
# define YY_REDUCE_PRINT(Rule)          \
Packit a4aae4
  do {                                  \
Packit a4aae4
    if (yydebug_)                       \
Packit a4aae4
      yy_reduce_print_ (Rule);          \
Packit a4aae4
  } while (false)
Packit a4aae4
Packit a4aae4
# define YY_STACK_PRINT()               \
Packit a4aae4
  do {                                  \
Packit a4aae4
    if (yydebug_)                       \
Packit a4aae4
      yystack_print_ ();                \
Packit a4aae4
  } while (false)
Packit a4aae4
Packit a4aae4
#else // !YYDEBUG
Packit a4aae4
Packit a4aae4
# define YYCDEBUG if (false) std::cerr
Packit a4aae4
# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE(Symbol)
Packit a4aae4
# define YY_REDUCE_PRINT(Rule)           static_cast<void>(0)
Packit a4aae4
# define YY_STACK_PRINT()                static_cast<void>(0)
Packit a4aae4
Packit a4aae4
#endif // !YYDEBUG
Packit a4aae4
Packit a4aae4
#define yyerrok         (yyerrstatus_ = 0)
Packit a4aae4
#define yyclearin       (yyla.clear ())
Packit a4aae4
Packit a4aae4
#define YYACCEPT        goto yyacceptlab
Packit a4aae4
#define YYABORT         goto yyabortlab
Packit a4aae4
#define YYERROR         goto yyerrorlab
Packit a4aae4
#define YYRECOVERING()  (!!yyerrstatus_)
Packit a4aae4
Packit a4aae4
#line 34 "d4_function_parser.yy" // lalr1.cc:479
Packit a4aae4
namespace libdap {
Packit a4aae4
#line 159 "d4_function_parser.tab.cc" // lalr1.cc:479
Packit a4aae4
Packit a4aae4
  /* Return YYSTR after stripping away unnecessary quotes and
Packit a4aae4
     backslashes, so that it's suitable for yyerror.  The heuristic is
Packit a4aae4
     that double-quoting is unnecessary unless the string contains an
Packit a4aae4
     apostrophe, a comma, or backslash (other than backslash-backslash).
Packit a4aae4
     YYSTR is taken from yytname.  */
Packit a4aae4
  std::string
Packit a4aae4
  D4FunctionParser::yytnamerr_ (const char *yystr)
Packit a4aae4
  {
Packit a4aae4
    if (*yystr == '"')
Packit a4aae4
      {
Packit a4aae4
        std::string yyr = "";
Packit a4aae4
        char const *yyp = yystr;
Packit a4aae4
Packit a4aae4
        for (;;)
Packit a4aae4
          switch (*++yyp)
Packit a4aae4
            {
Packit a4aae4
            case '\'':
Packit a4aae4
            case ',':
Packit a4aae4
              goto do_not_strip_quotes;
Packit a4aae4
Packit a4aae4
            case '\\':
Packit a4aae4
              if (*++yyp != '\\')
Packit a4aae4
                goto do_not_strip_quotes;
Packit a4aae4
              // Fall through.
Packit a4aae4
            default:
Packit a4aae4
              yyr += *yyp;
Packit a4aae4
              break;
Packit a4aae4
Packit a4aae4
            case '"':
Packit a4aae4
              return yyr;
Packit a4aae4
            }
Packit a4aae4
      do_not_strip_quotes: ;
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
    return yystr;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
Packit a4aae4
  /// Build a parser object.
Packit a4aae4
  D4FunctionParser::D4FunctionParser (D4FunctionScanner  &scanner_yyarg, D4FunctionEvaluator  &evaluator_yyarg)
Packit a4aae4
    :
Packit a4aae4
#if YYDEBUG
Packit a4aae4
      yydebug_ (false),
Packit a4aae4
      yycdebug_ (&std::cerr),
Packit a4aae4
#endif
Packit a4aae4
      scanner (scanner_yyarg),
Packit a4aae4
      evaluator (evaluator_yyarg)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  D4FunctionParser::~D4FunctionParser ()
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
Packit a4aae4
  /*---------------.
Packit a4aae4
  | Symbol types.  |
Packit a4aae4
  `---------------*/
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::syntax_error::syntax_error (const location_type& l, const std::string& m)
Packit a4aae4
    : std::runtime_error (m)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  // basic_symbol.
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol ()
Packit a4aae4
    : value ()
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (const basic_symbol& other)
Packit a4aae4
    : Base (other)
Packit a4aae4
    , value ()
Packit a4aae4
    , location (other.location)
Packit a4aae4
  {
Packit a4aae4
      switch (other.type_get ())
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        value.copy< D4Function > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        value.copy< D4RValue* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        value.copy< D4RValueList* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        value.copy< std::string > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        value.copy< std::vector<dods_byte>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_float32>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_float64>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int16>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int32>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int64>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int8>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint16>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint32>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint64>* > (other.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const semantic_type& v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value ()
Packit a4aae4
    , location (l)
Packit a4aae4
  {
Packit a4aae4
    (void) v;
Packit a4aae4
      switch (this->type_get ())
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        value.copy< D4Function > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        value.copy< D4RValue* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        value.copy< D4RValueList* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        value.copy< std::string > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        value.copy< std::vector<dods_byte>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_float32>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_float64>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int16>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int32>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int64>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int8>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint16>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint32>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint64>* > (v);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
Packit a4aae4
  // Implementation of basic_symbol constructor for each type.
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value ()
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const D4Function v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const D4RValue* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const D4RValueList* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_byte>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_float32>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_float64>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int16>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int32>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int64>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_int8>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_uint16>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_uint32>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::vector<dods_uint64>* v, const location_type& l)
Packit a4aae4
    : Base (t)
Packit a4aae4
    , value (v)
Packit a4aae4
    , location (l)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::~basic_symbol ()
Packit a4aae4
  {
Packit a4aae4
    clear ();
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::clear ()
Packit a4aae4
  {
Packit a4aae4
    // User destructor.
Packit a4aae4
    symbol_number_type yytype = this->type_get ();
Packit a4aae4
    basic_symbol<Base>& yysym = *this;
Packit a4aae4
    (void) yysym;
Packit a4aae4
    switch (yytype)
Packit a4aae4
    {
Packit a4aae4
   default:
Packit a4aae4
      break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // Type destructor.
Packit a4aae4
    switch (yytype)
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        value.template destroy< D4Function > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        value.template destroy< D4RValue* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        value.template destroy< D4RValueList* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        value.template destroy< std::string > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_byte>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_float32>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_float64>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_int16>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_int32>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_int64>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_int8>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_uint16>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_uint32>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        value.template destroy< std::vector<dods_uint64>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    Base::clear ();
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  bool
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::empty () const
Packit a4aae4
  {
Packit a4aae4
    return Base::type_get () == empty_symbol;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::basic_symbol<Base>::move (basic_symbol& s)
Packit a4aae4
  {
Packit a4aae4
    super_type::move(s);
Packit a4aae4
      switch (this->type_get ())
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        value.move< D4Function > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        value.move< D4RValue* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        value.move< D4RValueList* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        value.move< std::string > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        value.move< std::vector<dods_byte>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        value.move< std::vector<dods_float32>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        value.move< std::vector<dods_float64>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        value.move< std::vector<dods_int16>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        value.move< std::vector<dods_int32>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        value.move< std::vector<dods_int64>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        value.move< std::vector<dods_int8>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        value.move< std::vector<dods_uint16>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        value.move< std::vector<dods_uint32>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        value.move< std::vector<dods_uint64>* > (s.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    location = s.location;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  // by_type.
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::by_type::by_type ()
Packit a4aae4
    : type (empty_symbol)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::by_type::by_type (const by_type& other)
Packit a4aae4
    : type (other.type)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::by_type::by_type (token_type t)
Packit a4aae4
    : type (yytranslate_ (t))
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::by_type::clear ()
Packit a4aae4
  {
Packit a4aae4
    type = empty_symbol;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::by_type::move (by_type& that)
Packit a4aae4
  {
Packit a4aae4
    type = that.type;
Packit a4aae4
    that.clear ();
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  int
Packit a4aae4
  D4FunctionParser::by_type::type_get () const
Packit a4aae4
  {
Packit a4aae4
    return type;
Packit a4aae4
  }
Packit a4aae4
  // Implementation of make_symbol for each symbol type.
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_END (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::END, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_WORD (const std::string& v, const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::WORD, v, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_STRING (const std::string& v, const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::STRING, v, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_SEMICOLON (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::SEMICOLON, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_COLON (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::COLON, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_LPAREN (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::LPAREN, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_RPAREN (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::RPAREN, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_COMMA (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::COMMA, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_GROUP_SEP (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::GROUP_SEP, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_PATH_SEP (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::PATH_SEP, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_BYTE (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_BYTE, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_UINT8 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_UINT8, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_INT8 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_INT8, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_UINT16 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_UINT16, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_INT16 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_INT16, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_UINT32 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_UINT32, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_INT32 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_INT32, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_UINT64 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_UINT64, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_INT64 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_INT64, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_FLOAT32 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_FLOAT32, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  D4FunctionParser::symbol_type
Packit a4aae4
  D4FunctionParser::make_DOLLAR_FLOAT64 (const location_type& l)
Packit a4aae4
  {
Packit a4aae4
    return symbol_type (token::DOLLAR_FLOAT64, l);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
Packit a4aae4
Packit a4aae4
  // by_state.
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::by_state::by_state ()
Packit a4aae4
    : state (empty_state)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::by_state::by_state (const by_state& other)
Packit a4aae4
    : state (other.state)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::by_state::clear ()
Packit a4aae4
  {
Packit a4aae4
    state = empty_state;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::by_state::move (by_state& that)
Packit a4aae4
  {
Packit a4aae4
    state = that.state;
Packit a4aae4
    that.clear ();
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::by_state::by_state (state_type s)
Packit a4aae4
    : state (s)
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::symbol_number_type
Packit a4aae4
  D4FunctionParser::by_state::type_get () const
Packit a4aae4
  {
Packit a4aae4
    if (state == empty_state)
Packit a4aae4
      return empty_symbol;
Packit a4aae4
    else
Packit a4aae4
      return yystos_[state];
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::stack_symbol_type::stack_symbol_type ()
Packit a4aae4
  {}
Packit a4aae4
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
Packit a4aae4
    : super_type (s, that.location)
Packit a4aae4
  {
Packit a4aae4
      switch (that.type_get ())
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        value.move< D4Function > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        value.move< D4RValue* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        value.move< D4RValueList* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        value.move< std::string > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        value.move< std::vector<dods_byte>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        value.move< std::vector<dods_float32>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        value.move< std::vector<dods_float64>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        value.move< std::vector<dods_int16>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        value.move< std::vector<dods_int32>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        value.move< std::vector<dods_int64>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        value.move< std::vector<dods_int8>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        value.move< std::vector<dods_uint16>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        value.move< std::vector<dods_uint32>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        value.move< std::vector<dods_uint64>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // that is emptied.
Packit a4aae4
    that.type = empty_symbol;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::stack_symbol_type&
Packit a4aae4
  D4FunctionParser::stack_symbol_type::operator= (const stack_symbol_type& that)
Packit a4aae4
  {
Packit a4aae4
    state = that.state;
Packit a4aae4
      switch (that.type_get ())
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        value.copy< D4Function > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        value.copy< D4RValue* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        value.copy< D4RValueList* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        value.copy< std::string > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        value.copy< std::vector<dods_byte>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_float32>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_float64>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int16>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int32>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int64>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        value.copy< std::vector<dods_int8>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint16>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint32>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        value.copy< std::vector<dods_uint64>* > (that.value);
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    location = that.location;
Packit a4aae4
    return *this;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
Packit a4aae4
  template <typename Base>
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
Packit a4aae4
  {
Packit a4aae4
    if (yymsg)
Packit a4aae4
      YY_SYMBOL_PRINT (yymsg, yysym);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
#if YYDEBUG
Packit a4aae4
  template <typename Base>
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yy_print_ (std::ostream& yyo,
Packit a4aae4
                                     const basic_symbol<Base>& yysym) const
Packit a4aae4
  {
Packit a4aae4
    std::ostream& yyoutput = yyo;
Packit a4aae4
    YYUSE (yyoutput);
Packit a4aae4
    symbol_number_type yytype = yysym.type_get ();
Packit a4aae4
    // Avoid a (spurious) G++ 4.8 warning about "array subscript is
Packit a4aae4
    // below array bounds".
Packit a4aae4
    if (yysym.empty ())
Packit a4aae4
      std::abort ();
Packit a4aae4
    yyo << (yytype < yyntokens_ ? "token" : "nterm")
Packit a4aae4
        << ' ' << yytname_[yytype] << " ("
Packit a4aae4
        << yysym.location << ": ";
Packit a4aae4
    YYUSE (yytype);
Packit a4aae4
    yyo << ')';
Packit a4aae4
  }
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yypush_ (const char* m, state_type s, symbol_type& sym)
Packit a4aae4
  {
Packit a4aae4
    stack_symbol_type t (s, sym);
Packit a4aae4
    yypush_ (m, t);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yypush_ (const char* m, stack_symbol_type& s)
Packit a4aae4
  {
Packit a4aae4
    if (m)
Packit a4aae4
      YY_SYMBOL_PRINT (m, s);
Packit a4aae4
    yystack_.push (s);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yypop_ (unsigned int n)
Packit a4aae4
  {
Packit a4aae4
    yystack_.pop (n);
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
#if YYDEBUG
Packit a4aae4
  std::ostream&
Packit a4aae4
  D4FunctionParser::debug_stream () const
Packit a4aae4
  {
Packit a4aae4
    return *yycdebug_;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::set_debug_stream (std::ostream& o)
Packit a4aae4
  {
Packit a4aae4
    yycdebug_ = &o;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
Packit a4aae4
  D4FunctionParser::debug_level_type
Packit a4aae4
  D4FunctionParser::debug_level () const
Packit a4aae4
  {
Packit a4aae4
    return yydebug_;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::set_debug_level (debug_level_type l)
Packit a4aae4
  {
Packit a4aae4
    yydebug_ = l;
Packit a4aae4
  }
Packit a4aae4
#endif // YYDEBUG
Packit a4aae4
Packit a4aae4
  inline D4FunctionParser::state_type
Packit a4aae4
  D4FunctionParser::yy_lr_goto_state_ (state_type yystate, int yysym)
Packit a4aae4
  {
Packit a4aae4
    int yyr = yypgoto_[yysym - yyntokens_] + yystate;
Packit a4aae4
    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
Packit a4aae4
      return yytable_[yyr];
Packit a4aae4
    else
Packit a4aae4
      return yydefgoto_[yysym - yyntokens_];
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline bool
Packit a4aae4
  D4FunctionParser::yy_pact_value_is_default_ (int yyvalue)
Packit a4aae4
  {
Packit a4aae4
    return yyvalue == yypact_ninf_;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  inline bool
Packit a4aae4
  D4FunctionParser::yy_table_value_is_error_ (int yyvalue)
Packit a4aae4
  {
Packit a4aae4
    return yyvalue == yytable_ninf_;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  int
Packit a4aae4
  D4FunctionParser::parse ()
Packit a4aae4
  {
Packit a4aae4
    // State.
Packit a4aae4
    int yyn;
Packit a4aae4
    /// Length of the RHS of the rule being reduced.
Packit a4aae4
    int yylen = 0;
Packit a4aae4
Packit a4aae4
    // Error handling.
Packit a4aae4
    int yynerrs_ = 0;
Packit a4aae4
    int yyerrstatus_ = 0;
Packit a4aae4
Packit a4aae4
    /// The lookahead symbol.
Packit a4aae4
    symbol_type yyla;
Packit a4aae4
Packit a4aae4
    /// The locations where the error started and ended.
Packit a4aae4
    stack_symbol_type yyerror_range[3];
Packit a4aae4
Packit a4aae4
    /// The return value of parse ().
Packit a4aae4
    int yyresult;
Packit a4aae4
Packit a4aae4
    // FIXME: This shoud be completely indented.  It is not yet to
Packit a4aae4
    // avoid gratuitous conflicts when merging into the master branch.
Packit a4aae4
    try
Packit a4aae4
      {
Packit a4aae4
    YYCDEBUG << "Starting parse" << std::endl;
Packit a4aae4
Packit a4aae4
Packit a4aae4
    // User initialization code.
Packit a4aae4
    #line 69 "d4_function_parser.yy" // lalr1.cc:745
Packit a4aae4
{
Packit a4aae4
    // Initialize the initial location. This is printed when the parser builds
Packit a4aae4
    // its own error messages - when the parse fails as opposed to when the 
Packit a4aae4
    // function(s) name(s) a missing variable, ...
Packit a4aae4
Packit a4aae4
    yyla.location.initialize (evaluator.expression());
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
#line 1301 "d4_function_parser.tab.cc" // lalr1.cc:745
Packit a4aae4
Packit a4aae4
    /* Initialize the stack.  The initial state will be set in
Packit a4aae4
       yynewstate, since the latter expects the semantical and the
Packit a4aae4
       location values to have been already stored, initialize these
Packit a4aae4
       stacks with a primary value.  */
Packit a4aae4
    yystack_.clear ();
Packit a4aae4
    yypush_ (YY_NULLPTR, 0, yyla);
Packit a4aae4
Packit a4aae4
    // A new symbol was pushed on the stack.
Packit a4aae4
  yynewstate:
Packit a4aae4
    YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
Packit a4aae4
Packit a4aae4
    // Accept?
Packit a4aae4
    if (yystack_[0].state == yyfinal_)
Packit a4aae4
      goto yyacceptlab;
Packit a4aae4
Packit a4aae4
    goto yybackup;
Packit a4aae4
Packit a4aae4
    // Backup.
Packit a4aae4
  yybackup:
Packit a4aae4
Packit a4aae4
    // Try to take a decision without lookahead.
Packit a4aae4
    yyn = yypact_[yystack_[0].state];
Packit a4aae4
    if (yy_pact_value_is_default_ (yyn))
Packit a4aae4
      goto yydefault;
Packit a4aae4
Packit a4aae4
    // Read a lookahead token.
Packit a4aae4
    if (yyla.empty ())
Packit a4aae4
      {
Packit a4aae4
        YYCDEBUG << "Reading a token: ";
Packit a4aae4
        try
Packit a4aae4
          {
Packit a4aae4
            yyla.type = yytranslate_ (yylex (&yyla.value, &yyla.location, scanner, evaluator));
Packit a4aae4
          }
Packit a4aae4
        catch (const syntax_error& yyexc)
Packit a4aae4
          {
Packit a4aae4
            error (yyexc);
Packit a4aae4
            goto yyerrlab1;
Packit a4aae4
          }
Packit a4aae4
      }
Packit a4aae4
    YY_SYMBOL_PRINT ("Next token is", yyla);
Packit a4aae4
Packit a4aae4
    /* If the proper action on seeing token YYLA.TYPE is to reduce or
Packit a4aae4
       to detect an error, take that action.  */
Packit a4aae4
    yyn += yyla.type_get ();
Packit a4aae4
    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
Packit a4aae4
      goto yydefault;
Packit a4aae4
Packit a4aae4
    // Reduce or error.
Packit a4aae4
    yyn = yytable_[yyn];
Packit a4aae4
    if (yyn <= 0)
Packit a4aae4
      {
Packit a4aae4
        if (yy_table_value_is_error_ (yyn))
Packit a4aae4
          goto yyerrlab;
Packit a4aae4
        yyn = -yyn;
Packit a4aae4
        goto yyreduce;
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
    // Count tokens shifted since error; after three, turn off error status.
Packit a4aae4
    if (yyerrstatus_)
Packit a4aae4
      --yyerrstatus_;
Packit a4aae4
Packit a4aae4
    // Shift the lookahead token.
Packit a4aae4
    yypush_ ("Shifting", yyn, yyla);
Packit a4aae4
    goto yynewstate;
Packit a4aae4
Packit a4aae4
  /*-----------------------------------------------------------.
Packit a4aae4
  | yydefault -- do the default action for the current state.  |
Packit a4aae4
  `-----------------------------------------------------------*/
Packit a4aae4
  yydefault:
Packit a4aae4
    yyn = yydefact_[yystack_[0].state];
Packit a4aae4
    if (yyn == 0)
Packit a4aae4
      goto yyerrlab;
Packit a4aae4
    goto yyreduce;
Packit a4aae4
Packit a4aae4
  /*-----------------------------.
Packit a4aae4
  | yyreduce -- Do a reduction.  |
Packit a4aae4
  `-----------------------------*/
Packit a4aae4
  yyreduce:
Packit a4aae4
    yylen = yyr2_[yyn];
Packit a4aae4
    {
Packit a4aae4
      stack_symbol_type yylhs;
Packit a4aae4
      yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
Packit a4aae4
      /* Variants are always initialized to an empty instance of the
Packit a4aae4
         correct type. The default '$$ = $1' action is NOT applied
Packit a4aae4
         when using variants.  */
Packit a4aae4
        switch (yyr1_[yyn])
Packit a4aae4
    {
Packit a4aae4
      case 7: // "function name"
Packit a4aae4
      case 44: // fname
Packit a4aae4
        yylhs.value.build< D4Function > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 5: // "argument"
Packit a4aae4
      case 6: // "function"
Packit a4aae4
      case 8: // "variable or constant"
Packit a4aae4
      case 9: // "array constant"
Packit a4aae4
      case 43: // function
Packit a4aae4
      case 46: // arg
Packit a4aae4
      case 47: // variable_or_constant
Packit a4aae4
      case 48: // array_constant
Packit a4aae4
        yylhs.value.build< D4RValue* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 3: // "functions"
Packit a4aae4
      case 4: // "arguments"
Packit a4aae4
      case 42: // functions
Packit a4aae4
      case 45: // args
Packit a4aae4
        yylhs.value.build< D4RValueList* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 20: // "word"
Packit a4aae4
      case 21: // "string"
Packit a4aae4
      case 60: // id
Packit a4aae4
      case 61: // group
Packit a4aae4
      case 62: // path
Packit a4aae4
      case 63: // name
Packit a4aae4
        yylhs.value.build< std::string > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 10: // "fast byte arg list"
Packit a4aae4
      case 50: // fast_byte_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_byte>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 18: // "fast float32 arg list"
Packit a4aae4
      case 58: // fast_float32_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_float32>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 19: // "fast float64 arg list"
Packit a4aae4
      case 59: // fast_float64_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_float64>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 13: // "fast int16 arg list"
Packit a4aae4
      case 53: // fast_int16_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_int16>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 15: // "fast int32 arg list"
Packit a4aae4
      case 55: // fast_int32_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_int32>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 17: // "fast int64 arg list"
Packit a4aae4
      case 57: // fast_int64_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_int64>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 11: // "fast int8 arg list"
Packit a4aae4
      case 51: // fast_int8_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_int8>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 12: // "fast uint16 arg list"
Packit a4aae4
      case 52: // fast_uint16_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_uint16>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 14: // "fast uint32 arg list"
Packit a4aae4
      case 54: // fast_uint32_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_uint32>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      case 16: // "fast uint64 arg list"
Packit a4aae4
      case 56: // fast_uint64_arg_list
Packit a4aae4
        yylhs.value.build< std::vector<dods_uint64>* > ();
Packit a4aae4
        break;
Packit a4aae4
Packit a4aae4
      default:
Packit a4aae4
        break;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
Packit a4aae4
      // Compute the default @$.
Packit a4aae4
      {
Packit a4aae4
        slice<stack_symbol_type, stack_type> slice (yystack_, yylen);
Packit a4aae4
        YYLLOC_DEFAULT (yylhs.location, slice, yylen);
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
      // Perform the reduction.
Packit a4aae4
      YY_REDUCE_PRINT (yyn);
Packit a4aae4
      try
Packit a4aae4
        {
Packit a4aae4
          switch (yyn)
Packit a4aae4
            {
Packit a4aae4
  case 2:
Packit a4aae4
#line 156 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    { 
Packit a4aae4
    evaluator.set_result(yystack_[0].value.as< D4RValueList* > ()); 
Packit a4aae4
}
Packit a4aae4
#line 1494 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 3:
Packit a4aae4
#line 162 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValueList* > () = new D4RValueList(yystack_[0].value.as< D4RValue* > ()); 
Packit a4aae4
}
Packit a4aae4
#line 1502 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 4:
Packit a4aae4
#line 166 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    { 
Packit a4aae4
    yystack_[2].value.as< D4RValueList* > ()->add_rvalue(yystack_[0].value.as< D4RValue* > ());
Packit a4aae4
    yylhs.value.as< D4RValueList* > () = yystack_[2].value.as< D4RValueList* > (); 
Packit a4aae4
}
Packit a4aae4
#line 1511 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 5:
Packit a4aae4
#line 173 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    { 
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(yystack_[3].value.as< D4Function > (), yystack_[1].value.as< D4RValueList* > ()); // Build a D4RValue from a D4Function pointer and a D4RValueList 
Packit a4aae4
}
Packit a4aae4
#line 1519 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 6:
Packit a4aae4
#line 179 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    { 
Packit a4aae4
    D4Function f;
Packit a4aae4
    if (!evaluator.sf_list()->find_function(yystack_[0].value.as< std::string > (), &f)) {
Packit a4aae4
        // ...cloud use @1.{first,last}_column in these error messages.
Packit a4aae4
        throw Error(malformed_expr, "'" + yystack_[0].value.as< std::string > () + "' is not a registered DAP4 server function.");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    yylhs.value.as< D4Function > () = f;
Packit a4aae4
}
Packit a4aae4
#line 1533 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 7:
Packit a4aae4
#line 191 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    { 
Packit a4aae4
    yylhs.value.as< D4RValueList* > () = new D4RValueList(yystack_[0].value.as< D4RValue* > ()); // build a D4RValueList from the D4RValue
Packit a4aae4
}
Packit a4aae4
#line 1541 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 8:
Packit a4aae4
#line 195 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    { 
Packit a4aae4
    yystack_[2].value.as< D4RValueList* > ()->add_rvalue(yystack_[0].value.as< D4RValue* > ());
Packit a4aae4
    yylhs.value.as< D4RValueList* > () = yystack_[2].value.as< D4RValueList* > (); // Append the D4RValue ($3) to the D4RValueList ($1), then return
Packit a4aae4
}
Packit a4aae4
#line 1550 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 9:
Packit a4aae4
#line 202 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = yystack_[0].value.as< D4RValue* > ();
Packit a4aae4
}
Packit a4aae4
#line 1558 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 10:
Packit a4aae4
#line 206 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = yystack_[0].value.as< D4RValue* > ();
Packit a4aae4
}
Packit a4aae4
#line 1566 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 11:
Packit a4aae4
#line 210 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = yystack_[0].value.as< D4RValue* > ();
Packit a4aae4
}
Packit a4aae4
#line 1574 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 12:
Packit a4aae4
#line 216 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    D4RValue *rvalue = evaluator.build_rvalue(yystack_[0].value.as< std::string > ());
Packit a4aae4
    if (!rvalue) {
Packit a4aae4
        throw Error(malformed_expr, "'" + yystack_[0].value.as< std::string > () + "' is not a variable, number or string.");
Packit a4aae4
    }
Packit a4aae4
    
Packit a4aae4
    yylhs.value.as< D4RValue* > () = rvalue;
Packit a4aae4
}
Packit a4aae4
#line 1587 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 13:
Packit a4aae4
#line 228 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_byte>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_byte>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1596 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 14:
Packit a4aae4
#line 234 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_byte>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_byte>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1605 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 15:
Packit a4aae4
#line 240 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int8>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_int8>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1614 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 16:
Packit a4aae4
#line 246 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_uint16>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_uint16>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1623 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 17:
Packit a4aae4
#line 252 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int16>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_int16>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1632 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 18:
Packit a4aae4
#line 258 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_uint32>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_uint32>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1641 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 19:
Packit a4aae4
#line 264 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int32>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_int32>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1650 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 20:
Packit a4aae4
#line 270 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_uint64>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_uint64>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1659 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 21:
Packit a4aae4
#line 276 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_int64>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_int64>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1668 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 22:
Packit a4aae4
#line 282 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_float32>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_float32>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1677 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 23:
Packit a4aae4
#line 288 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< D4RValue* > () = new D4RValue(*(yystack_[1].value.as< std::vector<dods_float64>* > ()));
Packit a4aae4
    delete yystack_[1].value.as< std::vector<dods_float64>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1686 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 24:
Packit a4aae4
#line 300 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    evaluator.set_arg_length_hint(get_uint64(yystack_[0].value.as< std::string > ().c_str()));
Packit a4aae4
}
Packit a4aae4
#line 1694 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 25:
Packit a4aae4
#line 306 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_byte>* > () = evaluator.init_arg_list(dods_byte(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1702 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 26:
Packit a4aae4
#line 310 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_byte>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_byte>* > () = yystack_[2].value.as< std::vector<dods_byte>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1711 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 27:
Packit a4aae4
#line 317 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_int8>* > () = evaluator.init_arg_list(dods_int8(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1719 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 28:
Packit a4aae4
#line 321 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_int8>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_int8>* > () = yystack_[2].value.as< std::vector<dods_int8>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1728 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 29:
Packit a4aae4
#line 328 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_uint16>* > () = evaluator.init_arg_list(dods_uint16(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1736 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 30:
Packit a4aae4
#line 332 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_uint16>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_uint16>* > () = yystack_[2].value.as< std::vector<dods_uint16>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1745 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 31:
Packit a4aae4
#line 339 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_int16>* > () = evaluator.init_arg_list(dods_int16(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1753 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 32:
Packit a4aae4
#line 343 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_int16>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_int16>* > () = yystack_[2].value.as< std::vector<dods_int16>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1762 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 33:
Packit a4aae4
#line 350 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_uint32>* > () = evaluator.init_arg_list(dods_uint32(strtoul(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1770 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 34:
Packit a4aae4
#line 354 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_uint32>* > ()->push_back(strtoul(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_uint32>* > () = yystack_[2].value.as< std::vector<dods_uint32>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1779 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 35:
Packit a4aae4
#line 360 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_int32>* > () = evaluator.init_arg_list(dods_int32(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1787 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 36:
Packit a4aae4
#line 364 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_int32>* > ()->push_back(strtol(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_int32>* > () = yystack_[2].value.as< std::vector<dods_int32>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1796 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 37:
Packit a4aae4
#line 371 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_uint64>* > () = evaluator.init_arg_list(dods_uint64(strtoull(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1804 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 38:
Packit a4aae4
#line 375 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_uint64>* > ()->push_back(strtoull(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_uint64>* > () = yystack_[2].value.as< std::vector<dods_uint64>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1813 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 39:
Packit a4aae4
#line 382 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_int64>* > () = evaluator.init_arg_list(dods_int64(strtoll(yystack_[0].value.as< std::string > ().c_str(), 0, 0)));
Packit a4aae4
}
Packit a4aae4
#line 1821 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 40:
Packit a4aae4
#line 386 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_int64>* > ()->push_back(strtoll(yystack_[0].value.as< std::string > ().c_str(), 0, 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_int64>* > () = yystack_[2].value.as< std::vector<dods_int64>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1830 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 41:
Packit a4aae4
#line 396 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_float32>* > () = evaluator.init_arg_list(dods_float32(strtof(yystack_[0].value.as< std::string > ().c_str(), 0)));
Packit a4aae4
}
Packit a4aae4
#line 1838 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 42:
Packit a4aae4
#line 400 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_float32>* > ()->push_back(strtof(yystack_[0].value.as< std::string > ().c_str(), 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_float32>* > () = yystack_[2].value.as< std::vector<dods_float32>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1847 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 43:
Packit a4aae4
#line 407 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::vector<dods_float64>* > () = evaluator.init_arg_list(dods_float64(strtod(yystack_[0].value.as< std::string > ().c_str(), 0)));
Packit a4aae4
}
Packit a4aae4
#line 1855 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 44:
Packit a4aae4
#line 411 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::vector<dods_float64>* > ()->push_back(strtod(yystack_[0].value.as< std::string > ().c_str(), 0));
Packit a4aae4
    yylhs.value.as< std::vector<dods_float64>* > () = yystack_[2].value.as< std::vector<dods_float64>* > ();
Packit a4aae4
}
Packit a4aae4
#line 1864 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 45:
Packit a4aae4
#line 418 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::string > () = yystack_[0].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1872 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 46:
Packit a4aae4
#line 422 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::string > ().append("/");
Packit a4aae4
    yylhs.value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
Packit a4aae4
}
Packit a4aae4
#line 1881 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 47:
Packit a4aae4
#line 427 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::string > ().append("/");
Packit a4aae4
    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
Packit a4aae4
    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1891 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 48:
Packit a4aae4
#line 435 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::string > ().append("/");
Packit a4aae4
    yylhs.value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
Packit a4aae4
}
Packit a4aae4
#line 1900 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 49:
Packit a4aae4
#line 440 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::string > ().append(".");
Packit a4aae4
    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
Packit a4aae4
    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1910 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 50:
Packit a4aae4
#line 448 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::string > () = yystack_[0].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1918 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 51:
Packit a4aae4
#line 452 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yystack_[2].value.as< std::string > ().append(".");
Packit a4aae4
    yystack_[2].value.as< std::string > ().append(yystack_[0].value.as< std::string > ());
Packit a4aae4
    yylhs.value.as< std::string > () = yystack_[2].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1928 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 52:
Packit a4aae4
#line 463 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::string > ()=yystack_[0].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1936 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 53:
Packit a4aae4
#line 467 "d4_function_parser.yy" // lalr1.cc:859
Packit a4aae4
    {
Packit a4aae4
    yylhs.value.as< std::string > ()=yystack_[0].value.as< std::string > ();
Packit a4aae4
}
Packit a4aae4
#line 1944 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
Packit a4aae4
#line 1948 "d4_function_parser.tab.cc" // lalr1.cc:859
Packit a4aae4
            default:
Packit a4aae4
              break;
Packit a4aae4
            }
Packit a4aae4
        }
Packit a4aae4
      catch (const syntax_error& yyexc)
Packit a4aae4
        {
Packit a4aae4
          error (yyexc);
Packit a4aae4
          YYERROR;
Packit a4aae4
        }
Packit a4aae4
      YY_SYMBOL_PRINT ("-> $$ =", yylhs);
Packit a4aae4
      yypop_ (yylen);
Packit a4aae4
      yylen = 0;
Packit a4aae4
      YY_STACK_PRINT ();
Packit a4aae4
Packit a4aae4
      // Shift the result of the reduction.
Packit a4aae4
      yypush_ (YY_NULLPTR, yylhs);
Packit a4aae4
    }
Packit a4aae4
    goto yynewstate;
Packit a4aae4
Packit a4aae4
  /*--------------------------------------.
Packit a4aae4
  | yyerrlab -- here on detecting error.  |
Packit a4aae4
  `--------------------------------------*/
Packit a4aae4
  yyerrlab:
Packit a4aae4
    // If not already recovering from an error, report this error.
Packit a4aae4
    if (!yyerrstatus_)
Packit a4aae4
      {
Packit a4aae4
        ++yynerrs_;
Packit a4aae4
        error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
Packit a4aae4
    yyerror_range[1].location = yyla.location;
Packit a4aae4
    if (yyerrstatus_ == 3)
Packit a4aae4
      {
Packit a4aae4
        /* If just tried and failed to reuse lookahead token after an
Packit a4aae4
           error, discard it.  */
Packit a4aae4
Packit a4aae4
        // Return failure if at end of input.
Packit a4aae4
        if (yyla.type_get () == yyeof_)
Packit a4aae4
          YYABORT;
Packit a4aae4
        else if (!yyla.empty ())
Packit a4aae4
          {
Packit a4aae4
            yy_destroy_ ("Error: discarding", yyla);
Packit a4aae4
            yyla.clear ();
Packit a4aae4
          }
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
    // Else will try to reuse lookahead token after shifting the error token.
Packit a4aae4
    goto yyerrlab1;
Packit a4aae4
Packit a4aae4
Packit a4aae4
  /*---------------------------------------------------.
Packit a4aae4
  | yyerrorlab -- error raised explicitly by YYERROR.  |
Packit a4aae4
  `---------------------------------------------------*/
Packit a4aae4
  yyerrorlab:
Packit a4aae4
Packit a4aae4
    /* Pacify compilers like GCC when the user code never invokes
Packit a4aae4
       YYERROR and the label yyerrorlab therefore never appears in user
Packit a4aae4
       code.  */
Packit a4aae4
    if (false)
Packit a4aae4
      goto yyerrorlab;
Packit a4aae4
    yyerror_range[1].location = yystack_[yylen - 1].location;
Packit a4aae4
    /* Do not reclaim the symbols of the rule whose action triggered
Packit a4aae4
       this YYERROR.  */
Packit a4aae4
    yypop_ (yylen);
Packit a4aae4
    yylen = 0;
Packit a4aae4
    goto yyerrlab1;
Packit a4aae4
Packit a4aae4
  /*-------------------------------------------------------------.
Packit a4aae4
  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
Packit a4aae4
  `-------------------------------------------------------------*/
Packit a4aae4
  yyerrlab1:
Packit a4aae4
    yyerrstatus_ = 3;   // Each real token shifted decrements this.
Packit a4aae4
    {
Packit a4aae4
      stack_symbol_type error_token;
Packit a4aae4
      for (;;)
Packit a4aae4
        {
Packit a4aae4
          yyn = yypact_[yystack_[0].state];
Packit a4aae4
          if (!yy_pact_value_is_default_ (yyn))
Packit a4aae4
            {
Packit a4aae4
              yyn += yyterror_;
Packit a4aae4
              if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
Packit a4aae4
                {
Packit a4aae4
                  yyn = yytable_[yyn];
Packit a4aae4
                  if (0 < yyn)
Packit a4aae4
                    break;
Packit a4aae4
                }
Packit a4aae4
            }
Packit a4aae4
Packit a4aae4
          // Pop the current state because it cannot handle the error token.
Packit a4aae4
          if (yystack_.size () == 1)
Packit a4aae4
            YYABORT;
Packit a4aae4
Packit a4aae4
          yyerror_range[1].location = yystack_[0].location;
Packit a4aae4
          yy_destroy_ ("Error: popping", yystack_[0]);
Packit a4aae4
          yypop_ ();
Packit a4aae4
          YY_STACK_PRINT ();
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
      yyerror_range[2].location = yyla.location;
Packit a4aae4
      YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
Packit a4aae4
Packit a4aae4
      // Shift the error token.
Packit a4aae4
      error_token.state = yyn;
Packit a4aae4
      yypush_ ("Shifting", error_token);
Packit a4aae4
    }
Packit a4aae4
    goto yynewstate;
Packit a4aae4
Packit a4aae4
    // Accept.
Packit a4aae4
  yyacceptlab:
Packit a4aae4
    yyresult = 0;
Packit a4aae4
    goto yyreturn;
Packit a4aae4
Packit a4aae4
    // Abort.
Packit a4aae4
  yyabortlab:
Packit a4aae4
    yyresult = 1;
Packit a4aae4
    goto yyreturn;
Packit a4aae4
Packit a4aae4
  yyreturn:
Packit a4aae4
    if (!yyla.empty ())
Packit a4aae4
      yy_destroy_ ("Cleanup: discarding lookahead", yyla);
Packit a4aae4
Packit a4aae4
    /* Do not reclaim the symbols of the rule whose action triggered
Packit a4aae4
       this YYABORT or YYACCEPT.  */
Packit a4aae4
    yypop_ (yylen);
Packit a4aae4
    while (1 < yystack_.size ())
Packit a4aae4
      {
Packit a4aae4
        yy_destroy_ ("Cleanup: popping", yystack_[0]);
Packit a4aae4
        yypop_ ();
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
    return yyresult;
Packit a4aae4
  }
Packit a4aae4
    catch (...)
Packit a4aae4
      {
Packit a4aae4
        YYCDEBUG << "Exception caught: cleaning lookahead and stack"
Packit a4aae4
                 << std::endl;
Packit a4aae4
        // Do not try to display the values of the reclaimed symbols,
Packit a4aae4
        // as their printer might throw an exception.
Packit a4aae4
        if (!yyla.empty ())
Packit a4aae4
          yy_destroy_ (YY_NULLPTR, yyla);
Packit a4aae4
Packit a4aae4
        while (1 < yystack_.size ())
Packit a4aae4
          {
Packit a4aae4
            yy_destroy_ (YY_NULLPTR, yystack_[0]);
Packit a4aae4
            yypop_ ();
Packit a4aae4
          }
Packit a4aae4
        throw;
Packit a4aae4
      }
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::error (const syntax_error& yyexc)
Packit a4aae4
  {
Packit a4aae4
    error (yyexc.location, yyexc.what());
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  // Generate an error message.
Packit a4aae4
  std::string
Packit a4aae4
  D4FunctionParser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
Packit a4aae4
  {
Packit a4aae4
    // Number of reported tokens (one for the "unexpected", one per
Packit a4aae4
    // "expected").
Packit a4aae4
    size_t yycount = 0;
Packit a4aae4
    // Its maximum.
Packit a4aae4
    enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
Packit a4aae4
    // Arguments of yyformat.
Packit a4aae4
    char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
Packit a4aae4
Packit a4aae4
    /* There are many possibilities here to consider:
Packit a4aae4
       - If this state is a consistent state with a default action, then
Packit a4aae4
         the only way this function was invoked is if the default action
Packit a4aae4
         is an error action.  In that case, don't check for expected
Packit a4aae4
         tokens because there are none.
Packit a4aae4
       - The only way there can be no lookahead present (in yyla) is
Packit a4aae4
         if this state is a consistent state with a default action.
Packit a4aae4
         Thus, detecting the absence of a lookahead is sufficient to
Packit a4aae4
         determine that there is no unexpected or expected token to
Packit a4aae4
         report.  In that case, just report a simple "syntax error".
Packit a4aae4
       - Don't assume there isn't a lookahead just because this state is
Packit a4aae4
         a consistent state with a default action.  There might have
Packit a4aae4
         been a previous inconsistent state, consistent state with a
Packit a4aae4
         non-default action, or user semantic action that manipulated
Packit a4aae4
         yyla.  (However, yyla is currently not documented for users.)
Packit a4aae4
       - Of course, the expected token list depends on states to have
Packit a4aae4
         correct lookahead information, and it depends on the parser not
Packit a4aae4
         to perform extra reductions after fetching a lookahead from the
Packit a4aae4
         scanner and before detecting a syntax error.  Thus, state
Packit a4aae4
         merging (from LALR or IELR) and default reductions corrupt the
Packit a4aae4
         expected token list.  However, the list is correct for
Packit a4aae4
         canonical LR with one exception: it will still contain any
Packit a4aae4
         token that will not be accepted due to an error action in a
Packit a4aae4
         later state.
Packit a4aae4
    */
Packit a4aae4
    if (!yyla.empty ())
Packit a4aae4
      {
Packit a4aae4
        int yytoken = yyla.type_get ();
Packit a4aae4
        yyarg[yycount++] = yytname_[yytoken];
Packit a4aae4
        int yyn = yypact_[yystate];
Packit a4aae4
        if (!yy_pact_value_is_default_ (yyn))
Packit a4aae4
          {
Packit a4aae4
            /* Start YYX at -YYN if negative to avoid negative indexes in
Packit a4aae4
               YYCHECK.  In other words, skip the first -YYN actions for
Packit a4aae4
               this state because they are default actions.  */
Packit a4aae4
            int yyxbegin = yyn < 0 ? -yyn : 0;
Packit a4aae4
            // Stay within bounds of both yycheck and yytname.
Packit a4aae4
            int yychecklim = yylast_ - yyn + 1;
Packit a4aae4
            int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
Packit a4aae4
            for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
Packit a4aae4
              if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
Packit a4aae4
                  && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
Packit a4aae4
                {
Packit a4aae4
                  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
Packit a4aae4
                    {
Packit a4aae4
                      yycount = 1;
Packit a4aae4
                      break;
Packit a4aae4
                    }
Packit a4aae4
                  else
Packit a4aae4
                    yyarg[yycount++] = yytname_[yyx];
Packit a4aae4
                }
Packit a4aae4
          }
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
    char const* yyformat = YY_NULLPTR;
Packit a4aae4
    switch (yycount)
Packit a4aae4
      {
Packit a4aae4
#define YYCASE_(N, S)                         \
Packit a4aae4
        case N:                               \
Packit a4aae4
          yyformat = S;                       \
Packit a4aae4
        break
Packit a4aae4
        YYCASE_(0, YY_("syntax error"));
Packit a4aae4
        YYCASE_(1, YY_("syntax error, unexpected %s"));
Packit a4aae4
        YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
Packit a4aae4
        YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
Packit a4aae4
        YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
Packit a4aae4
        YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
Packit a4aae4
#undef YYCASE_
Packit a4aae4
      }
Packit a4aae4
Packit a4aae4
    std::string yyres;
Packit a4aae4
    // Argument number.
Packit a4aae4
    size_t yyi = 0;
Packit a4aae4
    for (char const* yyp = yyformat; *yyp; ++yyp)
Packit a4aae4
      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
Packit a4aae4
        {
Packit a4aae4
          yyres += yytnamerr_ (yyarg[yyi++]);
Packit a4aae4
          ++yyp;
Packit a4aae4
        }
Packit a4aae4
      else
Packit a4aae4
        yyres += *yyp;
Packit a4aae4
    return yyres;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
Packit a4aae4
  const signed char D4FunctionParser::yypact_ninf_ = -20;
Packit a4aae4
Packit a4aae4
  const signed char D4FunctionParser::yytable_ninf_ = -50;
Packit a4aae4
Packit a4aae4
  const signed char
Packit a4aae4
  D4FunctionParser::yypact_[] =
Packit a4aae4
  {
Packit a4aae4
     -10,   -20,     8,    10,   -20,    12,   -20,   -10,   -18,   -20,
Packit a4aae4
      37,   -20,   -16,    38,    39,    42,    43,    44,    45,    46,
Packit a4aae4
      47,    48,    49,    50,   -20,   -19,   -20,   -20,   -20,   -20,
Packit a4aae4
      51,    52,   -20,   -20,    52,    54,    55,    55,    55,    55,
Packit a4aae4
      55,    55,    55,    55,    55,    55,    55,   -20,   -18,   -16,
Packit a4aae4
     -16,   -20,    53,    56,    59,    60,    61,    62,    63,    64,
Packit a4aae4
      65,    66,    67,   -20,    52,    68,   -20,    57,    57,    71,
Packit a4aae4
      72,    73,    74,    76,    77,    78,   -16,   -16,   -20,     9,
Packit a4aae4
      16,   -20,    18,   -20,    20,   -20,    22,   -20,    24,   -20,
Packit a4aae4
      26,   -20,    28,   -20,    30,    32,    52,    34,    52,   -20,
Packit a4aae4
      79,   -20,   -20,    80,   -20,    81,   -20,    82,   -20,    83,
Packit a4aae4
     -20,    84,   -20,    86,   -20,    88,   -20,   -16,   -20,   -16,
Packit a4aae4
     -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,    52,    52
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const unsigned char
Packit a4aae4
  D4FunctionParser::yydefact_[] =
Packit a4aae4
  {
Packit a4aae4
       0,     6,     0,     2,     3,     0,     1,     0,     0,     4,
Packit a4aae4
      52,    53,     0,     0,     0,     0,     0,     0,     0,     0,
Packit a4aae4
       0,     0,     0,     0,     9,     0,     7,    10,    11,    12,
Packit a4aae4
       0,    45,    50,    52,    46,    50,     0,     0,     0,     0,
Packit a4aae4
       0,     0,     0,     0,     0,     0,     0,     5,     0,     0,
Packit a4aae4
       0,    24,     0,     0,     0,     0,     0,     0,     0,     0,
Packit a4aae4
       0,     0,     0,     8,    47,    50,    51,     0,     0,     0,
Packit a4aae4
       0,     0,     0,     0,     0,     0,     0,     0,    25,     0,
Packit a4aae4
       0,    27,     0,    29,     0,    31,     0,    33,     0,    35,
Packit a4aae4
       0,    37,     0,    39,     0,     0,    41,     0,    43,    13,
Packit a4aae4
       0,    14,    15,     0,    16,     0,    17,     0,    18,     0,
Packit a4aae4
      19,     0,    20,     0,    21,     0,    22,     0,    23,     0,
Packit a4aae4
      26,    28,    30,    32,    34,    36,    38,    40,    42,    44
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const signed char
Packit a4aae4
  D4FunctionParser::yypgoto_[] =
Packit a4aae4
  {
Packit a4aae4
     -20,   -20,   -20,    33,   -20,   -20,    69,   -20,   -20,   -15,
Packit a4aae4
      41,   -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,
Packit a4aae4
     -20,   -20,   -12,   -11
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const signed char
Packit a4aae4
  D4FunctionParser::yydefgoto_[] =
Packit a4aae4
  {
Packit a4aae4
      -1,     2,     3,    24,     5,    25,    26,    27,    28,    52,
Packit a4aae4
      79,    82,    84,    86,    88,    90,    92,    94,    95,    97,
Packit a4aae4
      29,    30,    31,    32
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const short int
Packit a4aae4
  D4FunctionParser::yytable_[] =
Packit a4aae4
  {
Packit a4aae4
      34,    35,    10,    11,    33,    11,    47,    48,     6,    12,
Packit a4aae4
       1,    13,    14,    15,    16,    17,    18,    19,    20,    21,
Packit a4aae4
      22,    23,    53,    54,    55,    56,    57,    58,    59,    60,
Packit a4aae4
      61,    62,     7,     4,    99,   100,     8,    64,    65,    66,
Packit a4aae4
       9,   101,   100,   102,   103,   104,   105,   106,   107,   108,
Packit a4aae4
     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
Packit a4aae4
     119,    -6,    36,    37,    96,    98,    38,    39,    40,    41,
Packit a4aae4
      42,    43,    44,    45,    46,    51,    67,    78,    49,    68,
Packit a4aae4
      50,   -48,    69,    70,    71,    72,    73,    74,    75,    76,
Packit a4aae4
      77,    81,    83,    85,    87,   -49,    89,    91,    93,   120,
Packit a4aae4
     121,   122,   123,   124,   125,   128,   126,   129,   127,    80,
Packit a4aae4
       0,     0,     0,     0,     0,     0,     0,    63
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const signed char
Packit a4aae4
  D4FunctionParser::yycheck_[] =
Packit a4aae4
  {
Packit a4aae4
      12,    12,    20,    21,    20,    21,    25,    26,     0,    27,
Packit a4aae4
      20,    29,    30,    31,    32,    33,    34,    35,    36,    37,
Packit a4aae4
      38,    39,    37,    38,    39,    40,    41,    42,    43,    44,
Packit a4aae4
      45,    46,    22,     0,    25,    26,    24,    49,    49,    50,
Packit a4aae4
       7,    25,    26,    25,    26,    25,    26,    25,    26,    25,
Packit a4aae4
      26,    25,    26,    25,    26,    25,    26,    25,    26,    25,
Packit a4aae4
      26,    24,    24,    24,    76,    77,    24,    24,    24,    24,
Packit a4aae4
      24,    24,    24,    24,    24,    20,    23,    20,    27,    23,
Packit a4aae4
      28,    27,    23,    23,    23,    23,    23,    23,    23,    23,
Packit a4aae4
      23,    20,    20,    20,    20,    27,    20,    20,    20,    20,
Packit a4aae4
      20,    20,    20,    20,    20,   117,    20,   119,    20,    68,
Packit a4aae4
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    48
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const unsigned char
Packit a4aae4
  D4FunctionParser::yystos_[] =
Packit a4aae4
  {
Packit a4aae4
       0,    20,    41,    42,    43,    44,     0,    22,    24,    43,
Packit a4aae4
      20,    21,    27,    29,    30,    31,    32,    33,    34,    35,
Packit a4aae4
      36,    37,    38,    39,    43,    45,    46,    47,    48,    60,
Packit a4aae4
      61,    62,    63,    20,    62,    63,    24,    24,    24,    24,
Packit a4aae4
      24,    24,    24,    24,    24,    24,    24,    25,    26,    27,
Packit a4aae4
      28,    20,    49,    49,    49,    49,    49,    49,    49,    49,
Packit a4aae4
      49,    49,    49,    46,    62,    63,    63,    23,    23,    23,
Packit a4aae4
      23,    23,    23,    23,    23,    23,    23,    23,    20,    50,
Packit a4aae4
      50,    20,    51,    20,    52,    20,    53,    20,    54,    20,
Packit a4aae4
      55,    20,    56,    20,    57,    58,    62,    59,    62,    25,
Packit a4aae4
      26,    25,    25,    26,    25,    26,    25,    26,    25,    26,
Packit a4aae4
      25,    26,    25,    26,    25,    26,    25,    26,    25,    26,
Packit a4aae4
      20,    20,    20,    20,    20,    20,    20,    20,    62,    62
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const unsigned char
Packit a4aae4
  D4FunctionParser::yyr1_[] =
Packit a4aae4
  {
Packit a4aae4
       0,    40,    41,    42,    42,    43,    44,    45,    45,    46,
Packit a4aae4
      46,    46,    47,    48,    48,    48,    48,    48,    48,    48,
Packit a4aae4
      48,    48,    48,    48,    49,    50,    50,    51,    51,    52,
Packit a4aae4
      52,    53,    53,    54,    54,    55,    55,    56,    56,    57,
Packit a4aae4
      57,    58,    58,    59,    59,    60,    60,    60,    61,    61,
Packit a4aae4
      62,    62,    63,    63
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  const unsigned char
Packit a4aae4
  D4FunctionParser::yyr2_[] =
Packit a4aae4
  {
Packit a4aae4
       0,     2,     1,     1,     3,     4,     1,     1,     3,     1,
Packit a4aae4
       1,     1,     1,     6,     6,     6,     6,     6,     6,     6,
Packit a4aae4
       6,     6,     6,     6,     1,     1,     3,     1,     3,     1,
Packit a4aae4
       3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
Packit a4aae4
       3,     1,     3,     1,     3,     1,     2,     3,     2,     3,
Packit a4aae4
       1,     3,     1,     1
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
Packit a4aae4
Packit a4aae4
  // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Packit a4aae4
  // First, the terminals, then, starting at \a yyntokens_, nonterminals.
Packit a4aae4
  const char*
Packit a4aae4
  const D4FunctionParser::yytname_[] =
Packit a4aae4
  {
Packit a4aae4
  "\"end of file\"", "error", "$undefined", "\"functions\"",
Packit a4aae4
  "\"arguments\"", "\"argument\"", "\"function\"", "\"function name\"",
Packit a4aae4
  "\"variable or constant\"", "\"array constant\"",
Packit a4aae4
  "\"fast byte arg list\"", "\"fast int8 arg list\"",
Packit a4aae4
  "\"fast uint16 arg list\"", "\"fast int16 arg list\"",
Packit a4aae4
  "\"fast uint32 arg list\"", "\"fast int32 arg list\"",
Packit a4aae4
  "\"fast uint64 arg list\"", "\"fast int64 arg list\"",
Packit a4aae4
  "\"fast float32 arg list\"", "\"fast float64 arg list\"", "\"word\"",
Packit a4aae4
  "\"string\"", "\";\"", "\":\"", "\"(\"", "\")\"", "\",\"", "\"/\"",
Packit a4aae4
  "\".\"", "\"$Byte\"", "\"$UInt8\"", "\"$Int8\"", "\"$UInt16\"",
Packit a4aae4
  "\"$Int16\"", "\"$UInt32\"", "\"$Int32\"", "\"$UInt64\"", "\"$Int64\"",
Packit a4aae4
  "\"$Float32\"", "\"$Float64\"", "$accept", "program", "functions",
Packit a4aae4
  "function", "fname", "args", "arg", "variable_or_constant",
Packit a4aae4
  "array_constant", "arg_length_hint", "fast_byte_arg_list",
Packit a4aae4
  "fast_int8_arg_list", "fast_uint16_arg_list", "fast_int16_arg_list",
Packit a4aae4
  "fast_uint32_arg_list", "fast_int32_arg_list", "fast_uint64_arg_list",
Packit a4aae4
  "fast_int64_arg_list", "fast_float32_arg_list", "fast_float64_arg_list",
Packit a4aae4
  "id", "group", "path", "name", YY_NULLPTR
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
#if YYDEBUG
Packit a4aae4
  const unsigned short int
Packit a4aae4
  D4FunctionParser::yyrline_[] =
Packit a4aae4
  {
Packit a4aae4
       0,   155,   155,   161,   165,   172,   178,   190,   194,   201,
Packit a4aae4
     205,   209,   215,   227,   233,   239,   245,   251,   257,   263,
Packit a4aae4
     269,   275,   281,   287,   299,   305,   309,   316,   320,   327,
Packit a4aae4
     331,   338,   342,   349,   353,   359,   363,   370,   374,   381,
Packit a4aae4
     385,   395,   399,   406,   410,   417,   421,   426,   434,   439,
Packit a4aae4
     447,   451,   462,   466
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  // Print the state stack on the debug stream.
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yystack_print_ ()
Packit a4aae4
  {
Packit a4aae4
    *yycdebug_ << "Stack now";
Packit a4aae4
    for (stack_type::const_iterator
Packit a4aae4
           i = yystack_.begin (),
Packit a4aae4
           i_end = yystack_.end ();
Packit a4aae4
         i != i_end; ++i)
Packit a4aae4
      *yycdebug_ << ' ' << i->state;
Packit a4aae4
    *yycdebug_ << std::endl;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  // Report on the debug stream that the rule \a yyrule is going to be reduced.
Packit a4aae4
  void
Packit a4aae4
  D4FunctionParser::yy_reduce_print_ (int yyrule)
Packit a4aae4
  {
Packit a4aae4
    unsigned int yylno = yyrline_[yyrule];
Packit a4aae4
    int yynrhs = yyr2_[yyrule];
Packit a4aae4
    // Print the symbols being reduced, and their result.
Packit a4aae4
    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
Packit a4aae4
               << " (line " << yylno << "):" << std::endl;
Packit a4aae4
    // The symbols being reduced.
Packit a4aae4
    for (int yyi = 0; yyi < yynrhs; yyi++)
Packit a4aae4
      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
Packit a4aae4
                       yystack_[(yynrhs) - (yyi + 1)]);
Packit a4aae4
  }
Packit a4aae4
#endif // YYDEBUG
Packit a4aae4
Packit a4aae4
  // Symbol number corresponding to token number t.
Packit a4aae4
  inline
Packit a4aae4
  D4FunctionParser::token_number_type
Packit a4aae4
  D4FunctionParser::yytranslate_ (int t)
Packit a4aae4
  {
Packit a4aae4
    static
Packit a4aae4
    const token_number_type
Packit a4aae4
    translate_table[] =
Packit a4aae4
    {
Packit a4aae4
     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit a4aae4
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
Packit a4aae4
       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
Packit a4aae4
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
Packit a4aae4
      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
Packit a4aae4
      35,    36,    37,    38,    39
Packit a4aae4
    };
Packit a4aae4
    const unsigned int user_token_number_max_ = 294;
Packit a4aae4
    const token_number_type undef_token_ = 2;
Packit a4aae4
Packit a4aae4
    if (static_cast<int>(t) <= yyeof_)
Packit a4aae4
      return yyeof_;
Packit a4aae4
    else if (static_cast<unsigned int> (t) <= user_token_number_max_)
Packit a4aae4
      return translate_table[t];
Packit a4aae4
    else
Packit a4aae4
      return undef_token_;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
#line 34 "d4_function_parser.yy" // lalr1.cc:1167
Packit a4aae4
} // libdap
Packit a4aae4
#line 2454 "d4_function_parser.tab.cc" // lalr1.cc:1167
Packit a4aae4
#line 472 "d4_function_parser.yy" // lalr1.cc:1168
Packit a4aae4
Packit a4aae4
Packit a4aae4
// Forward the error to the driver for handling. The location parameter
Packit a4aae4
// provides the line number and character position of the error.
Packit a4aae4
void
Packit a4aae4
libdap::D4FunctionParser::error(const location_type &l, const std::string &m)
Packit a4aae4
{
Packit a4aae4
    evaluator.error(l, m);
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/* include for access to scanner.yylex */
Packit a4aae4
#include "D4FunctionScanner.h"
Packit a4aae4
Packit a4aae4
static int yylex(libdap::D4FunctionParser::semantic_type *yylval,
Packit a4aae4
                 libdap::location *loc,
Packit a4aae4
                 libdap::D4FunctionScanner &scanner,
Packit a4aae4
                 libdap::D4FunctionEvaluator &evaluator)
Packit a4aae4
{
Packit a4aae4
    if (evaluator.trace_scanning())
Packit a4aae4
        scanner.set_debug(true);
Packit a4aae4
    
Packit a4aae4
    return( scanner.yylex(yylval, loc) );
Packit a4aae4
}