Blame dds.tab.cc

Packit a4aae4
/* A Bison parser, made by GNU Bison 3.0.4.  */
Packit a4aae4
Packit a4aae4
/* Bison implementation for Yacc-like parsers in C
Packit a4aae4
Packit a4aae4
   Copyright (C) 1984, 1989-1990, 2000-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
/* C LALR(1) parser skeleton written by Richard Stallman, by
Packit a4aae4
   simplifying the original so-called "semantic" parser.  */
Packit a4aae4
Packit a4aae4
/* All symbols defined below should begin with yy or YY, to avoid
Packit a4aae4
   infringing on user name space.  This should be done even for local
Packit a4aae4
   variables, as they might otherwise be expanded by user macros.
Packit a4aae4
   There are some unavoidable exceptions within include files to
Packit a4aae4
   define necessary library symbols; they are noted "INFRINGES ON
Packit a4aae4
   USER NAME SPACE" below.  */
Packit a4aae4
Packit a4aae4
/* Identify Bison output.  */
Packit a4aae4
#define YYBISON 1
Packit a4aae4
Packit a4aae4
/* Bison version.  */
Packit a4aae4
#define YYBISON_VERSION "3.0.4"
Packit a4aae4
Packit a4aae4
/* Skeleton name.  */
Packit a4aae4
#define YYSKELETON_NAME "yacc.c"
Packit a4aae4
Packit a4aae4
/* Pure parsers.  */
Packit a4aae4
#define YYPURE 0
Packit a4aae4
Packit a4aae4
/* Push parsers.  */
Packit a4aae4
#define YYPUSH 0
Packit a4aae4
Packit a4aae4
/* Pull parsers.  */
Packit a4aae4
#define YYPULL 1
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* Substitute the variable and function names.  */
Packit a4aae4
#define yyparse         ddsparse
Packit a4aae4
#define yylex           ddslex
Packit a4aae4
#define yyerror         ddserror
Packit a4aae4
#define yydebug         ddsdebug
Packit a4aae4
#define yynerrs         ddsnerrs
Packit a4aae4
Packit a4aae4
#define yylval          ddslval
Packit a4aae4
#define yychar          ddschar
Packit a4aae4
Packit a4aae4
/* Copy the first part of user declarations.  */
Packit a4aae4
Packit a4aae4
#line 75 "dds.tab.cc" /* yacc.c:339  */
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
/* Enabling verbose error messages.  */
Packit a4aae4
#ifdef YYERROR_VERBOSE
Packit a4aae4
# undef YYERROR_VERBOSE
Packit a4aae4
# define YYERROR_VERBOSE 1
Packit a4aae4
#else
Packit a4aae4
# define YYERROR_VERBOSE 0
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* In a future release of Bison, this section will be replaced
Packit a4aae4
   by #include "dds.tab.hh".  */
Packit a4aae4
#ifndef YY_DDS_DDS_TAB_HH_INCLUDED
Packit a4aae4
# define YY_DDS_DDS_TAB_HH_INCLUDED
Packit a4aae4
/* Debug traces.  */
Packit a4aae4
#ifndef YYDEBUG
Packit a4aae4
# define YYDEBUG 1
Packit a4aae4
#endif
Packit a4aae4
#if YYDEBUG
Packit a4aae4
extern int ddsdebug;
Packit a4aae4
#endif
Packit a4aae4
/* "%code requires" blocks.  */
Packit a4aae4
#line 47 "dds.yy" /* yacc.c:355  */
Packit a4aae4
Packit a4aae4
Packit a4aae4
#include "config_dap.h"
Packit a4aae4
Packit a4aae4
#include <cstring>
Packit a4aae4
#include <cassert>
Packit a4aae4
#include <iostream>
Packit a4aae4
#include <stack>
Packit a4aae4
#include <sstream>
Packit a4aae4
Packit a4aae4
#include "Byte.h"
Packit a4aae4
#include "Int16.h"
Packit a4aae4
#include "UInt16.h"
Packit a4aae4
#include "Int32.h"
Packit a4aae4
#include "UInt32.h"
Packit a4aae4
#include "Float32.h"
Packit a4aae4
#include "Float64.h"
Packit a4aae4
#include "Str.h"
Packit a4aae4
#include "Url.h"
Packit a4aae4
#include "Array.h"
Packit a4aae4
#include "Structure.h"
Packit a4aae4
#include "Sequence.h"
Packit a4aae4
#include "Grid.h"
Packit a4aae4
Packit a4aae4
#include "DDS.h"
Packit a4aae4
#include "Error.h"
Packit a4aae4
#include "parser.h"
Packit a4aae4
#include "util.h"
Packit a4aae4
Packit a4aae4
using namespace std;
Packit a4aae4
using namespace libdap;
Packit a4aae4
Packit a4aae4
// These macros are used to access the `arguments' passed to the parser. A
Packit a4aae4
// pointer to an error object and a pointer to an integer status variable are
Packit a4aae4
// passed in to the parser within a structure (which itself is passed as a
Packit a4aae4
// pointer). Note that the ERROR macro explicitly casts OBJ to an ERROR *. 
Packit a4aae4
// ERROR is no longer used. These parsers now signal problems by throwing
Packit a4aae4
// exceptions. 5/22/2002 jhrg
Packit a4aae4
#define DDS_OBJ(arg) ((DDS *)((parser_arg *)(arg))->_object)
Packit a4aae4
Packit a4aae4
// #define YYPARSE_PARAM arg
Packit a4aae4
Packit a4aae4
extern int dds_line_num;	/* defined in dds.lex */
Packit a4aae4
Packit a4aae4
Packit a4aae4
#line 151 "dds.tab.cc" /* yacc.c:355  */
Packit a4aae4
Packit a4aae4
/* Token type.  */
Packit a4aae4
#ifndef YYTOKENTYPE
Packit a4aae4
# define YYTOKENTYPE
Packit a4aae4
  enum yytokentype
Packit a4aae4
  {
Packit a4aae4
    SCAN_WORD = 258,
Packit a4aae4
    SCAN_DATASET = 259,
Packit a4aae4
    SCAN_LIST = 260,
Packit a4aae4
    SCAN_SEQUENCE = 261,
Packit a4aae4
    SCAN_STRUCTURE = 262,
Packit a4aae4
    SCAN_FUNCTION = 263,
Packit a4aae4
    SCAN_GRID = 264,
Packit a4aae4
    SCAN_BYTE = 265,
Packit a4aae4
    SCAN_INT16 = 266,
Packit a4aae4
    SCAN_UINT16 = 267,
Packit a4aae4
    SCAN_INT32 = 268,
Packit a4aae4
    SCAN_UINT32 = 269,
Packit a4aae4
    SCAN_FLOAT32 = 270,
Packit a4aae4
    SCAN_FLOAT64 = 271,
Packit a4aae4
    SCAN_STRING = 272,
Packit a4aae4
    SCAN_URL = 273
Packit a4aae4
  };
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Value type.  */
Packit a4aae4
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
Packit a4aae4
Packit a4aae4
union YYSTYPE
Packit a4aae4
{
Packit a4aae4
#line 131 "dds.yy" /* yacc.c:355  */
Packit a4aae4
Packit a4aae4
    bool boolean;
Packit a4aae4
    char word[ID_MAX];
Packit a4aae4
Packit a4aae4
#line 187 "dds.tab.cc" /* yacc.c:355  */
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
typedef union YYSTYPE YYSTYPE;
Packit a4aae4
# define YYSTYPE_IS_TRIVIAL 1
Packit a4aae4
# define YYSTYPE_IS_DECLARED 1
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
extern YYSTYPE ddslval;
Packit a4aae4
Packit a4aae4
int ddsparse (parser_arg *arg);
Packit a4aae4
Packit a4aae4
#endif /* !YY_DDS_DDS_TAB_HH_INCLUDED  */
Packit a4aae4
Packit a4aae4
/* Copy the second part of user declarations.  */
Packit a4aae4
Packit a4aae4
#line 204 "dds.tab.cc" /* yacc.c:358  */
Packit a4aae4
/* Unqualified %code blocks.  */
Packit a4aae4
#line 93 "dds.yy" /* yacc.c:359  */
Packit a4aae4
Packit a4aae4
Packit a4aae4
// No global static objects in the dap library! 1/24/2000 jhrg
Packit a4aae4
static stack<BaseType *> *ctor;
Packit a4aae4
static BaseType *current;
Packit a4aae4
static string *id;
Packit a4aae4
static Part part = nil;		/* Part is defined in BaseType */
Packit a4aae4
Packit a4aae4
static const char *NO_DDS_MSG =
Packit a4aae4
"The descriptor object returned from the dataset was null.\n\
Packit a4aae4
Check that the URL is correct.";
Packit a4aae4
Packit a4aae4
static const char *BAD_DECLARATION =
Packit a4aae4
"In the dataset descriptor object: Expected a variable declaration\n\
Packit a4aae4
(e.g., Int32 i;). Make sure that the variable name is not the name\n\
Packit a4aae4
of a datatype and that the Array: and Maps: sections of a Grid are\n\
Packit a4aae4
labeled properly.";
Packit a4aae4
Packit a4aae4
int ddslex();
Packit a4aae4
void ddserror(parser_arg *arg, const string &s /*char *s*/);
Packit a4aae4
void error_exit_cleanup();
Packit a4aae4
void add_entry(DDS &table, stack<BaseType *> **ctor, BaseType **current, 
Packit a4aae4
	       Part p);
Packit a4aae4
void invalid_declaration(parser_arg *arg, string semantic_err_msg, 
Packit a4aae4
			 char *type, char *name);
Packit a4aae4
Packit a4aae4
Packit a4aae4
#line 234 "dds.tab.cc" /* yacc.c:359  */
Packit a4aae4
Packit a4aae4
#ifdef short
Packit a4aae4
# undef short
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifdef YYTYPE_UINT8
Packit a4aae4
typedef YYTYPE_UINT8 yytype_uint8;
Packit a4aae4
#else
Packit a4aae4
typedef unsigned char yytype_uint8;
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifdef YYTYPE_INT8
Packit a4aae4
typedef YYTYPE_INT8 yytype_int8;
Packit a4aae4
#else
Packit a4aae4
typedef signed char yytype_int8;
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifdef YYTYPE_UINT16
Packit a4aae4
typedef YYTYPE_UINT16 yytype_uint16;
Packit a4aae4
#else
Packit a4aae4
typedef unsigned short int yytype_uint16;
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifdef YYTYPE_INT16
Packit a4aae4
typedef YYTYPE_INT16 yytype_int16;
Packit a4aae4
#else
Packit a4aae4
typedef short int yytype_int16;
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef YYSIZE_T
Packit a4aae4
# ifdef __SIZE_TYPE__
Packit a4aae4
#  define YYSIZE_T __SIZE_TYPE__
Packit a4aae4
# elif defined size_t
Packit a4aae4
#  define YYSIZE_T size_t
Packit a4aae4
# elif ! defined YYSIZE_T
Packit a4aae4
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#  define YYSIZE_T size_t
Packit a4aae4
# else
Packit a4aae4
#  define YYSIZE_T unsigned int
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
Packit a4aae4
Packit a4aae4
#ifndef YY_
Packit a4aae4
# if defined YYENABLE_NLS && YYENABLE_NLS
Packit a4aae4
#  if ENABLE_NLS
Packit a4aae4
#   include <libintl.h> /* 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
#ifndef YY_ATTRIBUTE
Packit a4aae4
# if (defined __GNUC__                                               \
Packit a4aae4
      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
Packit a4aae4
     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
Packit a4aae4
#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
Packit a4aae4
# else
Packit a4aae4
#  define YY_ATTRIBUTE(Spec) /* empty */
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef YY_ATTRIBUTE_PURE
Packit a4aae4
# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#ifndef YY_ATTRIBUTE_UNUSED
Packit a4aae4
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if !defined _Noreturn \
Packit a4aae4
     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
Packit a4aae4
# if defined _MSC_VER && 1200 <= _MSC_VER
Packit a4aae4
#  define _Noreturn __declspec (noreturn)
Packit a4aae4
# else
Packit a4aae4
#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
Packit a4aae4
# endif
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* Suppress unused-variable warnings by "using" E.  */
Packit a4aae4
#if ! defined lint || defined __GNUC__
Packit a4aae4
# define YYUSE(E) ((void) (E))
Packit a4aae4
#else
Packit a4aae4
# define YYUSE(E) /* empty */
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
Packit a4aae4
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
Packit a4aae4
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
Packit a4aae4
    _Pragma ("GCC diagnostic push") \
Packit a4aae4
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
Packit a4aae4
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
Packit a4aae4
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
Packit a4aae4
    _Pragma ("GCC diagnostic pop")
Packit a4aae4
#else
Packit a4aae4
# define YY_INITIAL_VALUE(Value) Value
Packit a4aae4
#endif
Packit a4aae4
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit a4aae4
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit a4aae4
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit a4aae4
#endif
Packit a4aae4
#ifndef YY_INITIAL_VALUE
Packit a4aae4
# define YY_INITIAL_VALUE(Value) /* Nothing. */
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
#if ! defined yyoverflow || YYERROR_VERBOSE
Packit a4aae4
Packit a4aae4
/* The parser invokes alloca or malloc; define the necessary symbols.  */
Packit a4aae4
Packit a4aae4
# ifdef YYSTACK_USE_ALLOCA
Packit a4aae4
#  if YYSTACK_USE_ALLOCA
Packit a4aae4
#   ifdef __GNUC__
Packit a4aae4
#    define YYSTACK_ALLOC __builtin_alloca
Packit a4aae4
#   elif defined __BUILTIN_VA_ARG_INCR
Packit a4aae4
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#   elif defined _AIX
Packit a4aae4
#    define YYSTACK_ALLOC __alloca
Packit a4aae4
#   elif defined _MSC_VER
Packit a4aae4
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#    define alloca _alloca
Packit a4aae4
#   else
Packit a4aae4
#    define YYSTACK_ALLOC alloca
Packit a4aae4
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
Packit a4aae4
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
Packit a4aae4
#     ifndef EXIT_SUCCESS
Packit a4aae4
#      define EXIT_SUCCESS 0
Packit a4aae4
#     endif
Packit a4aae4
#    endif
Packit a4aae4
#   endif
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
# ifdef YYSTACK_ALLOC
Packit a4aae4
   /* Pacify GCC's 'empty if-body' warning.  */
Packit a4aae4
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
Packit a4aae4
#  ifndef YYSTACK_ALLOC_MAXIMUM
Packit a4aae4
    /* The OS might guarantee only one guard page at the bottom of the stack,
Packit a4aae4
       and a page size can be as small as 4096 bytes.  So we cannot safely
Packit a4aae4
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
Packit a4aae4
       to allow for a few compiler-allocated temporary stack slots.  */
Packit a4aae4
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
Packit a4aae4
#  endif
Packit a4aae4
# else
Packit a4aae4
#  define YYSTACK_ALLOC YYMALLOC
Packit a4aae4
#  define YYSTACK_FREE YYFREE
Packit a4aae4
#  ifndef YYSTACK_ALLOC_MAXIMUM
Packit a4aae4
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
Packit a4aae4
#  endif
Packit a4aae4
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
Packit a4aae4
       && ! ((defined YYMALLOC || defined malloc) \
Packit a4aae4
             && (defined YYFREE || defined free)))
Packit a4aae4
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#   ifndef EXIT_SUCCESS
Packit a4aae4
#    define EXIT_SUCCESS 0
Packit a4aae4
#   endif
Packit a4aae4
#  endif
Packit a4aae4
#  ifndef YYMALLOC
Packit a4aae4
#   define YYMALLOC malloc
Packit a4aae4
#   if ! defined malloc && ! defined EXIT_SUCCESS
Packit a4aae4
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#   endif
Packit a4aae4
#  endif
Packit a4aae4
#  ifndef YYFREE
Packit a4aae4
#   define YYFREE free
Packit a4aae4
#   if ! defined free && ! defined EXIT_SUCCESS
Packit a4aae4
void free (void *); /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#   endif
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
Packit a4aae4
Packit a4aae4
Packit a4aae4
#if (! defined yyoverflow \
Packit a4aae4
     && (! defined __cplusplus \
Packit a4aae4
         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
Packit a4aae4
Packit a4aae4
/* A type that is properly aligned for any stack member.  */
Packit a4aae4
union yyalloc
Packit a4aae4
{
Packit a4aae4
  yytype_int16 yyss_alloc;
Packit a4aae4
  YYSTYPE yyvs_alloc;
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
/* The size of the maximum gap between one aligned stack and the next.  */
Packit a4aae4
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
Packit a4aae4
Packit a4aae4
/* The size of an array large to enough to hold all stacks, each with
Packit a4aae4
   N elements.  */
Packit a4aae4
# define YYSTACK_BYTES(N) \
Packit a4aae4
     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
Packit a4aae4
      + YYSTACK_GAP_MAXIMUM)
Packit a4aae4
Packit a4aae4
# define YYCOPY_NEEDED 1
Packit a4aae4
Packit a4aae4
/* Relocate STACK from its old location to the new one.  The
Packit a4aae4
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
Packit a4aae4
   elements in the stack, and YYPTR gives the new location of the
Packit a4aae4
   stack.  Advance YYPTR to a properly aligned location for the next
Packit a4aae4
   stack.  */
Packit a4aae4
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
Packit a4aae4
    do                                                                  \
Packit a4aae4
      {                                                                 \
Packit a4aae4
        YYSIZE_T yynewbytes;                                            \
Packit a4aae4
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
Packit a4aae4
        Stack = &yyptr->Stack_alloc;                                    \
Packit a4aae4
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
Packit a4aae4
        yyptr += yynewbytes / sizeof (*yyptr);                          \
Packit a4aae4
      }                                                                 \
Packit a4aae4
    while (0)
Packit a4aae4
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
Packit a4aae4
/* Copy COUNT objects from SRC to DST.  The source and destination do
Packit a4aae4
   not overlap.  */
Packit a4aae4
# ifndef YYCOPY
Packit a4aae4
#  if defined __GNUC__ && 1 < __GNUC__
Packit a4aae4
#   define YYCOPY(Dst, Src, Count) \
Packit a4aae4
      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
Packit a4aae4
#  else
Packit a4aae4
#   define YYCOPY(Dst, Src, Count)              \
Packit a4aae4
      do                                        \
Packit a4aae4
        {                                       \
Packit a4aae4
          YYSIZE_T yyi;                         \
Packit a4aae4
          for (yyi = 0; yyi < (Count); yyi++)   \
Packit a4aae4
            (Dst)[yyi] = (Src)[yyi];            \
Packit a4aae4
        }                                       \
Packit a4aae4
      while (0)
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
#endif /* !YYCOPY_NEEDED */
Packit a4aae4
Packit a4aae4
/* YYFINAL -- State number of the termination state.  */
Packit a4aae4
#define YYFINAL  3
Packit a4aae4
/* YYLAST -- Last index in YYTABLE.  */
Packit a4aae4
#define YYLAST   194
Packit a4aae4
Packit a4aae4
/* YYNTOKENS -- Number of terminals.  */
Packit a4aae4
#define YYNTOKENS  26
Packit a4aae4
/* YYNNTS -- Number of nonterminals.  */
Packit a4aae4
#define YYNNTS  22
Packit a4aae4
/* YYNRULES -- Number of rules.  */
Packit a4aae4
#define YYNRULES  56
Packit a4aae4
/* YYNSTATES -- Number of states.  */
Packit a4aae4
#define YYNSTATES  88
Packit a4aae4
Packit a4aae4
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
Packit a4aae4
   by yylex, with out-of-bounds checking.  */
Packit a4aae4
#define YYUNDEFTOK  2
Packit a4aae4
#define YYMAXUTOK   273
Packit a4aae4
Packit a4aae4
#define YYTRANSLATE(YYX)                                                \
Packit a4aae4
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
Packit a4aae4
Packit a4aae4
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
Packit a4aae4
   as returned by yylex, without out-of-bounds checking.  */
Packit a4aae4
static const yytype_uint8 yytranslate[] =
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,    22,    21,
Packit a4aae4
       2,    25,     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,    23,     2,    24,     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,    19,     2,    20,     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
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
#if YYDEBUG
Packit a4aae4
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
Packit a4aae4
static const yytype_uint16 yyrline[] =
Packit a4aae4
{
Packit a4aae4
       0,   160,   160,   160,   176,   177,   180,   184,   193,   196,
Packit a4aae4
     197,   206,   221,   220,   242,   241,   263,   275,   287,   262,
Packit a4aae4
     308,   318,   324,   330,   336,   337,   338,   339,   340,   341,
Packit a4aae4
     342,   343,   344,   347,   348,   351,   351,   351,   351,   351,
Packit a4aae4
     352,   352,   352,   352,   353,   353,   353,   353,   354,   357,
Packit a4aae4
     379,   383,   378,   409,   419,   420,   421
Packit a4aae4
};
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#if YYDEBUG || YYERROR_VERBOSE || 0
Packit a4aae4
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Packit a4aae4
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
Packit a4aae4
static const char *const yytname[] =
Packit a4aae4
{
Packit a4aae4
  "$end", "error", "$undefined", "SCAN_WORD", "SCAN_DATASET", "SCAN_LIST",
Packit a4aae4
  "SCAN_SEQUENCE", "SCAN_STRUCTURE", "SCAN_FUNCTION", "SCAN_GRID",
Packit a4aae4
  "SCAN_BYTE", "SCAN_INT16", "SCAN_UINT16", "SCAN_INT32", "SCAN_UINT32",
Packit a4aae4
  "SCAN_FLOAT32", "SCAN_FLOAT64", "SCAN_STRING", "SCAN_URL", "'{'", "'}'",
Packit a4aae4
  "';'", "':'", "'['", "']'", "'='", "$accept", "start", "$@1", "datasets",
Packit a4aae4
  "dataset", "declarations", "declaration", "$@2", "$@3", "$@4", "$@5",
Packit a4aae4
  "$@6", "structure", "sequence", "grid", "base_type", "var", "var_name",
Packit a4aae4
  "array_decl", "$@7", "$@8", "name", YY_NULLPTR
Packit a4aae4
};
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
# ifdef YYPRINT
Packit a4aae4
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
Packit a4aae4
   (internal) symbol number NUM (which must be that of a token).  */
Packit a4aae4
static const yytype_uint16 yytoknum[] =
Packit a4aae4
{
Packit a4aae4
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
Packit a4aae4
     265,   266,   267,   268,   269,   270,   271,   272,   273,   123,
Packit a4aae4
     125,    59,    58,    91,    93,    61
Packit a4aae4
};
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
#define YYPACT_NINF -53
Packit a4aae4
Packit a4aae4
#define yypact_value_is_default(Yystate) \
Packit a4aae4
  (!!((Yystate) == (-53)))
Packit a4aae4
Packit a4aae4
#define YYTABLE_NINF -9
Packit a4aae4
Packit a4aae4
#define yytable_value_is_error(Yytable_value) \
Packit a4aae4
  0
Packit a4aae4
Packit a4aae4
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
Packit a4aae4
     STATE-NUM.  */
Packit a4aae4
static const yytype_int16 yypact[] =
Packit a4aae4
{
Packit a4aae4
     -53,    11,     9,   -53,   -53,    -7,     5,   -53,    52,   -53,
Packit a4aae4
     -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,
Packit a4aae4
     -53,   -53,   -53,    70,   -53,    -3,    -2,    -1,   176,   142,
Packit a4aae4
     -53,    52,    52,    16,   -53,   -53,   -53,   -53,   -53,   -53,
Packit a4aae4
     -53,   -53,   -53,   -53,   -53,   -53,   -53,   -53,     2,   -53,
Packit a4aae4
     -53,   -53,   -53,     0,    88,   106,    12,   -53,   -53,    17,
Packit a4aae4
     -53,   -53,   -53,   -53,   -53,    13,   176,   176,   160,   -53,
Packit a4aae4
      10,     3,     6,    19,    33,   -53,   -53,    18,   -53,   -53,
Packit a4aae4
      14,    52,   -53,   124,   -53,   176,     7,   -53
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
Packit a4aae4
     Performed when YYTABLE does not specify something else to do.  Zero
Packit a4aae4
     means the default is an error.  */
Packit a4aae4
static const yytype_uint8 yydefact[] =
Packit a4aae4
{
Packit a4aae4
       2,     0,     0,     1,     7,     0,     0,     4,     0,     5,
Packit a4aae4
      20,    22,    21,    23,    24,    25,    26,    27,    28,    29,
Packit a4aae4
      30,    31,    32,     0,     9,     0,     0,     0,     0,     0,
Packit a4aae4
      10,     0,     0,     0,    35,    48,    46,    45,    47,    36,
Packit a4aae4
      37,    39,    38,    40,    41,    42,    43,    44,     0,    33,
Packit a4aae4
      56,    55,    54,     0,     0,     0,     0,    53,    11,     0,
Packit a4aae4
      34,     6,    12,    14,    16,    50,     0,     0,     0,    49,
Packit a4aae4
       0,     0,     0,     0,     0,    13,    15,     0,    51,    17,
Packit a4aae4
       0,     0,    52,     0,    18,     0,     0,    19
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYPGOTO[NTERM-NUM].  */
Packit a4aae4
static const yytype_int8 yypgoto[] =
Packit a4aae4
{
Packit a4aae4
     -53,   -53,   -53,   -53,    35,   -30,   -23,   -53,   -53,   -53,
Packit a4aae4
     -53,   -53,   -53,   -53,   -53,   -53,   -52,    15,   -53,   -53,
Packit a4aae4
     -53,   -53
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYDEFGOTO[NTERM-NUM].  */
Packit a4aae4
static const yytype_int8 yydefgoto[] =
Packit a4aae4
{
Packit a4aae4
      -1,     1,     2,     6,     7,    23,    24,    66,    67,    68,
Packit a4aae4
      81,    85,    25,    26,    27,    28,    48,    49,    60,    70,
Packit a4aae4
      80,    53
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
Packit a4aae4
     positive, shift that token.  If negative, reduce the rule whose
Packit a4aae4
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
Packit a4aae4
static const yytype_int8 yytable[] =
Packit a4aae4
{
Packit a4aae4
      30,    54,    55,    57,    57,    -3,     4,    57,    57,     5,
Packit a4aae4
       4,     3,     8,     5,    71,    72,    31,    32,    33,    56,
Packit a4aae4
      65,    61,    77,    58,    75,    59,    59,    76,    87,    59,
Packit a4aae4
      59,    30,    30,    86,    64,    74,    78,    69,    82,     0,
Packit a4aae4
      79,     9,     0,     0,    52,    73,     0,     0,     0,     0,
Packit a4aae4
       0,    83,     0,    10,     0,     0,     0,     0,    11,    12,
Packit a4aae4
      30,    13,    14,    15,    16,    17,    18,    19,    20,    21,
Packit a4aae4
      22,    10,    -8,     0,     0,     0,    11,    12,     0,    13,
Packit a4aae4
      14,    15,    16,    17,    18,    19,    20,    21,    22,    10,
Packit a4aae4
      29,     0,     0,     0,    11,    12,     0,    13,    14,    15,
Packit a4aae4
      16,    17,    18,    19,    20,    21,    22,    10,    62,     0,
Packit a4aae4
       0,     0,    11,    12,     0,    13,    14,    15,    16,    17,
Packit a4aae4
      18,    19,    20,    21,    22,    10,    63,     0,     0,     0,
Packit a4aae4
      11,    12,     0,    13,    14,    15,    16,    17,    18,    19,
Packit a4aae4
      20,    21,    22,    50,    84,    34,    51,    35,    36,    37,
Packit a4aae4
       0,    38,    39,    40,    41,    42,    43,    44,    45,    46,
Packit a4aae4
      47,    10,     0,     0,     0,     0,    11,    12,     0,    13,
Packit a4aae4
      14,    15,    16,    17,    18,    19,    20,    21,    22,    34,
Packit a4aae4
       0,    35,    36,    37,     0,    38,    39,    40,    41,    42,
Packit a4aae4
      43,    44,    45,    46,    47
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
static const yytype_int8 yycheck[] =
Packit a4aae4
{
Packit a4aae4
      23,    31,    32,     1,     1,     0,     1,     1,     1,     4,
Packit a4aae4
       1,     0,    19,     4,    66,    67,    19,    19,    19,     3,
Packit a4aae4
       3,    21,     3,    21,    21,    23,    23,    21,    21,    23,
Packit a4aae4
      23,    54,    55,    85,    22,    25,     3,    24,    24,    -1,
Packit a4aae4
      22,     6,    -1,    -1,    29,    68,    -1,    -1,    -1,    -1,
Packit a4aae4
      -1,    81,    -1,     1,    -1,    -1,    -1,    -1,     6,     7,
Packit a4aae4
      83,     9,    10,    11,    12,    13,    14,    15,    16,    17,
Packit a4aae4
      18,     1,    20,    -1,    -1,    -1,     6,     7,    -1,     9,
Packit a4aae4
      10,    11,    12,    13,    14,    15,    16,    17,    18,     1,
Packit a4aae4
      20,    -1,    -1,    -1,     6,     7,    -1,     9,    10,    11,
Packit a4aae4
      12,    13,    14,    15,    16,    17,    18,     1,    20,    -1,
Packit a4aae4
      -1,    -1,     6,     7,    -1,     9,    10,    11,    12,    13,
Packit a4aae4
      14,    15,    16,    17,    18,     1,    20,    -1,    -1,    -1,
Packit a4aae4
       6,     7,    -1,     9,    10,    11,    12,    13,    14,    15,
Packit a4aae4
      16,    17,    18,     1,    20,     3,     4,     5,     6,     7,
Packit a4aae4
      -1,     9,    10,    11,    12,    13,    14,    15,    16,    17,
Packit a4aae4
      18,     1,    -1,    -1,    -1,    -1,     6,     7,    -1,     9,
Packit a4aae4
      10,    11,    12,    13,    14,    15,    16,    17,    18,     3,
Packit a4aae4
      -1,     5,     6,     7,    -1,     9,    10,    11,    12,    13,
Packit a4aae4
      14,    15,    16,    17,    18
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
Packit a4aae4
     symbol of state STATE-NUM.  */
Packit a4aae4
static const yytype_uint8 yystos[] =
Packit a4aae4
{
Packit a4aae4
       0,    27,    28,     0,     1,     4,    29,    30,    19,    30,
Packit a4aae4
       1,     6,     7,     9,    10,    11,    12,    13,    14,    15,
Packit a4aae4
      16,    17,    18,    31,    32,    38,    39,    40,    41,    20,
Packit a4aae4
      32,    19,    19,    19,     3,     5,     6,     7,     9,    10,
Packit a4aae4
      11,    12,    13,    14,    15,    16,    17,    18,    42,    43,
Packit a4aae4
       1,     4,    43,    47,    31,    31,     3,     1,    21,    23,
Packit a4aae4
      44,    21,    20,    20,    22,     3,    33,    34,    35,    24,
Packit a4aae4
      45,    42,    42,    32,    25,    21,    21,     3,     3,    22,
Packit a4aae4
      46,    36,    24,    31,    20,    37,    42,    21
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
Packit a4aae4
static const yytype_uint8 yyr1[] =
Packit a4aae4
{
Packit a4aae4
       0,    26,    28,    27,    29,    29,    30,    30,    31,    31,
Packit a4aae4
      31,    32,    33,    32,    34,    32,    35,    36,    37,    32,
Packit a4aae4
      32,    38,    39,    40,    41,    41,    41,    41,    41,    41,
Packit a4aae4
      41,    41,    41,    42,    42,    43,    43,    43,    43,    43,
Packit a4aae4
      43,    43,    43,    43,    43,    43,    43,    43,    43,    44,
Packit a4aae4
      45,    46,    44,    44,    47,    47,    47
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
Packit a4aae4
static const yytype_uint8 yyr2[] =
Packit a4aae4
{
Packit a4aae4
       0,     2,     0,     2,     1,     2,     6,     1,     0,     1,
Packit a4aae4
       2,     3,     0,     7,     0,     7,     0,     0,     0,    14,
Packit a4aae4
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
Packit a4aae4
       1,     1,     1,     1,     2,     1,     1,     1,     1,     1,
Packit a4aae4
       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
Packit a4aae4
       0,     0,     7,     1,     1,     1,     1
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
Packit a4aae4
#define yyerrok         (yyerrstatus = 0)
Packit a4aae4
#define yyclearin       (yychar = YYEMPTY)
Packit a4aae4
#define YYEMPTY         (-2)
Packit a4aae4
#define YYEOF           0
Packit a4aae4
Packit a4aae4
#define YYACCEPT        goto yyacceptlab
Packit a4aae4
#define YYABORT         goto yyabortlab
Packit a4aae4
#define YYERROR         goto yyerrorlab
Packit a4aae4
Packit a4aae4
Packit a4aae4
#define YYRECOVERING()  (!!yyerrstatus)
Packit a4aae4
Packit a4aae4
#define YYBACKUP(Token, Value)                                  \
Packit a4aae4
do                                                              \
Packit a4aae4
  if (yychar == YYEMPTY)                                        \
Packit a4aae4
    {                                                           \
Packit a4aae4
      yychar = (Token);                                         \
Packit a4aae4
      yylval = (Value);                                         \
Packit a4aae4
      YYPOPSTACK (yylen);                                       \
Packit a4aae4
      yystate = *yyssp;                                         \
Packit a4aae4
      goto yybackup;                                            \
Packit a4aae4
    }                                                           \
Packit a4aae4
  else                                                          \
Packit a4aae4
    {                                                           \
Packit a4aae4
      yyerror (arg, YY_("syntax error: cannot back up")); \
Packit a4aae4
      YYERROR;                                                  \
Packit a4aae4
    }                                                           \
Packit a4aae4
while (0)
Packit a4aae4
Packit a4aae4
/* Error token number */
Packit a4aae4
#define YYTERROR        1
Packit a4aae4
#define YYERRCODE       256
Packit a4aae4
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* Enable debugging if requested.  */
Packit a4aae4
#if YYDEBUG
Packit a4aae4
Packit a4aae4
# ifndef YYFPRINTF
Packit a4aae4
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
Packit a4aae4
#  define YYFPRINTF fprintf
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
# define YYDPRINTF(Args)                        \
Packit a4aae4
do {                                            \
Packit a4aae4
  if (yydebug)                                  \
Packit a4aae4
    YYFPRINTF Args;                             \
Packit a4aae4
} while (0)
Packit a4aae4
Packit a4aae4
/* This macro is provided for backward compatibility. */
Packit a4aae4
#ifndef YY_LOCATION_PRINT
Packit a4aae4
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
Packit a4aae4
do {                                                                      \
Packit a4aae4
  if (yydebug)                                                            \
Packit a4aae4
    {                                                                     \
Packit a4aae4
      YYFPRINTF (stderr, "%s ", Title);                                   \
Packit a4aae4
      yy_symbol_print (stderr,                                            \
Packit a4aae4
                  Type, Value, arg); \
Packit a4aae4
      YYFPRINTF (stderr, "\n");                                           \
Packit a4aae4
    }                                                                     \
Packit a4aae4
} while (0)
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*----------------------------------------.
Packit a4aae4
| Print this symbol's value on YYOUTPUT.  |
Packit a4aae4
`----------------------------------------*/
Packit a4aae4
Packit a4aae4
static void
Packit a4aae4
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_arg *arg)
Packit a4aae4
{
Packit a4aae4
  FILE *yyo = yyoutput;
Packit a4aae4
  YYUSE (yyo);
Packit a4aae4
  YYUSE (arg);
Packit a4aae4
  if (!yyvaluep)
Packit a4aae4
    return;
Packit a4aae4
# ifdef YYPRINT
Packit a4aae4
  if (yytype < YYNTOKENS)
Packit a4aae4
    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
Packit a4aae4
# endif
Packit a4aae4
  YYUSE (yytype);
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*--------------------------------.
Packit a4aae4
| Print this symbol on YYOUTPUT.  |
Packit a4aae4
`--------------------------------*/
Packit a4aae4
Packit a4aae4
static void
Packit a4aae4
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_arg *arg)
Packit a4aae4
{
Packit a4aae4
  YYFPRINTF (yyoutput, "%s %s (",
Packit a4aae4
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
Packit a4aae4
Packit a4aae4
  yy_symbol_value_print (yyoutput, yytype, yyvaluep, arg);
Packit a4aae4
  YYFPRINTF (yyoutput, ")");
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/*------------------------------------------------------------------.
Packit a4aae4
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
Packit a4aae4
| TOP (included).                                                   |
Packit a4aae4
`------------------------------------------------------------------*/
Packit a4aae4
Packit a4aae4
static void
Packit a4aae4
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
Packit a4aae4
{
Packit a4aae4
  YYFPRINTF (stderr, "Stack now");
Packit a4aae4
  for (; yybottom <= yytop; yybottom++)
Packit a4aae4
    {
Packit a4aae4
      int yybot = *yybottom;
Packit a4aae4
      YYFPRINTF (stderr, " %d", yybot);
Packit a4aae4
    }
Packit a4aae4
  YYFPRINTF (stderr, "\n");
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
# define YY_STACK_PRINT(Bottom, Top)                            \
Packit a4aae4
do {                                                            \
Packit a4aae4
  if (yydebug)                                                  \
Packit a4aae4
    yy_stack_print ((Bottom), (Top));                           \
Packit a4aae4
} while (0)
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*------------------------------------------------.
Packit a4aae4
| Report that the YYRULE is going to be reduced.  |
Packit a4aae4
`------------------------------------------------*/
Packit a4aae4
Packit a4aae4
static void
Packit a4aae4
yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, parser_arg *arg)
Packit a4aae4
{
Packit a4aae4
  unsigned long int yylno = yyrline[yyrule];
Packit a4aae4
  int yynrhs = yyr2[yyrule];
Packit a4aae4
  int yyi;
Packit a4aae4
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
Packit a4aae4
             yyrule - 1, yylno);
Packit a4aae4
  /* The symbols being reduced.  */
Packit a4aae4
  for (yyi = 0; yyi < yynrhs; yyi++)
Packit a4aae4
    {
Packit a4aae4
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
Packit a4aae4
      yy_symbol_print (stderr,
Packit a4aae4
                       yystos[yyssp[yyi + 1 - yynrhs]],
Packit a4aae4
                       &(yyvsp[(yyi + 1) - (yynrhs)])
Packit a4aae4
                                              , arg);
Packit a4aae4
      YYFPRINTF (stderr, "\n");
Packit a4aae4
    }
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
# define YY_REDUCE_PRINT(Rule)          \
Packit a4aae4
do {                                    \
Packit a4aae4
  if (yydebug)                          \
Packit a4aae4
    yy_reduce_print (yyssp, yyvsp, Rule, arg); \
Packit a4aae4
} while (0)
Packit a4aae4
Packit a4aae4
/* Nonzero means print parse trace.  It is left uninitialized so that
Packit a4aae4
   multiple parsers can coexist.  */
Packit a4aae4
int yydebug;
Packit a4aae4
#else /* !YYDEBUG */
Packit a4aae4
# define YYDPRINTF(Args)
Packit a4aae4
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Packit a4aae4
# define YY_STACK_PRINT(Bottom, Top)
Packit a4aae4
# define YY_REDUCE_PRINT(Rule)
Packit a4aae4
#endif /* !YYDEBUG */
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* YYINITDEPTH -- initial size of the parser's stacks.  */
Packit a4aae4
#ifndef YYINITDEPTH
Packit a4aae4
# define YYINITDEPTH 200
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
Packit a4aae4
   if the built-in stack extension method is used).
Packit a4aae4
Packit a4aae4
   Do not make this value too large; the results are undefined if
Packit a4aae4
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
Packit a4aae4
   evaluated with infinite-precision integer arithmetic.  */
Packit a4aae4
Packit a4aae4
#ifndef YYMAXDEPTH
Packit a4aae4
# define YYMAXDEPTH 10000
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
Packit a4aae4
#if YYERROR_VERBOSE
Packit a4aae4
Packit a4aae4
# ifndef yystrlen
Packit a4aae4
#  if defined __GLIBC__ && defined _STRING_H
Packit a4aae4
#   define yystrlen strlen
Packit a4aae4
#  else
Packit a4aae4
/* Return the length of YYSTR.  */
Packit a4aae4
static YYSIZE_T
Packit a4aae4
yystrlen (const char *yystr)
Packit a4aae4
{
Packit a4aae4
  YYSIZE_T yylen;
Packit a4aae4
  for (yylen = 0; yystr[yylen]; yylen++)
Packit a4aae4
    continue;
Packit a4aae4
  return yylen;
Packit a4aae4
}
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
# ifndef yystpcpy
Packit a4aae4
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
Packit a4aae4
#   define yystpcpy stpcpy
Packit a4aae4
#  else
Packit a4aae4
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
Packit a4aae4
   YYDEST.  */
Packit a4aae4
static char *
Packit a4aae4
yystpcpy (char *yydest, const char *yysrc)
Packit a4aae4
{
Packit a4aae4
  char *yyd = yydest;
Packit a4aae4
  const char *yys = yysrc;
Packit a4aae4
Packit a4aae4
  while ((*yyd++ = *yys++) != '\0')
Packit a4aae4
    continue;
Packit a4aae4
Packit a4aae4
  return yyd - 1;
Packit a4aae4
}
Packit a4aae4
#  endif
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
# ifndef yytnamerr
Packit a4aae4
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
Packit a4aae4
   quotes and backslashes, so that it's suitable for yyerror.  The
Packit a4aae4
   heuristic is that double-quoting is unnecessary unless the string
Packit a4aae4
   contains an apostrophe, a comma, or backslash (other than
Packit a4aae4
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
Packit a4aae4
   null, do not copy; instead, return the length of what the result
Packit a4aae4
   would have been.  */
Packit a4aae4
static YYSIZE_T
Packit a4aae4
yytnamerr (char *yyres, const char *yystr)
Packit a4aae4
{
Packit a4aae4
  if (*yystr == '"')
Packit a4aae4
    {
Packit a4aae4
      YYSIZE_T yyn = 0;
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
            if (yyres)
Packit a4aae4
              yyres[yyn] = *yyp;
Packit a4aae4
            yyn++;
Packit a4aae4
            break;
Packit a4aae4
Packit a4aae4
          case '"':
Packit a4aae4
            if (yyres)
Packit a4aae4
              yyres[yyn] = '\0';
Packit a4aae4
            return yyn;
Packit a4aae4
          }
Packit a4aae4
    do_not_strip_quotes: ;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  if (! yyres)
Packit a4aae4
    return yystrlen (yystr);
Packit a4aae4
Packit a4aae4
  return yystpcpy (yyres, yystr) - yyres;
Packit a4aae4
}
Packit a4aae4
# endif
Packit a4aae4
Packit a4aae4
/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
Packit a4aae4
   about the unexpected token YYTOKEN for the state stack whose top is
Packit a4aae4
   YYSSP.
Packit a4aae4
Packit a4aae4
   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
Packit a4aae4
   not large enough to hold the message.  In that case, also set
Packit a4aae4
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
Packit a4aae4
   required number of bytes is too large to store.  */
Packit a4aae4
static int
Packit a4aae4
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
Packit a4aae4
                yytype_int16 *yyssp, int yytoken)
Packit a4aae4
{
Packit a4aae4
  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
Packit a4aae4
  YYSIZE_T yysize = yysize0;
Packit a4aae4
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
Packit a4aae4
  /* Internationalized format string. */
Packit a4aae4
  const char *yyformat = YY_NULLPTR;
Packit a4aae4
  /* Arguments of yyformat. */
Packit a4aae4
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
Packit a4aae4
  /* Number of reported tokens (one for the "unexpected", one per
Packit a4aae4
     "expected"). */
Packit a4aae4
  int yycount = 0;
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 yychar) is if
Packit a4aae4
       this state is a consistent state with a default action.  Thus,
Packit a4aae4
       detecting the absence of a lookahead is sufficient to determine
Packit a4aae4
       that there is no unexpected or expected token to report.  In that
Packit a4aae4
       case, just report a simple "syntax error".
Packit a4aae4
     - Don't assume there isn't a lookahead just because this state is a
Packit a4aae4
       consistent state with a default action.  There might have been a
Packit a4aae4
       previous inconsistent state, consistent state with a non-default
Packit a4aae4
       action, or user semantic action that manipulated yychar.
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 merging
Packit a4aae4
       (from LALR or IELR) and default reductions corrupt the expected
Packit a4aae4
       token list.  However, the list is correct for canonical LR with
Packit a4aae4
       one exception: it will still contain any token that will not be
Packit a4aae4
       accepted due to an error action in a later state.
Packit a4aae4
  */
Packit a4aae4
  if (yytoken != YYEMPTY)
Packit a4aae4
    {
Packit a4aae4
      int yyn = yypact[*yyssp];
Packit a4aae4
      yyarg[yycount++] = yytname[yytoken];
Packit a4aae4
      if (!yypact_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
          int yyx;
Packit a4aae4
Packit a4aae4
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
Packit a4aae4
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
Packit a4aae4
                && !yytable_value_is_error (yytable[yyx + yyn]))
Packit a4aae4
              {
Packit a4aae4
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
Packit a4aae4
                  {
Packit a4aae4
                    yycount = 1;
Packit a4aae4
                    yysize = yysize0;
Packit a4aae4
                    break;
Packit a4aae4
                  }
Packit a4aae4
                yyarg[yycount++] = yytname[yyx];
Packit a4aae4
                {
Packit a4aae4
                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
Packit a4aae4
                  if (! (yysize <= yysize1
Packit a4aae4
                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
Packit a4aae4
                    return 2;
Packit a4aae4
                  yysize = yysize1;
Packit a4aae4
                }
Packit a4aae4
              }
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
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
  {
Packit a4aae4
    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
Packit a4aae4
    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
Packit a4aae4
      return 2;
Packit a4aae4
    yysize = yysize1;
Packit a4aae4
  }
Packit a4aae4
Packit a4aae4
  if (*yymsg_alloc < yysize)
Packit a4aae4
    {
Packit a4aae4
      *yymsg_alloc = 2 * yysize;
Packit a4aae4
      if (! (yysize <= *yymsg_alloc
Packit a4aae4
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
Packit a4aae4
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
Packit a4aae4
      return 1;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  /* Avoid sprintf, as that infringes on the user's name space.
Packit a4aae4
     Don't have undefined behavior even if the translation
Packit a4aae4
     produced a string with the wrong number of "%s"s.  */
Packit a4aae4
  {
Packit a4aae4
    char *yyp = *yymsg;
Packit a4aae4
    int yyi = 0;
Packit a4aae4
    while ((*yyp = *yyformat) != '\0')
Packit a4aae4
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
Packit a4aae4
        {
Packit a4aae4
          yyp += yytnamerr (yyp, yyarg[yyi++]);
Packit a4aae4
          yyformat += 2;
Packit a4aae4
        }
Packit a4aae4
      else
Packit a4aae4
        {
Packit a4aae4
          yyp++;
Packit a4aae4
          yyformat++;
Packit a4aae4
        }
Packit a4aae4
  }
Packit a4aae4
  return 0;
Packit a4aae4
}
Packit a4aae4
#endif /* YYERROR_VERBOSE */
Packit a4aae4
Packit a4aae4
/*-----------------------------------------------.
Packit a4aae4
| Release the memory associated to this symbol.  |
Packit a4aae4
`-----------------------------------------------*/
Packit a4aae4
Packit a4aae4
static void
Packit a4aae4
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, parser_arg *arg)
Packit a4aae4
{
Packit a4aae4
  YYUSE (yyvaluep);
Packit a4aae4
  YYUSE (arg);
Packit a4aae4
  if (!yymsg)
Packit a4aae4
    yymsg = "Deleting";
Packit a4aae4
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
Packit a4aae4
Packit a4aae4
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit a4aae4
  YYUSE (yytype);
Packit a4aae4
  YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* The lookahead symbol.  */
Packit a4aae4
int yychar;
Packit a4aae4
Packit a4aae4
/* The semantic value of the lookahead symbol.  */
Packit a4aae4
YYSTYPE yylval;
Packit a4aae4
/* Number of syntax errors so far.  */
Packit a4aae4
int yynerrs;
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*----------.
Packit a4aae4
| yyparse.  |
Packit a4aae4
`----------*/
Packit a4aae4
Packit a4aae4
int
Packit a4aae4
yyparse (parser_arg *arg)
Packit a4aae4
{
Packit a4aae4
    int yystate;
Packit a4aae4
    /* Number of tokens to shift before error messages enabled.  */
Packit a4aae4
    int yyerrstatus;
Packit a4aae4
Packit a4aae4
    /* The stacks and their tools:
Packit a4aae4
       'yyss': related to states.
Packit a4aae4
       'yyvs': related to semantic values.
Packit a4aae4
Packit a4aae4
       Refer to the stacks through separate pointers, to allow yyoverflow
Packit a4aae4
       to reallocate them elsewhere.  */
Packit a4aae4
Packit a4aae4
    /* The state stack.  */
Packit a4aae4
    yytype_int16 yyssa[YYINITDEPTH];
Packit a4aae4
    yytype_int16 *yyss;
Packit a4aae4
    yytype_int16 *yyssp;
Packit a4aae4
Packit a4aae4
    /* The semantic value stack.  */
Packit a4aae4
    YYSTYPE yyvsa[YYINITDEPTH];
Packit a4aae4
    YYSTYPE *yyvs;
Packit a4aae4
    YYSTYPE *yyvsp;
Packit a4aae4
Packit a4aae4
    YYSIZE_T yystacksize;
Packit a4aae4
Packit a4aae4
  int yyn;
Packit a4aae4
  int yyresult;
Packit a4aae4
  /* Lookahead token as an internal (translated) token number.  */
Packit a4aae4
  int yytoken = 0;
Packit a4aae4
  /* The variables used to return semantic value and location from the
Packit a4aae4
     action routines.  */
Packit a4aae4
  YYSTYPE yyval;
Packit a4aae4
Packit a4aae4
#if YYERROR_VERBOSE
Packit a4aae4
  /* Buffer for error messages, and its allocated size.  */
Packit a4aae4
  char yymsgbuf[128];
Packit a4aae4
  char *yymsg = yymsgbuf;
Packit a4aae4
  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
Packit a4aae4
Packit a4aae4
  /* The number of symbols on the RHS of the reduced rule.
Packit a4aae4
     Keep to zero when no symbol should be popped.  */
Packit a4aae4
  int yylen = 0;
Packit a4aae4
Packit a4aae4
  yyssp = yyss = yyssa;
Packit a4aae4
  yyvsp = yyvs = yyvsa;
Packit a4aae4
  yystacksize = YYINITDEPTH;
Packit a4aae4
Packit a4aae4
  YYDPRINTF ((stderr, "Starting parse\n"));
Packit a4aae4
Packit a4aae4
  yystate = 0;
Packit a4aae4
  yyerrstatus = 0;
Packit a4aae4
  yynerrs = 0;
Packit a4aae4
  yychar = YYEMPTY; /* Cause a token to be read.  */
Packit a4aae4
  goto yysetstate;
Packit a4aae4
Packit a4aae4
/*------------------------------------------------------------.
Packit a4aae4
| yynewstate -- Push a new state, which is found in yystate.  |
Packit a4aae4
`------------------------------------------------------------*/
Packit a4aae4
 yynewstate:
Packit a4aae4
  /* In all cases, when you get here, the value and location stacks
Packit a4aae4
     have just been pushed.  So pushing a state here evens the stacks.  */
Packit a4aae4
  yyssp++;
Packit a4aae4
Packit a4aae4
 yysetstate:
Packit a4aae4
  *yyssp = yystate;
Packit a4aae4
Packit a4aae4
  if (yyss + yystacksize - 1 <= yyssp)
Packit a4aae4
    {
Packit a4aae4
      /* Get the current used size of the three stacks, in elements.  */
Packit a4aae4
      YYSIZE_T yysize = yyssp - yyss + 1;
Packit a4aae4
Packit a4aae4
#ifdef yyoverflow
Packit a4aae4
      {
Packit a4aae4
        /* Give user a chance to reallocate the stack.  Use copies of
Packit a4aae4
           these so that the &'s don't force the real ones into
Packit a4aae4
           memory.  */
Packit a4aae4
        YYSTYPE *yyvs1 = yyvs;
Packit a4aae4
        yytype_int16 *yyss1 = yyss;
Packit a4aae4
Packit a4aae4
        /* Each stack pointer address is followed by the size of the
Packit a4aae4
           data in use in that stack, in bytes.  This used to be a
Packit a4aae4
           conditional around just the two extra args, but that might
Packit a4aae4
           be undefined if yyoverflow is a macro.  */
Packit a4aae4
        yyoverflow (YY_("memory exhausted"),
Packit a4aae4
                    &yyss1, yysize * sizeof (*yyssp),
Packit a4aae4
                    &yyvs1, yysize * sizeof (*yyvsp),
Packit a4aae4
                    &yystacksize);
Packit a4aae4
Packit a4aae4
        yyss = yyss1;
Packit a4aae4
        yyvs = yyvs1;
Packit a4aae4
      }
Packit a4aae4
#else /* no yyoverflow */
Packit a4aae4
# ifndef YYSTACK_RELOCATE
Packit a4aae4
      goto yyexhaustedlab;
Packit a4aae4
# else
Packit a4aae4
      /* Extend the stack our own way.  */
Packit a4aae4
      if (YYMAXDEPTH <= yystacksize)
Packit a4aae4
        goto yyexhaustedlab;
Packit a4aae4
      yystacksize *= 2;
Packit a4aae4
      if (YYMAXDEPTH < yystacksize)
Packit a4aae4
        yystacksize = YYMAXDEPTH;
Packit a4aae4
Packit a4aae4
      {
Packit a4aae4
        yytype_int16 *yyss1 = yyss;
Packit a4aae4
        union yyalloc *yyptr =
Packit a4aae4
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
Packit a4aae4
        if (! yyptr)
Packit a4aae4
          goto yyexhaustedlab;
Packit a4aae4
        YYSTACK_RELOCATE (yyss_alloc, yyss);
Packit a4aae4
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
Packit a4aae4
#  undef YYSTACK_RELOCATE
Packit a4aae4
        if (yyss1 != yyssa)
Packit a4aae4
          YYSTACK_FREE (yyss1);
Packit a4aae4
      }
Packit a4aae4
# endif
Packit a4aae4
#endif /* no yyoverflow */
Packit a4aae4
Packit a4aae4
      yyssp = yyss + yysize - 1;
Packit a4aae4
      yyvsp = yyvs + yysize - 1;
Packit a4aae4
Packit a4aae4
      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
Packit a4aae4
                  (unsigned long int) yystacksize));
Packit a4aae4
Packit a4aae4
      if (yyss + yystacksize - 1 <= yyssp)
Packit a4aae4
        YYABORT;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Packit a4aae4
Packit a4aae4
  if (yystate == YYFINAL)
Packit a4aae4
    YYACCEPT;
Packit a4aae4
Packit a4aae4
  goto yybackup;
Packit a4aae4
Packit a4aae4
/*-----------.
Packit a4aae4
| yybackup.  |
Packit a4aae4
`-----------*/
Packit a4aae4
yybackup:
Packit a4aae4
Packit a4aae4
  /* Do appropriate processing given the current state.  Read a
Packit a4aae4
     lookahead token if we need one and don't already have one.  */
Packit a4aae4
Packit a4aae4
  /* First try to decide what to do without reference to lookahead token.  */
Packit a4aae4
  yyn = yypact[yystate];
Packit a4aae4
  if (yypact_value_is_default (yyn))
Packit a4aae4
    goto yydefault;
Packit a4aae4
Packit a4aae4
  /* Not known => get a lookahead token if don't already have one.  */
Packit a4aae4
Packit a4aae4
  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
Packit a4aae4
  if (yychar == YYEMPTY)
Packit a4aae4
    {
Packit a4aae4
      YYDPRINTF ((stderr, "Reading a token: "));
Packit a4aae4
      yychar = yylex ();
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  if (yychar <= YYEOF)
Packit a4aae4
    {
Packit a4aae4
      yychar = yytoken = YYEOF;
Packit a4aae4
      YYDPRINTF ((stderr, "Now at end of input.\n"));
Packit a4aae4
    }
Packit a4aae4
  else
Packit a4aae4
    {
Packit a4aae4
      yytoken = YYTRANSLATE (yychar);
Packit a4aae4
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  /* If the proper action on seeing token YYTOKEN is to reduce or to
Packit a4aae4
     detect an error, take that action.  */
Packit a4aae4
  yyn += yytoken;
Packit a4aae4
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Packit a4aae4
    goto yydefault;
Packit a4aae4
  yyn = yytable[yyn];
Packit a4aae4
  if (yyn <= 0)
Packit a4aae4
    {
Packit a4aae4
      if (yytable_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
Packit a4aae4
     status.  */
Packit a4aae4
  if (yyerrstatus)
Packit a4aae4
    yyerrstatus--;
Packit a4aae4
Packit a4aae4
  /* Shift the lookahead token.  */
Packit a4aae4
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Packit a4aae4
Packit a4aae4
  /* Discard the shifted token.  */
Packit a4aae4
  yychar = YYEMPTY;
Packit a4aae4
Packit a4aae4
  yystate = yyn;
Packit a4aae4
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit a4aae4
  *++yyvsp = yylval;
Packit a4aae4
  YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit a4aae4
Packit a4aae4
  goto yynewstate;
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*-----------------------------------------------------------.
Packit a4aae4
| yydefault -- do the default action for the current state.  |
Packit a4aae4
`-----------------------------------------------------------*/
Packit a4aae4
yydefault:
Packit a4aae4
  yyn = yydefact[yystate];
Packit a4aae4
  if (yyn == 0)
Packit a4aae4
    goto yyerrlab;
Packit a4aae4
  goto yyreduce;
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*-----------------------------.
Packit a4aae4
| yyreduce -- Do a reduction.  |
Packit a4aae4
`-----------------------------*/
Packit a4aae4
yyreduce:
Packit a4aae4
  /* yyn is the number of a rule to reduce with.  */
Packit a4aae4
  yylen = yyr2[yyn];
Packit a4aae4
Packit a4aae4
  /* If YYLEN is nonzero, implement the default value of the action:
Packit a4aae4
     '$$ = $1'.
Packit a4aae4
Packit a4aae4
     Otherwise, the following line sets YYVAL to garbage.
Packit a4aae4
     This behavior is undocumented and Bison
Packit a4aae4
     users should not rely upon it.  Assigning to YYVAL
Packit a4aae4
     unconditionally makes the parser a bit smaller, and it avoids a
Packit a4aae4
     GCC warning that YYVAL may be used uninitialized.  */
Packit a4aae4
  yyval = yyvsp[1-yylen];
Packit a4aae4
Packit a4aae4
Packit a4aae4
  YY_REDUCE_PRINT (yyn);
Packit a4aae4
  switch (yyn)
Packit a4aae4
    {
Packit a4aae4
        case 2:
Packit a4aae4
#line 160 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    /* On entry to the parser, make the BaseType stack. 
Packit a4aae4
		       I use if (!ctor) here because in the tab.cc file,
Packit a4aae4
		       this is a case block in a switch, so it could be
Packit a4aae4
		       run more than once, causing the storage to be
Packit a4aae4
		       overwritten. jhrg 6/26/15 */
Packit a4aae4
		       
Packit a4aae4
		    if (!ctor)
Packit a4aae4
		    	ctor = new stack<BaseType *>;
Packit a4aae4
        }
Packit a4aae4
#line 1401 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 3:
Packit a4aae4
#line 171 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    delete ctor; ctor = 0;
Packit a4aae4
		}
Packit a4aae4
#line 1409 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 6:
Packit a4aae4
#line 181 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    (yyval.boolean) = (yyvsp[-3].boolean) && (yyvsp[-1].boolean);
Packit a4aae4
		}
Packit a4aae4
#line 1417 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 7:
Packit a4aae4
#line 185 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    parse_error((parser_arg *)arg, NO_DDS_MSG, dds_line_num, (yyvsp[0].word));
Packit a4aae4
		    error_exit_cleanup();
Packit a4aae4
		    YYABORT;
Packit a4aae4
		}
Packit a4aae4
#line 1427 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 8:
Packit a4aae4
#line 193 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    (yyval.boolean) = true;
Packit a4aae4
		}
Packit a4aae4
#line 1435 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 9:
Packit a4aae4
#line 196 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { (yyval.boolean) = true; }
Packit a4aae4
#line 1441 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 10:
Packit a4aae4
#line 197 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { (yyval.boolean) = true; }
Packit a4aae4
#line 1447 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 11:
Packit a4aae4
#line 207 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    string smsg;
Packit a4aae4
		    if (current->check_semantics(smsg)) {
Packit a4aae4
			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
Packit a4aae4
		    } else {
Packit a4aae4
		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-2].word), (yyvsp[-1].word));
Packit a4aae4
		      error_exit_cleanup();
Packit a4aae4
		      YYABORT;
Packit a4aae4
		    }
Packit a4aae4
            strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
Packit a4aae4
            (yyval.word)[ID_MAX-1] = '\0';
Packit a4aae4
		}
Packit a4aae4
#line 1464 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 12:
Packit a4aae4
#line 221 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    if( current ) delete current ;
Packit a4aae4
		    current = ctor->top(); 
Packit a4aae4
		    ctor->pop();
Packit a4aae4
		}
Packit a4aae4
#line 1474 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 13:
Packit a4aae4
#line 227 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    string smsg;
Packit a4aae4
		    if (current->check_semantics(smsg)) {
Packit a4aae4
			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
Packit a4aae4
			}
Packit a4aae4
		    else {
Packit a4aae4
		        invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-6].word), (yyvsp[-1].word));
Packit a4aae4
		        error_exit_cleanup();
Packit a4aae4
		        YYABORT;
Packit a4aae4
		    }
Packit a4aae4
            strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
Packit a4aae4
            (yyval.word)[ID_MAX-1] = '\0';
Packit a4aae4
		}
Packit a4aae4
#line 1492 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 14:
Packit a4aae4
#line 242 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    if( current ) delete current ;
Packit a4aae4
		    current = ctor->top(); 
Packit a4aae4
		    ctor->pop();
Packit a4aae4
		}
Packit a4aae4
#line 1502 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 15:
Packit a4aae4
#line 248 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    string smsg;
Packit a4aae4
		    if (current->check_semantics(smsg)) {
Packit a4aae4
			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
Packit a4aae4
			}
Packit a4aae4
		    else {
Packit a4aae4
		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-6].word), (yyvsp[-1].word));
Packit a4aae4
		      error_exit_cleanup();
Packit a4aae4
		      YYABORT;
Packit a4aae4
		    }
Packit a4aae4
            strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
Packit a4aae4
            (yyval.word)[ID_MAX-1] = '\0';
Packit a4aae4
		}
Packit a4aae4
#line 1520 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 16:
Packit a4aae4
#line 263 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    if (is_keyword(string((yyvsp[-1].word)), "array")) {
Packit a4aae4
			    part = libdap::array;
Packit a4aae4
			}
Packit a4aae4
		    else {
Packit a4aae4
			    ostringstream msg;
Packit a4aae4
			    msg << BAD_DECLARATION;
Packit a4aae4
			    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[-1].word));
Packit a4aae4
			    YYABORT;
Packit a4aae4
		    }
Packit a4aae4
        }
Packit a4aae4
#line 1536 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 17:
Packit a4aae4
#line 275 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    if (is_keyword(string((yyvsp[-1].word)), "maps")) {
Packit a4aae4
			    part = maps; 
Packit a4aae4
			}
Packit a4aae4
		    else {
Packit a4aae4
			    ostringstream msg;
Packit a4aae4
			    msg << BAD_DECLARATION;
Packit a4aae4
			    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[-1].word));
Packit a4aae4
			    YYABORT;
Packit a4aae4
		    }
Packit a4aae4
        }
Packit a4aae4
#line 1552 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 18:
Packit a4aae4
#line 287 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    if( current ) delete current ;
Packit a4aae4
		    current = ctor->top(); 
Packit a4aae4
		    ctor->pop();
Packit a4aae4
		}
Packit a4aae4
#line 1562 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 19:
Packit a4aae4
#line 293 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    string smsg;
Packit a4aae4
		    if (current->check_semantics(smsg)) {
Packit a4aae4
			    part = nil; 
Packit a4aae4
			    add_entry(*DDS_OBJ(arg), &ctor, &current, part); 
Packit a4aae4
		    }
Packit a4aae4
		    else {
Packit a4aae4
		      invalid_declaration((parser_arg *)arg, smsg, (yyvsp[-13].word), (yyvsp[-1].word));
Packit a4aae4
		      error_exit_cleanup();
Packit a4aae4
		      YYABORT;
Packit a4aae4
		    }
Packit a4aae4
        strncpy((yyval.word),(yyvsp[-1].word),ID_MAX);
Packit a4aae4
        (yyval.word)[ID_MAX-1] = '\0';
Packit a4aae4
		}
Packit a4aae4
#line 1581 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 20:
Packit a4aae4
#line 309 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    ostringstream msg;
Packit a4aae4
		    msg << BAD_DECLARATION;
Packit a4aae4
		    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[0].word));
Packit a4aae4
		    YYABORT;
Packit a4aae4
		}
Packit a4aae4
#line 1592 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 21:
Packit a4aae4
#line 319 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    ctor->push(DDS_OBJ(arg)->get_factory()->NewStructure()); 
Packit a4aae4
		}
Packit a4aae4
#line 1600 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 22:
Packit a4aae4
#line 325 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    ctor->push(DDS_OBJ(arg)->get_factory()->NewSequence()); 
Packit a4aae4
		}
Packit a4aae4
#line 1608 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 23:
Packit a4aae4
#line 331 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    ctor->push(DDS_OBJ(arg)->get_factory()->NewGrid()); 
Packit a4aae4
		}
Packit a4aae4
#line 1616 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 24:
Packit a4aae4
#line 336 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewByte(); }
Packit a4aae4
#line 1622 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 25:
Packit a4aae4
#line 337 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewInt16(); }
Packit a4aae4
#line 1628 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 26:
Packit a4aae4
#line 338 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewUInt16(); }
Packit a4aae4
#line 1634 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 27:
Packit a4aae4
#line 339 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewInt32(); }
Packit a4aae4
#line 1640 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 28:
Packit a4aae4
#line 340 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewUInt32(); }
Packit a4aae4
#line 1646 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 29:
Packit a4aae4
#line 341 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewFloat32(); }
Packit a4aae4
#line 1652 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 30:
Packit a4aae4
#line 342 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewFloat64(); }
Packit a4aae4
#line 1658 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 31:
Packit a4aae4
#line 343 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewStr(); }
Packit a4aae4
#line 1664 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 32:
Packit a4aae4
#line 344 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { if( current ) delete current ;current = DDS_OBJ(arg)->get_factory()->NewUrl(); }
Packit a4aae4
#line 1670 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 33:
Packit a4aae4
#line 347 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { current->set_name((yyvsp[0].word)); }
Packit a4aae4
#line 1676 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 49:
Packit a4aae4
#line 358 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		    if (!check_int32((yyvsp[-1].word))) {
Packit a4aae4
			    string msg = "In the dataset descriptor object:\n";
Packit a4aae4
			    msg += "Expected an array subscript.\n";
Packit a4aae4
			    parse_error((parser_arg *)arg, msg.c_str(), dds_line_num, (yyvsp[-1].word));
Packit a4aae4
		    }
Packit a4aae4
		    if (current->type() == dods_array_c && check_int32((yyvsp[-1].word))) {
Packit a4aae4
			    ((Array *)current)->append_dim(atoi((yyvsp[-1].word)));
Packit a4aae4
		    }
Packit a4aae4
		    else {
Packit a4aae4
			    Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
Packit a4aae4
			    a->add_var(current); 
Packit a4aae4
			    a->append_dim(atoi((yyvsp[-1].word)));
Packit a4aae4
			    if( current ) delete current ;
Packit a4aae4
			    current = a;
Packit a4aae4
		    }
Packit a4aae4
Packit a4aae4
		    (yyval.boolean) = true;
Packit a4aae4
		 }
Packit a4aae4
#line 1700 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 50:
Packit a4aae4
#line 379 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		     if (!id) id = new string((yyvsp[0].word));
Packit a4aae4
		 }
Packit a4aae4
#line 1708 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 51:
Packit a4aae4
#line 383 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { 
Packit a4aae4
		     if (!check_int32((yyvsp[0].word))) {
Packit a4aae4
			     string msg = "In the dataset descriptor object:\n";
Packit a4aae4
			     msg += "Expected an array subscript.\n";
Packit a4aae4
			     parse_error((parser_arg *)arg, msg.c_str(), dds_line_num, (yyvsp[0].word));
Packit a4aae4
			     error_exit_cleanup();
Packit a4aae4
			     YYABORT;
Packit a4aae4
		     }
Packit a4aae4
		     if (current->type() == dods_array_c) {
Packit a4aae4
			     ((Array *)current)->append_dim(atoi((yyvsp[0].word)), *id);
Packit a4aae4
		     }
Packit a4aae4
		     else {
Packit a4aae4
			     Array *a = DDS_OBJ(arg)->get_factory()->NewArray(); 
Packit a4aae4
			     a->add_var(current); 
Packit a4aae4
			     a->append_dim(atoi((yyvsp[0].word)), *id);
Packit a4aae4
			     if( current ) delete current ;
Packit a4aae4
			     current = a;
Packit a4aae4
		     }
Packit a4aae4
Packit a4aae4
		     delete id; id = 0;
Packit a4aae4
		 }
Packit a4aae4
#line 1734 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 52:
Packit a4aae4
#line 405 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		     (yyval.boolean) = true;
Packit a4aae4
		 }
Packit a4aae4
#line 1742 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 53:
Packit a4aae4
#line 410 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		     ostringstream msg;
Packit a4aae4
		     msg << "In the dataset descriptor object:" << endl
Packit a4aae4
			     << "Expected an array subscript." << endl;
Packit a4aae4
		     parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[0].word));
Packit a4aae4
		     YYABORT;
Packit a4aae4
		 }
Packit a4aae4
#line 1754 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 54:
Packit a4aae4
#line 419 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { (*DDS_OBJ(arg)).set_dataset_name((yyvsp[0].word)); (yyval.boolean) = true;}
Packit a4aae4
#line 1760 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 55:
Packit a4aae4
#line 420 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    { (*DDS_OBJ(arg)).set_dataset_name((yyvsp[0].word)); (yyval.boolean) = true; }
Packit a4aae4
#line 1766 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
  case 56:
Packit a4aae4
#line 422 "dds.yy" /* yacc.c:1661  */
Packit a4aae4
    {
Packit a4aae4
		    ostringstream msg;
Packit a4aae4
		    msg << "Error parsing the dataset name." << endl
Packit a4aae4
		        << "The name may be missing or may contain an illegal character." << endl;
Packit a4aae4
		    parse_error((parser_arg *)arg, msg.str().c_str(), dds_line_num, (yyvsp[0].word));
Packit a4aae4
		    YYABORT;
Packit a4aae4
		}
Packit a4aae4
#line 1778 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
    break;
Packit a4aae4
Packit a4aae4
Packit a4aae4
#line 1782 "dds.tab.cc" /* yacc.c:1661  */
Packit a4aae4
      default: break;
Packit a4aae4
    }
Packit a4aae4
  /* User semantic actions sometimes alter yychar, and that requires
Packit a4aae4
     that yytoken be updated with the new translation.  We take the
Packit a4aae4
     approach of translating immediately before every use of yytoken.
Packit a4aae4
     One alternative is translating here after every semantic action,
Packit a4aae4
     but that translation would be missed if the semantic action invokes
Packit a4aae4
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
Packit a4aae4
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
Packit a4aae4
     incorrect destructor might then be invoked immediately.  In the
Packit a4aae4
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
Packit a4aae4
     to an incorrect destructor call or verbose syntax error message
Packit a4aae4
     before the lookahead is translated.  */
Packit a4aae4
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
Packit a4aae4
Packit a4aae4
  YYPOPSTACK (yylen);
Packit a4aae4
  yylen = 0;
Packit a4aae4
  YY_STACK_PRINT (yyss, yyssp);
Packit a4aae4
Packit a4aae4
  *++yyvsp = yyval;
Packit a4aae4
Packit a4aae4
  /* Now 'shift' the result of the reduction.  Determine what state
Packit a4aae4
     that goes to, based on the state we popped back to and the rule
Packit a4aae4
     number reduced by.  */
Packit a4aae4
Packit a4aae4
  yyn = yyr1[yyn];
Packit a4aae4
Packit a4aae4
  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
Packit a4aae4
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Packit a4aae4
    yystate = yytable[yystate];
Packit a4aae4
  else
Packit a4aae4
    yystate = yydefgoto[yyn - YYNTOKENS];
Packit a4aae4
Packit a4aae4
  goto yynewstate;
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*--------------------------------------.
Packit a4aae4
| yyerrlab -- here on detecting error.  |
Packit a4aae4
`--------------------------------------*/
Packit a4aae4
yyerrlab:
Packit a4aae4
  /* Make sure we have latest lookahead translation.  See comments at
Packit a4aae4
     user semantic actions for why this is necessary.  */
Packit a4aae4
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
Packit a4aae4
Packit a4aae4
  /* If not already recovering from an error, report this error.  */
Packit a4aae4
  if (!yyerrstatus)
Packit a4aae4
    {
Packit a4aae4
      ++yynerrs;
Packit a4aae4
#if ! YYERROR_VERBOSE
Packit a4aae4
      yyerror (arg, YY_("syntax error"));
Packit a4aae4
#else
Packit a4aae4
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
Packit a4aae4
                                        yyssp, yytoken)
Packit a4aae4
      {
Packit a4aae4
        char const *yymsgp = YY_("syntax error");
Packit a4aae4
        int yysyntax_error_status;
Packit a4aae4
        yysyntax_error_status = YYSYNTAX_ERROR;
Packit a4aae4
        if (yysyntax_error_status == 0)
Packit a4aae4
          yymsgp = yymsg;
Packit a4aae4
        else if (yysyntax_error_status == 1)
Packit a4aae4
          {
Packit a4aae4
            if (yymsg != yymsgbuf)
Packit a4aae4
              YYSTACK_FREE (yymsg);
Packit a4aae4
            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
Packit a4aae4
            if (!yymsg)
Packit a4aae4
              {
Packit a4aae4
                yymsg = yymsgbuf;
Packit a4aae4
                yymsg_alloc = sizeof yymsgbuf;
Packit a4aae4
                yysyntax_error_status = 2;
Packit a4aae4
              }
Packit a4aae4
            else
Packit a4aae4
              {
Packit a4aae4
                yysyntax_error_status = YYSYNTAX_ERROR;
Packit a4aae4
                yymsgp = yymsg;
Packit a4aae4
              }
Packit a4aae4
          }
Packit a4aae4
        yyerror (arg, yymsgp);
Packit a4aae4
        if (yysyntax_error_status == 2)
Packit a4aae4
          goto yyexhaustedlab;
Packit a4aae4
      }
Packit a4aae4
# undef YYSYNTAX_ERROR
Packit a4aae4
#endif
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
Packit a4aae4
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
      if (yychar <= YYEOF)
Packit a4aae4
        {
Packit a4aae4
          /* Return failure if at end of input.  */
Packit a4aae4
          if (yychar == YYEOF)
Packit a4aae4
            YYABORT;
Packit a4aae4
        }
Packit a4aae4
      else
Packit a4aae4
        {
Packit a4aae4
          yydestruct ("Error: discarding",
Packit a4aae4
                      yytoken, &yylval, arg);
Packit a4aae4
          yychar = YYEMPTY;
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  /* Else will try to reuse lookahead token after shifting the error
Packit a4aae4
     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 (/*CONSTCOND*/ 0)
Packit a4aae4
     goto yyerrorlab;
Packit a4aae4
Packit a4aae4
  /* Do not reclaim the symbols of the rule whose action triggered
Packit a4aae4
     this YYERROR.  */
Packit a4aae4
  YYPOPSTACK (yylen);
Packit a4aae4
  yylen = 0;
Packit a4aae4
  YY_STACK_PRINT (yyss, yyssp);
Packit a4aae4
  yystate = *yyssp;
Packit a4aae4
  goto yyerrlab1;
Packit a4aae4
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
  for (;;)
Packit a4aae4
    {
Packit a4aae4
      yyn = yypact[yystate];
Packit a4aae4
      if (!yypact_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 (yyssp == yyss)
Packit a4aae4
        YYABORT;
Packit a4aae4
Packit a4aae4
Packit a4aae4
      yydestruct ("Error: popping",
Packit a4aae4
                  yystos[yystate], yyvsp, arg);
Packit a4aae4
      YYPOPSTACK (1);
Packit a4aae4
      yystate = *yyssp;
Packit a4aae4
      YY_STACK_PRINT (yyss, yyssp);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit a4aae4
  *++yyvsp = yylval;
Packit a4aae4
  YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit a4aae4
Packit a4aae4
Packit a4aae4
  /* Shift the error token.  */
Packit a4aae4
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Packit a4aae4
Packit a4aae4
  yystate = yyn;
Packit a4aae4
  goto yynewstate;
Packit a4aae4
Packit a4aae4
Packit a4aae4
/*-------------------------------------.
Packit a4aae4
| yyacceptlab -- YYACCEPT comes here.  |
Packit a4aae4
`-------------------------------------*/
Packit a4aae4
yyacceptlab:
Packit a4aae4
  yyresult = 0;
Packit a4aae4
  goto yyreturn;
Packit a4aae4
Packit a4aae4
/*-----------------------------------.
Packit a4aae4
| yyabortlab -- YYABORT comes here.  |
Packit a4aae4
`-----------------------------------*/
Packit a4aae4
yyabortlab:
Packit a4aae4
  yyresult = 1;
Packit a4aae4
  goto yyreturn;
Packit a4aae4
Packit a4aae4
#if !defined yyoverflow || YYERROR_VERBOSE
Packit a4aae4
/*-------------------------------------------------.
Packit a4aae4
| yyexhaustedlab -- memory exhaustion comes here.  |
Packit a4aae4
`-------------------------------------------------*/
Packit a4aae4
yyexhaustedlab:
Packit a4aae4
  yyerror (arg, YY_("memory exhausted"));
Packit a4aae4
  yyresult = 2;
Packit a4aae4
  /* Fall through.  */
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
yyreturn:
Packit a4aae4
  if (yychar != YYEMPTY)
Packit a4aae4
    {
Packit a4aae4
      /* Make sure we have latest lookahead translation.  See comments at
Packit a4aae4
         user semantic actions for why this is necessary.  */
Packit a4aae4
      yytoken = YYTRANSLATE (yychar);
Packit a4aae4
      yydestruct ("Cleanup: discarding lookahead",
Packit a4aae4
                  yytoken, &yylval, arg);
Packit a4aae4
    }
Packit a4aae4
  /* Do not reclaim the symbols of the rule whose action triggered
Packit a4aae4
     this YYABORT or YYACCEPT.  */
Packit a4aae4
  YYPOPSTACK (yylen);
Packit a4aae4
  YY_STACK_PRINT (yyss, yyssp);
Packit a4aae4
  while (yyssp != yyss)
Packit a4aae4
    {
Packit a4aae4
      yydestruct ("Cleanup: popping",
Packit a4aae4
                  yystos[*yyssp], yyvsp, arg);
Packit a4aae4
      YYPOPSTACK (1);
Packit a4aae4
    }
Packit a4aae4
#ifndef yyoverflow
Packit a4aae4
  if (yyss != yyssa)
Packit a4aae4
    YYSTACK_FREE (yyss);
Packit a4aae4
#endif
Packit a4aae4
#if YYERROR_VERBOSE
Packit a4aae4
  if (yymsg != yymsgbuf)
Packit a4aae4
    YYSTACK_FREE (yymsg);
Packit a4aae4
#endif
Packit a4aae4
  return yyresult;
Packit a4aae4
}
Packit a4aae4
#line 431 "dds.yy" /* yacc.c:1906  */
Packit a4aae4
Packit a4aae4
Packit a4aae4
/* 
Packit a4aae4
 This function must be defined. However, use the error reporting code in
Packit a4aae4
 parser-utils.cc.
Packit a4aae4
 */
Packit a4aae4
Packit a4aae4
void
Packit a4aae4
ddserror(parser_arg *, const string &)
Packit a4aae4
{
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/*
Packit a4aae4
 Error clean up. Call this before calling YYBORT. Don't call this on a
Packit a4aae4
 normal exit.
Packit a4aae4
 */
Packit a4aae4
Packit a4aae4
void error_exit_cleanup()
Packit a4aae4
{
Packit a4aae4
    delete id;
Packit a4aae4
    id = 0;
Packit a4aae4
    delete current;
Packit a4aae4
    current = 0;
Packit a4aae4
    delete ctor;
Packit a4aae4
    ctor = 0;
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/*
Packit a4aae4
 Invalid declaration message.
Packit a4aae4
 */
Packit a4aae4
Packit a4aae4
void invalid_declaration(parser_arg *arg, string semantic_err_msg, char *type, char *name)
Packit a4aae4
{
Packit a4aae4
    ostringstream msg;
Packit a4aae4
    msg << "In the dataset descriptor object: `" << type << " " << name << "'" << endl << "is not a valid declaration."
Packit a4aae4
            << endl << semantic_err_msg;
Packit a4aae4
    parse_error((parser_arg *) arg, msg.str().c_str(), dds_line_num);
Packit a4aae4
}
Packit a4aae4
Packit a4aae4
/*
Packit a4aae4
 Add the variable pointed to by CURRENT to either the topmost ctor object on
Packit a4aae4
 the stack CTOR or to the dataset variable table TABLE if CTOR is empty.  If
Packit a4aae4
 it exists, the current ctor object is popped off the stack and assigned to
Packit a4aae4
 CURRENT.
Packit a4aae4
Packit a4aae4
 NB: the ctor stack is popped for arrays because they are ctors which
Packit a4aae4
 contain only a single variable. For other ctor types, several variables may
Packit a4aae4
 be members and the parse rule (see `declaration' above) determines when to
Packit a4aae4
 pop the stack.
Packit a4aae4
Packit a4aae4
 Returns: void 
Packit a4aae4
 */
Packit a4aae4
Packit a4aae4
void add_entry(DDS &table, stack<BaseType *> **ctor, BaseType **current, Part part)
Packit a4aae4
{
Packit a4aae4
    if (!*ctor)
Packit a4aae4
        *ctor = new stack<BaseType *> ;
Packit a4aae4
Packit a4aae4
    if (!(*ctor)->empty()) { /* must be parsing a ctor type */
Packit a4aae4
        (*ctor)->top()->add_var(*current, part);
Packit a4aae4
Packit a4aae4
        const Type &ctor_type = (*ctor)->top()->type();
Packit a4aae4
Packit a4aae4
        if (ctor_type == dods_array_c) {
Packit a4aae4
            if (*current)
Packit a4aae4
                delete *current;
Packit a4aae4
            *current = (*ctor)->top();
Packit a4aae4
            (*ctor)->pop();
Packit a4aae4
Packit a4aae4
            // Return here to avoid deleting the new value of 'current.'
Packit a4aae4
            return;
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
    else {
Packit a4aae4
        table.add_var(*current);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    if (*current)
Packit a4aae4
        delete *current;
Packit a4aae4
    *current = 0;
Packit a4aae4
}
Packit a4aae4