/* * DTXTRN.H -- Original extern file for UNIX YACC. * * Modified to call in "decus" or "vax11c" .H files to set up * parameters as appropriate. */ # include # include "system.h" /* MANIFEST CONSTANT DEFINITIONS */ /* base of nonterminal internal numbers */ # define NTBASE 010000 /* internal codes for error and accept actions */ # define ERRCODE 8190 # define ACCEPTCODE 8191 /* sizes and limits */ # ifdef HUGETAB # define ACTSIZE 12000 # define MEMSIZE 12000 # define NSTATES 750 # define NTERMS 127 # define NPROD 600 # define NNONTERM 300 # define TEMPSIZE 1200 # define CNAMSZ 5000 # define LSETSIZE 600 # define WSETSIZE 350 # endif # ifdef MEDTAB # define ACTSIZE 4000 # define MEMSIZE 5200 # define NSTATES 600 # define NTERMS 127 # define NPROD 400 # define NNONTERM 200 # define TEMPSIZE 800 # define CNAMSZ 4000 # define LSETSIZE 450 # define WSETSIZE 250 # endif # ifdef SMALLTAB # define ACTSIZE 1000 # define MEMSIZE 1500 # define NSTATES 450 # define NTERMS 127 # define NPROD 200 # define NNONTERM 100 # define TEMPSIZE 600 # define CNAMSZ 1000 # define LSETSIZE 200 # define WSETSIZE 125 # endif # define NAMESIZE 50 # define NTYPES 63 # ifdef WORD32 # define TBITSET ( ( 32 + NTERMS ) / 32 ) /* bit packing macros (may be machine dependent) */ # define BIT( a, i ) ( ( a )[ ( i ) >> 5 ] & ( 1 << ( ( i ) &\ 037 ) ) ) # define SETBIT( a, i ) ( ( a )[ ( i ) >> 5 ] |= ( 1 << ( ( i ) &\ 037 ) ) ) /* number of words needed to hold n+1 bits */ # define NWORDS( n ) ( ( ( n ) + 32 ) / 32 ) # else # define TBITSET ( ( 16 + NTERMS ) / 16 ) /* bit packing macros (may be machine dependent) */ # define BIT( a, i ) ( ( a )[ ( i ) >> 4 ] & ( 1 << ( ( i ) &\ 017 ) ) ) # define SETBIT( a, i ) ( ( a )[ ( i ) >> 4 ] |= ( 1 << ( ( i ) &\ 017 ) ) ) /* number of words needed to hold n+1 bits */ # define NWORDS( n ) ( ( ( n ) + 16 ) / 16 ) # endif /* relationships which must hold: TBITSET ints must hold NTERMS+1 bits... WSETSIZE >= NNONTERM LSETSIZE >= NNONTERM TEMPSIZE >= NTERMS + NNONTERMs + 1 TEMPSIZE >= NSTATES */ /* 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 ) & 077 ) # define TYPE( i ) ( ( i >> 10 ) & 077 ) /* macros for setting associativity and precedence levels */ # define SETASC( i, j ) i |= j # define SETPLEV( i, j ) i |= ( j << 4 ) # define SETTYPE( i, j ) i |= ( j << 10 ) /* looping macros */ # define TLOOP( i ) for ( i = 1; i <= ntokens; ++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 ) /* I/O descriptors */ # ifndef y2imp 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 */ # endif /* structure declarations */ struct looksets { int lset[ TBITSET ]; } ; struct item { int * pitem; struct looksets * look; } ; struct toksymb { char * name; int value; } ; struct ntsymb { char * name; int tvalue; } ; struct wset { int * pitem; int flag; struct looksets ws; } ; # ifndef y2imp /* token information */ extern int ntokens; /* number of tokens */ extern struct toksymb tokset[ ]; extern int toklev[ ]; /* vector with the precedence of the terminals */ # endif /* nonterminal information */ # ifndef y2imp extern int nnonter; /* the number of nonterminals */ extern struct ntsymb nontrst[ ]; # endif /* grammar rule information */ # ifndef y2imp extern int nprod; /* number of productions */ extern int * prdptr[ ]; /* pointers to descriptions of productions */ extern int levprd[ ]; /* contains production levels to break conflicts */ # endif /* state information */ # ifndef y1imp extern int nstate; /* number of states */ extern struct item * pstate[ ]; /* pointers to the descriptions of the states */ extern int tystate[ ]; /* contains type information about the states */ # ifndef y3imp extern int defact[ ]; /* the default action of the state */ # endif extern int tstates[ ]; /* the states deriving each token */ extern int ntstates[ ]; /* the states deriving each nonterminal */ extern int mstates[ ]; /* the continuation of the chains begun in tstates and ntstates */ # endif /* lookahead set information */ # ifndef y1imp extern struct looksets lkst[ ]; extern int nolook; /* flag to turn off lookahead computations */ # endif /* working set information */ # ifndef y1imp extern struct wset wsets[ ]; extern struct wset * cwp; # endif /* storage for productions */ # ifndef y2imp extern int mem0[ ]; extern int * mem; # endif /* storage for action table */ # ifndef y1imp extern int amem[ ]; /* action table storage */ extern int * memp; /* next free action table position */ extern int indgo[ ]; /* index to the stored goto table */ /* temporary vector, indexable by states, terms, or ntokens */ extern int temp1[ ]; extern int lineno; /* current line number */ /* statistics collection variables */ extern int zzgoent; extern int zzgobest; extern int zzacent; extern int zzexcp; extern int zzclose; extern int zzrrconf; extern int zzsrconf; # endif /* define functions with strange types... */ extern char * cstash( ); extern struct looksets * flset( ); extern char * symnam( ); extern char * writem( ); extern char * chcopy( ); /* default settings for a number of macros */ # define ISIZE 400 /* Specific for static in cpres() */ /* name of yacc tempfiles */ # ifndef TEMPNAME # define TEMPNAME "yacc.tmp" # endif # ifndef ACTNAME # define ACTNAME "yacc.act" # endif /* output file name */ # ifndef OFILE # define OFILE "ytab.c" # endif /* user output file name */ # ifndef FILEU # define FILEU "y.out" # endif /* output file for #defines */ # ifndef FILED # define FILED "ytab.h" # endif /* Size of complete filespec */ # ifndef FNAMESIZE # define FNAMESIZE 32 # endif /* command to clobber tempfiles after use */ # ifndef ZAPFILE # define ZAPFILE( x ) unlink( x ) # endif