1 /* Lists of symbols for Bison 2 3 Copyright (C) 2002, 2005 Free Software Foundation, Inc. 4 5 This file is part of Bison, the GNU Compiler Compiler. 6 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. 11 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. 16 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., 51 Franklin Street, Fifth Floor, 20 Boston, MA 02110-1301, USA. */ 21 22 #ifndef SYMLIST_H_ 23 # define SYMLIST_H_ 24 25 # include "location.h" 26 # include "symtab.h" 27 28 /* A list of symbols, used during the parsing to store the rules. */ 29 typedef struct symbol_list 30 { 31 /* The symbol. */ 32 symbol *sym; 33 location location; 34 35 /* If this symbol is the generated lhs for a mid-rule, a pointer to 36 that mid-rule. */ 37 struct symbol_list *midrule; 38 39 /* The action is attached to the LHS of a rule. */ 40 const char *action; 41 location action_location; 42 43 /* Whether this symbol's value is used in the current action. */ 44 bool used; 45 46 /* Precedence/associativity. */ 47 symbol *ruleprec; 48 int dprec; 49 int merger; 50 51 /* The list. */ 52 struct symbol_list *next; 53 } symbol_list; 54 55 56 /* Create a list containing SYM at LOC. */ 57 symbol_list *symbol_list_new (symbol *sym, location loc); 58 59 /* Print it. */ 60 void symbol_list_print (const symbol_list *l, FILE *f); 61 62 /* Prepend SYM at LOC to the LIST. */ 63 symbol_list *symbol_list_prepend (symbol_list *l, 64 symbol *sym, 65 location loc); 66 67 /* Free the LIST, but not the symbols it contains. */ 68 void symbol_list_free (symbol_list *l); 69 70 /* Return its length. */ 71 unsigned int symbol_list_length (const symbol_list *l); 72 73 /* Get symbol N in symbol list L. */ 74 symbol_list *symbol_list_n_get (symbol_list *l, int n); 75 76 /* Get the data type (alternative in the union) of the value for 77 symbol N in rule RULE. */ 78 uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n); 79 80 /* The symbol N in symbol list L is USED. */ 81 void symbol_list_n_used_set (symbol_list *l, int n, bool used); 82 83 #endif /* !SYMLIST_H_ */ 84