|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1989 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Robert Paul Corbett. ! 7: * ! 8: * Redistribution and use in source and binary forms are permitted provided ! 9: * that: (1) source distributions retain this entire copyright notice and ! 10: * comment, and (2) distributions including binaries display the following ! 11: * acknowledgement: ``This product includes software developed by the ! 12: * University of California, Berkeley and its contributors'' in the ! 13: * documentation or other materials provided with the distribution and in ! 14: * all advertising materials mentioning features or use of this software. ! 15: * Neither the name of the University nor the names of its contributors may ! 16: * be used to endorse or promote products derived from this software without ! 17: * specific prior written permission. ! 18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: * ! 22: * @(#)defs.h 5.4 (Berkeley) 6/1/90 ! 23: */ ! 24: ! 25: #include <assert.h> ! 26: #include <ctype.h> ! 27: #include <stdio.h> ! 28: ! 29: ! 30: /* machine dependent definitions */ ! 31: /* the following definitions are for the VAX */ ! 32: /* they might have to be changed for other machines */ ! 33: ! 34: /* MAXCHAR is the largest character value */ ! 35: /* MAXSHORT is the largest value of a C short */ ! 36: /* MINSHORT is the most negative value of a C short */ ! 37: /* MAXTABLE is the maximum table size */ ! 38: /* BITS_PER_WORD is the number of bits in a C unsigned */ ! 39: /* WORDSIZE computes the number of words needed to */ ! 40: /* store n bits */ ! 41: /* BIT returns the value of the n-th bit starting */ ! 42: /* from r (0-indexed) */ ! 43: /* SETBIT sets the n-th bit starting from r */ ! 44: ! 45: #define MAXCHAR 255 ! 46: #define MAXSHORT 32767 ! 47: #define MINSHORT -32768 ! 48: #define MAXTABLE 32500 ! 49: #define BITS_PER_WORD 32 ! 50: #define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD) ! 51: #define BIT(r, n) ((((r)[(n) >> 5]) >> ((n) & 31)) & 1) ! 52: #define SETBIT(r, n) ((r)[(n) >> 5] |= (1 << ((n) & 31))) ! 53: ! 54: ! 55: /* character names */ ! 56: ! 57: #define NUL '\0' /* the null character */ ! 58: #define NEWLINE '\n' /* line feed */ ! 59: #define SP ' ' /* space */ ! 60: #define BS '\b' /* backspace */ ! 61: #define HT '\t' /* horizontal tab */ ! 62: #define VT '\013' /* vertical tab */ ! 63: #define CR '\r' /* carriage return */ ! 64: #define FF '\f' /* form feed */ ! 65: #define QUOTE '\'' /* single quote */ ! 66: #define DOUBLE_QUOTE '\"' /* double quote */ ! 67: #define BACKSLASH '\\' /* backslash */ ! 68: ! 69: ! 70: /* defines for constructing filenames */ ! 71: ! 72: #define DEFINES_SUFFIX ".tab.h" ! 73: #define OUTPUT_SUFFIX ".tab.c" ! 74: #define VERBOSE_SUFFIX ".output" ! 75: ! 76: ! 77: /* keyword codes */ ! 78: ! 79: #define TOKEN 0 ! 80: #define LEFT 1 ! 81: #define RIGHT 2 ! 82: #define NONASSOC 3 ! 83: #define MARK 4 ! 84: #define TEXT 5 ! 85: #define TYPE 6 ! 86: #define START 7 ! 87: #define UNION 8 ! 88: #define IDENT 9 ! 89: ! 90: ! 91: /* symbol classes */ ! 92: ! 93: #define UNKNOWN 0 ! 94: #define TERM 1 ! 95: #define NONTERM 2 ! 96: ! 97: ! 98: /* the undefined value */ ! 99: ! 100: #define UNDEFINED (-1) ! 101: ! 102: ! 103: /* action codes */ ! 104: ! 105: #define SHIFT 1 ! 106: #define REDUCE 2 ! 107: #define ERROR 3 ! 108: ! 109: ! 110: /* character macros */ ! 111: ! 112: #define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$') ! 113: #define IS_OCTAL(c) ((c) >= '0' && (c) <= '7') ! 114: #define NUMERIC_VALUE(c) ((c) - '0') ! 115: ! 116: ! 117: /* symbol macros */ ! 118: ! 119: #define ISTOKEN(s) ((s) < start_symbol) ! 120: #define ISVAR(s) ((s) >= start_symbol) ! 121: ! 122: ! 123: /* storage allocation macros */ ! 124: ! 125: #define FREE(x) (free((char*)(x))) ! 126: #define MALLOC(n) (malloc((unsigned)(n))) ! 127: #define NEW(t) ((t*)allocate(sizeof(t))) ! 128: #define NEW2(n,t) ((t*)allocate((unsigned)((n)*sizeof(t)))) ! 129: #define REALLOC(p,n) (realloc((char*)(p),(unsigned)(n))) ! 130: ! 131: ! 132: /* the structure of a symbol table entry */ ! 133: ! 134: typedef struct bucket bucket; ! 135: struct bucket ! 136: { ! 137: struct bucket *link; ! 138: struct bucket *next; ! 139: char *name; ! 140: char *tag; ! 141: short value; ! 142: short index; ! 143: short prec; ! 144: char class; ! 145: char assoc; ! 146: }; ! 147: ! 148: ! 149: /* the structure of the LR(0) state machine */ ! 150: ! 151: typedef struct core core; ! 152: struct core ! 153: { ! 154: struct core *next; ! 155: struct core *link; ! 156: short number; ! 157: short accessing_symbol; ! 158: short nitems; ! 159: short items[1]; ! 160: }; ! 161: ! 162: ! 163: /* the structure used to record shifts */ ! 164: ! 165: typedef struct shifts shifts; ! 166: struct shifts ! 167: { ! 168: struct shifts *next; ! 169: short number; ! 170: short nshifts; ! 171: short shift[1]; ! 172: }; ! 173: ! 174: ! 175: /* the structure used to store reductions */ ! 176: ! 177: typedef struct reductions reductions; ! 178: struct reductions ! 179: { ! 180: struct reductions *next; ! 181: short number; ! 182: short nreds; ! 183: short rules[1]; ! 184: }; ! 185: ! 186: ! 187: /* the structure used to represent parser actions */ ! 188: ! 189: typedef struct action action; ! 190: struct action ! 191: { ! 192: struct action *next; ! 193: short symbol; ! 194: short number; ! 195: short prec; ! 196: char action_code; ! 197: char assoc; ! 198: char suppressed; ! 199: }; ! 200: ! 201: ! 202: /* global variables */ ! 203: ! 204: extern char dflag; ! 205: extern char lflag; ! 206: extern char tflag; ! 207: extern char vflag; ! 208: ! 209: extern char *myname; ! 210: extern char *cptr; ! 211: extern char *line; ! 212: extern int lineno; ! 213: extern int outline; ! 214: ! 215: extern char *banner[]; ! 216: extern char *header[]; ! 217: extern char *body[]; ! 218: extern char *trailer[]; ! 219: ! 220: extern char *action_file_name; ! 221: extern char *defines_file_name; ! 222: extern char *input_file_name; ! 223: extern char *output_file_name; ! 224: extern char *text_file_name; ! 225: extern char *union_file_name; ! 226: extern char *verbose_file_name; ! 227: ! 228: extern FILE *action_file; ! 229: extern FILE *defines_file; ! 230: extern FILE *input_file; ! 231: extern FILE *output_file; ! 232: extern FILE *text_file; ! 233: extern FILE *union_file; ! 234: extern FILE *verbose_file; ! 235: ! 236: extern int nitems; ! 237: extern int nrules; ! 238: extern int nsyms; ! 239: extern int ntokens; ! 240: extern int nvars; ! 241: extern int ntags; ! 242: ! 243: extern char unionized; ! 244: extern char line_format[]; ! 245: ! 246: extern int start_symbol; ! 247: extern char **symbol_name; ! 248: extern short *symbol_value; ! 249: extern short *symbol_prec; ! 250: extern char *symbol_assoc; ! 251: ! 252: extern short *ritem; ! 253: extern short *rlhs; ! 254: extern short *rrhs; ! 255: extern short *rprec; ! 256: extern char *rassoc; ! 257: ! 258: extern short **derives; ! 259: extern char *nullable; ! 260: ! 261: extern bucket *first_symbol; ! 262: extern bucket *last_symbol; ! 263: ! 264: extern int nstates; ! 265: extern core *first_state; ! 266: extern shifts *first_shift; ! 267: extern reductions *first_reduction; ! 268: extern short *accessing_symbol; ! 269: extern core **state_table; ! 270: extern shifts **shift_table; ! 271: extern reductions **reduction_table; ! 272: extern unsigned *LA; ! 273: extern short *LAruleno; ! 274: extern short *lookaheads; ! 275: extern short *goto_map; ! 276: extern short *from_state; ! 277: extern short *to_state; ! 278: ! 279: extern action **parser; ! 280: extern int SRtotal; ! 281: extern int RRtotal; ! 282: extern short *SRconflicts; ! 283: extern short *RRconflicts; ! 284: extern short *defred; ! 285: extern short *rules_used; ! 286: extern short nunused; ! 287: extern short final_state; ! 288: ! 289: /* global functions */ ! 290: ! 291: extern char *allocate(); ! 292: extern bucket *lookup(); ! 293: extern bucket *make_bucket(); ! 294: ! 295: ! 296: /* system variables */ ! 297: ! 298: extern int errno; ! 299: ! 300: ! 301: /* system functions */ ! 302: ! 303: extern void free(); ! 304: extern char *calloc(); ! 305: extern char *malloc(); ! 306: extern char *realloc(); ! 307: extern char *strcpy();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.