Annotation of coherent/d/bin/yacc/yacc.h, revision 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.