PWB1/sys/source/s2/yacc.d/dextern

# include <stdio.h>

/*  MANIFEST CONSTANT DEFINITIONS */

# define NTBASE 010000

  /* internal codes for error and accept actions */

# define ERRCODE  8190
# define ACCEPTCODE 8191

# define _actsize 1500
# define _memsize 4000
# define _nstates 475
# define _nterms 95
# define _nprod 250
# define _nnonterm 150
# define _tempsize 475
# define _cnamsz 2000
# define _lsetsize 250
# define _wsetsize 150
# define _namesize 50

# define _tbitset 6

	/* relationships which must hold:
	_tbitset ints must hold _nterms+1 bits...
	_wsetsize >= _nnonterm
	_lsetsize >= _nnonterm
	_tempsize >= _nterms + _nnonterms + 1
	_tempsize >= _nstates
	*/

extern int tbitset;  /* number of wds of lookahead vector */
extern int nolook;  /* flag to turn off lookahed computations */
struct looksets { int lset[ _tbitset ]; } ;
struct item { int *pitem; struct looksets *look; } ;

	/* associativities */

# define NOASC 0  /* no assoc. */
# define LASC 1  /* left assoc. */
# define RASC 2  /* right assoc. */
# define BASC 3  /* binary assoc. */

	/* flags for state generation */

# define DONE 0
# define MUSTDO 1
# define MUSTLOOKAHEAD 2

	/* flags for a rule having an action, and being reduced */

# define ACTFLAG 04
# define REDFLAG 010

	/* output parser flags */
# define YYFLAG1 (-1000)

	/* macros for getting associativity and precedence levels */

# define ASSOC(i) ((i)&03)
# define PLEVEL(i) ((i)>>4)

	/* macros for setting associativity and precedence levels */

# define SETASC(i,j) i=|j
# define SETPLEV(i,j) i =| (j<<4)

	/* looping macros */

# define TLOOP(i) for(i=1;i<=nterms;++i)
# define NTLOOP(i) for(i=0;i<=nnonter;++i)
# define PLOOP(s,i) for(i=s;i<nprod;++i)
# define SLOOP(i) for(i=0;i<nstate;++i)
# define WSBUMP(x) ++x
# define WSLOOP(s,j) for(j=s;j<cwp;++j)
# define ITMLOOP(i,p,q) q=pstate[i+1];for(p=pstate[i];p<q;++p)
# define SETLOOP(i) for(i=0;i<tbitset;++i)

extern int nstate ;		/* number of states */
extern struct item *pstate[];	/* pointers to the descriptions of the states */
extern int actsiz;  	/* size of the action table array */
extern int tystate[];	/* contains type information about the states */
  /* 0 = simple state, completely generated
     1 = state awaiting generation
     2 = state with an empty production in closure 
     */
extern int stsize ;	/* maximum number of states, at present */
extern int memsiz ;	/* maximum size for productions and states */
extern int mem0[] ; /* added production */
extern int *mem ;
extern int amem[];  /* action table storage */
extern int actsiz;  /* action table size */
extern int *memp ;		/* next free action table position */
extern int nprod ;	/* number of productions */
extern int *prdptr[];	/* pointers to descriptions of productions */
extern int prdlim; /* the number of productions allowed */
extern int levprd[] ;	/* contains production levels to break conflicts */
extern int nterms ;	/* number of terminals */
extern int nerrors;	/* number of errors */
extern int fatfl;  	/* if on, error is fatal */
extern int extval;  /* start of output values */
extern struct sxxx1 {char *name; int value;} trmset[];
extern char tokname[];
extern char cnames[];
extern int cnamsz;
extern char *cnamp;
 /* temporary vectors, indexable by states, terms, or nterms */
extern int temp1[];
extern int trmlev[];	/* vector with the precedence of the terminals */
  /* The levels are the same as for levprd, but bit 04 is always 0 */
  /* the ascii representations of the nonterminals */
extern struct sxxx2 { char *name; } nontrst[];
extern int indgo[];		/* index to the stored goto table */
extern int defact[];
extern int ***pres; /* vector of pointers to the productions yielding each nonterminal */
extern struct looksets **pfirst; /* vector of pointers to first sets for each nonterminal */
extern int *pempty ; /* table of nonterminals nontrivially deriving e */
extern int nnonter ;	/* the number of nonterminals */
extern int lastred ;	/* the number of the last reduction of a state */

extern FILE * finput;		/* input file */
extern FILE * faction;		/* file for saving actions */
extern FILE *fdefine;		/* file for # defines */
extern FILE * ftable;		/* y.tab.c file */
extern FILE * ftemp;		/* tempfile to pass 2 */
extern FILE * foutput;		/* y.output file */
extern FILE *fopen();

extern struct wset *zzcwp;
extern int zzgoent ;
extern int zzgobest ;
extern int zzacent ;
extern int zzexcp ;
extern int zzclose ;
extern int zzrrconf ;
extern int zzsrconf ;
extern int zzmemsz;
extern int ntlim ;	/* maximum number of nonterminals */
extern int tlim ;	/* maximum number of terminals */
extern int lineno; /* current line number */
extern int tstates[];
extern int ntstates[];
extern int mstates[];

extern struct looksets clset;
extern struct looksets lkst[];
extern int nlset;  /* next lookahead set index */
extern int lsetsz; /* number of lookahead sets */

extern struct wset { int *pitem, flag, ws[ _tbitset ]; } wsets[];
extern struct wset *cwp;
extern int wssize;

extern int numbval;  /* the value of an input number */
extern char lflag;   /* language: 0 = C, 1 = RATFOR, 2 = EFL */
extern int ndefout;  /* number of defined symbols output */


# define C 0
# define RATFOR 1
# define EFL 2

/* define a couple of functions with strange types... */

extern char *cstash();
extern struct looksets *flset();
extern char *symnam();
extern char *writem();
extern int *yalloc();

	/* a lot of arrays containing code indexed by lflag */
extern char *ofiles[];
extern int oflags[];
extern char *excfb[], *excfsb[], *excfc[], *excfse[], *excfe[];
extern char *parser[];
extern int carray(), rarray(), earray();
extern int (*warray[])();
extern char *ndefs[];
extern char *acts[], *acte[], *dollar[];