-/* $Id: defs.h,v 1.23 2010/02/17 00:48:59 tom Exp $ */
+/* $Id: defs.h,v 1.37 2012/05/26 15:23:00 tom Exp $ */
#ifdef HAVE_CONFIG_H
#include <config.h>
#include <ctype.h>
#include <stdio.h>
+#if defined(__cplusplus) /* __cplusplus, etc. */
+#define class myClass
+#endif
+
#define YYMAJOR 1
#define YYMINOR 9
#define DOUBLE_QUOTE '\"' /* double quote */
#define BACKSLASH '\\' /* backslash */
+#define UCH(c) (unsigned char)(c)
+
/* defines for constructing filenames */
#if defined(VMS)
#define CODE_SUFFIX "_code.c"
#define DEFINES_SUFFIX "_tab.h"
+#define EXTERNS_SUFFIX "_tab.i"
#define OUTPUT_SUFFIX "_tab.c"
#else
#define CODE_SUFFIX ".code.c"
#define DEFINES_SUFFIX ".tab.h"
+#define EXTERNS_SUFFIX ".tab.i"
#define OUTPUT_SUFFIX ".tab.c"
#endif
#define VERBOSE_SUFFIX ".output"
#define EXPECT 10
#define EXPECT_RR 11
#define PURE_PARSER 12
+#define PARSE_PARAM 13
+#define LEX_PARAM 14
+#define POSIX_YACC 15
/* symbol classes */
/* storage allocation macros */
-#define CALLOC(k,n) (calloc((unsigned)(k),(unsigned)(n)))
+#define CALLOC(k,n) (calloc((size_t)(k),(size_t)(n)))
#define FREE(x) (free((char*)(x)))
-#define MALLOC(n) (malloc((unsigned)(n)))
+#define MALLOC(n) (malloc((size_t)(n)))
+#define TMALLOC(t,n) ((t*) malloc((size_t)(n) * sizeof(t)))
#define NEW(t) ((t*)allocate(sizeof(t)))
-#define NEW2(n,t) ((t*)allocate(((unsigned)(n)*sizeof(t))))
-#define REALLOC(p,n) (realloc((char*)(p),(unsigned)(n)))
+#define NEW2(n,t) ((t*)allocate(((size_t)(n)*sizeof(t))))
+#define REALLOC(p,n) (realloc((char*)(p),(size_t)(n)))
+#define TREALLOC(t,p,n) ((t*)realloc((char*)(p), (size_t)(n) * sizeof(t)))
#define DO_FREE(x) if (x) { FREE(x); x = 0; }
+#define NO_SPACE(p) if (p == 0) no_space(); assert(p != 0)
+
/* messages */
#define PLURAL(n) ((n) > 1 ? "s" : "")
char suppressed;
};
+/* the structure used to store parse/lex parameters */
+typedef struct param param;
+struct param
+{
+ struct param *next;
+ char *name; /* parameter name */
+ char *type; /* everything before parameter name */
+ char *type2; /* everything after parameter name */
+};
+
/* global variables */
extern char dflag;
extern char gflag;
+extern char iflag;
extern char lflag;
extern char rflag;
+extern char sflag;
extern char tflag;
extern char vflag;
extern const char *symbol_prefix;
extern int lineno;
extern int outline;
extern int exit_code;
+extern int pure_parser;
-extern const char *banner[];
-extern const char *xdecls[];
-extern const char *tables[];
-extern const char *hdr_defs[];
-extern const char *hdr_vars[];
-extern const char *body_1[];
-extern const char *body_vars[];
-extern const char *body_2[];
-extern const char *trailer[];
+extern const char *const banner[];
+extern const char *const xdecls[];
+extern const char *const tables[];
+extern const char *const global_vars[];
+extern const char *const impure_vars[];
+extern const char *const hdr_defs[];
+extern const char *const hdr_vars[];
+extern const char *const body_1[];
+extern const char *const body_vars[];
+extern const char *const body_2[];
+extern const char *const body_3[];
+extern const char *const trailer[];
+extern const char *const trailer_2[];
extern char *code_file_name;
-extern char *defines_file_name;
extern char *input_file_name;
-extern char *output_file_name;
-extern char *verbose_file_name;
-extern char *graph_file_name;
+extern char *defines_file_name;
+extern char *externs_file_name;
extern FILE *action_file;
extern FILE *code_file;
extern FILE *defines_file;
+extern FILE *externs_file;
extern FILE *input_file;
extern FILE *output_file;
extern FILE *text_file;
extern bucket *first_symbol;
extern bucket *last_symbol;
-extern int pure_parser;
extern int nstates;
extern core *first_state;
extern shifts *first_shift;
extern Value_t *itemsetend;
extern unsigned *ruleset;
+extern param *lex_param;
+extern param *parse_param;
+
/* global functions */
extern bucket *lookup(const char *);
extern bucket *make_bucket(const char *);
#ifndef GCC_NORETURN
+#if defined(__dead2)
+#define GCC_NORETURN __dead2
+#elif defined(__dead)
+#define GCC_NORETURN __dead
+#else
#define GCC_NORETURN /* nothing */
#endif
+#endif
#ifndef GCC_UNUSED
+#if defined(__unused)
+#define GCC_UNUSED __unused
+#else
#define GCC_UNUSED /* nothing */
#endif
+#endif
/* closure.c */
-extern void closure(Value_t *nucleus, int n);
+extern void closure(Value_t * nucleus, int n);
extern void finalize_closure(void);
extern void set_first_derives(void);
/* error.c */
extern void default_action_warning(void);
-extern void dollar_error(int a_lineno, char *a_line, char *a_cptr);
+extern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
extern void dollar_warning(int a_lineno, int i);
-extern void fatal(const char *msg);
-extern void illegal_character(char *c_cptr);
-extern void illegal_tag(int t_lineno, char *t_line, char *t_cptr);
-extern void no_grammar(void);
-extern void no_space(void);
-extern void open_error(const char *filename);
-extern void over_unionized(char *u_cptr);
+extern void fatal(const char *msg) GCC_NORETURN;
+extern void illegal_character(char *c_cptr) GCC_NORETURN;
+extern void illegal_tag(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
+extern void missing_brace(void) GCC_NORETURN;
+extern void no_grammar(void) GCC_NORETURN;
+extern void no_space(void) GCC_NORETURN;
+extern void open_error(const char *filename) GCC_NORETURN;
+extern void over_unionized(char *u_cptr) GCC_NORETURN;
extern void prec_redeclared(void);
-extern void print_pos(char *st_line, char *st_cptr);
extern void reprec_warning(char *s);
extern void restarted_warning(void);
extern void retyped_warning(char *s);
extern void revalued_warning(char *s);
extern void syntax_error(int st_lineno, char *st_line, char *st_cptr) GCC_NORETURN;
-extern void terminal_lhs(int s_lineno);
-extern void terminal_start(char *s);
-extern void tokenized_start(char *s);
-extern void undefined_goal(char *s);
+extern void terminal_lhs(int s_lineno) GCC_NORETURN;
+extern void terminal_start(char *s) GCC_NORETURN;
+extern void tokenized_start(char *s) GCC_NORETURN;
+extern void undefined_goal(char *s) GCC_NORETURN;
extern void undefined_symbol_warning(char *s);
-extern void unexpected_EOF(void);
-extern void unknown_rhs(int i);
-extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr);
-extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr);
-extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr);
-extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr);
-extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr);
-extern void untyped_lhs(void);
-extern void untyped_rhs(int i, char *s);
-extern void used_reserved(char *s);
+extern void unexpected_EOF(void) GCC_NORETURN;
+extern void unknown_rhs(int i) GCC_NORETURN;
+extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
+extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN;
+extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN;
+extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
+extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN;
+extern void untyped_lhs(void) GCC_NORETURN;
+extern void untyped_rhs(int i, char *s) GCC_NORETURN;
+extern void used_reserved(char *s) GCC_NORETURN;
/* graph.c */
extern void graph(void);
/* lalr.c */
-extern int hash(const char *name);
extern void create_symbol_table(void);
extern void free_symbol_table(void);
extern void free_symbols(void);
extern void show_shifts(void);
/* main.c */
-extern char *allocate(unsigned n);
+extern void *allocate(size_t n);
extern void done(int k) GCC_NORETURN;
/* mkpar.c */
extern void reader(void);
/* skeleton.c */
-extern void write_section(const char *section[]);
+extern void write_section(FILE * fp, const char *const section[]);
/* verbose.c */
extern void verbose(void);