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