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