]> git.saurik.com Git - bison.git/blame - src/symtab.h
* src/assoc.c, src/asssoc.h (assoc_t, assoc_to_string): New.
[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 25# include "location.h"
a945ec39 26# include "assoc.h"
8efe435c 27
2f1afb73
AD
28/*----------.
29| Symbols. |
30`----------*/
f7d4d87a 31
bba97eb2 32/* Symbol classes. */
d7020c20
AD
33typedef enum
34{
35 unknown_sym,
36 token_sym, /* terminal symbol */
37 nterm_sym /* non-terminal */
38} symbol_class;
340ef489 39
b87f8b21 40
007a50a4 41/* Internal token numbers. */
a49aecd5 42typedef short symbol_number_t;
5fbb0954 43
5fbb0954 44
b87f8b21 45typedef struct symbol_s symbol_t;
db8837cb 46struct symbol_s
340ef489 47{
1e0bab92 48 /* The key, name of the symbol. */
340ef489 49 char *tag;
24c0aad7
AD
50 /* The location of its first occurence. */
51 location_t location;
1e0bab92 52
366eea36 53 /* Its %type and associated printer and destructor. */
340ef489 54 char *type_name;
9280d3ef 55 char *destructor;
24c0aad7 56 location_t destructor_location;
366eea36
AD
57 char *printer;
58 location_t printer_location;
ee000ba4 59
a49aecd5 60 symbol_number_t number;
340ef489 61 short prec;
a945ec39 62 assoc_t assoc;
62a3e4f0 63 int user_token_number;
3f96f4dc 64
b87f8b21
AD
65 /* Points to the other in the identifier-symbol pair for an alias.
66 Special value USER_NUMBER_ALIAS in the identifier half of the
1e9798d5 67 identifier-symbol pair for an alias. */
b87f8b21 68 symbol_t *alias;
d7020c20 69 symbol_class class;
db8837cb
AD
70};
71
b87f8b21
AD
72/* Undefined user number. */
73#define USER_NUMBER_UNDEFINED -1
74
75/* `symbol->user_token_number == USER_NUMBER_ALIAS' means this symbol
76 *has* (not is) a string literal alias. For instance, `%token foo
77 "foo"' has `"foo"' numbered regularly, and `foo' numbered as
78 USER_NUMBER_ALIAS. */
79#define USER_NUMBER_ALIAS -9991
80
81/* Undefined internal token number. */
a49aecd5 82#define NUMBER_UNDEFINED ((symbol_number_t) -1)
b87f8b21 83
f7d4d87a 84
2f1afb73 85/* Fetch (or create) the symbol associated to KEY. */
39f41916
AD
86symbol_t *symbol_get PARAMS ((const char *key, location_t location));
87
88/* Generate a dummy nonterminal, whose name cannot conflict with the
89 user's names. */
90symbol_t *dummy_symbol_get PARAMS ((location_t location));
2f1afb73 91
e9955c83 92/* Declare the new SYMBOL. Make it an alias of SYMVAL. */
a5d50994
AD
93void symbol_make_alias PARAMS ((symbol_t *symbol, symbol_t *symval,
94 location_t location));
2f1afb73 95
e9955c83
AD
96/* Set the TYPE_NAME associated to SYMBOL. Does nothing if passed 0 as
97 TYPE_NAME. */
1a31ed21
AD
98void symbol_type_set PARAMS ((symbol_t *symbol,
99 char *type_name, location_t location));
3ae2b51f 100
9280d3ef 101/* Set the DESTRUCTOR associated to SYMBOL. */
1a31ed21
AD
102void symbol_destructor_set PARAMS ((symbol_t *symbol,
103 char *destructor, location_t location));
9280d3ef 104
366eea36
AD
105/* Set the PRINTER associated to SYMBOL. */
106void symbol_printer_set PARAMS ((symbol_t *symbol,
107 char *printer, location_t location));
108
e9955c83
AD
109/* Set the PRECEDENCE associated to SYMBOL. Ensures that SYMBOL is a
110 terminal. Does nothing if invoked with UNDEF_ASSOC as ASSOC. */
1a31ed21 111void symbol_precedence_set PARAMS ((symbol_t *symbol,
a945ec39 112 int prec, assoc_t assoc,
1a31ed21 113 location_t location));
3ae2b51f 114
44536b35 115/* Set the CLASS associated to SYMBOL. */
e776192e
AD
116void symbol_class_set PARAMS ((symbol_t *symbol,
117 symbol_class class, location_t location));
44536b35
AD
118
119/* Set the USER_TOKEN_NUMBER associated to SYMBOL. */
e776192e
AD
120void symbol_user_token_number_set PARAMS ((symbol_t *symbol,
121 int user_number,
122 location_t location));
44536b35
AD
123
124
2f1afb73
AD
125/* Distinguished symbols. AXIOM is the real start symbol, that used
126 by the automaton. STARTSYMBOL is the one specified by the user.
127 */
128extern symbol_t *errtoken;
129extern symbol_t *undeftoken;
130extern symbol_t *eoftoken;
131extern symbol_t *axiom;
132extern symbol_t *startsymbol;
8efe435c 133extern location_t startsymbol_location;
f7d4d87a 134
340ef489 135
2f1afb73
AD
136/*---------------.
137| Symbol table. |
138`---------------*/
139
140
141/* Create the symbol table. */
db8837cb 142void symbols_new PARAMS ((void));
2f1afb73
AD
143
144/* A function to apply to each symbol. */
145typedef bool (*symbol_processor) PARAMS ((symbol_t *));
146
147/* Apply PROCESSOR to all the symbols. PROCESSOR must return TRUE: on
148 FALSE, the processing stops. */
db8837cb 149void symbols_do PARAMS ((symbol_processor processor, void *processor_data));
2f1afb73
AD
150
151/* Free all the memory allocated for symbols. */
db8837cb 152void symbols_free PARAMS ((void));
340ef489 153
e9955c83
AD
154/* Check that all the symbols are defined. Report any undefined
155 symbols and consider them nonterminals. */
2f1afb73
AD
156void symbols_check_defined PARAMS ((void));
157
158/* Perform various sanity checks, assign symbol numbers, and set up
159 TOKEN_TRANSLATIONS. */
160void symbols_pack PARAMS ((void));
161
340ef489 162#endif /* !SYMTAB_H_ */