]> git.saurik.com Git - bison.git/blame - src/symtab.h
* src/reader.c (parse_action): Don't store directly into the
[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
2f1afb73
AD
25/*----------.
26| Symbols. |
27`----------*/
f7d4d87a 28
bba97eb2
AD
29/* Associativity values for tokens and rules. */
30typedef enum
31{
32 right_assoc,
33 left_assoc,
34 non_assoc
35} associativity;
36
f7d4d87a 37
bba97eb2 38/* Symbol classes. */
d7020c20
AD
39typedef enum
40{
41 unknown_sym,
42 token_sym, /* terminal symbol */
43 nterm_sym /* non-terminal */
44} symbol_class;
340ef489 45
b87f8b21 46
007a50a4 47/* Internal token numbers. */
a49aecd5 48typedef short symbol_number_t;
5fbb0954 49
5fbb0954 50
b87f8b21 51typedef struct symbol_s symbol_t;
db8837cb 52struct symbol_s
340ef489 53{
f282676b 54 /* The key, name of the symbol. */
340ef489 55 char *tag;
f282676b 56 /* Its type. */
340ef489 57 char *type_name;
5fbb0954 58
a49aecd5 59 symbol_number_t number;
340ef489 60 short prec;
d7020c20 61 associativity assoc;
62a3e4f0 62 int user_token_number;
3f96f4dc 63
b87f8b21
AD
64 /* Points to the other in the identifier-symbol pair for an alias.
65 Special value USER_NUMBER_ALIAS in the identifier half of the
1e9798d5 66 identifier-symbol pair for an alias. */
b87f8b21 67 symbol_t *alias;
d7020c20 68 symbol_class class;
db8837cb
AD
69};
70
b87f8b21
AD
71/* Undefined user number. */
72#define USER_NUMBER_UNDEFINED -1
73
74/* `symbol->user_token_number == USER_NUMBER_ALIAS' means this symbol
75 *has* (not is) a string literal alias. For instance, `%token foo
76 "foo"' has `"foo"' numbered regularly, and `foo' numbered as
77 USER_NUMBER_ALIAS. */
78#define USER_NUMBER_ALIAS -9991
79
80/* Undefined internal token number. */
a49aecd5 81#define NUMBER_UNDEFINED ((symbol_number_t) -1)
b87f8b21 82
f7d4d87a 83
2f1afb73
AD
84/* Fetch (or create) the symbol associated to KEY. */
85symbol_t *getsym PARAMS ((const char *key));
86
87/* Declare the new SYMBOL. Make it an alias of SYMVAL, and type */
88/* them with TYPENAME. */
89void symbol_make_alias PARAMS ((symbol_t *symbol, symbol_t *symval,
90 char *typename));
91
3ae2b51f
AD
92/* Set the TYPE_NAME associated to SYMBOL. */
93void symbol_type_set PARAMS ((symbol_t *symbol, char *type_name));
94
95/* Set the PRECEDENCE associated to SYMBOL. */
96void symbol_precedence_set PARAMS ((symbol_t *symbol,
97 int prec, associativity assoc));
98
44536b35
AD
99/* Set the CLASS associated to SYMBOL. */
100void symbol_class_set PARAMS ((symbol_t *symbol, symbol_class class));
101
102/* Set the USER_TOKEN_NUMBER associated to SYMBOL. */
103void symbol_user_token_number_set PARAMS ((symbol_t *symbol, int user_number));
104
105
2f1afb73
AD
106/* Distinguished symbols. AXIOM is the real start symbol, that used
107 by the automaton. STARTSYMBOL is the one specified by the user.
108 */
109extern symbol_t *errtoken;
110extern symbol_t *undeftoken;
111extern symbol_t *eoftoken;
112extern symbol_t *axiom;
113extern symbol_t *startsymbol;
f7d4d87a 114
340ef489 115
2f1afb73
AD
116/*---------------.
117| Symbol table. |
118`---------------*/
119
120
121/* Create the symbol table. */
db8837cb 122void symbols_new PARAMS ((void));
2f1afb73
AD
123
124/* A function to apply to each symbol. */
125typedef bool (*symbol_processor) PARAMS ((symbol_t *));
126
127/* Apply PROCESSOR to all the symbols. PROCESSOR must return TRUE: on
128 FALSE, the processing stops. */
db8837cb 129void symbols_do PARAMS ((symbol_processor processor, void *processor_data));
2f1afb73
AD
130
131/* Free all the memory allocated for symbols. */
db8837cb 132void symbols_free PARAMS ((void));
340ef489 133
2f1afb73
AD
134/* Check that all the symbols are defined. Report any undefined */
135/* symbols and consider them nonterminals. */
136void symbols_check_defined PARAMS ((void));
137
138/* Perform various sanity checks, assign symbol numbers, and set up
139 TOKEN_TRANSLATIONS. */
140void symbols_pack PARAMS ((void));
141
340ef489 142#endif /* !SYMTAB_H_ */