1*98e903e7SBaptiste Daroussin /* $Id: defs.h,v 1.36 2011/12/20 01:31:16 tom Exp $ */ 2*98e903e7SBaptiste Daroussin 3*98e903e7SBaptiste Daroussin #ifdef HAVE_CONFIG_H 4*98e903e7SBaptiste Daroussin #include <config.h> 5*98e903e7SBaptiste Daroussin #endif 6*98e903e7SBaptiste Daroussin 7*98e903e7SBaptiste Daroussin #include <stdlib.h> 8*98e903e7SBaptiste Daroussin #include <string.h> 9*98e903e7SBaptiste Daroussin #include <errno.h> 10*98e903e7SBaptiste Daroussin #include <assert.h> 11*98e903e7SBaptiste Daroussin #include <ctype.h> 12*98e903e7SBaptiste Daroussin #include <stdio.h> 13*98e903e7SBaptiste Daroussin 14*98e903e7SBaptiste Daroussin #define YYMAJOR 1 15*98e903e7SBaptiste Daroussin #define YYMINOR 9 16*98e903e7SBaptiste Daroussin 17*98e903e7SBaptiste Daroussin #define CONCAT(first,second) first #second 18*98e903e7SBaptiste Daroussin #define CONCAT1(string,number) CONCAT(string, number) 19*98e903e7SBaptiste Daroussin #define CONCAT2(first,second) #first "." #second 20*98e903e7SBaptiste Daroussin 21*98e903e7SBaptiste Daroussin #ifdef YYPATCH 22*98e903e7SBaptiste Daroussin #define VSTRING(a,b) CONCAT2(a,b) CONCAT1(" ",YYPATCH) 23*98e903e7SBaptiste Daroussin #else 24*98e903e7SBaptiste Daroussin #define VSTRING(a,b) CONCAT2(a,b) 25*98e903e7SBaptiste Daroussin #endif 26*98e903e7SBaptiste Daroussin 27*98e903e7SBaptiste Daroussin #define VERSION VSTRING(YYMAJOR, YYMINOR) 28*98e903e7SBaptiste Daroussin 29*98e903e7SBaptiste Daroussin /* machine-dependent definitions */ 30*98e903e7SBaptiste Daroussin /* the following definitions are for the Tahoe */ 31*98e903e7SBaptiste Daroussin /* they might have to be changed for other machines */ 32*98e903e7SBaptiste Daroussin 33*98e903e7SBaptiste Daroussin /* MAXCHAR is the largest unsigned character value */ 34*98e903e7SBaptiste Daroussin /* MAXSHORT is the largest value of a C short */ 35*98e903e7SBaptiste Daroussin /* MINSHORT is the most negative value of a C short */ 36*98e903e7SBaptiste Daroussin /* MAXTABLE is the maximum table size */ 37*98e903e7SBaptiste Daroussin /* BITS_PER_WORD is the number of bits in a C unsigned */ 38*98e903e7SBaptiste Daroussin /* WORDSIZE computes the number of words needed to */ 39*98e903e7SBaptiste Daroussin /* store n bits */ 40*98e903e7SBaptiste Daroussin /* BIT returns the value of the n-th bit starting */ 41*98e903e7SBaptiste Daroussin /* from r (0-indexed) */ 42*98e903e7SBaptiste Daroussin /* SETBIT sets the n-th bit starting from r */ 43*98e903e7SBaptiste Daroussin 44*98e903e7SBaptiste Daroussin #define MAXCHAR 255 45*98e903e7SBaptiste Daroussin #define MAXSHORT 32767 46*98e903e7SBaptiste Daroussin #define MINSHORT -32768 47*98e903e7SBaptiste Daroussin #define MAXTABLE 32500 48*98e903e7SBaptiste Daroussin #define BITS_PER_WORD 32 49*98e903e7SBaptiste Daroussin #define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD) 50*98e903e7SBaptiste Daroussin #define BIT(r, n) ((((r)[(n)>>5])>>((n)&31))&1) 51*98e903e7SBaptiste Daroussin #define SETBIT(r, n) ((r)[(n)>>5]|=((unsigned)1<<((n)&31))) 52*98e903e7SBaptiste Daroussin 53*98e903e7SBaptiste Daroussin /* character names */ 54*98e903e7SBaptiste Daroussin 55*98e903e7SBaptiste Daroussin #define NUL '\0' /* the null character */ 56*98e903e7SBaptiste Daroussin #define NEWLINE '\n' /* line feed */ 57*98e903e7SBaptiste Daroussin #define SP ' ' /* space */ 58*98e903e7SBaptiste Daroussin #define BS '\b' /* backspace */ 59*98e903e7SBaptiste Daroussin #define HT '\t' /* horizontal tab */ 60*98e903e7SBaptiste Daroussin #define VT '\013' /* vertical tab */ 61*98e903e7SBaptiste Daroussin #define CR '\r' /* carriage return */ 62*98e903e7SBaptiste Daroussin #define FF '\f' /* form feed */ 63*98e903e7SBaptiste Daroussin #define QUOTE '\'' /* single quote */ 64*98e903e7SBaptiste Daroussin #define DOUBLE_QUOTE '\"' /* double quote */ 65*98e903e7SBaptiste Daroussin #define BACKSLASH '\\' /* backslash */ 66*98e903e7SBaptiste Daroussin 67*98e903e7SBaptiste Daroussin #define UCH(c) (unsigned char)(c) 68*98e903e7SBaptiste Daroussin 69*98e903e7SBaptiste Daroussin /* defines for constructing filenames */ 70*98e903e7SBaptiste Daroussin 71*98e903e7SBaptiste Daroussin #if defined(VMS) 72*98e903e7SBaptiste Daroussin #define CODE_SUFFIX "_code.c" 73*98e903e7SBaptiste Daroussin #define DEFINES_SUFFIX "_tab.h" 74*98e903e7SBaptiste Daroussin #define EXTERNS_SUFFIX "_tab.i" 75*98e903e7SBaptiste Daroussin #define OUTPUT_SUFFIX "_tab.c" 76*98e903e7SBaptiste Daroussin #else 77*98e903e7SBaptiste Daroussin #define CODE_SUFFIX ".code.c" 78*98e903e7SBaptiste Daroussin #define DEFINES_SUFFIX ".tab.h" 79*98e903e7SBaptiste Daroussin #define EXTERNS_SUFFIX ".tab.i" 80*98e903e7SBaptiste Daroussin #define OUTPUT_SUFFIX ".tab.c" 81*98e903e7SBaptiste Daroussin #endif 82*98e903e7SBaptiste Daroussin #define VERBOSE_SUFFIX ".output" 83*98e903e7SBaptiste Daroussin #define GRAPH_SUFFIX ".dot" 84*98e903e7SBaptiste Daroussin 85*98e903e7SBaptiste Daroussin /* keyword codes */ 86*98e903e7SBaptiste Daroussin 87*98e903e7SBaptiste Daroussin #define TOKEN 0 88*98e903e7SBaptiste Daroussin #define LEFT 1 89*98e903e7SBaptiste Daroussin #define RIGHT 2 90*98e903e7SBaptiste Daroussin #define NONASSOC 3 91*98e903e7SBaptiste Daroussin #define MARK 4 92*98e903e7SBaptiste Daroussin #define TEXT 5 93*98e903e7SBaptiste Daroussin #define TYPE 6 94*98e903e7SBaptiste Daroussin #define START 7 95*98e903e7SBaptiste Daroussin #define UNION 8 96*98e903e7SBaptiste Daroussin #define IDENT 9 97*98e903e7SBaptiste Daroussin #define EXPECT 10 98*98e903e7SBaptiste Daroussin #define EXPECT_RR 11 99*98e903e7SBaptiste Daroussin #define PURE_PARSER 12 100*98e903e7SBaptiste Daroussin #define PARSE_PARAM 13 101*98e903e7SBaptiste Daroussin #define LEX_PARAM 14 102*98e903e7SBaptiste Daroussin #define POSIX_YACC 15 103*98e903e7SBaptiste Daroussin 104*98e903e7SBaptiste Daroussin /* symbol classes */ 105*98e903e7SBaptiste Daroussin 106*98e903e7SBaptiste Daroussin #define UNKNOWN 0 107*98e903e7SBaptiste Daroussin #define TERM 1 108*98e903e7SBaptiste Daroussin #define NONTERM 2 109*98e903e7SBaptiste Daroussin 110*98e903e7SBaptiste Daroussin /* the undefined value */ 111*98e903e7SBaptiste Daroussin 112*98e903e7SBaptiste Daroussin #define UNDEFINED (-1) 113*98e903e7SBaptiste Daroussin 114*98e903e7SBaptiste Daroussin /* action codes */ 115*98e903e7SBaptiste Daroussin 116*98e903e7SBaptiste Daroussin #define SHIFT 1 117*98e903e7SBaptiste Daroussin #define REDUCE 2 118*98e903e7SBaptiste Daroussin 119*98e903e7SBaptiste Daroussin /* character macros */ 120*98e903e7SBaptiste Daroussin 121*98e903e7SBaptiste Daroussin #define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$') 122*98e903e7SBaptiste Daroussin #define IS_OCTAL(c) ((c) >= '0' && (c) <= '7') 123*98e903e7SBaptiste Daroussin #define NUMERIC_VALUE(c) ((c) - '0') 124*98e903e7SBaptiste Daroussin 125*98e903e7SBaptiste Daroussin /* symbol macros */ 126*98e903e7SBaptiste Daroussin 127*98e903e7SBaptiste Daroussin #define ISTOKEN(s) ((s) < start_symbol) 128*98e903e7SBaptiste Daroussin #define ISVAR(s) ((s) >= start_symbol) 129*98e903e7SBaptiste Daroussin 130*98e903e7SBaptiste Daroussin /* storage allocation macros */ 131*98e903e7SBaptiste Daroussin 132*98e903e7SBaptiste Daroussin #define CALLOC(k,n) (calloc((size_t)(k),(size_t)(n))) 133*98e903e7SBaptiste Daroussin #define FREE(x) (free((char*)(x))) 134*98e903e7SBaptiste Daroussin #define MALLOC(n) (malloc((size_t)(n))) 135*98e903e7SBaptiste Daroussin #define NEW(t) ((t*)allocate(sizeof(t))) 136*98e903e7SBaptiste Daroussin #define NEW2(n,t) ((t*)allocate(((size_t)(n)*sizeof(t)))) 137*98e903e7SBaptiste Daroussin #define REALLOC(p,n) (realloc((char*)(p),(size_t)(n))) 138*98e903e7SBaptiste Daroussin 139*98e903e7SBaptiste Daroussin #define DO_FREE(x) if (x) { FREE(x); x = 0; } 140*98e903e7SBaptiste Daroussin 141*98e903e7SBaptiste Daroussin #define NO_SPACE(p) if (p == 0) no_space(); assert(p != 0) 142*98e903e7SBaptiste Daroussin 143*98e903e7SBaptiste Daroussin /* messages */ 144*98e903e7SBaptiste Daroussin #define PLURAL(n) ((n) > 1 ? "s" : "") 145*98e903e7SBaptiste Daroussin 146*98e903e7SBaptiste Daroussin typedef char Assoc_t; 147*98e903e7SBaptiste Daroussin typedef char Class_t; 148*98e903e7SBaptiste Daroussin typedef short Index_t; 149*98e903e7SBaptiste Daroussin typedef short Value_t; 150*98e903e7SBaptiste Daroussin 151*98e903e7SBaptiste Daroussin /* the structure of a symbol table entry */ 152*98e903e7SBaptiste Daroussin 153*98e903e7SBaptiste Daroussin typedef struct bucket bucket; 154*98e903e7SBaptiste Daroussin struct bucket 155*98e903e7SBaptiste Daroussin { 156*98e903e7SBaptiste Daroussin struct bucket *link; 157*98e903e7SBaptiste Daroussin struct bucket *next; 158*98e903e7SBaptiste Daroussin char *name; 159*98e903e7SBaptiste Daroussin char *tag; 160*98e903e7SBaptiste Daroussin Value_t value; 161*98e903e7SBaptiste Daroussin Index_t index; 162*98e903e7SBaptiste Daroussin Value_t prec; 163*98e903e7SBaptiste Daroussin Class_t class; 164*98e903e7SBaptiste Daroussin Assoc_t assoc; 165*98e903e7SBaptiste Daroussin }; 166*98e903e7SBaptiste Daroussin 167*98e903e7SBaptiste Daroussin /* the structure of the LR(0) state machine */ 168*98e903e7SBaptiste Daroussin 169*98e903e7SBaptiste Daroussin typedef struct core core; 170*98e903e7SBaptiste Daroussin struct core 171*98e903e7SBaptiste Daroussin { 172*98e903e7SBaptiste Daroussin struct core *next; 173*98e903e7SBaptiste Daroussin struct core *link; 174*98e903e7SBaptiste Daroussin Value_t number; 175*98e903e7SBaptiste Daroussin Value_t accessing_symbol; 176*98e903e7SBaptiste Daroussin Value_t nitems; 177*98e903e7SBaptiste Daroussin Value_t items[1]; 178*98e903e7SBaptiste Daroussin }; 179*98e903e7SBaptiste Daroussin 180*98e903e7SBaptiste Daroussin /* the structure used to record shifts */ 181*98e903e7SBaptiste Daroussin 182*98e903e7SBaptiste Daroussin typedef struct shifts shifts; 183*98e903e7SBaptiste Daroussin struct shifts 184*98e903e7SBaptiste Daroussin { 185*98e903e7SBaptiste Daroussin struct shifts *next; 186*98e903e7SBaptiste Daroussin Value_t number; 187*98e903e7SBaptiste Daroussin Value_t nshifts; 188*98e903e7SBaptiste Daroussin Value_t shift[1]; 189*98e903e7SBaptiste Daroussin }; 190*98e903e7SBaptiste Daroussin 191*98e903e7SBaptiste Daroussin /* the structure used to store reductions */ 192*98e903e7SBaptiste Daroussin 193*98e903e7SBaptiste Daroussin typedef struct reductions reductions; 194*98e903e7SBaptiste Daroussin struct reductions 195*98e903e7SBaptiste Daroussin { 196*98e903e7SBaptiste Daroussin struct reductions *next; 197*98e903e7SBaptiste Daroussin Value_t number; 198*98e903e7SBaptiste Daroussin Value_t nreds; 199*98e903e7SBaptiste Daroussin Value_t rules[1]; 200*98e903e7SBaptiste Daroussin }; 201*98e903e7SBaptiste Daroussin 202*98e903e7SBaptiste Daroussin /* the structure used to represent parser actions */ 203*98e903e7SBaptiste Daroussin 204*98e903e7SBaptiste Daroussin typedef struct action action; 205*98e903e7SBaptiste Daroussin struct action 206*98e903e7SBaptiste Daroussin { 207*98e903e7SBaptiste Daroussin struct action *next; 208*98e903e7SBaptiste Daroussin Value_t symbol; 209*98e903e7SBaptiste Daroussin Value_t number; 210*98e903e7SBaptiste Daroussin Value_t prec; 211*98e903e7SBaptiste Daroussin char action_code; 212*98e903e7SBaptiste Daroussin Assoc_t assoc; 213*98e903e7SBaptiste Daroussin char suppressed; 214*98e903e7SBaptiste Daroussin }; 215*98e903e7SBaptiste Daroussin 216*98e903e7SBaptiste Daroussin /* the structure used to store parse/lex parameters */ 217*98e903e7SBaptiste Daroussin typedef struct param param; 218*98e903e7SBaptiste Daroussin struct param 219*98e903e7SBaptiste Daroussin { 220*98e903e7SBaptiste Daroussin struct param *next; 221*98e903e7SBaptiste Daroussin char *name; /* parameter name */ 222*98e903e7SBaptiste Daroussin char *type; /* everything before parameter name */ 223*98e903e7SBaptiste Daroussin char *type2; /* everything after parameter name */ 224*98e903e7SBaptiste Daroussin }; 225*98e903e7SBaptiste Daroussin 226*98e903e7SBaptiste Daroussin /* global variables */ 227*98e903e7SBaptiste Daroussin 228*98e903e7SBaptiste Daroussin extern char dflag; 229*98e903e7SBaptiste Daroussin extern char gflag; 230*98e903e7SBaptiste Daroussin extern char iflag; 231*98e903e7SBaptiste Daroussin extern char lflag; 232*98e903e7SBaptiste Daroussin extern char rflag; 233*98e903e7SBaptiste Daroussin extern char sflag; 234*98e903e7SBaptiste Daroussin extern char tflag; 235*98e903e7SBaptiste Daroussin extern char vflag; 236*98e903e7SBaptiste Daroussin extern const char *symbol_prefix; 237*98e903e7SBaptiste Daroussin 238*98e903e7SBaptiste Daroussin extern const char *myname; 239*98e903e7SBaptiste Daroussin extern char *cptr; 240*98e903e7SBaptiste Daroussin extern char *line; 241*98e903e7SBaptiste Daroussin extern int lineno; 242*98e903e7SBaptiste Daroussin extern int outline; 243*98e903e7SBaptiste Daroussin extern int exit_code; 244*98e903e7SBaptiste Daroussin 245*98e903e7SBaptiste Daroussin extern const char *const banner[]; 246*98e903e7SBaptiste Daroussin extern const char *const xdecls[]; 247*98e903e7SBaptiste Daroussin extern const char *const tables[]; 248*98e903e7SBaptiste Daroussin extern const char *const global_vars[]; 249*98e903e7SBaptiste Daroussin extern const char *const impure_vars[]; 250*98e903e7SBaptiste Daroussin extern const char *const hdr_defs[]; 251*98e903e7SBaptiste Daroussin extern const char *const hdr_vars[]; 252*98e903e7SBaptiste Daroussin extern const char *const body_1[]; 253*98e903e7SBaptiste Daroussin extern const char *const body_vars[]; 254*98e903e7SBaptiste Daroussin extern const char *const body_2[]; 255*98e903e7SBaptiste Daroussin extern const char *const body_3[]; 256*98e903e7SBaptiste Daroussin extern const char *const trailer[]; 257*98e903e7SBaptiste Daroussin extern const char *const trailer_2[]; 258*98e903e7SBaptiste Daroussin 259*98e903e7SBaptiste Daroussin extern char *code_file_name; 260*98e903e7SBaptiste Daroussin extern char *input_file_name; 261*98e903e7SBaptiste Daroussin extern char *defines_file_name; 262*98e903e7SBaptiste Daroussin extern char *externs_file_name; 263*98e903e7SBaptiste Daroussin 264*98e903e7SBaptiste Daroussin extern FILE *action_file; 265*98e903e7SBaptiste Daroussin extern FILE *code_file; 266*98e903e7SBaptiste Daroussin extern FILE *defines_file; 267*98e903e7SBaptiste Daroussin extern FILE *externs_file; 268*98e903e7SBaptiste Daroussin extern FILE *input_file; 269*98e903e7SBaptiste Daroussin extern FILE *output_file; 270*98e903e7SBaptiste Daroussin extern FILE *text_file; 271*98e903e7SBaptiste Daroussin extern FILE *union_file; 272*98e903e7SBaptiste Daroussin extern FILE *verbose_file; 273*98e903e7SBaptiste Daroussin extern FILE *graph_file; 274*98e903e7SBaptiste Daroussin 275*98e903e7SBaptiste Daroussin extern int nitems; 276*98e903e7SBaptiste Daroussin extern int nrules; 277*98e903e7SBaptiste Daroussin extern int nsyms; 278*98e903e7SBaptiste Daroussin extern int ntokens; 279*98e903e7SBaptiste Daroussin extern int nvars; 280*98e903e7SBaptiste Daroussin extern int ntags; 281*98e903e7SBaptiste Daroussin 282*98e903e7SBaptiste Daroussin extern char unionized; 283*98e903e7SBaptiste Daroussin extern char line_format[]; 284*98e903e7SBaptiste Daroussin 285*98e903e7SBaptiste Daroussin extern Value_t start_symbol; 286*98e903e7SBaptiste Daroussin extern char **symbol_name; 287*98e903e7SBaptiste Daroussin extern char **symbol_pname; 288*98e903e7SBaptiste Daroussin extern Value_t *symbol_value; 289*98e903e7SBaptiste Daroussin extern Value_t *symbol_prec; 290*98e903e7SBaptiste Daroussin extern char *symbol_assoc; 291*98e903e7SBaptiste Daroussin 292*98e903e7SBaptiste Daroussin extern Value_t *ritem; 293*98e903e7SBaptiste Daroussin extern Value_t *rlhs; 294*98e903e7SBaptiste Daroussin extern Value_t *rrhs; 295*98e903e7SBaptiste Daroussin extern Value_t *rprec; 296*98e903e7SBaptiste Daroussin extern Assoc_t *rassoc; 297*98e903e7SBaptiste Daroussin 298*98e903e7SBaptiste Daroussin extern Value_t **derives; 299*98e903e7SBaptiste Daroussin extern char *nullable; 300*98e903e7SBaptiste Daroussin 301*98e903e7SBaptiste Daroussin extern bucket *first_symbol; 302*98e903e7SBaptiste Daroussin extern bucket *last_symbol; 303*98e903e7SBaptiste Daroussin 304*98e903e7SBaptiste Daroussin extern int pure_parser; 305*98e903e7SBaptiste Daroussin extern int nstates; 306*98e903e7SBaptiste Daroussin extern core *first_state; 307*98e903e7SBaptiste Daroussin extern shifts *first_shift; 308*98e903e7SBaptiste Daroussin extern reductions *first_reduction; 309*98e903e7SBaptiste Daroussin extern Value_t *accessing_symbol; 310*98e903e7SBaptiste Daroussin extern core **state_table; 311*98e903e7SBaptiste Daroussin extern shifts **shift_table; 312*98e903e7SBaptiste Daroussin extern reductions **reduction_table; 313*98e903e7SBaptiste Daroussin extern unsigned *LA; 314*98e903e7SBaptiste Daroussin extern Value_t *LAruleno; 315*98e903e7SBaptiste Daroussin extern Value_t *lookaheads; 316*98e903e7SBaptiste Daroussin extern Value_t *goto_map; 317*98e903e7SBaptiste Daroussin extern Value_t *from_state; 318*98e903e7SBaptiste Daroussin extern Value_t *to_state; 319*98e903e7SBaptiste Daroussin 320*98e903e7SBaptiste Daroussin extern action **parser; 321*98e903e7SBaptiste Daroussin extern int SRexpect; 322*98e903e7SBaptiste Daroussin extern int RRexpect; 323*98e903e7SBaptiste Daroussin extern int SRtotal; 324*98e903e7SBaptiste Daroussin extern int RRtotal; 325*98e903e7SBaptiste Daroussin extern Value_t *SRconflicts; 326*98e903e7SBaptiste Daroussin extern Value_t *RRconflicts; 327*98e903e7SBaptiste Daroussin extern Value_t *defred; 328*98e903e7SBaptiste Daroussin extern Value_t *rules_used; 329*98e903e7SBaptiste Daroussin extern Value_t nunused; 330*98e903e7SBaptiste Daroussin extern Value_t final_state; 331*98e903e7SBaptiste Daroussin 332*98e903e7SBaptiste Daroussin extern Value_t *itemset; 333*98e903e7SBaptiste Daroussin extern Value_t *itemsetend; 334*98e903e7SBaptiste Daroussin extern unsigned *ruleset; 335*98e903e7SBaptiste Daroussin 336*98e903e7SBaptiste Daroussin extern param *lex_param; 337*98e903e7SBaptiste Daroussin extern param *parse_param; 338*98e903e7SBaptiste Daroussin 339*98e903e7SBaptiste Daroussin /* global functions */ 340*98e903e7SBaptiste Daroussin 341*98e903e7SBaptiste Daroussin extern bucket *lookup(const char *); 342*98e903e7SBaptiste Daroussin extern bucket *make_bucket(const char *); 343*98e903e7SBaptiste Daroussin 344*98e903e7SBaptiste Daroussin #ifndef GCC_NORETURN 345*98e903e7SBaptiste Daroussin #define GCC_NORETURN /* nothing */ 346*98e903e7SBaptiste Daroussin #endif 347*98e903e7SBaptiste Daroussin 348*98e903e7SBaptiste Daroussin #ifndef GCC_UNUSED 349*98e903e7SBaptiste Daroussin #define GCC_UNUSED /* nothing */ 350*98e903e7SBaptiste Daroussin #endif 351*98e903e7SBaptiste Daroussin 352*98e903e7SBaptiste Daroussin /* closure.c */ 353*98e903e7SBaptiste Daroussin extern void closure(Value_t * nucleus, int n); 354*98e903e7SBaptiste Daroussin extern void finalize_closure(void); 355*98e903e7SBaptiste Daroussin extern void set_first_derives(void); 356*98e903e7SBaptiste Daroussin 357*98e903e7SBaptiste Daroussin /* error.c */ 358*98e903e7SBaptiste Daroussin extern void default_action_warning(void); 359*98e903e7SBaptiste Daroussin extern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 360*98e903e7SBaptiste Daroussin extern void dollar_warning(int a_lineno, int i); 361*98e903e7SBaptiste Daroussin extern void fatal(const char *msg) GCC_NORETURN; 362*98e903e7SBaptiste Daroussin extern void illegal_character(char *c_cptr) GCC_NORETURN; 363*98e903e7SBaptiste Daroussin extern void illegal_tag(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN; 364*98e903e7SBaptiste Daroussin extern void missing_brace(void) GCC_NORETURN; 365*98e903e7SBaptiste Daroussin extern void no_grammar(void) GCC_NORETURN; 366*98e903e7SBaptiste Daroussin extern void no_space(void) GCC_NORETURN; 367*98e903e7SBaptiste Daroussin extern void open_error(const char *filename) GCC_NORETURN; 368*98e903e7SBaptiste Daroussin extern void over_unionized(char *u_cptr) GCC_NORETURN; 369*98e903e7SBaptiste Daroussin extern void prec_redeclared(void); 370*98e903e7SBaptiste Daroussin extern void reprec_warning(char *s); 371*98e903e7SBaptiste Daroussin extern void restarted_warning(void); 372*98e903e7SBaptiste Daroussin extern void retyped_warning(char *s); 373*98e903e7SBaptiste Daroussin extern void revalued_warning(char *s); 374*98e903e7SBaptiste Daroussin extern void syntax_error(int st_lineno, char *st_line, char *st_cptr) GCC_NORETURN; 375*98e903e7SBaptiste Daroussin extern void terminal_lhs(int s_lineno) GCC_NORETURN; 376*98e903e7SBaptiste Daroussin extern void terminal_start(char *s) GCC_NORETURN; 377*98e903e7SBaptiste Daroussin extern void tokenized_start(char *s) GCC_NORETURN; 378*98e903e7SBaptiste Daroussin extern void undefined_goal(char *s) GCC_NORETURN; 379*98e903e7SBaptiste Daroussin extern void undefined_symbol_warning(char *s); 380*98e903e7SBaptiste Daroussin extern void unexpected_EOF(void) GCC_NORETURN; 381*98e903e7SBaptiste Daroussin extern void unknown_rhs(int i) GCC_NORETURN; 382*98e903e7SBaptiste Daroussin extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 383*98e903e7SBaptiste Daroussin extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN; 384*98e903e7SBaptiste Daroussin extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN; 385*98e903e7SBaptiste Daroussin extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN; 386*98e903e7SBaptiste Daroussin extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN; 387*98e903e7SBaptiste Daroussin extern void untyped_lhs(void) GCC_NORETURN; 388*98e903e7SBaptiste Daroussin extern void untyped_rhs(int i, char *s) GCC_NORETURN; 389*98e903e7SBaptiste Daroussin extern void used_reserved(char *s) GCC_NORETURN; 390*98e903e7SBaptiste Daroussin 391*98e903e7SBaptiste Daroussin /* graph.c */ 392*98e903e7SBaptiste Daroussin extern void graph(void); 393*98e903e7SBaptiste Daroussin 394*98e903e7SBaptiste Daroussin /* lalr.c */ 395*98e903e7SBaptiste Daroussin extern void create_symbol_table(void); 396*98e903e7SBaptiste Daroussin extern void free_symbol_table(void); 397*98e903e7SBaptiste Daroussin extern void free_symbols(void); 398*98e903e7SBaptiste Daroussin 399*98e903e7SBaptiste Daroussin /* lalr.c */ 400*98e903e7SBaptiste Daroussin extern void lalr(void); 401*98e903e7SBaptiste Daroussin 402*98e903e7SBaptiste Daroussin /* lr0.c */ 403*98e903e7SBaptiste Daroussin extern void lr0(void); 404*98e903e7SBaptiste Daroussin extern void show_cores(void); 405*98e903e7SBaptiste Daroussin extern void show_ritems(void); 406*98e903e7SBaptiste Daroussin extern void show_rrhs(void); 407*98e903e7SBaptiste Daroussin extern void show_shifts(void); 408*98e903e7SBaptiste Daroussin 409*98e903e7SBaptiste Daroussin /* main.c */ 410*98e903e7SBaptiste Daroussin extern void *allocate(size_t n); 411*98e903e7SBaptiste Daroussin extern void done(int k) GCC_NORETURN; 412*98e903e7SBaptiste Daroussin 413*98e903e7SBaptiste Daroussin /* mkpar.c */ 414*98e903e7SBaptiste Daroussin extern void free_parser(void); 415*98e903e7SBaptiste Daroussin extern void make_parser(void); 416*98e903e7SBaptiste Daroussin 417*98e903e7SBaptiste Daroussin /* output.c */ 418*98e903e7SBaptiste Daroussin extern void output(void); 419*98e903e7SBaptiste Daroussin 420*98e903e7SBaptiste Daroussin /* reader.c */ 421*98e903e7SBaptiste Daroussin extern void reader(void); 422*98e903e7SBaptiste Daroussin 423*98e903e7SBaptiste Daroussin /* skeleton.c */ 424*98e903e7SBaptiste Daroussin extern void write_section(FILE *fp, const char *const section[]); 425*98e903e7SBaptiste Daroussin 426*98e903e7SBaptiste Daroussin /* verbose.c */ 427*98e903e7SBaptiste Daroussin extern void verbose(void); 428*98e903e7SBaptiste Daroussin 429*98e903e7SBaptiste Daroussin /* warshall.c */ 430*98e903e7SBaptiste Daroussin extern void reflexive_transitive_closure(unsigned *R, int n); 431*98e903e7SBaptiste Daroussin 432*98e903e7SBaptiste Daroussin #ifdef NO_LEAKS 433*98e903e7SBaptiste Daroussin extern void lr0_leaks(void); 434*98e903e7SBaptiste Daroussin extern void lalr_leaks(void); 435*98e903e7SBaptiste Daroussin extern void mkpar_leaks(void); 436*98e903e7SBaptiste Daroussin extern void output_leaks(void); 437*98e903e7SBaptiste Daroussin extern void reader_leaks(void); 438*98e903e7SBaptiste Daroussin #endif 439