Annotation of coherent/d/bin/yacc/yacc.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * COCOA structure definitions
                      3:  *
                      4:  * This parser generator is dedicated to Reinaldo Braga.
                      5:  * May he live a hundred years
                      6:  */
                      7: #include <stdio.h>
                      8: #include <sys/mdata.h>
                      9: 
                     10: #define FATAL 01               /* flag for yyerror */
                     11: #define SKIP 02                        /* ditto */
                     12: #define NLNO 04                        /* no line number on error line */
                     13: #define WARNING 010
                     14: #define TTERM 0                        /* "genre" for token */
                     15: #define TNTERM 1                       /* non terminal */
                     16: #define TTYPE 2                        /* <type> */
                     17: #define MAXT 3                 /* number of different genres */
                     18:                                /* if maxterm is > 127 change LSETSIZE  */
                     19: #define LSETSIZE 20            /* chars in ws ::= MAXTERM/8 + 1 */
                     20: 
                     21:                /* defaults -- can be changed with run time options */
                     22: #define MAXPROD 175            /* maximum number of productions */
                     23: #define MAXTERM 150            /* maximum number of different terminals */
                     24: #define MAXNTERM 100           /* maximum number of non terminal symbols */
                     25: #define MAXSTATE 300           /* max # of states */
                     26: #define MAXTYPE 10             /* for the union of YYSTYPE */
                     27: 
                     28:                /* compiled in sizes -- can be increased without problem */
                     29: #define MAXPRODL 20            /* maximum number of symbols in any prodn */
                     30: #define MAXITEM 160            /* maximum number of items in any state */
                     31: #define MAXREDS 60             /* maximum number of reductions per state */
                     32: 
                     33:                /* keyword codings */
                     34: #define START 1        
                     35:                /* %token .. %nonassoc must be contiguously coded */
                     36: #define TOKEN 2
                     37: #define LEFT 3
                     38: #define RIGHT 4
                     39: #define NONASSOC 5
                     40: #define UNION 6
                     41: #define PREC 7
                     42: #define TYPE 8
                     43: #define SEMICOLON 9
                     44: #define VBAR 10                /* production separators */
                     45: #define LBRAC 11       /* beginning of action */
                     46: #define T_IDENT 12
                     47: #define C_IDENT 13
                     48: #define MARK 14
                     49: #define IDENT 15
                     50: #define COMMA 16
                     51: #define INTEGER 17
                     52: 
                     53:        /* precedence associativities */
                     54: #define UNASSOC 0
                     55: #define LASSOC 1
                     56: #define RASSOC 2
                     57: #define BASSOC 3               /* "binary" associativity - %nonassoc */
                     58: 
                     59:                /* macros */
                     60:                /* character manipulation */
                     61: 
                     62:                /* run of the mill manifests */
                     63: #define UINT -1                        /* "unknown" type -- integer */
                     64: #define UNKNOWN -1
                     65: #define SYMSIZE 32
                     66: #define DERIV 01               /* non terminal derives the empty string */
                     67: #define CPRES 02               /* temp flag for closure */
                     68: #define nterm gtab[TTERM].g_ordno
                     69: #define nnonterm gtab[TNTERM].g_ordno
                     70: #define ntype gtab[TTYPE].g_ordno
                     71: #define maxterm gtab[TTERM].g_maxord
                     72: #define maxnterm gtab[TNTERM].g_maxord
                     73: #define maxtype gtab[TTYPE].g_maxord
                     74: #define maxsym (maxterm+maxnterm+maxtype)
                     75: #define NTBASE 010000          /* base number for non terminal allocation */
                     76: #define EOFNO 0
                     77: #define ERRNO 1
                     78: #define bounded(v,l,name) if( v>=l ) yyerror(FATAL, bounderr, name, l)
                     79: #define MAXSYM 353
                     80: 
                     81: 
                     82: 
                     83: struct sym
                     84: {
                     85:        char    s_name[SYMSIZE];
                     86:        int     s_no;   /* ordinal number of symbol */
                     87:        int     s_val;  /* external value, for non terminal only */
                     88:        char    s_prc, s_ass; /* precedence, associativity */
                     89:        int     s_type;
                     90:        char    s_genre; /* "kind" of symbol -- terminal, nonterminal, type */
                     91:                /* remaining flags are only used for non-terminals */
                     92: 
                     93:        char    s_flags;        /* for closure and lookahead computations */
                     94:        int     s_nprods;       /* number of productions having nt as lhs */
                     95:        struct prod **s_prods;
                     96:        int     s_nstates;      /* sfor nt A, # of states with item A->. ai* */
                     97:        int     *s_states;      /* list */
                     98: };
                     99: 
                    100: struct sitem
                    101: {
                    102:        int     i_nitems;       /* number of items in set */
                    103:        int     *i_items[];
                    104: } ;
                    105: 
                    106: struct state
                    107: {
                    108:        int     s_tgo;
                    109:        struct  tgo *s_tgos;
                    110:        int     s_ntgo;
                    111:        struct  ntgo *s_ntgos;
                    112:        int     s_nred;
                    113:        struct redn *s_reds;
                    114: } ;
                    115: 
                    116: struct prod
                    117: {
                    118:        int     p_prodno;       /* index in prdptr */
                    119:        char    p_prc, p_ass;   /* precedence, associativity */
                    120:        int     p_left;         /* -(ordinal number for lhs) */
                    121:        int     p_right[];      /* ordinal numbers for rhs w. -1 end marker */
                    122: };
                    123:                /* kludgy accessing macro */
                    124: #define i2p(leftp) ( (struct prod *) ( (char *)leftp - (int) &0->p_left) )
                    125: 
                    126: struct tgo
                    127: {
                    128:        int     tg_trm;         /* ordinal number of terminal */
                    129:        int     tg_st;
                    130: };
                    131: 
                    132: struct ntgo
                    133: {
                    134:        int     ng_nt;          /* ordinal number of non terminal */
                    135:        int     ng_st;          /* index of state */
                    136:        union {                         /* MWC DSC */
                    137:                struct rel *reln;       /* pointer to relation set */
                    138:                struct lset *look;      /* pointer to lookahead set */
                    139:        } cheapo;                       /* they're not used at once, so... */
                    140: };
                    141: #define ng_rel cheapo.reln
                    142: #define ng_lset cheapo.look
                    143: 
                    144: struct redn
                    145: {
                    146:        struct prod *rd_prod;   /* production pointer */
                    147:        struct lset *rd_lset;   /* lookahead set */
                    148: };
                    149: 
                    150: /* relation between nt transitions */
                    151: struct rel
                    152: {
                    153:        int     r_count;
                    154:        int     r_list[];
                    155: };
                    156: 
                    157: struct trans
                    158: {
                    159:        struct ntgo *t_trans;
                    160:        int     t_level;
                    161: };
                    162: 
                    163: struct lset
                    164: {
                    165:        union {
                    166:                unsigned char u_bits[LSETSIZE];
                    167:                struct  lset *u_next;
                    168:        } un;
                    169: };
                    170: #define l_bits un.u_bits
                    171: #define l_next un.u_next
                    172: 
                    173: struct resv
                    174: {
                    175:        char    *r_name;
                    176:        int     r_val;
                    177: };
                    178: 
                    179: struct genre
                    180: {
                    181:        int     g_ordno;                /* current index for table ptr */
                    182:        int     g_maxord;               /* limit value for g_ordno */
                    183:        int     g_base;                 /* "base" value for s_no */
                    184:        struct sym ***g_sptr;   /* pointer to table for type - MWC DSC */
                    185:        char    *g_name;
                    186: };
                    187: 
                    188: typedef union
                    189: {
                    190:        struct  sym *sptr;
                    191:        int     ival;
                    192: } YYSTYPE;
                    193: 
                    194: extern struct sym **symtab;    /* global symbol table */
                    195: extern struct sym **ntrmptr;   /* non terminal pointers into symtab */
                    196: extern struct sym **trmptr;    /* " terminal " " */
                    197: extern struct sym **typeptr;   /* " type " " */
                    198: extern struct state *states;
                    199: extern struct sitem **items;
                    200: extern struct prod **prdptr;
                    201: extern int yyline;
                    202: extern nerrors;
                    203: extern FILE *defin, *tabout, *actout, *listout, *optout, *fhdr;
                    204: extern int tno;
                    205: extern char *gramy;    /* input file name */
                    206: extern char *ytabc;    /* y.tab.c output file */
                    207: extern char *youtput;  /* listing file */
                    208: extern char *ytabh;    /* header file for token # definers */
                    209: extern char acttmp[], opttmp[];
                    210: extern char *parser;
                    211: extern char    bounderr[];
                    212: extern struct sitem *nititem;
                    213: extern struct prod *nitprod;
                    214: extern verbose, yydebug;
                    215: extern pstat;
                    216: extern int nstates;
                    217: extern int nprod;
                    218: extern int maxstates;
                    219: extern int maxprod;
                    220: extern int nrrconf, nsrconf;
                    221: extern int ndupgos, ndupacts;
                    222: extern struct genre gtab[MAXT];
                    223: extern int startsym;
                    224: extern int predlev;
                    225: extern struct resv restab[];
                    226: 
                    227: char   *calloc();
                    228: char   *yalloc();
                    229: char   *ptosym();
                    230: char   *prsym();
                    231: char   *nextarg();
                    232: struct ntgo    *findnt();
                    233: struct lset    *getset();

unix.superglobalmegacorp.com

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