xref: /freebsd/contrib/byacc/defs.h (revision 11fce282dbb3cbbcf3532ee4aa6ad05dab2d3209)
1*11fce282SBaptiste Daroussin /* $Id: defs.h,v 1.51 2014/10/02 22:38:13 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)))
160ab7bf3d4SCraig 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;
370*11fce282SBaptiste Daroussin extern Value_t *goto_base;
37198e903e7SBaptiste Daroussin extern Value_t *goto_map;
37298e903e7SBaptiste Daroussin extern Value_t *from_state;
37398e903e7SBaptiste Daroussin extern Value_t *to_state;
37498e903e7SBaptiste Daroussin 
37598e903e7SBaptiste Daroussin extern action **parser;
37698e903e7SBaptiste Daroussin extern int SRexpect;
37798e903e7SBaptiste Daroussin extern int RRexpect;
37898e903e7SBaptiste Daroussin extern int SRtotal;
37998e903e7SBaptiste Daroussin extern int RRtotal;
38098e903e7SBaptiste Daroussin extern Value_t *SRconflicts;
38198e903e7SBaptiste Daroussin extern Value_t *RRconflicts;
38298e903e7SBaptiste Daroussin extern Value_t *defred;
38398e903e7SBaptiste Daroussin extern Value_t *rules_used;
38498e903e7SBaptiste Daroussin extern Value_t nunused;
38598e903e7SBaptiste Daroussin extern Value_t final_state;
38698e903e7SBaptiste Daroussin 
38798e903e7SBaptiste Daroussin extern Value_t *itemset;
38898e903e7SBaptiste Daroussin extern Value_t *itemsetend;
38998e903e7SBaptiste Daroussin extern unsigned *ruleset;
39098e903e7SBaptiste Daroussin 
39198e903e7SBaptiste Daroussin extern param *lex_param;
39298e903e7SBaptiste Daroussin extern param *parse_param;
39398e903e7SBaptiste Daroussin 
39498e903e7SBaptiste Daroussin /* global functions */
39598e903e7SBaptiste Daroussin 
39698e903e7SBaptiste Daroussin #ifndef GCC_NORETURN
3973e066022SBaptiste Daroussin #if defined(__dead2)
3983e066022SBaptiste Daroussin #define GCC_NORETURN		__dead2
3993e066022SBaptiste Daroussin #elif defined(__dead)
4003e066022SBaptiste Daroussin #define GCC_NORETURN		__dead
4013e066022SBaptiste Daroussin #else
40298e903e7SBaptiste Daroussin #define GCC_NORETURN		/* nothing */
40398e903e7SBaptiste Daroussin #endif
4043e066022SBaptiste Daroussin #endif
40598e903e7SBaptiste Daroussin 
40698e903e7SBaptiste Daroussin #ifndef GCC_UNUSED
4073e066022SBaptiste Daroussin #if defined(__unused)
4083e066022SBaptiste Daroussin #define GCC_UNUSED		__unused
4093e066022SBaptiste Daroussin #else
41098e903e7SBaptiste Daroussin #define GCC_UNUSED		/* nothing */
41198e903e7SBaptiste Daroussin #endif
4123e066022SBaptiste Daroussin #endif
41398e903e7SBaptiste Daroussin 
414497dcf4cSBaptiste Daroussin #ifndef GCC_PRINTFLIKE
415497dcf4cSBaptiste Daroussin #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
416497dcf4cSBaptiste Daroussin #endif
417497dcf4cSBaptiste Daroussin 
41898e903e7SBaptiste Daroussin /* closure.c */
41998e903e7SBaptiste Daroussin extern void closure(Value_t * nucleus, int n);
42098e903e7SBaptiste Daroussin extern void finalize_closure(void);
42198e903e7SBaptiste Daroussin extern void set_first_derives(void);
42298e903e7SBaptiste Daroussin 
42398e903e7SBaptiste Daroussin /* error.c */
4240c8de5b0SBaptiste Daroussin extern void arg_number_disagree_warning(int a_lineno, char *a_name);
4250c8de5b0SBaptiste Daroussin extern void arg_type_disagree_warning(int a_lineno, int i, char *a_name);
4260c8de5b0SBaptiste Daroussin extern void at_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
4270c8de5b0SBaptiste Daroussin extern void at_warning(int a_lineno, int i);
4280c8de5b0SBaptiste Daroussin extern void bad_formals(void) GCC_NORETURN;
42998e903e7SBaptiste Daroussin extern void default_action_warning(void);
4300c8de5b0SBaptiste Daroussin extern void destructor_redeclared_warning(int a_lineno, char *a_line, char *a_cptr);
43198e903e7SBaptiste Daroussin extern void dollar_error(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
43298e903e7SBaptiste Daroussin extern void dollar_warning(int a_lineno, int i);
43398e903e7SBaptiste Daroussin extern void fatal(const char *msg) GCC_NORETURN;
43498e903e7SBaptiste Daroussin extern void illegal_character(char *c_cptr) GCC_NORETURN;
43598e903e7SBaptiste Daroussin extern void illegal_tag(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
43698e903e7SBaptiste Daroussin extern void missing_brace(void) GCC_NORETURN;
43798e903e7SBaptiste Daroussin extern void no_grammar(void) GCC_NORETURN;
43898e903e7SBaptiste Daroussin extern void no_space(void) GCC_NORETURN;
43998e903e7SBaptiste Daroussin extern void open_error(const char *filename) GCC_NORETURN;
44098e903e7SBaptiste Daroussin extern void over_unionized(char *u_cptr) GCC_NORETURN;
44198e903e7SBaptiste Daroussin extern void prec_redeclared(void);
44298e903e7SBaptiste Daroussin extern void reprec_warning(char *s);
44398e903e7SBaptiste Daroussin extern void restarted_warning(void);
44498e903e7SBaptiste Daroussin extern void retyped_warning(char *s);
44598e903e7SBaptiste Daroussin extern void revalued_warning(char *s);
4460c8de5b0SBaptiste Daroussin extern void start_requires_args(char *a_name);
44798e903e7SBaptiste Daroussin extern void syntax_error(int st_lineno, char *st_line, char *st_cptr) GCC_NORETURN;
44898e903e7SBaptiste Daroussin extern void terminal_lhs(int s_lineno) GCC_NORETURN;
44998e903e7SBaptiste Daroussin extern void terminal_start(char *s) GCC_NORETURN;
45098e903e7SBaptiste Daroussin extern void tokenized_start(char *s) GCC_NORETURN;
45198e903e7SBaptiste Daroussin extern void undefined_goal(char *s) GCC_NORETURN;
45298e903e7SBaptiste Daroussin extern void undefined_symbol_warning(char *s);
45398e903e7SBaptiste Daroussin extern void unexpected_EOF(void) GCC_NORETURN;
4540c8de5b0SBaptiste 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);
45598e903e7SBaptiste Daroussin extern void unknown_rhs(int i) GCC_NORETURN;
4560c8de5b0SBaptiste Daroussin extern void unsupported_flag_warning(const char *flag, const char *details);
45798e903e7SBaptiste Daroussin extern void unterminated_action(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
45898e903e7SBaptiste Daroussin extern void unterminated_comment(int c_lineno, char *c_line, char *c_cptr) GCC_NORETURN;
45998e903e7SBaptiste Daroussin extern void unterminated_string(int s_lineno, char *s_line, char *s_cptr) GCC_NORETURN;
46098e903e7SBaptiste Daroussin extern void unterminated_text(int t_lineno, char *t_line, char *t_cptr) GCC_NORETURN;
46198e903e7SBaptiste Daroussin extern void unterminated_union(int u_lineno, char *u_line, char *u_cptr) GCC_NORETURN;
4620c8de5b0SBaptiste Daroussin extern void untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name);
46398e903e7SBaptiste Daroussin extern void untyped_lhs(void) GCC_NORETURN;
46498e903e7SBaptiste Daroussin extern void untyped_rhs(int i, char *s) GCC_NORETURN;
46598e903e7SBaptiste Daroussin extern void used_reserved(char *s) GCC_NORETURN;
4660c8de5b0SBaptiste Daroussin extern void unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) GCC_NORETURN;
4670c8de5b0SBaptiste Daroussin extern void wrong_number_args_warning(const char *which, const char *a_name);
4680c8de5b0SBaptiste Daroussin extern void wrong_type_for_arg_warning(int i, char *a_name);
46998e903e7SBaptiste Daroussin 
47098e903e7SBaptiste Daroussin /* graph.c */
47198e903e7SBaptiste Daroussin extern void graph(void);
47298e903e7SBaptiste Daroussin 
47398e903e7SBaptiste Daroussin /* lalr.c */
47498e903e7SBaptiste Daroussin extern void lalr(void);
47598e903e7SBaptiste Daroussin 
47698e903e7SBaptiste Daroussin /* lr0.c */
47798e903e7SBaptiste Daroussin extern void lr0(void);
47898e903e7SBaptiste Daroussin extern void show_cores(void);
47998e903e7SBaptiste Daroussin extern void show_ritems(void);
48098e903e7SBaptiste Daroussin extern void show_rrhs(void);
48198e903e7SBaptiste Daroussin extern void show_shifts(void);
48298e903e7SBaptiste Daroussin 
48398e903e7SBaptiste Daroussin /* main.c */
48498e903e7SBaptiste Daroussin extern void *allocate(size_t n);
48598e903e7SBaptiste Daroussin extern void done(int k) GCC_NORETURN;
48698e903e7SBaptiste Daroussin 
48798e903e7SBaptiste Daroussin /* mkpar.c */
48898e903e7SBaptiste Daroussin extern void free_parser(void);
48998e903e7SBaptiste Daroussin extern void make_parser(void);
49098e903e7SBaptiste Daroussin 
4910c8de5b0SBaptiste Daroussin /* mstring.c */
4920c8de5b0SBaptiste Daroussin struct mstring
4930c8de5b0SBaptiste Daroussin {
4940c8de5b0SBaptiste Daroussin     char *base, *ptr, *end;
4950c8de5b0SBaptiste Daroussin };
4960c8de5b0SBaptiste Daroussin 
497497dcf4cSBaptiste Daroussin extern void msprintf(struct mstring *, const char *, ...) GCC_PRINTFLIKE(2,3);
4980c8de5b0SBaptiste Daroussin extern int mputchar(struct mstring *, int);
4990c8de5b0SBaptiste Daroussin extern struct mstring *msnew(void);
5000c8de5b0SBaptiste Daroussin extern char *msdone(struct mstring *);
5010c8de5b0SBaptiste Daroussin extern int strnscmp(const char *, const char *);
5020c8de5b0SBaptiste Daroussin extern unsigned int strnshash(const char *);
5030c8de5b0SBaptiste Daroussin 
5040c8de5b0SBaptiste Daroussin #define mputc(m, ch)	(((m)->ptr == (m)->end) \
5050c8de5b0SBaptiste Daroussin 			 ? mputchar(m,ch) \
5060c8de5b0SBaptiste Daroussin 			 : (*(m)->ptr++ = (char) (ch)))
5070c8de5b0SBaptiste Daroussin 
50898e903e7SBaptiste Daroussin /* output.c */
50998e903e7SBaptiste Daroussin extern void output(void);
51098e903e7SBaptiste Daroussin 
51198e903e7SBaptiste Daroussin /* reader.c */
51298e903e7SBaptiste Daroussin extern void reader(void);
51398e903e7SBaptiste Daroussin 
5140c8de5b0SBaptiste Daroussin /* skeleton.c (generated by skel2c) */
51598e903e7SBaptiste Daroussin extern void write_section(FILE * fp, const char *const section[]);
51698e903e7SBaptiste Daroussin 
5170c8de5b0SBaptiste Daroussin /* symtab.c */
5180c8de5b0SBaptiste Daroussin extern bucket *make_bucket(const char *);
5190c8de5b0SBaptiste Daroussin extern bucket *lookup(const char *);
5200c8de5b0SBaptiste Daroussin extern void create_symbol_table(void);
5210c8de5b0SBaptiste Daroussin extern void free_symbol_table(void);
5220c8de5b0SBaptiste Daroussin extern void free_symbols(void);
5230c8de5b0SBaptiste Daroussin 
52498e903e7SBaptiste Daroussin /* verbose.c */
52598e903e7SBaptiste Daroussin extern void verbose(void);
52698e903e7SBaptiste Daroussin 
52798e903e7SBaptiste Daroussin /* warshall.c */
52898e903e7SBaptiste Daroussin extern void reflexive_transitive_closure(unsigned *R, int n);
52998e903e7SBaptiste Daroussin 
5300c8de5b0SBaptiste Daroussin #ifdef DEBUG
5310c8de5b0SBaptiste Daroussin     /* closure.c */
5320c8de5b0SBaptiste Daroussin extern void print_closure(int n);
5330c8de5b0SBaptiste Daroussin extern void print_EFF(void);
5340c8de5b0SBaptiste Daroussin extern void print_first_derives(void);
5350c8de5b0SBaptiste Daroussin     /* lr0.c */
5360c8de5b0SBaptiste Daroussin extern void print_derives(void);
5370c8de5b0SBaptiste Daroussin #endif
5380c8de5b0SBaptiste Daroussin 
53998e903e7SBaptiste Daroussin #ifdef NO_LEAKS
54098e903e7SBaptiste Daroussin extern void lr0_leaks(void);
54198e903e7SBaptiste Daroussin extern void lalr_leaks(void);
54298e903e7SBaptiste Daroussin extern void mkpar_leaks(void);
54398e903e7SBaptiste Daroussin extern void output_leaks(void);
544497dcf4cSBaptiste Daroussin extern void mstring_leaks(void);
54598e903e7SBaptiste Daroussin extern void reader_leaks(void);
54698e903e7SBaptiste Daroussin #endif
547