Annotation of 41BSD/cmd/yacc/dextern, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.