|
|
1.1 ! root 1: /* ! 2: * @(#)dextern 4.2 (Berkeley) 3/21/86 ! 3: */ ! 4: # include <stdio.h> ! 5: # include <ctype.h> ! 6: # include "files" ! 7: ! 8: /* MANIFEST CONSTANT DEFINITIONS */ ! 9: ! 10: /* base of nonterminal internal numbers */ ! 11: # define NTBASE 010000 ! 12: ! 13: /* internal codes for error and accept actions */ ! 14: ! 15: # define ERRCODE 8190 ! 16: # define ACCEPTCODE 8191 ! 17: ! 18: /* sizes and limits */ ! 19: ! 20: # ifdef HUGE ! 21: # define ACTSIZE 12000 ! 22: # define MEMSIZE 24000 ! 23: # define NSTATES 750 ! 24: # define NTERMS 300 ! 25: # define NPROD 600 ! 26: # define NNONTERM 300 ! 27: # define TEMPSIZE 1200 ! 28: # define CNAMSZ 5000 ! 29: # define LSETSIZE 600 ! 30: # define WSETSIZE 350 ! 31: # endif ! 32: ! 33: # ifdef MEDIUM ! 34: # define ACTSIZE 4000 ! 35: # define MEMSIZE 5200 ! 36: # define NSTATES 600 ! 37: # define NTERMS 127 ! 38: # define NPROD 400 ! 39: # define NNONTERM 200 ! 40: # define TEMPSIZE 800 ! 41: # define CNAMSZ 4000 ! 42: # define LSETSIZE 450 ! 43: # define WSETSIZE 250 ! 44: # endif ! 45: ! 46: # define NAMESIZE 50 ! 47: # define NTYPES 63 ! 48: ! 49: # ifdef WORD32 ! 50: # define TBITSET ((32+NTERMS)/32) ! 51: ! 52: /* bit packing macros (may be machine dependent) */ ! 53: # define BIT(a,i) ((a)[(i)>>5] & (1<<((i)&037))) ! 54: # define SETBIT(a,i) ((a)[(i)>>5] |= (1<<((i)&037))) ! 55: ! 56: /* number of words needed to hold n+1 bits */ ! 57: # define NWORDS(n) (((n)+32)/32) ! 58: ! 59: # else ! 60: ! 61: # define TBITSET ((16+NTERMS)/16) ! 62: ! 63: /* bit packing macros (may be machine dependent) */ ! 64: # define BIT(a,i) ((a)[(i)>>4] & (1<<((i)&017))) ! 65: # define SETBIT(a,i) ((a)[(i)>>4] |= (1<<((i)&017))) ! 66: ! 67: /* number of words needed to hold n+1 bits */ ! 68: # define NWORDS(n) (((n)+16)/16) ! 69: # endif ! 70: ! 71: /* relationships which must hold: ! 72: TBITSET ints must hold NTERMS+1 bits... ! 73: WSETSIZE >= NNONTERM ! 74: LSETSIZE >= NNONTERM ! 75: TEMPSIZE >= NTERMS + NNONTERMs + 1 ! 76: TEMPSIZE >= NSTATES ! 77: */ ! 78: ! 79: /* associativities */ ! 80: ! 81: # define NOASC 0 /* no assoc. */ ! 82: # define LASC 1 /* left assoc. */ ! 83: # define RASC 2 /* right assoc. */ ! 84: # define BASC 3 /* binary assoc. */ ! 85: ! 86: /* flags for state generation */ ! 87: ! 88: # define DONE 0 ! 89: # define MUSTDO 1 ! 90: # define MUSTLOOKAHEAD 2 ! 91: ! 92: /* flags for a rule having an action, and being reduced */ ! 93: ! 94: # define ACTFLAG 04 ! 95: # define REDFLAG 010 ! 96: ! 97: /* output parser flags */ ! 98: # define YYFLAG1 (-1000) ! 99: ! 100: /* macros for getting associativity and precedence levels */ ! 101: ! 102: # define ASSOC(i) ((i)&03) ! 103: # define PLEVEL(i) (((i)>>4)&077) ! 104: # define TYPE(i) ((i>>10)&077) ! 105: ! 106: /* macros for setting associativity and precedence levels */ ! 107: ! 108: # define SETASC(i,j) i|=j ! 109: # define SETPLEV(i,j) i |= (j<<4) ! 110: # define SETTYPE(i,j) i |= (j<<10) ! 111: ! 112: /* looping macros */ ! 113: ! 114: # define TLOOP(i) for(i=1;i<=ntokens;++i) ! 115: # define NTLOOP(i) for(i=0;i<=nnonter;++i) ! 116: # define PLOOP(s,i) for(i=s;i<nprod;++i) ! 117: # define SLOOP(i) for(i=0;i<nstate;++i) ! 118: # define WSBUMP(x) ++x ! 119: # define WSLOOP(s,j) for(j=s;j<cwp;++j) ! 120: # define ITMLOOP(i,p,q) q=pstate[i+1];for(p=pstate[i];p<q;++p) ! 121: # define SETLOOP(i) for(i=0;i<tbitset;++i) ! 122: ! 123: /* I/O descriptors */ ! 124: ! 125: extern FILE * finput; /* input file */ ! 126: extern FILE * faction; /* file for saving actions */ ! 127: extern FILE *fdefine; /* file for # defines */ ! 128: extern FILE * ftable; /* y.tab.c file */ ! 129: extern FILE * ftemp; /* tempfile to pass 2 */ ! 130: extern FILE * foutput; /* y.output file */ ! 131: ! 132: /* structure declarations */ ! 133: ! 134: struct looksets { ! 135: int lset[TBITSET]; ! 136: }; ! 137: ! 138: struct item { ! 139: int *pitem; ! 140: struct looksets *look; ! 141: }; ! 142: ! 143: struct toksymb { ! 144: char *name; ! 145: int value; ! 146: }; ! 147: ! 148: struct ntsymb { ! 149: char *name; ! 150: int tvalue; ! 151: }; ! 152: ! 153: struct wset { ! 154: int *pitem; ! 155: int flag; ! 156: struct looksets ws; ! 157: }; ! 158: ! 159: /* token information */ ! 160: ! 161: extern int ntokens ; /* number of tokens */ ! 162: extern struct toksymb tokset[]; ! 163: extern int toklev[]; /* vector with the precedence of the terminals */ ! 164: ! 165: /* nonterminal information */ ! 166: ! 167: extern int nnonter ; /* the number of nonterminals */ ! 168: extern struct ntsymb nontrst[]; ! 169: ! 170: /* grammar rule information */ ! 171: ! 172: extern int nprod ; /* number of productions */ ! 173: extern int *prdptr[]; /* pointers to descriptions of productions */ ! 174: extern int levprd[] ; /* contains production levels to break conflicts */ ! 175: ! 176: /* state information */ ! 177: ! 178: extern int nstate ; /* number of states */ ! 179: extern struct item *pstate[]; /* pointers to the descriptions of the states */ ! 180: extern int tystate[]; /* contains type information about the states */ ! 181: extern int defact[]; /* the default action of the state */ ! 182: extern int tstates[]; /* the states deriving each token */ ! 183: extern int ntstates[]; /* the states deriving each nonterminal */ ! 184: extern int mstates[]; /* the continuation of the chains begun in tstates and ntstates */ ! 185: ! 186: /* lookahead set information */ ! 187: ! 188: extern struct looksets lkst[]; ! 189: extern int nolook; /* flag to turn off lookahead computations */ ! 190: ! 191: /* working set information */ ! 192: ! 193: extern struct wset wsets[]; ! 194: extern struct wset *cwp; ! 195: ! 196: /* storage for productions */ ! 197: ! 198: extern int mem0[]; ! 199: extern int *mem; ! 200: ! 201: /* storage for action table */ ! 202: ! 203: extern int amem[]; /* action table storage */ ! 204: extern int *memp ; /* next free action table position */ ! 205: extern int indgo[]; /* index to the stored goto table */ ! 206: ! 207: /* temporary vector, indexable by states, terms, or ntokens */ ! 208: ! 209: extern int temp1[]; ! 210: extern int lineno; /* current line number */ ! 211: ! 212: /* statistics collection variables */ ! 213: ! 214: extern int zzgoent ; ! 215: extern int zzgobest ; ! 216: extern int zzacent ; ! 217: extern int zzexcp ; ! 218: extern int zzclose ; ! 219: extern int zzrrconf ; ! 220: extern int zzsrconf ; ! 221: /* define functions with strange types... */ ! 222: ! 223: extern char *cstash(); ! 224: extern struct looksets *flset(); ! 225: extern char *symnam(); ! 226: extern char *writem(); ! 227: ! 228: /* default settings for a number of macros */ ! 229: ! 230: /* name of yacc tempfiles */ ! 231: ! 232: # ifndef TEMPNAME ! 233: # define TEMPNAME "yacc.tmp" ! 234: # endif ! 235: ! 236: # ifndef ACTNAME ! 237: # define ACTNAME "yacc.acts" ! 238: # endif ! 239: ! 240: /* output file name */ ! 241: ! 242: # ifndef OFILE ! 243: # define OFILE "y.tab.c" ! 244: # endif ! 245: ! 246: /* user output file name */ ! 247: ! 248: # ifndef FILEU ! 249: # define FILEU "y.output" ! 250: # endif ! 251: ! 252: /* output file for # defines */ ! 253: ! 254: # ifndef FILED ! 255: # define FILED "y.tab.h" ! 256: # endif ! 257: ! 258: /* command to clobber tempfiles after use */ ! 259: ! 260: # ifndef ZAPFILE ! 261: # define ZAPFILE(x) unlink(x) ! 262: # endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.