[BACK]Return to defs.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / yacc

Annotation of src/usr.bin/yacc/defs.h, Revision 1.19

1.19    ! espie       1: /*     $OpenBSD: defs.h,v 1.18 2014/12/02 15:56:22 millert Exp $       */
1.5       deraadt     2: /*     $NetBSD: defs.h,v 1.6 1996/03/19 03:21:30 jtc Exp $     */
                      3:
                      4: /*
                      5:  * Copyright (c) 1989 The Regents of the University of California.
                      6:  * All rights reserved.
                      7:  *
                      8:  * This code is derived from software contributed to Berkeley by
                      9:  * Robert Paul Corbett.
                     10:  *
                     11:  * Redistribution and use in source and binary forms, with or without
                     12:  * modification, are permitted provided that the following conditions
                     13:  * are met:
                     14:  * 1. Redistributions of source code must retain the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer.
                     16:  * 2. Redistributions in binary form must reproduce the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer in the
                     18:  *    documentation and/or other materials provided with the distribution.
1.10      millert    19:  * 3. Neither the name of the University nor the names of its contributors
1.5       deraadt    20:  *    may be used to endorse or promote products derived from this software
                     21:  *    without specific prior written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     33:  * SUCH DAMAGE.
                     34:  *
                     35:  *     @(#)defs.h      5.6 (Berkeley) 5/24/93
                     36:  */
1.1       deraadt    37:
                     38: #include <assert.h>
                     39: #include <ctype.h>
                     40: #include <stdio.h>
                     41: #include <string.h>
1.7       pvalchev   42: #include <stdlib.h>
1.1       deraadt    43:
                     44: /*  machine-dependent definitions                      */
                     45: /*  the following definitions are for the Tahoe                */
                     46: /*  they might have to be changed for other machines   */
                     47:
                     48: /*  MAXCHAR is the largest unsigned character value    */
                     49: /*  MAXSHORT is the largest value of a C short         */
                     50: /*  MINSHORT is the most negative value of a C short   */
                     51: /*  MAXTABLE is the maximum table size                 */
                     52: /*  BITS_PER_WORD is the number of bits in a C unsigned        */
                     53: /*  WORDSIZE computes the number of words needed to    */
                     54: /*     store n bits                                    */
                     55: /*  BIT returns the value of the n-th bit starting     */
                     56: /*     from r (0-indexed)                              */
                     57: /*  SETBIT sets the n-th bit starting from r           */
                     58:
                     59: #define        MAXCHAR         255
                     60: #define        MAXSHORT        32767
                     61: #define MINSHORT       -32768
                     62: #define MAXTABLE       32500
                     63: #define BITS_PER_WORD  32
                     64: #define        WORDSIZE(n)     (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
                     65: #define        BIT(r, n)       ((((r)[(n)>>5])>>((n)&31))&1)
                     66: #define        SETBIT(r, n)    ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
                     67:
                     68:
                     69: /*  character names  */
                     70:
                     71: #define        NUL             '\0'    /*  the null character  */
                     72: #define        NEWLINE         '\n'    /*  line feed  */
                     73: #define        SP              ' '     /*  space  */
                     74: #define        BS              '\b'    /*  backspace  */
                     75: #define        HT              '\t'    /*  horizontal tab  */
                     76: #define        VT              '\013'  /*  vertical tab  */
                     77: #define        CR              '\r'    /*  carriage return  */
                     78: #define        FF              '\f'    /*  form feed  */
                     79: #define        QUOTE           '\''    /*  single quote  */
                     80: #define        DOUBLE_QUOTE    '\"'    /*  double quote  */
                     81: #define        BACKSLASH       '\\'    /*  backslash  */
                     82:
                     83:
                     84: /* defines for constructing filenames */
                     85:
                     86: #define CODE_SUFFIX    ".code.c"
                     87: #define        DEFINES_SUFFIX  ".tab.h"
                     88: #define        OUTPUT_SUFFIX   ".tab.c"
                     89: #define        VERBOSE_SUFFIX  ".output"
                     90:
                     91:
                     92: /* keyword codes */
                     93:
                     94: #define TOKEN 0
                     95: #define LEFT 1
                     96: #define RIGHT 2
                     97: #define NONASSOC 3
                     98: #define MARK 4
                     99: #define TEXT 5
                    100: #define TYPE 6
                    101: #define START 7
                    102: #define UNION 8
                    103: #define IDENT 9
1.2       etheisen  104: #define EXPECT 10
1.1       deraadt   105:
                    106:
                    107: /*  symbol classes  */
                    108:
                    109: #define UNKNOWN 0
                    110: #define TERM 1
                    111: #define NONTERM 2
                    112:
                    113:
                    114: /*  the undefined value  */
                    115:
                    116: #define UNDEFINED (-1)
                    117:
                    118:
                    119: /*  action codes  */
                    120:
                    121: #define SHIFT 1
                    122: #define REDUCE 2
                    123:
                    124:
                    125: /*  character macros  */
                    126:
                    127: #define IS_IDENT(c)    (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
                    128: #define        NUMERIC_VALUE(c)        ((c) - '0')
                    129:
                    130:
                    131: /*  symbol macros  */
                    132:
                    133: #define ISTOKEN(s)     ((s) < start_symbol)
                    134: #define ISVAR(s)       ((s) >= start_symbol)
                    135:
                    136:
                    137: /*  storage allocation macros  */
                    138:
1.15      millert   139: #define        NEW(t)          ((t*)allocate(sizeof(t)))
                    140: #define        NEW2(n,t)       ((t*)allocate((n)*sizeof(t)))
1.1       deraadt   141:
                    142:
                    143: /*  the structure of a symbol table entry  */
                    144:
                    145: typedef struct bucket bucket;
1.17      tedu      146: struct bucket {
                    147:        struct bucket *link;
                    148:        struct bucket *next;
                    149:        char *name;
                    150:        char *tag;
                    151:        short value;
                    152:        short index;
                    153:        short prec;
                    154:        char class;
                    155:        char assoc;
1.1       deraadt   156: };
                    157:
                    158:
                    159: /*  the structure of the LR(0) state machine  */
                    160:
                    161: typedef struct core core;
1.17      tedu      162: struct core {
                    163:        struct core *next;
                    164:        struct core *link;
                    165:        short number;
                    166:        short accessing_symbol;
                    167:        short nitems;
                    168:        short items[1];
1.1       deraadt   169: };
                    170:
                    171:
                    172: /*  the structure used to record shifts  */
                    173:
                    174: typedef struct shifts shifts;
1.17      tedu      175: struct shifts {
                    176:        struct shifts *next;
                    177:        short number;
                    178:        short nshifts;
                    179:        short shift[1];
1.1       deraadt   180: };
                    181:
                    182:
                    183: /*  the structure used to store reductions  */
                    184:
                    185: typedef struct reductions reductions;
1.17      tedu      186: struct reductions {
                    187:        struct reductions *next;
                    188:        short number;
                    189:        short nreds;
                    190:        short rules[1];
1.1       deraadt   191: };
                    192:
                    193:
                    194: /*  the structure used to represent parser actions  */
                    195:
                    196: typedef struct action action;
1.17      tedu      197: struct action {
                    198:        struct action *next;
                    199:        short symbol;
                    200:        short number;
                    201:        short prec;
                    202:        char action_code;
                    203:        char assoc;
                    204:        char suppressed;
1.1       deraadt   205: };
                    206:
                    207:
                    208: /* global variables */
                    209:
                    210: extern char dflag;
                    211: extern char lflag;
                    212: extern char rflag;
                    213: extern char tflag;
                    214: extern char vflag;
                    215: extern char *symbol_prefix;
                    216:
                    217: extern char *cptr;
                    218: extern char *line;
                    219: extern int lineno;
                    220: extern int outline;
                    221:
                    222: extern char *banner[];
                    223: extern char *tables[];
                    224: extern char *header[];
                    225: extern char *body[];
                    226: extern char *trailer[];
                    227:
                    228: extern char *code_file_name;
                    229: extern char *defines_file_name;
                    230: extern char *input_file_name;
                    231: extern char *output_file_name;
                    232: extern char *verbose_file_name;
                    233:
                    234: extern FILE *action_file;
                    235: extern FILE *code_file;
                    236: extern FILE *defines_file;
                    237: extern FILE *input_file;
                    238: extern FILE *output_file;
                    239: extern FILE *text_file;
                    240: extern FILE *union_file;
                    241: extern FILE *verbose_file;
                    242:
                    243: extern int nitems;
                    244: extern int nrules;
                    245: extern int nsyms;
                    246: extern int ntokens;
                    247: extern int nvars;
                    248: extern int ntags;
                    249:
                    250: extern char unionized;
                    251: extern char line_format[];
                    252:
                    253: extern int   start_symbol;
                    254: extern char  **symbol_name;
                    255: extern short *symbol_value;
                    256: extern short *symbol_prec;
                    257: extern char  *symbol_assoc;
                    258:
                    259: extern short *ritem;
                    260: extern short *rlhs;
                    261: extern short *rrhs;
                    262: extern short *rprec;
                    263: extern char  *rassoc;
                    264:
                    265: extern short **derives;
                    266: extern char *nullable;
                    267:
                    268: extern bucket *first_symbol;
                    269: extern bucket *last_symbol;
                    270:
                    271: extern int nstates;
                    272: extern core *first_state;
                    273: extern shifts *first_shift;
                    274: extern reductions *first_reduction;
                    275: extern short *accessing_symbol;
                    276: extern core **state_table;
                    277: extern shifts **shift_table;
                    278: extern reductions **reduction_table;
                    279: extern unsigned *LA;
                    280: extern short *LAruleno;
                    281: extern short *lookaheads;
                    282: extern short *goto_map;
                    283: extern short *from_state;
                    284: extern short *to_state;
                    285:
                    286: extern action **parser;
                    287: extern int SRtotal;
1.2       etheisen  288: extern int SRexpect;
1.1       deraadt   289: extern int RRtotal;
                    290: extern short *SRconflicts;
                    291: extern short *RRconflicts;
                    292: extern short *defred;
                    293: extern short *rules_used;
                    294: extern short nunused;
                    295: extern short final_state;
                    296:
                    297: /* global functions */
                    298:
1.14      millert   299: extern void *allocate(size_t);
                    300: extern bucket *lookup(char *);
                    301: extern bucket *make_bucket(char *);
1.9       millert   302: extern void set_first_derives(void);
                    303: extern void closure(short *, int);
                    304: extern void finalize_closure(void);
1.7       pvalchev  305:
1.18      millert   306: extern __dead void fatal(char *);
1.7       pvalchev  307:
1.9       millert   308: extern void reflexive_transitive_closure(unsigned *, int);
1.18      millert   309: extern __dead void done(int);
1.7       pvalchev  310:
1.18      millert   311: extern __dead void no_space(void);
                    312: extern __dead void open_error(char *);
1.19    ! espie     313: extern __dead void tempfile_error(void);
1.18      millert   314: extern __dead void open_write_error(char *);
                    315: extern __dead void unexpected_EOF(void);
1.9       millert   316: extern void print_pos(char *, char *);
1.18      millert   317: extern __dead void syntax_error(int, char *, char *);
                    318: extern __dead void unterminated_comment(int, char *, char *);
                    319: extern __dead void unterminated_string(int, char *, char *);
                    320: extern __dead void unterminated_text(int, char *, char *);
                    321: extern __dead void unterminated_union(int, char *, char *);
                    322: extern __dead void over_unionized(char *);
                    323: extern __dead void illegal_tag(int, char *, char *);
                    324: extern __dead void illegal_character(char *);
                    325: extern __dead void used_reserved(char *);
                    326: extern __dead void tokenized_start(char *);
1.9       millert   327: extern void retyped_warning(char *);
                    328: extern void reprec_warning(char *);
                    329: extern void revalued_warning(char *);
1.18      millert   330: extern __dead void terminal_start(char *);
1.9       millert   331: extern void restarted_warning(void);
1.18      millert   332: extern __dead void no_grammar(void);
                    333: extern __dead void terminal_lhs(int);
1.9       millert   334: extern void prec_redeclared(void);
1.18      millert   335: extern __dead void unterminated_action(int, char *, char *);
1.9       millert   336: extern void dollar_warning(int, int);
1.18      millert   337: extern __dead void dollar_error(int, char *, char *);
                    338: extern __dead void untyped_lhs(void);
                    339: extern __dead void untyped_rhs(int, char *);
                    340: extern __dead void unknown_rhs(int);
1.9       millert   341: extern void default_action_warning(void);
1.18      millert   342: extern __dead void undefined_goal(char *);
1.9       millert   343: extern void undefined_symbol_warning(char *);
                    344:
                    345: extern void lalr(void);
                    346:
                    347: extern void reader(void);
                    348: extern void lr0(void);
1.12      nicm      349: extern void free_nullable(void);
                    350: extern void free_derives(void);
1.9       millert   351: extern void make_parser(void);
                    352: extern void verbose(void);
                    353: extern void output(void);
                    354: extern void free_parser(void);
                    355: extern void write_section(char *[]);
                    356:
                    357: extern void create_symbol_table(void);
                    358: extern void free_symbol_table(void);
                    359: extern void free_symbols(void);
1.1       deraadt   360:
                    361:
                    362: /* system variables */
                    363:
1.6       millert   364: extern char *__progname;