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