]> git.saurik.com Git - bison.git/blame - src/symtab.h
* src/LR0.c, src/derives.c, src/gram.c, src/gram.h, src/lalr.c,
[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
DM
24
25#define TABSIZE 1009
26
bba97eb2
AD
27/* Associativity values for tokens and rules. */
28typedef enum
29{
30 right_assoc,
31 left_assoc,
32 non_assoc
33} associativity;
34
f7d4d87a 35
bba97eb2 36/* Symbol classes. */
d7020c20
AD
37typedef enum
38{
39 unknown_sym,
40 token_sym, /* terminal symbol */
41 nterm_sym /* non-terminal */
42} symbol_class;
340ef489 43
b87f8b21 44
007a50a4 45/* Internal token numbers. */
a49aecd5 46typedef short symbol_number_t;
5fbb0954 47
5fbb0954 48
b87f8b21 49typedef struct symbol_s symbol_t;
db8837cb 50struct symbol_s
340ef489 51{
f282676b 52 /* The key, name of the symbol. */
340ef489 53 char *tag;
f282676b 54 /* Its type. */
340ef489 55 char *type_name;
5fbb0954 56
a49aecd5 57 symbol_number_t number;
340ef489 58 short prec;
d7020c20 59 associativity assoc;
62a3e4f0 60 int user_token_number;
3f96f4dc 61
b87f8b21
AD
62 /* Points to the other in the identifier-symbol pair for an alias.
63 Special value USER_NUMBER_ALIAS in the identifier half of the
1e9798d5 64 identifier-symbol pair for an alias. */
b87f8b21 65 symbol_t *alias;
d7020c20 66 symbol_class class;
db8837cb
AD
67};
68
b87f8b21
AD
69/* Undefined user number. */
70#define USER_NUMBER_UNDEFINED -1
71
72/* `symbol->user_token_number == USER_NUMBER_ALIAS' means this symbol
73 *has* (not is) a string literal alias. For instance, `%token foo
74 "foo"' has `"foo"' numbered regularly, and `foo' numbered as
75 USER_NUMBER_ALIAS. */
76#define USER_NUMBER_ALIAS -9991
77
78/* Undefined internal token number. */
a49aecd5 79#define NUMBER_UNDEFINED ((symbol_number_t) -1)
b87f8b21 80
f7d4d87a 81
72a23c97 82/* A function to apply to each symbol. */
db8837cb 83typedef bool (*symbol_processor) PARAMS ((symbol_t *));
f7d4d87a 84
db8837cb 85symbol_t *getsym PARAMS ((const char *));
340ef489 86
db8837cb
AD
87void symbols_new PARAMS ((void));
88void symbols_do PARAMS ((symbol_processor processor, void *processor_data));
89void symbols_free PARAMS ((void));
340ef489
AD
90
91#endif /* !SYMTAB_H_ */