1268899Sbapt/* $Id: defs.h,v 1.49 2014/04/22 23:34:34 tom Exp $ */ 2234949Sbapt 3234949Sbapt#ifdef HAVE_CONFIG_H 4234949Sbapt#include <config.h> 5234949Sbapt#endif 6234949Sbapt 7268899Sbapt#include <limits.h> 8234949Sbapt#include <stdlib.h> 9234949Sbapt#include <string.h> 10234949Sbapt#include <errno.h> 11234949Sbapt#include <assert.h> 12234949Sbapt#include <ctype.h> 13234949Sbapt#include <stdio.h> 14234949Sbapt 15240517Sbapt#if defined(__cplusplus) /* __cplusplus, etc. */ 16240517Sbapt#define class myClass 17240517Sbapt#endif 18240517Sbapt 19234949Sbapt#define YYMAJOR 1 20234949Sbapt#define YYMINOR 9 21234949Sbapt 22234949Sbapt#define CONCAT(first,second) first #second 23234949Sbapt#define CONCAT1(string,number) CONCAT(string, number) 24234949Sbapt#define CONCAT2(first,second) #first "." #second 25234949Sbapt 26234949Sbapt#ifdef YYPATCH 27234949Sbapt#define VSTRING(a,b) CONCAT2(a,b) CONCAT1(" ",YYPATCH) 28234949Sbapt#else 29234949Sbapt#define VSTRING(a,b) CONCAT2(a,b) 30234949Sbapt#endif 31234949Sbapt 32234949Sbapt#define VERSION VSTRING(YYMAJOR, YYMINOR) 33234949Sbapt 34268899Sbapt/* machine-dependent definitions: */ 35234949Sbapt 36234949Sbapt/* MAXCHAR is the largest unsigned character value */ 37234949Sbapt/* MAXTABLE is the maximum table size */ 38268899Sbapt/* YYINT is the smallest C integer type that can be */ 39268899Sbapt/* used to address a table of size MAXTABLE */ 40268899Sbapt/* MAXYYINT is the largest value of a YYINT */ 41268899Sbapt/* MINYYINT is the most negative value of a YYINT */ 42234949Sbapt/* BITS_PER_WORD is the number of bits in a C unsigned */ 43234949Sbapt/* WORDSIZE computes the number of words needed to */ 44234949Sbapt/* store n bits */ 45234949Sbapt/* BIT returns the value of the n-th bit starting */ 46234949Sbapt/* from r (0-indexed) */ 47234949Sbapt/* SETBIT sets the n-th bit starting from r */ 48234949Sbapt 49268899Sbapt#define MAXCHAR UCHAR_MAX 50268899Sbapt#ifndef MAXTABLE 51234949Sbapt#define MAXTABLE 32500 52268899Sbapt#endif 53268899Sbapt#if MAXTABLE <= SHRT_MAX 54268899Sbapt#define YYINT short 55268899Sbapt#define MAXYYINT SHRT_MAX 56268899Sbapt#define MINYYINT SHRT_MIN 57268899Sbapt#elif MAXTABLE <= INT_MAX 58268899Sbapt#define YYINT int 59268899Sbapt#define MAXYYINT INT_MAX 60268899Sbapt#define MINYYINT INT_MIN 61268899Sbapt#else 62268899Sbapt#error "MAXTABLE is too large for this machine architecture!" 63268899Sbapt#endif 64234949Sbapt 65268899Sbapt#define BITS_PER_WORD ((int) sizeof (unsigned) * CHAR_BIT) 66268899Sbapt#define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD) 67268899Sbapt#define BIT(r, n) ((((r)[(n)/BITS_PER_WORD])>>((n)&(BITS_PER_WORD-1)))&1) 68268899Sbapt#define SETBIT(r, n) ((r)[(n)/BITS_PER_WORD]|=((unsigned)1<<((n)&(BITS_PER_WORD-1)))) 69268899Sbapt 70234949Sbapt/* character names */ 71234949Sbapt 72234949Sbapt#define NUL '\0' /* the null character */ 73234949Sbapt#define NEWLINE '\n' /* line feed */ 74234949Sbapt#define SP ' ' /* space */ 75234949Sbapt#define BS '\b' /* backspace */ 76234949Sbapt#define HT '\t' /* horizontal tab */ 77234949Sbapt#define VT '\013' /* vertical tab */ 78234949Sbapt#define CR '\r' /* carriage return */ 79234949Sbapt#define FF '\f' /* form feed */ 80234949Sbapt#define QUOTE '\'' /* single quote */ 81234949Sbapt#define DOUBLE_QUOTE '\"' /* double quote */ 82234949Sbapt#define BACKSLASH '\\' /* backslash */ 83234949Sbapt 84234949Sbapt#define UCH(c) (unsigned char)(c) 85234949Sbapt 86234949Sbapt/* defines for constructing filenames */ 87234949Sbapt 88234949Sbapt#if defined(VMS) 89234949Sbapt#define CODE_SUFFIX "_code.c" 90234949Sbapt#define DEFINES_SUFFIX "_tab.h" 91234949Sbapt#define EXTERNS_SUFFIX "_tab.i" 92234949Sbapt#define OUTPUT_SUFFIX "_tab.c" 93234949Sbapt#else 94234949Sbapt#define CODE_SUFFIX ".code.c" 95234949Sbapt#define DEFINES_SUFFIX ".tab.h" 96234949Sbapt#define EXTERNS_SUFFIX ".tab.i" 97234949Sbapt#define OUTPUT_SUFFIX ".tab.c" 98234949Sbapt#endif 99234949Sbapt#define VERBOSE_SUFFIX ".output" 100234949Sbapt#define GRAPH_SUFFIX ".dot" 101234949Sbapt 102234949Sbapt/* keyword codes */ 103234949Sbapt 104234949Sbapt#define TOKEN 0 105234949Sbapt#define LEFT 1 106234949Sbapt#define RIGHT 2 107234949Sbapt#define NONASSOC 3 108234949Sbapt#define MARK 4 109234949Sbapt#define TEXT 5 110234949Sbapt#define TYPE 6 111234949Sbapt#define START 7 112234949Sbapt#define UNION 8 113234949Sbapt#define IDENT 9 114234949Sbapt#define EXPECT 10 115234949Sbapt#define EXPECT_RR 11 116234949Sbapt#define PURE_PARSER 12 117234949Sbapt#define PARSE_PARAM 13 118234949Sbapt#define LEX_PARAM 14 119234949Sbapt#define POSIX_YACC 15 120268899Sbapt#define TOKEN_TABLE 16 121234949Sbapt 122268899Sbapt#if defined(YYBTYACC) 123268899Sbapt#define LOCATIONS 17 124268899Sbapt#define DESTRUCTOR 18 125268899Sbapt#endif 126268899Sbapt 127234949Sbapt/* symbol classes */ 128234949Sbapt 129234949Sbapt#define UNKNOWN 0 130234949Sbapt#define TERM 1 131234949Sbapt#define NONTERM 2 132268899Sbapt#define ACTION 3 133268899Sbapt#define ARGUMENT 4 134234949Sbapt 135234949Sbapt/* the undefined value */ 136234949Sbapt 137234949Sbapt#define UNDEFINED (-1) 138234949Sbapt 139234949Sbapt/* action codes */ 140234949Sbapt 141234949Sbapt#define SHIFT 1 142234949Sbapt#define REDUCE 2 143234949Sbapt 144234949Sbapt/* character macros */ 145234949Sbapt 146234949Sbapt#define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$') 147234949Sbapt#define IS_OCTAL(c) ((c) >= '0' && (c) <= '7') 148234949Sbapt#define NUMERIC_VALUE(c) ((c) - '0') 149234949Sbapt 150234949Sbapt/* symbol macros */ 151234949Sbapt 152234949Sbapt#define ISTOKEN(s) ((s) < start_symbol) 153234949Sbapt#define ISVAR(s) ((s) >= start_symbol) 154234949Sbapt 155234949Sbapt/* storage allocation macros */ 156234949Sbapt 157234949Sbapt#define CALLOC(k,n) (calloc((size_t)(k),(size_t)(n))) 158234949Sbapt#define FREE(x) (free((char*)(x))) 159234949Sbapt#define MALLOC(n) (malloc((size_t)(n))) 160240517Sbapt#define TMALLOC(t,n) ((t*) malloc((size_t)(n) * sizeof(t))) 161234949Sbapt#define NEW(t) ((t*)allocate(sizeof(t))) 162234949Sbapt#define NEW2(n,t) ((t*)allocate(((size_t)(n)*sizeof(t)))) 163234949Sbapt#define REALLOC(p,n) (realloc((char*)(p),(size_t)(n))) 164240517Sbapt#define TREALLOC(t,p,n) ((t*)realloc((char*)(p), (size_t)(n) * sizeof(t))) 165234949Sbapt 166234949Sbapt#define DO_FREE(x) if (x) { FREE(x); x = 0; } 167234949Sbapt 168234949Sbapt#define NO_SPACE(p) if (p == 0) no_space(); assert(p != 0) 169234949Sbapt 170234949Sbapt/* messages */ 171234949Sbapt#define PLURAL(n) ((n) > 1 ? "s" : "") 172234949Sbapt 173268899Sbapt/* 174268899Sbapt * Features which depend indirectly on the btyacc configuration, but are not 175268899Sbapt * essential. 176268899Sbapt */ 177268899Sbapt#if defined(YYBTYACC) 178268899Sbapt#define USE_HEADER_GUARDS 1 179268899Sbapt#else 180268899Sbapt#define USE_HEADER_GUARDS 0 181268899Sbapt#endif 182268899Sbapt 183234949Sbapttypedef char Assoc_t; 184234949Sbapttypedef char Class_t; 185268899Sbapttypedef YYINT Index_t; 186268899Sbapttypedef YYINT Value_t; 187234949Sbapt 188234949Sbapt/* the structure of a symbol table entry */ 189234949Sbapt 190234949Sbapttypedef struct bucket bucket; 191234949Sbaptstruct bucket 192234949Sbapt{ 193234949Sbapt struct bucket *link; 194234949Sbapt struct bucket *next; 195234949Sbapt char *name; 196234949Sbapt char *tag; 197268899Sbapt#if defined(YYBTYACC) 198268899Sbapt char **argnames; 199268899Sbapt char **argtags; 200268899Sbapt int args; 201268899Sbapt char *destructor; 202268899Sbapt#endif 203234949Sbapt Value_t value; 204234949Sbapt Index_t index; 205234949Sbapt Value_t prec; 206234949Sbapt Class_t class; 207234949Sbapt Assoc_t assoc; 208234949Sbapt}; 209234949Sbapt 210234949Sbapt/* the structure of the LR(0) state machine */ 211234949Sbapt 212234949Sbapttypedef struct core core; 213234949Sbaptstruct core 214234949Sbapt{ 215234949Sbapt struct core *next; 216234949Sbapt struct core *link; 217234949Sbapt Value_t number; 218234949Sbapt Value_t accessing_symbol; 219234949Sbapt Value_t nitems; 220234949Sbapt Value_t items[1]; 221234949Sbapt}; 222234949Sbapt 223234949Sbapt/* the structure used to record shifts */ 224234949Sbapt 225234949Sbapttypedef struct shifts shifts; 226234949Sbaptstruct shifts 227234949Sbapt{ 228234949Sbapt struct shifts *next; 229234949Sbapt Value_t number; 230234949Sbapt Value_t nshifts; 231234949Sbapt Value_t shift[1]; 232234949Sbapt}; 233234949Sbapt 234234949Sbapt/* the structure used to store reductions */ 235234949Sbapt 236234949Sbapttypedef struct reductions reductions; 237234949Sbaptstruct reductions 238234949Sbapt{ 239234949Sbapt struct reductions *next; 240234949Sbapt Value_t number; 241234949Sbapt Value_t nreds; 242234949Sbapt Value_t rules[1]; 243234949Sbapt}; 244234949Sbapt 245234949Sbapt/* the structure used to represent parser actions */ 246234949Sbapt 247234949Sbapttypedef struct action action; 248234949Sbaptstruct action 249234949Sbapt{ 250234949Sbapt struct action *next; 251234949Sbapt Value_t symbol; 252234949Sbapt Value_t number; 253234949Sbapt Value_t prec; 254234949Sbapt char action_code; 255234949Sbapt Assoc_t assoc; 256234949Sbapt char suppressed; 257234949Sbapt}; 258234949Sbapt 259234949Sbapt/* the structure used to store parse/lex parameters */ 260234949Sbapttypedef struct param param; 261234949Sbaptstruct param 262234949Sbapt{ 263234949Sbapt struct param *next; 264234949Sbapt char *name; /* parameter name */ 265234949Sbapt char *type; /* everything before parameter name */ 266234949Sbapt char *type2; /* everything after parameter name */ 267234949Sbapt}; 268234949Sbapt 269234949Sbapt/* global variables */ 270234949Sbapt 271234949Sbaptextern char dflag; 272234949Sbaptextern char gflag; 273234949Sbaptextern char iflag; 274234949Sbaptextern char lflag; 275234949Sbaptextern char rflag; 276234949Sbaptextern char sflag; 277234949Sbaptextern char tflag; 278234949Sbaptextern char vflag; 279234949Sbaptextern const char *symbol_prefix; 280234949Sbapt 281234949Sbaptextern const char *myname; 282234949Sbaptextern char *cptr; 283234949Sbaptextern char *line; 284234949Sbaptextern int lineno; 285234949Sbaptextern int outline; 286234949Sbaptextern int exit_code; 287240517Sbaptextern int pure_parser; 288268899Sbaptextern int token_table; 289268899Sbapt#if defined(YYBTYACC) 290268899Sbaptextern int locations; 291268899Sbaptextern int backtrack; 292268899Sbaptextern int destructor; 293268899Sbapt#endif 294234949Sbapt 295234949Sbaptextern const char *const banner[]; 296234949Sbaptextern const char *const xdecls[]; 297234949Sbaptextern const char *const tables[]; 298234949Sbaptextern const char *const global_vars[]; 299234949Sbaptextern const char *const impure_vars[]; 300234949Sbaptextern const char *const hdr_defs[]; 301234949Sbaptextern const char *const hdr_vars[]; 302234949Sbaptextern const char *const body_1[]; 303234949Sbaptextern const char *const body_vars[]; 304234949Sbaptextern const char *const body_2[]; 305234949Sbaptextern const char *const trailer[]; 306234949Sbapt 307234949Sbaptextern char *code_file_name; 308234949Sbaptextern char *input_file_name; 309234949Sbaptextern char *defines_file_name; 310234949Sbaptextern char *externs_file_name; 311234949Sbapt 312234949Sbaptextern FILE *action_file; 313234949Sbaptextern FILE *code_file; 314234949Sbaptextern FILE *defines_file; 315234949Sbaptextern FILE *externs_file; 316234949Sbaptextern FILE *input_file; 317234949Sbaptextern FILE *output_file; 318234949Sbaptextern FILE *text_file; 319234949Sbaptextern FILE *union_file; 320234949Sbaptextern FILE *verbose_file; 321234949Sbaptextern FILE *graph_file; 322234949Sbapt 323268899Sbaptextern Value_t nitems; 324268899Sbaptextern Value_t nrules; 325268899Sbaptextern Value_t nsyms; 326268899Sbaptextern Value_t ntokens; 327268899Sbaptextern Value_t nvars; 328234949Sbaptextern int ntags; 329234949Sbapt 330234949Sbaptextern char unionized; 331234949Sbaptextern char line_format[]; 332234949Sbapt 333234949Sbaptextern Value_t start_symbol; 334234949Sbaptextern char **symbol_name; 335234949Sbaptextern char **symbol_pname; 336234949Sbaptextern Value_t *symbol_value; 337234949Sbaptextern Value_t *symbol_prec; 338234949Sbaptextern char *symbol_assoc; 339234949Sbapt 340268899Sbapt#if defined(YYBTYACC) 341268899Sbaptextern Value_t *symbol_pval; 342268899Sbaptextern char **symbol_destructor; 343268899Sbaptextern char **symbol_type_tag; 344268899Sbapt#endif 345268899Sbapt 346234949Sbaptextern Value_t *ritem; 347234949Sbaptextern Value_t *rlhs; 348234949Sbaptextern Value_t *rrhs; 349234949Sbaptextern Value_t *rprec; 350234949Sbaptextern Assoc_t *rassoc; 351234949Sbapt 352234949Sbaptextern Value_t **derives; 353234949Sbaptextern char *nullable; 354234949Sbapt 355234949Sbaptextern bucket *first_symbol; 356234949Sbaptextern bucket *last_symbol; 357234949Sbapt 358234949Sbaptextern int nstates; 359234949Sbaptextern core *first_state; 360234949Sbaptextern shifts *first_shift; 361234949Sbaptextern reductions *first_reduction; 362234949Sbaptextern Value_t *accessing_symbol; 363234949Sbaptextern core **state_table; 364234949Sbaptextern shifts **shift_table; 365234949Sbaptextern reductions **reduction_table; 366234949Sbaptextern unsigned *LA; 367234949Sbaptextern Value_t *LAruleno; 368234949Sbaptextern Value_t *lookaheads; 369234949Sbaptextern Value_t *goto_map; 370234949Sbaptextern Value_t *from_state; 371234949Sbaptextern Value_t *to_state; 372234949Sbapt 373234949Sbaptextern action **parser; 374234949Sbaptextern int SRexpect; 375234949Sbaptextern int RRexpect; 376234949Sbaptextern int SRtotal; 377234949Sbaptextern int RRtotal; 378234949Sbaptextern Value_t *SRconflicts; 379234949Sbaptextern Value_t *RRconflicts; 380234949Sbaptextern Value_t *defred; 381234949Sbaptextern Value_t *rules_used; 382234949Sbaptextern Value_t nunused; 383234949Sbaptextern Value_t final_state; 384234949Sbapt 385234949Sbaptextern Value_t *itemset; 386234949Sbaptextern Value_t *itemsetend; 387234949Sbaptextern unsigned *ruleset; 388234949Sbapt 389234949Sbaptextern param *lex_param; 390234949Sbaptextern param *parse_param; 391234949Sbapt 392234949Sbapt/* global functions */ 393234949Sbapt 394234949Sbapt#ifndef GCC_NORETURN 395240517Sbapt#if defined(__dead2) 396240517Sbapt#define GCC_NORETURN __dead2 397240517Sbapt#elif defined(__dead) 398240517Sbapt#define GCC_NORETURN __dead 399240517Sbapt#else 400234949Sbapt#define GCC_NORETURN /* nothing */ 401234949Sbapt#endif 402240517Sbapt#endif 403234949Sbapt 404234949Sbapt#ifndef GCC_UNUSED 405240517Sbapt#if defined(__unused) 406240517Sbapt#define GCC_UNUSED __unused 407240517Sbapt#else 408234949Sbapt#define GCC_UNUSED /* nothing */ 409234949Sbapt#endif 410240517Sbapt#endif 411234949Sbapt 412268899Sbapt#ifndef GCC_PRINTFLIKE 413268899Sbapt#define GCC_PRINTFLIKE(fmt,var) /*nothing*/ 414268899Sbapt#endif 415268899Sbapt 416234949Sbapt/* closure.c */ 417234949Sbaptextern void closure(Value_t * nucleus, int n); 418234949Sbaptextern void finalize_closure(void); 419234949Sbaptextern void set_first_derives(void); 420234949Sbapt 421234949Sbapt/* error.c */ 422268899Sbaptextern void arg_number_disagree_warning(int a_lineno, char *a_name); 423268899Sbaptextern void arg_type_disagree_warning(int a_lineno, int i, char *a_name); 424268899Sbaptextern void at_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 425268899Sbaptextern void at_warning(int a_lineno, int i); 426268899Sbaptextern void bad_formals(void) GCC_NORETURN; 427234949Sbaptextern void default_action_warning(void); 428268899Sbaptextern void destructor_redeclared_warning(int a_lineno, char *a_line, char *a_cptr); 429234949Sbaptextern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 430234949Sbaptextern void dollar_warning(int a_lineno, int i); 431234949Sbaptextern void fatal(const char *msg) GCC_NORETURN; 432234949Sbaptextern void illegal_character(char *c_cptr) GCC_NORETURN; 433234949Sbaptextern void illegal_tag(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN; 434234949Sbaptextern void missing_brace(void) GCC_NORETURN; 435234949Sbaptextern void no_grammar(void) GCC_NORETURN; 436234949Sbaptextern void no_space(void) GCC_NORETURN; 437234949Sbaptextern void open_error(const char *filename) GCC_NORETURN; 438234949Sbaptextern void over_unionized(char *u_cptr) GCC_NORETURN; 439234949Sbaptextern void prec_redeclared(void); 440234949Sbaptextern void reprec_warning(char *s); 441234949Sbaptextern void restarted_warning(void); 442234949Sbaptextern void retyped_warning(char *s); 443234949Sbaptextern void revalued_warning(char *s); 444268899Sbaptextern void start_requires_args(char *a_name); 445234949Sbaptextern void syntax_error(int st_lineno, char *st_line, char *st_cptr) GCC_NORETURN; 446234949Sbaptextern void terminal_lhs(int s_lineno) GCC_NORETURN; 447234949Sbaptextern void terminal_start(char *s) GCC_NORETURN; 448234949Sbaptextern void tokenized_start(char *s) GCC_NORETURN; 449234949Sbaptextern void undefined_goal(char *s) GCC_NORETURN; 450234949Sbaptextern void undefined_symbol_warning(char *s); 451234949Sbaptextern void unexpected_EOF(void) GCC_NORETURN; 452268899Sbaptextern void unknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char *d_line, const char *d_cptr); 453234949Sbaptextern void unknown_rhs(int i) GCC_NORETURN; 454268899Sbaptextern void unsupported_flag_warning(const char *flag, const char *details); 455234949Sbaptextern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 456234949Sbaptextern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN; 457234949Sbaptextern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN; 458234949Sbaptextern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN; 459234949Sbaptextern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN; 460268899Sbaptextern void untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name); 461234949Sbaptextern void untyped_lhs(void) GCC_NORETURN; 462234949Sbaptextern void untyped_rhs(int i, char *s) GCC_NORETURN; 463234949Sbaptextern void used_reserved(char *s) GCC_NORETURN; 464268899Sbaptextern void unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN; 465268899Sbaptextern void wrong_number_args_warning(const char *which, const char *a_name); 466268899Sbaptextern void wrong_type_for_arg_warning(int i, char *a_name); 467234949Sbapt 468234949Sbapt/* graph.c */ 469234949Sbaptextern void graph(void); 470234949Sbapt 471234949Sbapt/* lalr.c */ 472234949Sbaptextern void lalr(void); 473234949Sbapt 474234949Sbapt/* lr0.c */ 475234949Sbaptextern void lr0(void); 476234949Sbaptextern void show_cores(void); 477234949Sbaptextern void show_ritems(void); 478234949Sbaptextern void show_rrhs(void); 479234949Sbaptextern void show_shifts(void); 480234949Sbapt 481234949Sbapt/* main.c */ 482234949Sbaptextern void *allocate(size_t n); 483234949Sbaptextern void done(int k) GCC_NORETURN; 484234949Sbapt 485234949Sbapt/* mkpar.c */ 486234949Sbaptextern void free_parser(void); 487234949Sbaptextern void make_parser(void); 488234949Sbapt 489268899Sbapt/* mstring.c */ 490268899Sbaptstruct mstring 491268899Sbapt{ 492268899Sbapt char *base, *ptr, *end; 493268899Sbapt}; 494268899Sbapt 495268899Sbaptextern void msprintf(struct mstring *, const char *, ...) GCC_PRINTFLIKE(2,3); 496268899Sbaptextern int mputchar(struct mstring *, int); 497268899Sbaptextern struct mstring *msnew(void); 498268899Sbaptextern char *msdone(struct mstring *); 499268899Sbaptextern int strnscmp(const char *, const char *); 500268899Sbaptextern unsigned int strnshash(const char *); 501268899Sbapt 502268899Sbapt#define mputc(m, ch) (((m)->ptr == (m)->end) \ 503268899Sbapt ? mputchar(m,ch) \ 504268899Sbapt : (*(m)->ptr++ = (char) (ch))) 505268899Sbapt 506234949Sbapt/* output.c */ 507234949Sbaptextern void output(void); 508234949Sbapt 509234949Sbapt/* reader.c */ 510234949Sbaptextern void reader(void); 511234949Sbapt 512268899Sbapt/* skeleton.c (generated by skel2c) */ 513240517Sbaptextern void write_section(FILE * fp, const char *const section[]); 514234949Sbapt 515268899Sbapt/* symtab.c */ 516268899Sbaptextern bucket *make_bucket(const char *); 517268899Sbaptextern bucket *lookup(const char *); 518268899Sbaptextern void create_symbol_table(void); 519268899Sbaptextern void free_symbol_table(void); 520268899Sbaptextern void free_symbols(void); 521268899Sbapt 522234949Sbapt/* verbose.c */ 523234949Sbaptextern void verbose(void); 524234949Sbapt 525234949Sbapt/* warshall.c */ 526234949Sbaptextern void reflexive_transitive_closure(unsigned *R, int n); 527234949Sbapt 528268899Sbapt#ifdef DEBUG 529268899Sbapt /* closure.c */ 530268899Sbaptextern void print_closure(int n); 531268899Sbaptextern void print_EFF(void); 532268899Sbaptextern void print_first_derives(void); 533268899Sbapt /* lr0.c */ 534268899Sbaptextern void print_derives(void); 535268899Sbapt#endif 536268899Sbapt 537234949Sbapt#ifdef NO_LEAKS 538234949Sbaptextern void lr0_leaks(void); 539234949Sbaptextern void lalr_leaks(void); 540234949Sbaptextern void mkpar_leaks(void); 541234949Sbaptextern void output_leaks(void); 542268899Sbaptextern void mstring_leaks(void); 543234949Sbaptextern void reader_leaks(void); 544234949Sbapt#endif 545