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