]> git.saurik.com Git - bison.git/blame - src/symtab.h
New file: skeleton for GLR (Generalized LR) parser.
[bison.git] / src / symtab.h
CommitLineData
f7d4d87a 1/* Definitions for symtab.c and callers, part of bison,
03b31c0c
AD
2 Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002
3 Free Software Foundation, Inc.
f7d4d87a 4
340ef489 5 This file is part of Bison, the GNU Compiler Compiler.
f7d4d87a 6
340ef489
AD
7 Bison is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
f7d4d87a 11
340ef489
AD
12 Bison is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
f7d4d87a 16
340ef489
AD
17 You should have received a copy of the GNU General Public License
18 along with Bison; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
f7d4d87a 21
340ef489
AD
22#ifndef SYMTAB_H_
23# define SYMTAB_H_
f7d4d87a 24
8efe435c
AD
25# include "location.h"
26
2f1afb73
AD
27/*----------.
28| Symbols. |
29`----------*/
f7d4d87a 30
bba97eb2
AD
31/* Associativity values for tokens and rules. */
32typedef enum
33{
e9955c83 34 undef_assoc,
bba97eb2
AD
35 right_assoc,
36 left_assoc,
37 non_assoc
38} associativity;
39
f7d4d87a 40
bba97eb2 41/* Symbol classes. */
d7020c20
AD
42typedef enum
43{
44 unknown_sym,
45 token_sym, /* terminal symbol */
46 nterm_sym /* non-terminal */
47} symbol_class;
340ef489 48
b87f8b21 49
007a50a4 50/* Internal token numbers. */
a49aecd5 51typedef short symbol_number_t;
5fbb0954 52
5fbb0954 53
b87f8b21 54typedef struct symbol_s symbol_t;
db8837cb 55struct symbol_s
340ef489 56{
1e0bab92 57 /* The key, name of the symbol. */
340ef489 58 char *tag;
24c0aad7
AD
59 /* The location of its first occurence. */
60 location_t location;
1e0bab92 61
366eea36 62 /* Its %type and associated printer and destructor. */
340ef489 63 char *type_name;
9280d3ef 64 char *destructor;
24c0aad7 65 location_t destructor_location;
366eea36
AD
66 char *printer;
67 location_t printer_location;
ee000ba4 68
a49aecd5 69 symbol_number_t number;
340ef489 70 short prec;
d7020c20 71 associativity assoc;
62a3e4f0 72 int user_token_number;
3f96f4dc 73
b87f8b21
AD
74 /* Points to the other in the identifier-symbol pair for an alias.
75 Special value USER_NUMBER_ALIAS in the identifier half of the
1e9798d5 76 identifier-symbol pair for an alias. */
b87f8b21 77 symbol_t *alias;
d7020c20 78 symbol_class class;
db8837cb
AD
79};
80
b87f8b21
AD
81/* Undefined user number. */
82#define USER_NUMBER_UNDEFINED -1
83
84/* `symbol->user_token_number == USER_NUMBER_ALIAS' means this symbol
85 *has* (not is) a string literal alias. For instance, `%token foo
86 "foo"' has `"foo"' numbered regularly, and `foo' numbered as
87 USER_NUMBER_ALIAS. */
88#define USER_NUMBER_ALIAS -9991
89
90/* Undefined internal token number. */
a49aecd5 91#define NUMBER_UNDEFINED ((symbol_number_t) -1)
b87f8b21 92
f7d4d87a 93
6b98e4b5
AD
94/* Return the tag of this SYMBOL in a printable form. Warning: uses
95 the QUOTEARG slot 0. */
96const char *symbol_tag_get PARAMS ((symbol_t *symbol));
97
98/* Return the tag of this SYMBOL in a printable form. Use the
99 QUOTEARG slot number N. */
100const char *symbol_tag_get_n PARAMS ((symbol_t *symbol, int n));
101
102/* Print the tag of this SYMBOL. */
103void symbol_tag_print PARAMS ((symbol_t *symbol, FILE *out));
104
2f1afb73 105/* Fetch (or create) the symbol associated to KEY. */
ee000ba4 106symbol_t *getsym PARAMS ((const char *key, location_t location));
2f1afb73 107
e9955c83
AD
108/* Declare the new SYMBOL. Make it an alias of SYMVAL. */
109void symbol_make_alias PARAMS ((symbol_t *symbol, symbol_t *symval));
2f1afb73 110
e9955c83
AD
111/* Set the TYPE_NAME associated to SYMBOL. Does nothing if passed 0 as
112 TYPE_NAME. */
1a31ed21
AD
113void symbol_type_set PARAMS ((symbol_t *symbol,
114 char *type_name, location_t location));
3ae2b51f 115
9280d3ef 116/* Set the DESTRUCTOR associated to SYMBOL. */
1a31ed21
AD
117void symbol_destructor_set PARAMS ((symbol_t *symbol,
118 char *destructor, location_t location));
9280d3ef 119
366eea36
AD
120/* Set the PRINTER associated to SYMBOL. */
121void symbol_printer_set PARAMS ((symbol_t *symbol,
122 char *printer, location_t location));
123
e9955c83
AD
124/* Set the PRECEDENCE associated to SYMBOL. Ensures that SYMBOL is a
125 terminal. Does nothing if invoked with UNDEF_ASSOC as ASSOC. */
1a31ed21
AD
126void symbol_precedence_set PARAMS ((symbol_t *symbol,
127 int prec, associativity assoc,
128 location_t location));
3ae2b51f 129
44536b35 130/* Set the CLASS associated to SYMBOL. */
e776192e
AD
131void symbol_class_set PARAMS ((symbol_t *symbol,
132 symbol_class class, location_t location));
44536b35
AD
133
134/* Set the USER_TOKEN_NUMBER associated to SYMBOL. */
e776192e
AD
135void symbol_user_token_number_set PARAMS ((symbol_t *symbol,
136 int user_number,
137 location_t location));
44536b35
AD
138
139
2f1afb73
AD
140/* Distinguished symbols. AXIOM is the real start symbol, that used
141 by the automaton. STARTSYMBOL is the one specified by the user.
142 */
143extern symbol_t *errtoken;
144extern symbol_t *undeftoken;
145extern symbol_t *eoftoken;
146extern symbol_t *axiom;
147extern symbol_t *startsymbol;
8efe435c 148extern location_t startsymbol_location;
f7d4d87a 149
340ef489 150
2f1afb73
AD
151/*---------------.
152| Symbol table. |
153`---------------*/
154
155
156/* Create the symbol table. */
db8837cb 157void symbols_new PARAMS ((void));
2f1afb73
AD
158
159/* A function to apply to each symbol. */
160typedef bool (*symbol_processor) PARAMS ((symbol_t *));
161
162/* Apply PROCESSOR to all the symbols. PROCESSOR must return TRUE: on
163 FALSE, the processing stops. */
db8837cb 164void symbols_do PARAMS ((symbol_processor processor, void *processor_data));
2f1afb73
AD
165
166/* Free all the memory allocated for symbols. */
db8837cb 167void symbols_free PARAMS ((void));
340ef489 168
e9955c83
AD
169/* Check that all the symbols are defined. Report any undefined
170 symbols and consider them nonterminals. */
2f1afb73
AD
171void symbols_check_defined PARAMS ((void));
172
173/* Perform various sanity checks, assign symbol numbers, and set up
174 TOKEN_TRANSLATIONS. */
175void symbols_pack PARAMS ((void));
176
340ef489 177#endif /* !SYMTAB_H_ */