1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Lists of symbols for Bison
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Copyright (C) 2002, 2005 Free Software Foundation, Inc.
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This file is part of Bison, the GNU Compiler Compiler.
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is free software; you can redistribute it and/or modify
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   it under the terms of the GNU General Public License as published by
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation; either version 2, or (at your option)
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   any later version.
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is distributed in the hope that it will be useful,
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   GNU General Public License for more details.
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   You should have received a copy of the GNU General Public License
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   along with Bison; see the file COPYING.  If not, write to
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Boston, MA 02110-1301, USA.  */
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef SYMLIST_H_
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define SYMLIST_H_
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "location.h"
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "symtab.h"
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* A list of symbols, used during the parsing to store the rules.  */
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct symbol_list
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* The symbol.  */
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  symbol *sym;
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  location location;
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* If this symbol is the generated lhs for a mid-rule, a pointer to
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     that mid-rule.  */
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct symbol_list *midrule;
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* The action is attached to the LHS of a rule. */
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *action;
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  location action_location;
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Whether this symbol's value is used in the current action. */
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  bool used;
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Precedence/associativity.  */
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  symbol *ruleprec;
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int dprec;
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int merger;
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* The list.  */
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct symbol_list *next;
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} symbol_list;
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Create a list containing SYM at LOC.  */
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsymbol_list *symbol_list_new (symbol *sym, location loc);
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print it.  */
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_list_print (const symbol_list *l, FILE *f);
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Prepend SYM at LOC to the LIST.  */
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsymbol_list *symbol_list_prepend (symbol_list *l,
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				  symbol *sym,
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				  location loc);
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Free the LIST, but not the symbols it contains.  */
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_list_free (symbol_list *l);
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return its length. */
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectunsigned int symbol_list_length (const symbol_list *l);
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Get symbol N in symbol list L.  */
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsymbol_list *symbol_list_n_get (symbol_list *l, int n);
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Get the data type (alternative in the union) of the value for
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   symbol N in rule RULE.  */
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectuniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n);
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* The symbol N in symbol list L is USED.  */
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_list_n_used_set (symbol_list *l, int n, bool used);
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* !SYMLIST_H_ */
84