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