| /* Lists of symbols for Bison |
| |
| Copyright (C) 2002, 2005 Free Software Foundation, Inc. |
| |
| This file is part of Bison, the GNU Compiler Compiler. |
| |
| Bison is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| Bison is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with Bison; see the file COPYING. If not, write to |
| the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| Boston, MA 02110-1301, USA. */ |
| |
| #ifndef SYMLIST_H_ |
| # define SYMLIST_H_ |
| |
| # include "location.h" |
| # include "symtab.h" |
| |
| /* A list of symbols, used during the parsing to store the rules. */ |
| typedef struct symbol_list |
| { |
| /* The symbol. */ |
| symbol *sym; |
| location location; |
| |
| /* If this symbol is the generated lhs for a mid-rule, a pointer to |
| that mid-rule. */ |
| struct symbol_list *midrule; |
| |
| /* The action is attached to the LHS of a rule. */ |
| const char *action; |
| location action_location; |
| |
| /* Whether this symbol's value is used in the current action. */ |
| bool used; |
| |
| /* Precedence/associativity. */ |
| symbol *ruleprec; |
| int dprec; |
| int merger; |
| |
| /* The list. */ |
| struct symbol_list *next; |
| } symbol_list; |
| |
| |
| /* Create a list containing SYM at LOC. */ |
| symbol_list *symbol_list_new (symbol *sym, location loc); |
| |
| /* Print it. */ |
| void symbol_list_print (const symbol_list *l, FILE *f); |
| |
| /* Prepend SYM at LOC to the LIST. */ |
| symbol_list *symbol_list_prepend (symbol_list *l, |
| symbol *sym, |
| location loc); |
| |
| /* Free the LIST, but not the symbols it contains. */ |
| void symbol_list_free (symbol_list *l); |
| |
| /* Return its length. */ |
| unsigned int symbol_list_length (const symbol_list *l); |
| |
| /* Get symbol N in symbol list L. */ |
| symbol_list *symbol_list_n_get (symbol_list *l, int n); |
| |
| /* Get the data type (alternative in the union) of the value for |
| symbol N in rule RULE. */ |
| uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n); |
| |
| /* The symbol N in symbol list L is USED. */ |
| void symbol_list_n_used_set (symbol_list *l, int n, bool used); |
| |
| #endif /* !SYMLIST_H_ */ |