netcdf-c/libdap2/dceparselex.h
Dennis Heimbigner d3f44747f1 A couple of people have reported that
the multiple definitions of
    typedef struct DCEparsestate
near lines 10 and 42 causes compiler
problems with some versions of gcc.
remove the second typedef.
2016-07-11 14:11:20 -06:00

106 lines
3.4 KiB
C

/* Copyright 2009, UCAR/Unidata and OPeNDAP, Inc.
See the COPYRIGHT file for more information. */
#ifndef DCEPARSELEX_H
#define DCEPARSELEX_H
#include "config.h"
/* Forward */
struct DCEparsestate;
typedef struct DCEparsestate DCEparsestate;
#include "dcetab.h"
#ifdef WIN32
#endif
/* For consistency with Java parser */
#ifndef null
#define null NULL
#endif
typedef void* Object;
#define YYSTYPE Object
#define MAX_TOKEN_LENGTH 1024
/*! Specifies DCElexstate. */
typedef struct DCElexstate {
char* input;
char* next; /* next char in uri.query */
NCbytes* yytext;
/*! Specifies the Lasttoken. */
int lasttoken;
char lasttokentext[MAX_TOKEN_LENGTH+1]; /* leave room for trailing null */
NClist* reclaim; /* reclaim SCAN_WORD instances */
} DCElexstate;
/*! Specifies DCEparsestate. */
struct DCEparsestate {
DCEconstraint* constraint;
char errorbuf[1024];
int errorcode;
DCElexstate* lexstate;
};
/* Define a generic object carrier; this serves
essentially the same role as the typical bison %union
declaration
*/
extern int ceerror(DCEparsestate*,char*);
extern void ce_parse_error(DCEparsestate*,const char *fmt, ...);
/* bison parse entry point */
extern int dceparse(DCEparsestate*);
extern int dceerror(DCEparsestate* state, char* msg);
extern void projections(DCEparsestate* state, Object list0);
extern void selections(DCEparsestate* state, Object list0);
extern Object projectionlist(DCEparsestate* state, Object list0, Object decl);
extern Object projection(DCEparsestate* state, Object segmentlist);
extern Object segmentlist(DCEparsestate* state, Object list0, Object decl);
extern Object segment(DCEparsestate* state, Object name, Object slices0);
extern Object array_indices(DCEparsestate* state, Object list0, Object decl);
extern Object range(DCEparsestate* state, Object, Object, Object);
extern Object selectionlist(DCEparsestate* state, Object list0, Object decl);
extern Object sel_clause(DCEparsestate* state, int selcase, Object path0, Object relop0, Object values);
extern Object selectionpath(DCEparsestate* state, Object list0, Object text);
extern Object arrayelement(DCEparsestate* state, Object name, Object index);
extern Object function(DCEparsestate* state, Object fcnname, Object args);
extern Object arg_list(DCEparsestate* state, Object list0, Object decl);
extern Object value_list(DCEparsestate* state, Object list0, Object decl);
extern Object value(DCEparsestate* state, Object value);
extern Object makeselectiontag(CEsort);
extern Object indexer(DCEparsestate* state, Object name, Object indices);
extern Object indexpath(DCEparsestate* state, Object list0, Object index);
extern Object var(DCEparsestate* state, Object indexpath);
extern Object constant(DCEparsestate* state, Object val, int tag);
extern Object clauselist(DCEparsestate* state, Object list0, Object decl);
extern Object range1(DCEparsestate* state, Object rangenumber);
extern Object rangelist(DCEparsestate* state, Object list0, Object decl);
/* lexer interface */
extern int dcelex(YYSTYPE*, DCEparsestate*);
extern void dcelexinit(char* input, DCElexstate** lexstatep);
extern void dcelexcleanup(DCElexstate** lexstatep);
extern int dcedebug;
#ifdef PARSEDEBUG
extern Object debugobject(Object);
#define checkobject(x) debugobject(x)
#else
#define checkobject(x) (x)
#endif
extern int dapceparse(char* input, DCEconstraint*, char**);
#endif /*DCEPARSELEX_H*/