1497dcf4cSBaptiste Daroussin /* $Id: defs.h,v 1.49 2014/04/22 23:34:34 tom Exp $ */ 298e903e7SBaptiste Daroussin 398e903e7SBaptiste Daroussin #ifdef HAVE_CONFIG_H 498e903e7SBaptiste Daroussin #include <config.h> 598e903e7SBaptiste Daroussin #endif 698e903e7SBaptiste Daroussin 70c8de5b0SBaptiste Daroussin #include <limits.h> 898e903e7SBaptiste Daroussin #include <stdlib.h> 998e903e7SBaptiste Daroussin #include <string.h> 1098e903e7SBaptiste Daroussin #include <errno.h> 1198e903e7SBaptiste Daroussin #include <assert.h> 1298e903e7SBaptiste Daroussin #include <ctype.h> 1398e903e7SBaptiste Daroussin #include <stdio.h> 1498e903e7SBaptiste Daroussin 153e066022SBaptiste Daroussin #if defined(__cplusplus) /* __cplusplus, etc. */ 163e066022SBaptiste Daroussin #define class myClass 173e066022SBaptiste Daroussin #endif 183e066022SBaptiste Daroussin 1998e903e7SBaptiste Daroussin #define YYMAJOR 1 2098e903e7SBaptiste Daroussin #define YYMINOR 9 2198e903e7SBaptiste Daroussin 2298e903e7SBaptiste Daroussin #define CONCAT(first,second) first #second 2398e903e7SBaptiste Daroussin #define CONCAT1(string,number) CONCAT(string, number) 2498e903e7SBaptiste Daroussin #define CONCAT2(first,second) #first "." #second 2598e903e7SBaptiste Daroussin 2698e903e7SBaptiste Daroussin #ifdef YYPATCH 2798e903e7SBaptiste Daroussin #define VSTRING(a,b) CONCAT2(a,b) CONCAT1(" ",YYPATCH) 2898e903e7SBaptiste Daroussin #else 2998e903e7SBaptiste Daroussin #define VSTRING(a,b) CONCAT2(a,b) 3098e903e7SBaptiste Daroussin #endif 3198e903e7SBaptiste Daroussin 3298e903e7SBaptiste Daroussin #define VERSION VSTRING(YYMAJOR, YYMINOR) 3398e903e7SBaptiste Daroussin 340c8de5b0SBaptiste Daroussin /* machine-dependent definitions: */ 3598e903e7SBaptiste Daroussin 3698e903e7SBaptiste Daroussin /* MAXCHAR is the largest unsigned character value */ 3798e903e7SBaptiste Daroussin /* MAXTABLE is the maximum table size */ 380c8de5b0SBaptiste Daroussin /* YYINT is the smallest C integer type that can be */ 390c8de5b0SBaptiste Daroussin /* used to address a table of size MAXTABLE */ 400c8de5b0SBaptiste Daroussin /* MAXYYINT is the largest value of a YYINT */ 410c8de5b0SBaptiste Daroussin /* MINYYINT is the most negative value of a YYINT */ 4298e903e7SBaptiste Daroussin /* BITS_PER_WORD is the number of bits in a C unsigned */ 4398e903e7SBaptiste Daroussin /* WORDSIZE computes the number of words needed to */ 4498e903e7SBaptiste Daroussin /* store n bits */ 4598e903e7SBaptiste Daroussin /* BIT returns the value of the n-th bit starting */ 4698e903e7SBaptiste Daroussin /* from r (0-indexed) */ 4798e903e7SBaptiste Daroussin /* SETBIT sets the n-th bit starting from r */ 4898e903e7SBaptiste Daroussin 490c8de5b0SBaptiste Daroussin #define MAXCHAR UCHAR_MAX 500c8de5b0SBaptiste Daroussin #ifndef MAXTABLE 5198e903e7SBaptiste Daroussin #define MAXTABLE 32500 520c8de5b0SBaptiste Daroussin #endif 530c8de5b0SBaptiste Daroussin #if MAXTABLE <= SHRT_MAX 540c8de5b0SBaptiste Daroussin #define YYINT short 550c8de5b0SBaptiste Daroussin #define MAXYYINT SHRT_MAX 560c8de5b0SBaptiste Daroussin #define MINYYINT SHRT_MIN 570c8de5b0SBaptiste Daroussin #elif MAXTABLE <= INT_MAX 580c8de5b0SBaptiste Daroussin #define YYINT int 590c8de5b0SBaptiste Daroussin #define MAXYYINT INT_MAX 600c8de5b0SBaptiste Daroussin #define MINYYINT INT_MIN 610c8de5b0SBaptiste Daroussin #else 620c8de5b0SBaptiste Daroussin #error "MAXTABLE is too large for this machine architecture!" 630c8de5b0SBaptiste Daroussin #endif 640c8de5b0SBaptiste Daroussin 650c8de5b0SBaptiste Daroussin #define BITS_PER_WORD ((int) sizeof (unsigned) * CHAR_BIT) 6698e903e7SBaptiste Daroussin #define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD) 670c8de5b0SBaptiste Daroussin #define BIT(r, n) ((((r)[(n)/BITS_PER_WORD])>>((n)&(BITS_PER_WORD-1)))&1) 680c8de5b0SBaptiste Daroussin #define SETBIT(r, n) ((r)[(n)/BITS_PER_WORD]|=((unsigned)1<<((n)&(BITS_PER_WORD-1)))) 6998e903e7SBaptiste Daroussin 7098e903e7SBaptiste Daroussin /* character names */ 7198e903e7SBaptiste Daroussin 7298e903e7SBaptiste Daroussin #define NUL '\0' /* the null character */ 7398e903e7SBaptiste Daroussin #define NEWLINE '\n' /* line feed */ 7498e903e7SBaptiste Daroussin #define SP ' ' /* space */ 7598e903e7SBaptiste Daroussin #define BS '\b' /* backspace */ 7698e903e7SBaptiste Daroussin #define HT '\t' /* horizontal tab */ 7798e903e7SBaptiste Daroussin #define VT '\013' /* vertical tab */ 7898e903e7SBaptiste Daroussin #define CR '\r' /* carriage return */ 7998e903e7SBaptiste Daroussin #define FF '\f' /* form feed */ 8098e903e7SBaptiste Daroussin #define QUOTE '\'' /* single quote */ 8198e903e7SBaptiste Daroussin #define DOUBLE_QUOTE '\"' /* double quote */ 8298e903e7SBaptiste Daroussin #define BACKSLASH '\\' /* backslash */ 8398e903e7SBaptiste Daroussin 8498e903e7SBaptiste Daroussin #define UCH(c) (unsigned char)(c) 8598e903e7SBaptiste Daroussin 8698e903e7SBaptiste Daroussin /* defines for constructing filenames */ 8798e903e7SBaptiste Daroussin 8898e903e7SBaptiste Daroussin #if defined(VMS) 8998e903e7SBaptiste Daroussin #define CODE_SUFFIX "_code.c" 9098e903e7SBaptiste Daroussin #define DEFINES_SUFFIX "_tab.h" 9198e903e7SBaptiste Daroussin #define EXTERNS_SUFFIX "_tab.i" 9298e903e7SBaptiste Daroussin #define OUTPUT_SUFFIX "_tab.c" 9398e903e7SBaptiste Daroussin #else 9498e903e7SBaptiste Daroussin #define CODE_SUFFIX ".code.c" 9598e903e7SBaptiste Daroussin #define DEFINES_SUFFIX ".tab.h" 9698e903e7SBaptiste Daroussin #define EXTERNS_SUFFIX ".tab.i" 9798e903e7SBaptiste Daroussin #define OUTPUT_SUFFIX ".tab.c" 9898e903e7SBaptiste Daroussin #endif 9998e903e7SBaptiste Daroussin #define VERBOSE_SUFFIX ".output" 10098e903e7SBaptiste Daroussin #define GRAPH_SUFFIX ".dot" 10198e903e7SBaptiste Daroussin 10298e903e7SBaptiste Daroussin /* keyword codes */ 10398e903e7SBaptiste Daroussin 10498e903e7SBaptiste Daroussin #define TOKEN 0 10598e903e7SBaptiste Daroussin #define LEFT 1 10698e903e7SBaptiste Daroussin #define RIGHT 2 10798e903e7SBaptiste Daroussin #define NONASSOC 3 10898e903e7SBaptiste Daroussin #define MARK 4 10998e903e7SBaptiste Daroussin #define TEXT 5 11098e903e7SBaptiste Daroussin #define TYPE 6 11198e903e7SBaptiste Daroussin #define START 7 11298e903e7SBaptiste Daroussin #define UNION 8 11398e903e7SBaptiste Daroussin #define IDENT 9 11498e903e7SBaptiste Daroussin #define EXPECT 10 11598e903e7SBaptiste Daroussin #define EXPECT_RR 11 11698e903e7SBaptiste Daroussin #define PURE_PARSER 12 11798e903e7SBaptiste Daroussin #define PARSE_PARAM 13 11898e903e7SBaptiste Daroussin #define LEX_PARAM 14 11998e903e7SBaptiste Daroussin #define POSIX_YACC 15 1204b4a8fcaSBaptiste Daroussin #define TOKEN_TABLE 16 12198e903e7SBaptiste Daroussin 1220c8de5b0SBaptiste Daroussin #if defined(YYBTYACC) 1230c8de5b0SBaptiste Daroussin #define LOCATIONS 17 1240c8de5b0SBaptiste Daroussin #define DESTRUCTOR 18 1250c8de5b0SBaptiste Daroussin #endif 1260c8de5b0SBaptiste Daroussin 12798e903e7SBaptiste Daroussin /* symbol classes */ 12898e903e7SBaptiste Daroussin 12998e903e7SBaptiste Daroussin #define UNKNOWN 0 13098e903e7SBaptiste Daroussin #define TERM 1 13198e903e7SBaptiste Daroussin #define NONTERM 2 1320c8de5b0SBaptiste Daroussin #define ACTION 3 1330c8de5b0SBaptiste Daroussin #define ARGUMENT 4 13498e903e7SBaptiste Daroussin 13598e903e7SBaptiste Daroussin /* the undefined value */ 13698e903e7SBaptiste Daroussin 13798e903e7SBaptiste Daroussin #define UNDEFINED (-1) 13898e903e7SBaptiste Daroussin 13998e903e7SBaptiste Daroussin /* action codes */ 14098e903e7SBaptiste Daroussin 14198e903e7SBaptiste Daroussin #define SHIFT 1 14298e903e7SBaptiste Daroussin #define REDUCE 2 14398e903e7SBaptiste Daroussin 14498e903e7SBaptiste Daroussin /* character macros */ 14598e903e7SBaptiste Daroussin 14698e903e7SBaptiste Daroussin #define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$') 14798e903e7SBaptiste Daroussin #define IS_OCTAL(c) ((c) >= '0' && (c) <= '7') 14898e903e7SBaptiste Daroussin #define NUMERIC_VALUE(c) ((c) - '0') 14998e903e7SBaptiste Daroussin 15098e903e7SBaptiste Daroussin /* symbol macros */ 15198e903e7SBaptiste Daroussin 15298e903e7SBaptiste Daroussin #define ISTOKEN(s) ((s) < start_symbol) 15398e903e7SBaptiste Daroussin #define ISVAR(s) ((s) >= start_symbol) 15498e903e7SBaptiste Daroussin 15598e903e7SBaptiste Daroussin /* storage allocation macros */ 15698e903e7SBaptiste Daroussin 15798e903e7SBaptiste Daroussin #define CALLOC(k,n) (calloc((size_t)(k),(size_t)(n))) 15898e903e7SBaptiste Daroussin #define FREE(x) (free((char*)(x))) 15998e903e7SBaptiste Daroussin #define MALLOC(n) (malloc((size_t)(n))) 160*ab7bf3d4SCraig Rodrigues #define TCMALLOC(t,n) ((t*) calloc((size_t)(n), sizeof(t))) 1613e066022SBaptiste Daroussin #define TMALLOC(t,n) ((t*) malloc((size_t)(n) * sizeof(t))) 16298e903e7SBaptiste Daroussin #define NEW(t) ((t*)allocate(sizeof(t))) 16398e903e7SBaptiste Daroussin #define NEW2(n,t) ((t*)allocate(((size_t)(n)*sizeof(t)))) 16498e903e7SBaptiste Daroussin #define REALLOC(p,n) (realloc((char*)(p),(size_t)(n))) 1653e066022SBaptiste Daroussin #define TREALLOC(t,p,n) ((t*)realloc((char*)(p), (size_t)(n) * sizeof(t))) 16698e903e7SBaptiste Daroussin 16798e903e7SBaptiste Daroussin #define DO_FREE(x) if (x) { FREE(x); x = 0; } 16898e903e7SBaptiste Daroussin 16998e903e7SBaptiste Daroussin #define NO_SPACE(p) if (p == 0) no_space(); assert(p != 0) 17098e903e7SBaptiste Daroussin 17198e903e7SBaptiste Daroussin /* messages */ 17298e903e7SBaptiste Daroussin #define PLURAL(n) ((n) > 1 ? "s" : "") 17398e903e7SBaptiste Daroussin 1740c8de5b0SBaptiste Daroussin /* 1750c8de5b0SBaptiste Daroussin * Features which depend indirectly on the btyacc configuration, but are not 1760c8de5b0SBaptiste Daroussin * essential. 1770c8de5b0SBaptiste Daroussin */ 1780c8de5b0SBaptiste Daroussin #if defined(YYBTYACC) 1790c8de5b0SBaptiste Daroussin #define USE_HEADER_GUARDS 1 1800c8de5b0SBaptiste Daroussin #else 1810c8de5b0SBaptiste Daroussin #define USE_HEADER_GUARDS 0 1820c8de5b0SBaptiste Daroussin #endif 1830c8de5b0SBaptiste Daroussin 18498e903e7SBaptiste Daroussin typedef char Assoc_t; 18598e903e7SBaptiste Daroussin typedef char Class_t; 1860c8de5b0SBaptiste Daroussin typedef YYINT Index_t; 1870c8de5b0SBaptiste Daroussin typedef YYINT Value_t; 18898e903e7SBaptiste Daroussin 18998e903e7SBaptiste Daroussin /* the structure of a symbol table entry */ 19098e903e7SBaptiste Daroussin 19198e903e7SBaptiste Daroussin typedef struct bucket bucket; 19298e903e7SBaptiste Daroussin struct bucket 19398e903e7SBaptiste Daroussin { 19498e903e7SBaptiste Daroussin struct bucket *link; 19598e903e7SBaptiste Daroussin struct bucket *next; 19698e903e7SBaptiste Daroussin char *name; 19798e903e7SBaptiste Daroussin char *tag; 1980c8de5b0SBaptiste Daroussin #if defined(YYBTYACC) 1990c8de5b0SBaptiste Daroussin char **argnames; 2000c8de5b0SBaptiste Daroussin char **argtags; 2010c8de5b0SBaptiste Daroussin int args; 2020c8de5b0SBaptiste Daroussin char *destructor; 2030c8de5b0SBaptiste Daroussin #endif 20498e903e7SBaptiste Daroussin Value_t value; 20598e903e7SBaptiste Daroussin Index_t index; 20698e903e7SBaptiste Daroussin Value_t prec; 20798e903e7SBaptiste Daroussin Class_t class; 20898e903e7SBaptiste Daroussin Assoc_t assoc; 20998e903e7SBaptiste Daroussin }; 21098e903e7SBaptiste Daroussin 21198e903e7SBaptiste Daroussin /* the structure of the LR(0) state machine */ 21298e903e7SBaptiste Daroussin 21398e903e7SBaptiste Daroussin typedef struct core core; 21498e903e7SBaptiste Daroussin struct core 21598e903e7SBaptiste Daroussin { 21698e903e7SBaptiste Daroussin struct core *next; 21798e903e7SBaptiste Daroussin struct core *link; 21898e903e7SBaptiste Daroussin Value_t number; 21998e903e7SBaptiste Daroussin Value_t accessing_symbol; 22098e903e7SBaptiste Daroussin Value_t nitems; 22198e903e7SBaptiste Daroussin Value_t items[1]; 22298e903e7SBaptiste Daroussin }; 22398e903e7SBaptiste Daroussin 22498e903e7SBaptiste Daroussin /* the structure used to record shifts */ 22598e903e7SBaptiste Daroussin 22698e903e7SBaptiste Daroussin typedef struct shifts shifts; 22798e903e7SBaptiste Daroussin struct shifts 22898e903e7SBaptiste Daroussin { 22998e903e7SBaptiste Daroussin struct shifts *next; 23098e903e7SBaptiste Daroussin Value_t number; 23198e903e7SBaptiste Daroussin Value_t nshifts; 23298e903e7SBaptiste Daroussin Value_t shift[1]; 23398e903e7SBaptiste Daroussin }; 23498e903e7SBaptiste Daroussin 23598e903e7SBaptiste Daroussin /* the structure used to store reductions */ 23698e903e7SBaptiste Daroussin 23798e903e7SBaptiste Daroussin typedef struct reductions reductions; 23898e903e7SBaptiste Daroussin struct reductions 23998e903e7SBaptiste Daroussin { 24098e903e7SBaptiste Daroussin struct reductions *next; 24198e903e7SBaptiste Daroussin Value_t number; 24298e903e7SBaptiste Daroussin Value_t nreds; 24398e903e7SBaptiste Daroussin Value_t rules[1]; 24498e903e7SBaptiste Daroussin }; 24598e903e7SBaptiste Daroussin 24698e903e7SBaptiste Daroussin /* the structure used to represent parser actions */ 24798e903e7SBaptiste Daroussin 24898e903e7SBaptiste Daroussin typedef struct action action; 24998e903e7SBaptiste Daroussin struct action 25098e903e7SBaptiste Daroussin { 25198e903e7SBaptiste Daroussin struct action *next; 25298e903e7SBaptiste Daroussin Value_t symbol; 25398e903e7SBaptiste Daroussin Value_t number; 25498e903e7SBaptiste Daroussin Value_t prec; 25598e903e7SBaptiste Daroussin char action_code; 25698e903e7SBaptiste Daroussin Assoc_t assoc; 25798e903e7SBaptiste Daroussin char suppressed; 25898e903e7SBaptiste Daroussin }; 25998e903e7SBaptiste Daroussin 26098e903e7SBaptiste Daroussin /* the structure used to store parse/lex parameters */ 26198e903e7SBaptiste Daroussin typedef struct param param; 26298e903e7SBaptiste Daroussin struct param 26398e903e7SBaptiste Daroussin { 26498e903e7SBaptiste Daroussin struct param *next; 26598e903e7SBaptiste Daroussin char *name; /* parameter name */ 26698e903e7SBaptiste Daroussin char *type; /* everything before parameter name */ 26798e903e7SBaptiste Daroussin char *type2; /* everything after parameter name */ 26898e903e7SBaptiste Daroussin }; 26998e903e7SBaptiste Daroussin 27098e903e7SBaptiste Daroussin /* global variables */ 27198e903e7SBaptiste Daroussin 27298e903e7SBaptiste Daroussin extern char dflag; 27398e903e7SBaptiste Daroussin extern char gflag; 27498e903e7SBaptiste Daroussin extern char iflag; 27598e903e7SBaptiste Daroussin extern char lflag; 27698e903e7SBaptiste Daroussin extern char rflag; 27798e903e7SBaptiste Daroussin extern char sflag; 27898e903e7SBaptiste Daroussin extern char tflag; 27998e903e7SBaptiste Daroussin extern char vflag; 28098e903e7SBaptiste Daroussin extern const char *symbol_prefix; 28198e903e7SBaptiste Daroussin 28298e903e7SBaptiste Daroussin extern const char *myname; 28398e903e7SBaptiste Daroussin extern char *cptr; 28498e903e7SBaptiste Daroussin extern char *line; 28598e903e7SBaptiste Daroussin extern int lineno; 28698e903e7SBaptiste Daroussin extern int outline; 28798e903e7SBaptiste Daroussin extern int exit_code; 2883e066022SBaptiste Daroussin extern int pure_parser; 2894b4a8fcaSBaptiste Daroussin extern int token_table; 2900c8de5b0SBaptiste Daroussin #if defined(YYBTYACC) 2910c8de5b0SBaptiste Daroussin extern int locations; 2920c8de5b0SBaptiste Daroussin extern int backtrack; 2930c8de5b0SBaptiste Daroussin extern int destructor; 2940c8de5b0SBaptiste Daroussin #endif 29598e903e7SBaptiste Daroussin 29698e903e7SBaptiste Daroussin extern const char *const banner[]; 29798e903e7SBaptiste Daroussin extern const char *const xdecls[]; 29898e903e7SBaptiste Daroussin extern const char *const tables[]; 29998e903e7SBaptiste Daroussin extern const char *const global_vars[]; 30098e903e7SBaptiste Daroussin extern const char *const impure_vars[]; 30198e903e7SBaptiste Daroussin extern const char *const hdr_defs[]; 30298e903e7SBaptiste Daroussin extern const char *const hdr_vars[]; 30398e903e7SBaptiste Daroussin extern const char *const body_1[]; 30498e903e7SBaptiste Daroussin extern const char *const body_vars[]; 30598e903e7SBaptiste Daroussin extern const char *const body_2[]; 30698e903e7SBaptiste Daroussin extern const char *const trailer[]; 30798e903e7SBaptiste Daroussin 30898e903e7SBaptiste Daroussin extern char *code_file_name; 30998e903e7SBaptiste Daroussin extern char *input_file_name; 31098e903e7SBaptiste Daroussin extern char *defines_file_name; 31198e903e7SBaptiste Daroussin extern char *externs_file_name; 31298e903e7SBaptiste Daroussin 31398e903e7SBaptiste Daroussin extern FILE *action_file; 31498e903e7SBaptiste Daroussin extern FILE *code_file; 31598e903e7SBaptiste Daroussin extern FILE *defines_file; 31698e903e7SBaptiste Daroussin extern FILE *externs_file; 31798e903e7SBaptiste Daroussin extern FILE *input_file; 31898e903e7SBaptiste Daroussin extern FILE *output_file; 31998e903e7SBaptiste Daroussin extern FILE *text_file; 32098e903e7SBaptiste Daroussin extern FILE *union_file; 32198e903e7SBaptiste Daroussin extern FILE *verbose_file; 32298e903e7SBaptiste Daroussin extern FILE *graph_file; 32398e903e7SBaptiste Daroussin 3240c8de5b0SBaptiste Daroussin extern Value_t nitems; 3250c8de5b0SBaptiste Daroussin extern Value_t nrules; 3260c8de5b0SBaptiste Daroussin extern Value_t nsyms; 3270c8de5b0SBaptiste Daroussin extern Value_t ntokens; 3280c8de5b0SBaptiste Daroussin extern Value_t nvars; 32998e903e7SBaptiste Daroussin extern int ntags; 33098e903e7SBaptiste Daroussin 33198e903e7SBaptiste Daroussin extern char unionized; 33298e903e7SBaptiste Daroussin extern char line_format[]; 33398e903e7SBaptiste Daroussin 33498e903e7SBaptiste Daroussin extern Value_t start_symbol; 33598e903e7SBaptiste Daroussin extern char **symbol_name; 33698e903e7SBaptiste Daroussin extern char **symbol_pname; 33798e903e7SBaptiste Daroussin extern Value_t *symbol_value; 33898e903e7SBaptiste Daroussin extern Value_t *symbol_prec; 33998e903e7SBaptiste Daroussin extern char *symbol_assoc; 34098e903e7SBaptiste Daroussin 3410c8de5b0SBaptiste Daroussin #if defined(YYBTYACC) 3420c8de5b0SBaptiste Daroussin extern Value_t *symbol_pval; 3430c8de5b0SBaptiste Daroussin extern char **symbol_destructor; 3440c8de5b0SBaptiste Daroussin extern char **symbol_type_tag; 3450c8de5b0SBaptiste Daroussin #endif 3460c8de5b0SBaptiste Daroussin 34798e903e7SBaptiste Daroussin extern Value_t *ritem; 34898e903e7SBaptiste Daroussin extern Value_t *rlhs; 34998e903e7SBaptiste Daroussin extern Value_t *rrhs; 35098e903e7SBaptiste Daroussin extern Value_t *rprec; 35198e903e7SBaptiste Daroussin extern Assoc_t *rassoc; 35298e903e7SBaptiste Daroussin 35398e903e7SBaptiste Daroussin extern Value_t **derives; 35498e903e7SBaptiste Daroussin extern char *nullable; 35598e903e7SBaptiste Daroussin 35698e903e7SBaptiste Daroussin extern bucket *first_symbol; 35798e903e7SBaptiste Daroussin extern bucket *last_symbol; 35898e903e7SBaptiste Daroussin 35998e903e7SBaptiste Daroussin extern int nstates; 36098e903e7SBaptiste Daroussin extern core *first_state; 36198e903e7SBaptiste Daroussin extern shifts *first_shift; 36298e903e7SBaptiste Daroussin extern reductions *first_reduction; 36398e903e7SBaptiste Daroussin extern Value_t *accessing_symbol; 36498e903e7SBaptiste Daroussin extern core **state_table; 36598e903e7SBaptiste Daroussin extern shifts **shift_table; 36698e903e7SBaptiste Daroussin extern reductions **reduction_table; 36798e903e7SBaptiste Daroussin extern unsigned *LA; 36898e903e7SBaptiste Daroussin extern Value_t *LAruleno; 36998e903e7SBaptiste Daroussin extern Value_t *lookaheads; 37098e903e7SBaptiste Daroussin extern Value_t *goto_map; 37198e903e7SBaptiste Daroussin extern Value_t *from_state; 37298e903e7SBaptiste Daroussin extern Value_t *to_state; 37398e903e7SBaptiste Daroussin 37498e903e7SBaptiste Daroussin extern action **parser; 37598e903e7SBaptiste Daroussin extern int SRexpect; 37698e903e7SBaptiste Daroussin extern int RRexpect; 37798e903e7SBaptiste Daroussin extern int SRtotal; 37898e903e7SBaptiste Daroussin extern int RRtotal; 37998e903e7SBaptiste Daroussin extern Value_t *SRconflicts; 38098e903e7SBaptiste Daroussin extern Value_t *RRconflicts; 38198e903e7SBaptiste Daroussin extern Value_t *defred; 38298e903e7SBaptiste Daroussin extern Value_t *rules_used; 38398e903e7SBaptiste Daroussin extern Value_t nunused; 38498e903e7SBaptiste Daroussin extern Value_t final_state; 38598e903e7SBaptiste Daroussin 38698e903e7SBaptiste Daroussin extern Value_t *itemset; 38798e903e7SBaptiste Daroussin extern Value_t *itemsetend; 38898e903e7SBaptiste Daroussin extern unsigned *ruleset; 38998e903e7SBaptiste Daroussin 39098e903e7SBaptiste Daroussin extern param *lex_param; 39198e903e7SBaptiste Daroussin extern param *parse_param; 39298e903e7SBaptiste Daroussin 39398e903e7SBaptiste Daroussin /* global functions */ 39498e903e7SBaptiste Daroussin 39598e903e7SBaptiste Daroussin #ifndef GCC_NORETURN 3963e066022SBaptiste Daroussin #if defined(__dead2) 3973e066022SBaptiste Daroussin #define GCC_NORETURN __dead2 3983e066022SBaptiste Daroussin #elif defined(__dead) 3993e066022SBaptiste Daroussin #define GCC_NORETURN __dead 4003e066022SBaptiste Daroussin #else 40198e903e7SBaptiste Daroussin #define GCC_NORETURN /* nothing */ 40298e903e7SBaptiste Daroussin #endif 4033e066022SBaptiste Daroussin #endif 40498e903e7SBaptiste Daroussin 40598e903e7SBaptiste Daroussin #ifndef GCC_UNUSED 4063e066022SBaptiste Daroussin #if defined(__unused) 4073e066022SBaptiste Daroussin #define GCC_UNUSED __unused 4083e066022SBaptiste Daroussin #else 40998e903e7SBaptiste Daroussin #define GCC_UNUSED /* nothing */ 41098e903e7SBaptiste Daroussin #endif 4113e066022SBaptiste Daroussin #endif 41298e903e7SBaptiste Daroussin 413497dcf4cSBaptiste Daroussin #ifndef GCC_PRINTFLIKE 414497dcf4cSBaptiste Daroussin #define GCC_PRINTFLIKE(fmt,var) /*nothing*/ 415497dcf4cSBaptiste Daroussin #endif 416497dcf4cSBaptiste Daroussin 41798e903e7SBaptiste Daroussin /* closure.c */ 41898e903e7SBaptiste Daroussin extern void closure(Value_t * nucleus, int n); 41998e903e7SBaptiste Daroussin extern void finalize_closure(void); 42098e903e7SBaptiste Daroussin extern void set_first_derives(void); 42198e903e7SBaptiste Daroussin 42298e903e7SBaptiste Daroussin /* error.c */ 4230c8de5b0SBaptiste Daroussin extern void arg_number_disagree_warning(int a_lineno, char *a_name); 4240c8de5b0SBaptiste Daroussin extern void arg_type_disagree_warning(int a_lineno, int i, char *a_name); 4250c8de5b0SBaptiste Daroussin extern void at_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 4260c8de5b0SBaptiste Daroussin extern void at_warning(int a_lineno, int i); 4270c8de5b0SBaptiste Daroussin extern void bad_formals(void) GCC_NORETURN; 42898e903e7SBaptiste Daroussin extern void default_action_warning(void); 4290c8de5b0SBaptiste Daroussin extern void destructor_redeclared_warning(int a_lineno, char *a_line, char *a_cptr); 43098e903e7SBaptiste Daroussin extern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 43198e903e7SBaptiste Daroussin extern void dollar_warning(int a_lineno, int i); 43298e903e7SBaptiste Daroussin extern void fatal(const char *msg) GCC_NORETURN; 43398e903e7SBaptiste Daroussin extern void illegal_character(char *c_cptr) GCC_NORETURN; 43498e903e7SBaptiste Daroussin extern void illegal_tag(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN; 43598e903e7SBaptiste Daroussin extern void missing_brace(void) GCC_NORETURN; 43698e903e7SBaptiste Daroussin extern void no_grammar(void) GCC_NORETURN; 43798e903e7SBaptiste Daroussin extern void no_space(void) GCC_NORETURN; 43898e903e7SBaptiste Daroussin extern void open_error(const char *filename) GCC_NORETURN; 43998e903e7SBaptiste Daroussin extern void over_unionized(char *u_cptr) GCC_NORETURN; 44098e903e7SBaptiste Daroussin extern void prec_redeclared(void); 44198e903e7SBaptiste Daroussin extern void reprec_warning(char *s); 44298e903e7SBaptiste Daroussin extern void restarted_warning(void); 44398e903e7SBaptiste Daroussin extern void retyped_warning(char *s); 44498e903e7SBaptiste Daroussin extern void revalued_warning(char *s); 4450c8de5b0SBaptiste Daroussin extern void start_requires_args(char *a_name); 44698e903e7SBaptiste Daroussin extern void syntax_error(int st_lineno, char *st_line, char *st_cptr) GCC_NORETURN; 44798e903e7SBaptiste Daroussin extern void terminal_lhs(int s_lineno) GCC_NORETURN; 44898e903e7SBaptiste Daroussin extern void terminal_start(char *s) GCC_NORETURN; 44998e903e7SBaptiste Daroussin extern void tokenized_start(char *s) GCC_NORETURN; 45098e903e7SBaptiste Daroussin extern void undefined_goal(char *s) GCC_NORETURN; 45198e903e7SBaptiste Daroussin extern void undefined_symbol_warning(char *s); 45298e903e7SBaptiste Daroussin extern void unexpected_EOF(void) GCC_NORETURN; 4530c8de5b0SBaptiste Daroussin extern void unknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char *d_line, const char *d_cptr); 45498e903e7SBaptiste Daroussin extern void unknown_rhs(int i) GCC_NORETURN; 4550c8de5b0SBaptiste Daroussin extern void unsupported_flag_warning(const char *flag, const char *details); 45698e903e7SBaptiste Daroussin extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 45798e903e7SBaptiste Daroussin extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN; 45898e903e7SBaptiste Daroussin extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN; 45998e903e7SBaptiste Daroussin extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN; 46098e903e7SBaptiste Daroussin extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN; 4610c8de5b0SBaptiste Daroussin extern void untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name); 46298e903e7SBaptiste Daroussin extern void untyped_lhs(void) GCC_NORETURN; 46398e903e7SBaptiste Daroussin extern void untyped_rhs(int i, char *s) GCC_NORETURN; 46498e903e7SBaptiste Daroussin extern void used_reserved(char *s) GCC_NORETURN; 4650c8de5b0SBaptiste Daroussin extern void unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 4660c8de5b0SBaptiste Daroussin extern void wrong_number_args_warning(const char *which, const char *a_name); 4670c8de5b0SBaptiste Daroussin extern void wrong_type_for_arg_warning(int i, char *a_name); 46898e903e7SBaptiste Daroussin 46998e903e7SBaptiste Daroussin /* graph.c */ 47098e903e7SBaptiste Daroussin extern void graph(void); 47198e903e7SBaptiste Daroussin 47298e903e7SBaptiste Daroussin /* lalr.c */ 47398e903e7SBaptiste Daroussin extern void lalr(void); 47498e903e7SBaptiste Daroussin 47598e903e7SBaptiste Daroussin /* lr0.c */ 47698e903e7SBaptiste Daroussin extern void lr0(void); 47798e903e7SBaptiste Daroussin extern void show_cores(void); 47898e903e7SBaptiste Daroussin extern void show_ritems(void); 47998e903e7SBaptiste Daroussin extern void show_rrhs(void); 48098e903e7SBaptiste Daroussin extern void show_shifts(void); 48198e903e7SBaptiste Daroussin 48298e903e7SBaptiste Daroussin /* main.c */ 48398e903e7SBaptiste Daroussin extern void *allocate(size_t n); 48498e903e7SBaptiste Daroussin extern void done(int k) GCC_NORETURN; 48598e903e7SBaptiste Daroussin 48698e903e7SBaptiste Daroussin /* mkpar.c */ 48798e903e7SBaptiste Daroussin extern void free_parser(void); 48898e903e7SBaptiste Daroussin extern void make_parser(void); 48998e903e7SBaptiste Daroussin 4900c8de5b0SBaptiste Daroussin /* mstring.c */ 4910c8de5b0SBaptiste Daroussin struct mstring 4920c8de5b0SBaptiste Daroussin { 4930c8de5b0SBaptiste Daroussin char *base, *ptr, *end; 4940c8de5b0SBaptiste Daroussin }; 4950c8de5b0SBaptiste Daroussin 496497dcf4cSBaptiste Daroussin extern void msprintf(struct mstring *, const char *, ...) GCC_PRINTFLIKE(2,3); 4970c8de5b0SBaptiste Daroussin extern int mputchar(struct mstring *, int); 4980c8de5b0SBaptiste Daroussin extern struct mstring *msnew(void); 4990c8de5b0SBaptiste Daroussin extern char *msdone(struct mstring *); 5000c8de5b0SBaptiste Daroussin extern int strnscmp(const char *, const char *); 5010c8de5b0SBaptiste Daroussin extern unsigned int strnshash(const char *); 5020c8de5b0SBaptiste Daroussin 5030c8de5b0SBaptiste Daroussin #define mputc(m, ch) (((m)->ptr == (m)->end) \ 5040c8de5b0SBaptiste Daroussin ? mputchar(m,ch) \ 5050c8de5b0SBaptiste Daroussin : (*(m)->ptr++ = (char) (ch))) 5060c8de5b0SBaptiste Daroussin 50798e903e7SBaptiste Daroussin /* output.c */ 50898e903e7SBaptiste Daroussin extern void output(void); 50998e903e7SBaptiste Daroussin 51098e903e7SBaptiste Daroussin /* reader.c */ 51198e903e7SBaptiste Daroussin extern void reader(void); 51298e903e7SBaptiste Daroussin 5130c8de5b0SBaptiste Daroussin /* skeleton.c (generated by skel2c) */ 51498e903e7SBaptiste Daroussin extern void write_section(FILE * fp, const char *const section[]); 51598e903e7SBaptiste Daroussin 5160c8de5b0SBaptiste Daroussin /* symtab.c */ 5170c8de5b0SBaptiste Daroussin extern bucket *make_bucket(const char *); 5180c8de5b0SBaptiste Daroussin extern bucket *lookup(const char *); 5190c8de5b0SBaptiste Daroussin extern void create_symbol_table(void); 5200c8de5b0SBaptiste Daroussin extern void free_symbol_table(void); 5210c8de5b0SBaptiste Daroussin extern void free_symbols(void); 5220c8de5b0SBaptiste Daroussin 52398e903e7SBaptiste Daroussin /* verbose.c */ 52498e903e7SBaptiste Daroussin extern void verbose(void); 52598e903e7SBaptiste Daroussin 52698e903e7SBaptiste Daroussin /* warshall.c */ 52798e903e7SBaptiste Daroussin extern void reflexive_transitive_closure(unsigned *R, int n); 52898e903e7SBaptiste Daroussin 5290c8de5b0SBaptiste Daroussin #ifdef DEBUG 5300c8de5b0SBaptiste Daroussin /* closure.c */ 5310c8de5b0SBaptiste Daroussin extern void print_closure(int n); 5320c8de5b0SBaptiste Daroussin extern void print_EFF(void); 5330c8de5b0SBaptiste Daroussin extern void print_first_derives(void); 5340c8de5b0SBaptiste Daroussin /* lr0.c */ 5350c8de5b0SBaptiste Daroussin extern void print_derives(void); 5360c8de5b0SBaptiste Daroussin #endif 5370c8de5b0SBaptiste Daroussin 53898e903e7SBaptiste Daroussin #ifdef NO_LEAKS 53998e903e7SBaptiste Daroussin extern void lr0_leaks(void); 54098e903e7SBaptiste Daroussin extern void lalr_leaks(void); 54198e903e7SBaptiste Daroussin extern void mkpar_leaks(void); 54298e903e7SBaptiste Daroussin extern void output_leaks(void); 543497dcf4cSBaptiste Daroussin extern void mstring_leaks(void); 54498e903e7SBaptiste Daroussin extern void reader_leaks(void); 54598e903e7SBaptiste Daroussin #endif 546