source: vendor/FreeBSD-yacc/current/defs.h@ 3365

Last change on this file since 3365 was 2464, checked in by bird, 20 years ago

FreeBSD CVS 2005-07-07

File size: 9.2 KB
Line 
1/*
2 * Copyright (c) 1989 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Robert Paul Corbett.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)defs.h 5.6 (Berkeley) 5/24/93
37 * $FreeBSD: src/usr.bin/yacc/defs.h,v 1.12 2002/06/11 11:27:20 robert Exp $
38 */
39
40#include <assert.h>
41#include <ctype.h>
42#include <err.h>
43#include <stdio.h>
44
45
46/* machine-dependent definitions */
47/* the following definitions are for the Tahoe */
48/* they might have to be changed for other machines */
49
50/* MAXTABLE is the maximum table size */
51/* BITS_PER_WORD is the number of bits in a C unsigned */
52/* WORDSIZE computes the number of words needed to */
53/* store n bits */
54/* BIT returns the value of the n-th bit starting */
55/* from r (0-indexed) */
56/* SETBIT sets the n-th bit starting from r */
57
58#define MAXTABLE 32500
59#define BITS_PER_WORD 32
60#define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD)
61#define BIT(r, n) ((((r)[(n)>>5])>>((n)&31))&1)
62#define SETBIT(r, n) ((r)[(n)>>5]|=((unsigned)1<<((n)&31)))
63
64
65/* character names */
66
67#define NUL '\0' /* the null character */
68#define NEWLINE '\n' /* line feed */
69#define SP ' ' /* space */
70#define BS '\b' /* backspace */
71#define HT '\t' /* horizontal tab */
72#define VT '\013' /* vertical tab */
73#define CR '\r' /* carriage return */
74#define FF '\f' /* form feed */
75#define QUOTE '\'' /* single quote */
76#define DOUBLE_QUOTE '\"' /* double quote */
77#define BACKSLASH '\\' /* backslash */
78
79
80/* defines for constructing filenames */
81
82#define CODE_SUFFIX ".code.c"
83#define DEFINES_SUFFIX ".tab.h"
84#define OUTPUT_SUFFIX ".tab.c"
85#define VERBOSE_SUFFIX ".output"
86
87
88/* keyword codes */
89
90#define TOKEN 0
91#define LEFT 1
92#define RIGHT 2
93#define NONASSOC 3
94#define MARK 4
95#define TEXT 5
96#define TYPE 6
97#define START 7
98#define UNION 8
99#define IDENT 9
100#define EXPECT 10
101
102
103/* symbol classes */
104
105#define UNKNOWN 0
106#define TERM 1
107#define NONTERM 2
108
109
110/* the undefined value */
111
112#define UNDEFINED (-1)
113
114
115/* action codes */
116
117#define SHIFT 1
118#define REDUCE 2
119
120
121/* character macros */
122
123#define IS_IDENT(c) (isalnum(c) || (c) == '_' || (c) == '.' || (c) == '$')
124#define IS_OCTAL(c) ((c) >= '0' && (c) <= '7')
125#define NUMERIC_VALUE(c) ((c) - '0')
126
127
128/* symbol macros */
129
130#define ISTOKEN(s) ((s) < start_symbol)
131#define ISVAR(s) ((s) >= start_symbol)
132
133
134/* storage allocation macros */
135
136#define CALLOC(k,n) (calloc((unsigned)(k),(unsigned)(n)))
137#define FREE(x) (free((char*)(x)))
138#define MALLOC(n) (malloc((unsigned)(n)))
139#define NEW(t) ((t*)allocate(sizeof(t)))
140#define NEW2(n,t) ((t*)allocate((unsigned)((n)*sizeof(t))))
141#define REALLOC(p,n) (realloc((char*)(p),(unsigned)(n)))
142
143
144/* the structure of a symbol table entry */
145
146typedef struct bucket bucket;
147struct bucket
148{
149 struct bucket *link;
150 struct bucket *next;
151 char *name;
152 char *tag;
153 short value;
154 short index;
155 short prec;
156 char class;
157 char assoc;
158};
159
160
161/* the structure of the LR(0) state machine */
162
163typedef struct core core;
164struct core
165{
166 struct core *next;
167 struct core *link;
168 short number;
169 short accessing_symbol;
170 short nitems;
171 short items[1];
172};
173
174
175/* the structure used to record shifts */
176
177typedef struct shifts shifts;
178struct shifts
179{
180 struct shifts *next;
181 short number;
182 short nshifts;
183 short shift[1];
184};
185
186
187/* the structure used to store reductions */
188
189typedef struct reductions reductions;
190struct reductions
191{
192 struct reductions *next;
193 short number;
194 short nreds;
195 short rules[1];
196};
197
198
199/* the structure used to represent parser actions */
200
201typedef struct action action;
202struct action
203{
204 struct action *next;
205 short symbol;
206 short number;
207 short prec;
208 char action_code;
209 char assoc;
210 char suppressed;
211};
212
213
214/* global variables */
215
216extern char dflag;
217extern char lflag;
218extern char rflag;
219extern char tflag;
220extern char vflag;
221extern const char *symbol_prefix;
222
223extern char *myname;
224extern char *cptr;
225extern char *line;
226extern int lineno;
227extern int outline;
228
229extern const char *banner[];
230extern const char *tables[];
231extern const char *header[];
232extern const char *body[];
233extern const char *trailer[];
234
235extern char *action_file_name;
236extern char *code_file_name;
237extern char *defines_file_name;
238extern const char *input_file_name;
239extern char *output_file_name;
240extern char *text_file_name;
241extern char *union_file_name;
242extern char *verbose_file_name;
243
244extern FILE *action_file;
245extern FILE *code_file;
246extern FILE *defines_file;
247extern FILE *input_file;
248extern FILE *output_file;
249extern FILE *text_file;
250extern FILE *union_file;
251extern FILE *verbose_file;
252
253extern int nitems;
254extern int nrules;
255extern int nsyms;
256extern int ntokens;
257extern int nvars;
258extern int ntags;
259
260extern char unionized;
261
262extern int start_symbol;
263extern char **symbol_name;
264extern short *symbol_value;
265extern short *symbol_prec;
266extern char *symbol_assoc;
267
268extern short *ritem;
269extern short *rlhs;
270extern short *rrhs;
271extern short *rprec;
272extern char *rassoc;
273
274extern short **derives;
275extern char *nullable;
276
277extern bucket *first_symbol;
278extern bucket *last_symbol;
279
280extern int nstates;
281extern core *first_state;
282extern shifts *first_shift;
283extern reductions *first_reduction;
284extern short *accessing_symbol;
285extern core **state_table;
286extern shifts **shift_table;
287extern reductions **reduction_table;
288extern unsigned *LA;
289extern short *LAruleno;
290extern short *lookaheads;
291extern short *goto_map;
292extern short *from_state;
293extern short *to_state;
294
295extern action **parser;
296extern int SRexpect;
297extern int SRtotal;
298extern int RRtotal;
299extern short *SRconflicts;
300extern short *RRconflicts;
301extern short *defred;
302extern short *rules_used;
303extern short nunused;
304extern short final_state;
305
306/* global functions */
307
308char *allocate(unsigned);
309void closure(short *, int);
310void create_symbol_table(void);
311void default_action_warning(void);
312void dollar_error(int, char *, char *);
313void dollar_warning(int, int);
314void done(int);
315void fatal(const char *msg);
316void finalize_closure(void);
317void free_parser(void);
318void free_symbols(void);
319void free_symbol_table(void);
320void illegal_character(char *);
321void illegal_tag(int, char *, char *);
322void lalr(void);
323bucket *lookup(char *);
324void lr0(void);
325bucket *make_bucket(const char *);
326void make_parser(void);
327void no_grammar(void);
328void no_space(void);
329void open_error(const char *);
330void output(void);
331void over_unionized(char *);
332void prec_redeclared(void);
333void reader(void);
334void reflexive_transitive_closure(unsigned *, int);
335void reprec_warning(char *);
336void restarted_warning(void);
337void retyped_warning(char *);
338void revalued_warning(char *);
339void set_first_derives(void);
340void syntax_error(int, char *, char *);
341void terminal_lhs(int);
342void terminal_start(char *);
343void tokenized_start(char *);
344void undefined_goal(char *);
345void undefined_symbol_warning(char *);
346void unexpected_EOF(void);
347void unknown_rhs(int);
348void unterminated_action(int, char *, char *);
349void unterminated_comment(int, char *, char *);
350void unterminated_string(int, char *, char *);
351void unterminated_text(int, char *, char *);
352void unterminated_union(int, char *, char *);
353void untyped_lhs(void);
354void untyped_rhs(int, char *);
355void used_reserved(char *);
356void verbose(void);
357void write_section(const char **);
Note: See TracBrowser for help on using the repository browser.