1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Definitions for symtab.c and callers, part of Bison.
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Copyright (C) 1984, 1989, 1992, 2000-2002, 2004-2007, 2009-2012 Free
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Software Foundation, Inc.
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This file is part of Bison, the GNU Compiler Compiler.
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software: you can redistribute it and/or modify
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   it under the terms of the GNU General Public License as published by
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation, either version 3 of the License, or
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   (at your option) any later version.
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   GNU General Public License for more details.
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   You should have received a copy of the GNU General Public License
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/**
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \file symtab.h
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * \brief Manipulating ::symbol.
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef SYMTAB_H_
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define SYMTAB_H_
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "assoc.h"
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "location.h"
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include "scan-code.h"
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "uniqstr.h"
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*----------.
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Symbols.  |
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`----------*/
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Symbol classes.  */
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef enum
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  unknown_sym,          /**< Undefined.  */
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  token_sym,		/**< Terminal. */
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  nterm_sym		/**< Non-terminal. */
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} symbol_class;
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Internal token numbers. */
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef int symbol_number;
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define SYMBOL_NUMBER_MAXIMUM INT_MAX
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct symbol symbol;
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* When extending this structure, be sure to complete
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   symbol_check_alias_consistency.  */
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct symbol
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** The key, name of the symbol.  */
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  uniqstr tag;
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** The location of its first occurrence.  */
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  location location;
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** Its \c \%type.
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      Beware that this is the type_name as was entered by the user,
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      including silly things such as "]" if she entered "%token <]> t".
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      Therefore, when outputting type_name to M4, be sure to escape it
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      into "@}".  See quoted_output for instance.  */
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  uniqstr type_name;
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** Its \c \%type's location.  */
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  location type_location;
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** Any \c \%destructor declared specifically for this symbol.
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      Access this field only through <tt>symbol</tt>'s interface
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      functions.  For example, if <tt>symbol::destructor = NULL</tt>, a
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      default \c \%destructor or a per-type \c \%destructor might be
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      appropriate, and \c symbol_destructor_get will compute the
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      correct one.  */
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  code_props destructor;
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** Any \c \%printer declared specifically for this symbol.
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      Access this field only through <tt>symbol</tt>'s interface functions.
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      \sa symbol::destructor  */
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  code_props printer;
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  symbol_number number;
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  location prec_location;
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int prec;
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  assoc assoc;
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int user_token_number;
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* Points to the other in the symbol-string pair for an alias.
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     Special value USER_NUMBER_HAS_STRING_ALIAS in the symbol half of the
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     symbol-string pair for an alias.  */
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  symbol *alias;
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  symbol_class class;
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  bool declared;
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Undefined user number.  */
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define USER_NUMBER_UNDEFINED -1
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* `symbol->user_token_number == USER_NUMBER_HAS_STRING_ALIAS' means
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   this symbol has a literal string alias.  For instance, `%token foo
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   "foo"' has `"foo"' numbered regularly, and `foo' numbered as
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   USER_NUMBER_HAS_STRING_ALIAS.  */
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define USER_NUMBER_HAS_STRING_ALIAS -9991
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Undefined internal token number.  */
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define NUMBER_UNDEFINED (-1)
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Print a symbol (for debugging). */
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_print (symbol *s, FILE *f);
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Fetch (or create) the symbol associated to KEY.  */
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wangsymbol *symbol_from_uniqstr (const uniqstr key, location loc);
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Fetch (or create) the symbol associated to KEY.  */
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsymbol *symbol_get (const char *key, location loc);
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Generate a dummy nonterminal.
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Its name cannot conflict with the user's names.  */
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsymbol *dummy_symbol_get (location loc);
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Is this a dummy nonterminal?  */
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wangbool symbol_is_dummy (const symbol *sym);
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/**
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang * Make \c str the literal string alias of \c sym.  Copy token number,
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang * symbol number, and type from \c sym to \c str.
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid symbol_make_alias (symbol *sym, symbol *str, location loc);
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c type_name associated with \c sym.
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    Do nothing if passed 0 as \c type_name.  */
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_type_set (symbol *sym, uniqstr type_name, location loc);
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c destructor associated with \c sym.  */
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid symbol_destructor_set (symbol *sym, code_props const *destructor);
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the computed \c \%destructor for \c sym, which was initialized with
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \c code_props_none_init if there's no \c \%destructor.  */
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props const *symbol_destructor_get (symbol const *sym);
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c printer associated with \c sym.  */
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid symbol_printer_set (symbol *sym, code_props const *printer);
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Get the computed \c \%printer for \c sym, which was initialized with
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    \c code_props_none_init if there's no \c \%printer.  */
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wangcode_props const *symbol_printer_get (symbol const *sym);
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Set the \c precedence associated with \c sym.
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Ensure that \a symbol is a terminal.
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Do nothing if invoked with \c undef_assoc as \c assoc.  */
161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_precedence_set (symbol *sym, int prec, assoc a, location loc);
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c class associated with \c sym.  */
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_class_set (symbol *sym, symbol_class class, location loc,
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		       bool declaring);
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c user_token_number associated with \c sym.  */
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbol_user_token_number_set (symbol *sym, int user_number, location loc);
169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The error token. */
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol *errtoken;
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The token for unknown tokens.  */
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol *undeftoken;
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The end of input token.  */
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol *endtoken;
17705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The genuine start symbol.
17805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
17905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   $accept: start-symbol $end */
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol *accept;
18105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The user start symbol. */
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol *startsymbol;
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** The location of the \c \%start declaration.  */
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern location startsymbol_location;
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*-----------------.
18905436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Semantic types.  |
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wang`-----------------*/
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** A semantic type and its associated \c \%destructor and \c \%printer.
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Access the fields of this struct only through the interface functions in
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   this file.  \sa symbol::destructor  */
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wangtypedef struct {
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** The key, name of the semantic type.  */
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  uniqstr tag;
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** Any \c %destructor declared for this semantic type.  */
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  code_props destructor;
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** Any \c %printer declared for this semantic type.  */
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  code_props printer;
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang} semantic_type;
20505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
20605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Fetch (or create) the semantic type associated to KEY.  */
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wangsemantic_type *semantic_type_from_uniqstr (const uniqstr key);
20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Fetch (or create) the semantic type associated to KEY.  */
21005436638acc7c010349a69c3395f1a57c642dc62Ying Wangsemantic_type *semantic_type_get (const char *key);
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c destructor associated with \c type.  */
21305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid semantic_type_destructor_set (semantic_type *type,
21405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   code_props const *destructor);
21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the \c printer associated with \c type.  */
21705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid semantic_type_printer_set (semantic_type *type,
21805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                code_props const *printer);
21905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
22005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*----------------------------------.
22105436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Symbol and semantic type tables.  |
22205436638acc7c010349a69c3395f1a57c642dc62Ying Wang`----------------------------------*/
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Create the symbol and semantic type tables.  */
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbols_new (void);
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Free all the memory allocated for symbols and semantic types.  */
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbols_free (void);
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Check that all the symbols are defined.
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
23205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    Report any undefined symbols and consider them nonterminals.  */
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbols_check_defined (void);
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
23505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Sanity checks and #token_translations construction.
23605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
23705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Perform various sanity checks, assign symbol numbers, and set up
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   #token_translations.  */
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid symbols_pack (void);
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24205436638acc7c010349a69c3395f1a57c642dc62Ying Wang/*---------------------------------------.
24305436638acc7c010349a69c3395f1a57c642dc62Ying Wang| Default %destructor's and %printer's.  |
24405436638acc7c010349a69c3395f1a57c642dc62Ying Wang`---------------------------------------*/
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
24605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the default \c \%destructor for tagged values.  */
24705436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid default_tagged_destructor_set (code_props const *destructor);
24805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the default \c \%destructor for tagless values.  */
24905436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid default_tagless_destructor_set (code_props const *destructor);
25005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the default \c \%printer for tagged values.  */
25205436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid default_tagged_printer_set (code_props const *printer);
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/** Set the default \c \%printer for tagless values.  */
25405436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid default_tagless_printer_set (code_props const *printer);
25505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* !SYMTAB_H_ */
257