2018-12-07 05:21:03 +08:00
|
|
|
/* Copyright 2018, UCAR/Unidata and OPeNDAP, Inc.
|
2011-04-18 02:56:10 +08:00
|
|
|
See the COPYRIGHT file for more information. */
|
|
|
|
|
|
|
|
#ifndef DCEPARSELEX_H
|
|
|
|
#define DCEPARSELEX_H
|
|
|
|
|
|
|
|
#include "config.h"
|
2016-06-25 05:28:50 +08:00
|
|
|
|
|
|
|
/* Forward */
|
|
|
|
struct DCEparsestate;
|
|
|
|
typedef struct DCEparsestate DCEparsestate;
|
|
|
|
|
2011-04-18 02:56:10 +08:00
|
|
|
#include "dcetab.h"
|
|
|
|
|
2019-11-07 20:48:44 +08:00
|
|
|
#ifdef _WIN32
|
2012-12-06 02:35:42 +08:00
|
|
|
|
|
|
|
|
2011-04-18 02:56:10 +08:00
|
|
|
#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. */
|
2016-07-12 04:11:20 +08:00
|
|
|
struct DCEparsestate {
|
2011-04-18 02:56:10 +08:00
|
|
|
DCEconstraint* constraint;
|
|
|
|
char errorbuf[1024];
|
|
|
|
int errorcode;
|
|
|
|
DCElexstate* lexstate;
|
2016-07-12 04:11:20 +08:00
|
|
|
};
|
2011-04-18 02:56:10 +08:00
|
|
|
|
|
|
|
/* 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*);
|
|
|
|
|
2011-05-13 01:51:32 +08:00
|
|
|
extern int dceerror(DCEparsestate* state, char* msg);
|
2011-04-18 02:56:10 +08:00
|
|
|
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*/
|
|
|
|
|