freebsd-skq/sys/netiso/xebec/llparse.h
1994-05-24 10:09:53 +00:00

146 lines
3.2 KiB
C

/* $Header: llparse.h,v 2.1 88/09/19 12:56:20 nhall Exp $ */
/* $Source: /var/home/tadl/src/argo/xebec/RCS/llparse.h,v $ */
/************************************************************
attributes stack garbage
************************************************************/
#define LLMAXATTR 512
#define LLMAXDESC 256
#define LLATTR /* build an attribute stack */
/*
** attribute stack
**
** AttrStack = stack of record
** values : array of values;
** ptr : index;
** end;
**
*/
typedef union llattrib LLattrib;
extern LLattrib llattributes[LLMAXATTR];
extern int llattrtop;
extern struct llattr {
LLattrib *llabase; /* ptr into the attr stack (llattributes) */
int llaindex;/* # attrs on the stack so far for this prod */
int llacnt;/* total # ever to go on for this prod */
int lloldtop;/* when popping this prod, restore stack to here ;
one attr will remain on the stack (for the lhs) */
} llattrdesc[LLMAXDESC];
extern int lldescindex;
/************************************************************
attributes stack garbage
************************************************************/
extern struct lltoken {
short llterm; /* token number */
short llstate; /* inserted deleted normal */
LLattrib llattrib;
} lltoken;
typedef struct lltoken LLtoken;
/************************************************************
constants used in llparse.c
************************************************************/
#define STACKSIZE 500
#define MAXCORR 16
#define NORMAL 0
#define DELETE 1
#define INSERT 2
/************************************************************
datatypes used to communicate with the parser
************************************************************/
struct llinsert {
short llinscost;
short llinslength;
short llinsert[MAXCORR];
};
typedef struct llinsert LLinsert;
extern short llparsestack[];
extern short llstackptr;
extern short llinfinite;
/************************************************************
variables used to pass information
specific to each grammer
************************************************************/
extern short llnterms;
extern short llnsyms;
extern short llnprods;
extern char *llefile;
extern struct llparsetable {
short llterm;
short llprod;
} llparsetable[];
extern short llparseindex[];
extern short llepsilon[];
extern short llproductions[];
extern struct llprodindex {
short llprodstart;
short llprodlength;
short llprodtlen;
} llprodindex[];
extern struct llcosts {
short llinsert;
short lldelete;
} llcosts[];
extern struct llstable {
short llsstart;
short llslength;
} llstable[];
extern short llsspace[];
extern struct lletable {
short llecost;
short llelength;
short llestart;
} lletable[];
extern long lleindex[];
extern short llespace[];
extern char *llstrings[];
/************************************************************
routines defined in llparse.c
************************************************************/
extern llparse();
extern llcopye();
extern llcopys();
extern llcorrector();
extern llepsilonok();
extern llexpand();
extern short llfindaction();
extern llgetprefix();
extern llgettoken();
extern llinsert();
extern llinsertsym();
extern llinserttokens();
extern llparsererror();
extern llpushprod();
extern llreadetab();