xref: /onnv-gate/usr/src/cmd/sgs/yacc/common/dextern.h (revision 100:56ddb8295b81)
1*100Smike_s /*
2*100Smike_s  * CDDL HEADER START
3*100Smike_s  *
4*100Smike_s  * The contents of this file are subject to the terms of the
5*100Smike_s  * Common Development and Distribution License, Version 1.0 only
6*100Smike_s  * (the "License").  You may not use this file except in compliance
7*100Smike_s  * with the License.
8*100Smike_s  *
9*100Smike_s  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*100Smike_s  * or http://www.opensolaris.org/os/licensing.
11*100Smike_s  * See the License for the specific language governing permissions
12*100Smike_s  * and limitations under the License.
13*100Smike_s  *
14*100Smike_s  * When distributing Covered Code, include this CDDL HEADER in each
15*100Smike_s  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*100Smike_s  * If applicable, add the following below this CDDL HEADER, with the
17*100Smike_s  * fields enclosed by brackets "[]" replaced with your own identifying
18*100Smike_s  * information: Portions Copyright [yyyy] [name of copyright owner]
19*100Smike_s  *
20*100Smike_s  * CDDL HEADER END
21*100Smike_s  */
22*100Smike_s /*
23*100Smike_s  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*100Smike_s  * Use is subject to license terms.
25*100Smike_s  */
26*100Smike_s 
27*100Smike_s /* Copyright (c) 1988 AT&T */
28*100Smike_s /* All Rights Reserved */
29*100Smike_s 
30*100Smike_s #ifndef _DEXTERN_H
31*100Smike_s #define	_DEXTERN_H
32*100Smike_s 
33*100Smike_s #pragma ident	"%Z%%M%	%I%	%E% SMI"
34*100Smike_s 
35*100Smike_s #include <stdio.h>
36*100Smike_s #include <inttypes.h>
37*100Smike_s #include <ctype.h>
38*100Smike_s #include <memory.h>
39*100Smike_s #include <string.h>
40*100Smike_s #include <malloc.h>
41*100Smike_s #include <values.h>
42*100Smike_s #include <widec.h>
43*100Smike_s #include <unistd.h>
44*100Smike_s #include <stdlib.h>
45*100Smike_s #include <wctype.h>
46*100Smike_s 
47*100Smike_s #ifdef	__cplusplus
48*100Smike_s extern "C" {
49*100Smike_s #endif
50*100Smike_s 
51*100Smike_s 	/*  MANIFEST CONSTANT DEFINITIONS */
52*100Smike_s #if u3b || u3b15 || u3b2 || vax || uts || sparc
53*100Smike_s #define	WORD32
54*100Smike_s #endif
55*100Smike_s #include <libintl.h>
56*100Smike_s 
57*100Smike_s 	/* base of nonterminal internal numbers */
58*100Smike_s 
59*100Smike_s #define	NTBASE (10000000)
60*100Smike_s 
61*100Smike_s 	/* internal codes for error and accept actions */
62*100Smike_s 
63*100Smike_s #define	ERRCODE  8190
64*100Smike_s #define	ACCEPTCODE 8191
65*100Smike_s 
66*100Smike_s 	/* sizes and limits */
67*100Smike_s 
68*100Smike_s #define	ACTSIZE 4000
69*100Smike_s #define	MEMSIZE 2000
70*100Smike_s #define	PSTSIZE 1024
71*100Smike_s #define	NSTATES 1000
72*100Smike_s #define	NTERMS 127
73*100Smike_s #define	NPROD 300
74*100Smike_s #define	NNONTERM 600
75*100Smike_s #define	TEMPSIZE 800
76*100Smike_s #define	CNAMSZ 1000
77*100Smike_s #define	LSETSIZE 950
78*100Smike_s #define	WSETSIZE 850
79*100Smike_s 
80*100Smike_s #define	NAMESIZE 50
81*100Smike_s #define	NTYPES 1000
82*100Smike_s 
83*100Smike_s #define	NMBCHARSZ 100
84*100Smike_s #define	LKFACTOR 5
85*100Smike_s 
86*100Smike_s #ifdef WORD32
87*100Smike_s 	/* bit packing macros (may be machine dependent) */
88*100Smike_s #define	BIT(a, i) ((a)[(i)>>5] & (1<<((i)&037)))
89*100Smike_s #define	SETBIT(a, i) ((a)[(i)>>5] |= (1<<((i)&037)))
90*100Smike_s 
91*100Smike_s 	/* number of words needed to hold n+1 bits */
92*100Smike_s #define	NWORDS(n) (((n)+32)/32)
93*100Smike_s 
94*100Smike_s #else
95*100Smike_s 
96*100Smike_s 	/* bit packing macros (may be machine dependent) */
97*100Smike_s #define	BIT(a, i) ((a)[(i)>>4] & (1<<((i)&017)))
98*100Smike_s #define	SETBIT(a, i) ((a)[(i)>>4] |= (1<<((i)&017)))
99*100Smike_s 
100*100Smike_s 	/* number of words needed to hold n+1 bits */
101*100Smike_s #define	NWORDS(n) (((n)+16)/16)
102*100Smike_s #endif
103*100Smike_s 
104*100Smike_s 	/*
105*100Smike_s 	 * relationships which must hold:
106*100Smike_s 	 * TBITSET ints must hold NTERMS+1 bits...
107*100Smike_s 	 * WSETSIZE >= NNONTERM
108*100Smike_s 	 * LSETSIZE >= NNONTERM
109*100Smike_s 	 * TEMPSIZE >= NTERMS + NNONTERMs + 1
110*100Smike_s 	 * TEMPSIZE >= NSTATES
111*100Smike_s 	 */
112*100Smike_s 
113*100Smike_s 	/* associativities */
114*100Smike_s 
115*100Smike_s #define	NOASC 0  /* no assoc. */
116*100Smike_s #define	LASC 1  /* left assoc. */
117*100Smike_s #define	RASC 2  /* right assoc. */
118*100Smike_s #define	BASC 3  /* binary assoc. */
119*100Smike_s 
120*100Smike_s 	/* flags for state generation */
121*100Smike_s 
122*100Smike_s #define	DONE 0
123*100Smike_s #define	MUSTDO 1
124*100Smike_s #define	MUSTLOOKAHEAD 2
125*100Smike_s 
126*100Smike_s 	/* flags for a rule having an action, and being reduced */
127*100Smike_s 
128*100Smike_s #define	ACTFLAG 04
129*100Smike_s #define	REDFLAG 010
130*100Smike_s 
131*100Smike_s 	/* output parser flags */
132*100Smike_s #define	YYFLAG1 (-10000000)
133*100Smike_s 
134*100Smike_s 	/* macros for getting associativity and precedence levels */
135*100Smike_s 
136*100Smike_s #define	ASSOC(i) ((i)&07)
137*100Smike_s #define	PLEVEL(i) (((i)>>4)&077)
138*100Smike_s #define	TYPE(i)  ((i>>10)&077)
139*100Smike_s 
140*100Smike_s 	/* macros for setting associativity and precedence levels */
141*100Smike_s 
142*100Smike_s #define	SETASC(i, j) i |= j
143*100Smike_s #define	SETPLEV(i, j) i |= (j<<4)
144*100Smike_s #define	SETTYPE(i, j) i |= (j<<10)
145*100Smike_s 
146*100Smike_s 	/* looping macros */
147*100Smike_s 
148*100Smike_s #define	TLOOP(i) for (i = 1; i <= ntokens; ++i)
149*100Smike_s #define	NTLOOP(i) for (i = 0; i <= nnonter; ++i)
150*100Smike_s #define	PLOOP(s, i) for (i = s; i < nprod; ++i)
151*100Smike_s #define	SLOOP(i) for (i = 0; i < nstate; ++i)
152*100Smike_s #define	WSBUMP(x) ++x
153*100Smike_s #define	WSLOOP(s, j) for (j = s; j < &wsets[cwp]; ++j)
154*100Smike_s #define	ITMLOOP(i, p, q) q = pstate[i+1]; for (p = pstate[i]; p < q; ++p)
155*100Smike_s #define	SETLOOP(i) for (i = 0; i < tbitset; ++i)
156*100Smike_s 
157*100Smike_s 	/* I/O descriptors */
158*100Smike_s 
159*100Smike_s extern FILE *finput;		/* input file */
160*100Smike_s extern FILE *faction;		/* file for saving actions */
161*100Smike_s extern FILE *fdefine;		/* file for #defines */
162*100Smike_s extern FILE *ftable;		/* y.tab.c file */
163*100Smike_s extern FILE *ftemp;		/* tempfile to pass 2 */
164*100Smike_s extern FILE *fdebug;		/* tempfile for two debugging info arrays */
165*100Smike_s extern FILE *foutput;		/* y.output file */
166*100Smike_s 
167*100Smike_s 	/* structure declarations */
168*100Smike_s 
169*100Smike_s typedef struct looksets {
170*100Smike_s 	int *lset;
171*100Smike_s } LOOKSETS;
172*100Smike_s 
173*100Smike_s typedef struct item {
174*100Smike_s 	int *pitem;
175*100Smike_s 	LOOKSETS *look;
176*100Smike_s } ITEM;
177*100Smike_s 
178*100Smike_s typedef struct toksymb {
179*100Smike_s 	wchar_t *name;
180*100Smike_s 	int value;
181*100Smike_s } TOKSYMB;
182*100Smike_s 
183*100Smike_s typedef struct mbclit {
184*100Smike_s 	wchar_t character;
185*100Smike_s 	int tvalue; /* token issued for the character */
186*100Smike_s } MBCLIT;
187*100Smike_s 
188*100Smike_s typedef struct ntsymb {
189*100Smike_s 	wchar_t *name;
190*100Smike_s 	int tvalue;
191*100Smike_s } NTSYMB;
192*100Smike_s 
193*100Smike_s typedef struct wset {
194*100Smike_s 	int *pitem;
195*100Smike_s 	int flag;
196*100Smike_s 	LOOKSETS ws;
197*100Smike_s } WSET;
198*100Smike_s 
199*100Smike_s 	/* token information */
200*100Smike_s 
201*100Smike_s extern int ntokens;	/* number of tokens */
202*100Smike_s extern TOKSYMB *tokset;
203*100Smike_s extern int ntoksz;
204*100Smike_s 
205*100Smike_s 	/*
206*100Smike_s 	 * multibyte (c > 255) character literals are
207*100Smike_s 	 * handled as though they were tokens except
208*100Smike_s 	 * that it generates a separate mapping table.
209*100Smike_s 	 */
210*100Smike_s extern int nmbchars;	/* number of mb literals */
211*100Smike_s extern MBCLIT *mbchars;
212*100Smike_s extern int nmbcharsz;
213*100Smike_s 
214*100Smike_s 	/* nonterminal information */
215*100Smike_s 
216*100Smike_s extern int nnonter;	/* the number of nonterminals */
217*100Smike_s extern NTSYMB *nontrst;
218*100Smike_s extern int nnontersz;
219*100Smike_s 
220*100Smike_s 	/* grammar rule information */
221*100Smike_s 
222*100Smike_s extern int nprod;	/* number of productions */
223*100Smike_s extern int **prdptr;	/* pointers to descriptions of productions */
224*100Smike_s extern int *levprd;	/* contains production levels to break conflicts */
225*100Smike_s extern wchar_t *had_act; /* set if reduction has associated action code */
226*100Smike_s 
227*100Smike_s 	/* state information */
228*100Smike_s 
229*100Smike_s extern int nstate;		/* number of states */
230*100Smike_s extern ITEM **pstate;	/* pointers to the descriptions of the states */
231*100Smike_s extern int *tystate;	/* contains type information about the states */
232*100Smike_s extern int *defact;	/* the default action of the state */
233*100Smike_s 
234*100Smike_s extern int size;
235*100Smike_s 
236*100Smike_s 	/* lookahead set information */
237*100Smike_s 
238*100Smike_s extern int TBITSET;
239*100Smike_s extern LOOKSETS *lkst;
240*100Smike_s extern int nolook;  /* flag to turn off lookahead computations */
241*100Smike_s 
242*100Smike_s 	/* working set information */
243*100Smike_s 
244*100Smike_s extern WSET *wsets;
245*100Smike_s 
246*100Smike_s 	/* storage for productions */
247*100Smike_s 
248*100Smike_s extern int *mem0;
249*100Smike_s extern int *mem;
250*100Smike_s extern int *tracemem;
251*100Smike_s extern int new_memsize;
252*100Smike_s 
253*100Smike_s 	/* storage for action table */
254*100Smike_s 
255*100Smike_s extern int *amem;
256*100Smike_s extern int *memp;		/* next free action table position */
257*100Smike_s extern int *indgo;		/* index to the stored goto table */
258*100Smike_s extern int new_actsize;
259*100Smike_s 
260*100Smike_s 	/* temporary vector, indexable by states, terms, or ntokens */
261*100Smike_s 
262*100Smike_s extern int *temp1;
263*100Smike_s extern int lineno; /* current line number */
264*100Smike_s 
265*100Smike_s 	/* statistics collection variables */
266*100Smike_s 
267*100Smike_s extern int zzgoent;
268*100Smike_s extern int zzgobest;
269*100Smike_s extern int zzacent;
270*100Smike_s extern int zzexcp;
271*100Smike_s extern int zzrrconf;
272*100Smike_s extern int zzsrconf;
273*100Smike_s 
274*100Smike_s 	/* define external functions */
275*100Smike_s 
276*100Smike_s extern void setup(int, char *[]);
277*100Smike_s extern void closure(int);
278*100Smike_s extern void output(void);
279*100Smike_s extern void aryfil(int *, int, int);
280*100Smike_s extern void error(char *, ...);
281*100Smike_s extern void warning(int, char *, ...);
282*100Smike_s extern void putitem(int *, LOOKSETS *);
283*100Smike_s extern void go2out(void);
284*100Smike_s extern void hideprod(void);
285*100Smike_s extern void callopt(void);
286*100Smike_s extern void warray(wchar_t *, int *, int);
287*100Smike_s extern wchar_t *symnam(int);
288*100Smike_s extern wchar_t *writem(int *);
289*100Smike_s extern void exp_mem(int);
290*100Smike_s extern void exp_act(int **);
291*100Smike_s extern int apack(int *, int);
292*100Smike_s extern int state(int);
293*100Smike_s extern void fprintf3(FILE *, const char *, const wchar_t *, const char *, ...);
294*100Smike_s extern void error3(const char *, const wchar_t *, const char *, ...);
295*100Smike_s 
296*100Smike_s extern wchar_t *wscpy(wchar_t *, const wchar_t *);
297*100Smike_s extern size_t wslen(const wchar_t *);
298*100Smike_s extern int wscmp(const wchar_t *, const wchar_t *);
299*100Smike_s 
300*100Smike_s 
301*100Smike_s 	/* yaccpar location */
302*100Smike_s 
303*100Smike_s extern char *parser;
304*100Smike_s 
305*100Smike_s 	/* default settings for a number of macros */
306*100Smike_s 
307*100Smike_s 	/* name of yacc tempfiles */
308*100Smike_s 
309*100Smike_s #ifndef TEMPNAME
310*100Smike_s #define	TEMPNAME "yacc.tmp"
311*100Smike_s #endif
312*100Smike_s 
313*100Smike_s #ifndef ACTNAME
314*100Smike_s #define	ACTNAME "yacc.acts"
315*100Smike_s #endif
316*100Smike_s 
317*100Smike_s #ifndef DEBUGNAME
318*100Smike_s #define	DEBUGNAME "yacc.debug"
319*100Smike_s #endif
320*100Smike_s 
321*100Smike_s 	/* command to clobber tempfiles after use */
322*100Smike_s 
323*100Smike_s #ifndef ZAPFILE
324*100Smike_s #define	ZAPFILE(x) (void)unlink(x)
325*100Smike_s #endif
326*100Smike_s 
327*100Smike_s #ifndef PARSER
328*100Smike_s #define	PARSER "/usr/ccs/lib/yaccpar"
329*100Smike_s #endif
330*100Smike_s 
331*100Smike_s #ifdef	__cplusplus
332*100Smike_s }
333*100Smike_s #endif
334*100Smike_s 
335*100Smike_s #endif /* _DEXTERN_H */
336