[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.12

1.12    ! nicm        1: /*     $OpenBSD: defs.h,v 1.11 2005/06/08 03:18:59 pvalchev 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        IS_OCTAL(c)     ((c) >= '0' && (c) <= '7')
                    129: #define        NUMERIC_VALUE(c)        ((c) - '0')
                    130:
                    131:
                    132: /*  symbol macros  */
                    133:
                    134: #define ISTOKEN(s)     ((s) < start_symbol)
                    135: #define ISVAR(s)       ((s) >= start_symbol)
                    136:
                    137:
                    138: /*  storage allocation macros  */
                    139:
                    140: #define CALLOC(k,n)    (calloc((unsigned)(k),(unsigned)(n)))
                    141: #define        FREE(x)         (free((char*)(x)))
                    142: #define MALLOC(n)      (malloc((unsigned)(n)))
                    143: #define        NEW(t)          ((t*)allocate(sizeof(t)))
                    144: #define        NEW2(n,t)       ((t*)allocate((unsigned)((n)*sizeof(t))))
                    145: #define REALLOC(p,n)   (realloc((char*)(p),(unsigned)(n)))
                    146:
                    147:
                    148: /*  the structure of a symbol table entry  */
                    149:
                    150: typedef struct bucket bucket;
                    151: struct bucket
                    152: {
                    153:     struct bucket *link;
                    154:     struct bucket *next;
                    155:     char *name;
                    156:     char *tag;
                    157:     short value;
                    158:     short index;
                    159:     short prec;
                    160:     char class;
                    161:     char assoc;
                    162: };
                    163:
                    164:
                    165: /*  the structure of the LR(0) state machine  */
                    166:
                    167: typedef struct core core;
                    168: struct core
                    169: {
                    170:     struct core *next;
                    171:     struct core *link;
                    172:     short number;
                    173:     short accessing_symbol;
                    174:     short nitems;
                    175:     short items[1];
                    176: };
                    177:
                    178:
                    179: /*  the structure used to record shifts  */
                    180:
                    181: typedef struct shifts shifts;
                    182: struct shifts
                    183: {
                    184:     struct shifts *next;
                    185:     short number;
                    186:     short nshifts;
                    187:     short shift[1];
                    188: };
                    189:
                    190:
                    191: /*  the structure used to store reductions  */
                    192:
                    193: typedef struct reductions reductions;
                    194: struct reductions
                    195: {
                    196:     struct reductions *next;
                    197:     short number;
                    198:     short nreds;
                    199:     short rules[1];
                    200: };
                    201:
                    202:
                    203: /*  the structure used to represent parser actions  */
                    204:
                    205: typedef struct action action;
                    206: struct action
                    207: {
                    208:     struct action *next;
                    209:     short symbol;
                    210:     short number;
                    211:     short prec;
                    212:     char action_code;
                    213:     char assoc;
                    214:     char suppressed;
                    215: };
                    216:
                    217:
                    218: /* global variables */
                    219:
                    220: extern char dflag;
                    221: extern char lflag;
                    222: extern char rflag;
                    223: extern char tflag;
                    224: extern char vflag;
                    225: extern char *symbol_prefix;
                    226:
                    227: extern char *cptr;
                    228: extern char *line;
                    229: extern int lineno;
                    230: extern int outline;
                    231:
                    232: extern char *banner[];
                    233: extern char *tables[];
                    234: extern char *header[];
                    235: extern char *body[];
                    236: extern char *trailer[];
                    237:
                    238: extern char *action_file_name;
                    239: extern char *code_file_name;
                    240: extern char *defines_file_name;
                    241: extern char *input_file_name;
                    242: extern char *output_file_name;
                    243: extern char *text_file_name;
                    244: extern char *union_file_name;
                    245: extern char *verbose_file_name;
                    246:
                    247: extern FILE *action_file;
                    248: extern FILE *code_file;
                    249: extern FILE *defines_file;
                    250: extern FILE *input_file;
                    251: extern FILE *output_file;
                    252: extern FILE *text_file;
                    253: extern FILE *union_file;
                    254: extern FILE *verbose_file;
                    255:
                    256: extern int nitems;
                    257: extern int nrules;
                    258: extern int nsyms;
                    259: extern int ntokens;
                    260: extern int nvars;
                    261: extern int ntags;
                    262:
                    263: extern char unionized;
                    264: extern char line_format[];
                    265:
                    266: extern int   start_symbol;
                    267: extern char  **symbol_name;
                    268: extern short *symbol_value;
                    269: extern short *symbol_prec;
                    270: extern char  *symbol_assoc;
                    271:
                    272: extern short *ritem;
                    273: extern short *rlhs;
                    274: extern short *rrhs;
                    275: extern short *rprec;
                    276: extern char  *rassoc;
                    277:
                    278: extern short **derives;
                    279: extern char *nullable;
                    280:
                    281: extern bucket *first_symbol;
                    282: extern bucket *last_symbol;
                    283:
                    284: extern int nstates;
                    285: extern core *first_state;
                    286: extern shifts *first_shift;
                    287: extern reductions *first_reduction;
                    288: extern short *accessing_symbol;
                    289: extern core **state_table;
                    290: extern shifts **shift_table;
                    291: extern reductions **reduction_table;
                    292: extern unsigned *LA;
                    293: extern short *LAruleno;
                    294: extern short *lookaheads;
                    295: extern short *goto_map;
                    296: extern short *from_state;
                    297: extern short *to_state;
                    298:
                    299: extern action **parser;
                    300: extern int SRtotal;
1.2       etheisen  301: extern int SRexpect;
1.1       deraadt   302: extern int RRtotal;
                    303: extern short *SRconflicts;
                    304: extern short *RRconflicts;
                    305: extern short *defred;
                    306: extern short *rules_used;
                    307: extern short nunused;
                    308: extern short final_state;
                    309:
                    310: /* global functions */
                    311:
                    312: extern char *allocate();
                    313: extern bucket *lookup();
                    314: extern bucket *make_bucket();
1.9       millert   315: extern void set_first_derives(void);
                    316: extern void closure(short *, int);
                    317: extern void finalize_closure(void);
1.7       pvalchev  318:
1.9       millert   319: extern void fatal(char *);
1.7       pvalchev  320:
1.9       millert   321: extern void reflexive_transitive_closure(unsigned *, int);
                    322: extern void done(int);
1.7       pvalchev  323:
1.9       millert   324: extern void no_space(void);
1.7       pvalchev  325: extern void open_error(char *);
1.11      pvalchev  326: extern void open_write_error(char *);
1.9       millert   327: extern void unexpected_EOF(void);
                    328: extern void print_pos(char *, char *);
                    329: extern void syntax_error(int, char *, char *);
                    330: extern void unterminated_comment(int, char *, char *);
                    331: extern void unterminated_string(int, char *, char *);
                    332: extern void unterminated_text(int, char *, char *);
                    333: extern void unterminated_union(int, char *, char *);
                    334: extern void over_unionized(char *);
                    335: extern void illegal_tag(int, char *, char *);
                    336: extern void illegal_character(char *);
                    337: extern void used_reserved(char *);
                    338: extern void tokenized_start(char *);
                    339: extern void retyped_warning(char *);
                    340: extern void reprec_warning(char *);
                    341: extern void revalued_warning(char *);
                    342: extern void terminal_start(char *);
                    343: extern void restarted_warning(void);
                    344: extern void no_grammar(void);
                    345: extern void terminal_lhs(int);
                    346: extern void prec_redeclared(void);
                    347: extern void unterminated_action(int, char *, char *);
                    348: extern void dollar_warning(int, int);
                    349: extern void dollar_error(int, char *, char *);
                    350: extern void untyped_lhs(void);
                    351: extern void untyped_rhs(int, char *);
                    352: extern void unknown_rhs(int);
                    353: extern void default_action_warning(void);
                    354: extern void undefined_goal(char *);
                    355: extern void undefined_symbol_warning(char *);
                    356:
                    357: extern void lalr(void);
                    358:
                    359: extern void reader(void);
                    360: extern void lr0(void);
1.12    ! nicm      361: extern void free_nullable(void);
        !           362: extern void free_derives(void);
1.9       millert   363: extern void make_parser(void);
                    364: extern void verbose(void);
                    365: extern void output(void);
                    366: extern void free_parser(void);
                    367: extern void write_section(char *[]);
                    368:
                    369: extern void create_symbol_table(void);
                    370: extern void free_symbol_table(void);
                    371: extern void free_symbols(void);
1.1       deraadt   372:
                    373:
                    374: /* system variables */
                    375:
1.6       millert   376: extern char *__progname;