xref: /original-bsd/old/yacc/dextern (revision aba77441)
1/*
2 * @(#)dextern	4.1	(Berkeley)	02/11/83
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 12000
23# define NSTATES 750
24# define NTERMS 127
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
125extern FILE * finput;		/* input file */
126extern FILE * faction;		/* file for saving actions */
127extern FILE *fdefine;		/* file for # defines */
128extern FILE * ftable;		/* y.tab.c file */
129extern FILE * ftemp;		/* tempfile to pass 2 */
130extern FILE * foutput;		/* y.output file */
131
132	/* structure declarations */
133
134struct looksets {
135	int lset[TBITSET];
136	};
137
138struct item {
139	int *pitem;
140	struct looksets *look;
141	};
142
143struct toksymb {
144	char *name;
145	int value;
146	};
147
148struct ntsymb {
149	char *name;
150	int tvalue;
151	};
152
153struct wset {
154	int *pitem;
155	int flag;
156	struct looksets ws;
157	};
158
159	/* token information */
160
161extern int ntokens ;	/* number of tokens */
162extern struct toksymb tokset[];
163extern int toklev[];	/* vector with the precedence of the terminals */
164
165	/* nonterminal information */
166
167extern int nnonter ;	/* the number of nonterminals */
168extern struct ntsymb nontrst[];
169
170	/* grammar rule information */
171
172extern int nprod ;	/* number of productions */
173extern int *prdptr[];	/* pointers to descriptions of productions */
174extern int levprd[] ;	/* contains production levels to break conflicts */
175
176	/* state information */
177
178extern int nstate ;		/* number of states */
179extern struct item *pstate[];	/* pointers to the descriptions of the states */
180extern int tystate[];	/* contains type information about the states */
181extern int defact[];	/* the default action of the state */
182extern int tstates[];	/* the states deriving each token */
183extern int ntstates[];	/* the states deriving each nonterminal */
184extern int mstates[];	/* the continuation of the chains begun in tstates and ntstates */
185
186	/* lookahead set information */
187
188extern struct looksets lkst[];
189extern int nolook;  /* flag to turn off lookahead computations */
190
191	/* working set information */
192
193extern struct wset wsets[];
194extern struct wset *cwp;
195
196	/* storage for productions */
197
198extern int mem0[];
199extern int *mem;
200
201	/* storage for action table */
202
203extern int amem[];  /* action table storage */
204extern int *memp ;		/* next free action table position */
205extern int indgo[];		/* index to the stored goto table */
206
207	/* temporary vector, indexable by states, terms, or ntokens */
208
209extern int temp1[];
210extern int lineno; /* current line number */
211
212	/* statistics collection variables */
213
214extern int zzgoent ;
215extern int zzgobest ;
216extern int zzacent ;
217extern int zzexcp ;
218extern int zzclose ;
219extern int zzrrconf ;
220extern int zzsrconf ;
221	/* define functions with strange types... */
222
223extern char *cstash();
224extern struct looksets *flset();
225extern char *symnam();
226extern 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
263