1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Data definitions for internal representation of Bison's input. 2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 1984, 1986, 1989, 1992, 2001-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/>. */ 20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef GRAM_H_ 22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define GRAM_H_ 23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Representation of the grammar rules: 25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project NTOKENS is the number of tokens, and NVARS is the number of 27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project variables (nonterminals). NSYMS is the total number, ntokens + 28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project nvars. 29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Each symbol (either token or variable) receives a symbol number. 31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Numbers 0 to NTOKENS - 1 are for tokens, and NTOKENS to NSYMS - 1 32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project are for variables. Symbol number zero is the end-of-input token. 33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project This token is counted in ntokens. The true number of token values 34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project assigned is NTOKENS reduced by one for each alias declaration. 35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project The rules receive rule numbers 1 to NRULES in the order they are 37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project written. More precisely Bison augments the grammar with the 38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project initial rule, `$accept: START-SYMBOL $end', which is numbered 1, 39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project all the user rules are 2, 3 etc. Each time a rule number is 40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project presented to the user, we subtract 1, so *displayed* rule numbers 41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project are 0, 1, 2... 42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Internally, we cannot use the number 0 for a rule because for 44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project instance RITEM stores both symbol (the RHS) and rule numbers: the 45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project symbols are shorts >= 0, and rule number are stored negative. 46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Therefore 0 cannot be used, since it would be both the rule number 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 0, and the token $end). 48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Actions are accessed via the rule number. 50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project The rules themselves are described by several arrays: amongst which 52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RITEM, and RULES. 53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES is an array of rules, whose members are: 55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].lhs -- the symbol of the left hand side of rule R. 57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].rhs -- the index in RITEM of the beginning of the portion 59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for rule R. 60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].prec -- the symbol providing the precedence level of R. 62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].precsym -- the symbol attached (via %prec) to give its 64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project precedence to R. Of course, if set, it is equal to `prec', but we 65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project need to distinguish one from the other when reducing: a symbol used 66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project in a %prec is not useless. 67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].assoc -- the associativity of R. 69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].dprec -- the dynamic precedence level of R (for GLR 71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project parsing). 72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].merger -- index of merging function for R (for GLR 74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project parsing). 75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].line -- the line where R was defined. 77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES[R].useful -- true iff the rule is used (i.e., false if thrown 79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project away by reduce). 80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project The right hand side is stored as symbol numbers in a portion of 82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RITEM. 83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project The length of the portion is one greater than the number of symbols 85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project in the rule's right hand side. The last element in the portion 86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project contains minus R, which identifies it as the end of a portion and 87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project says which rule it is for. 88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project The portions of RITEM come in order of increasing rule number. 90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project NRITEMS is the total length of RITEM. Each element of RITEM is 91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project called an "item" and its index in RITEM is an item number. 92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Item numbers are used in the finite state machine to represent 94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project places that parsing can get to. 95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project SYMBOLS[I]->prec records the precedence level of each symbol. 97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Precedence levels are assigned in increasing order starting with 1 99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project so that numerically higher precedence values mean tighter binding 100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project as they ought to. Zero as a symbol or rule's precedence means none 101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project is assigned. 102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Associativities are recorded similarly in SYMBOLS[I]->assoc. */ 104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "location.h" 106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "symtab.h" 107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define ISTOKEN(i) ((i) < ntokens) 109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define ISVAR(i) ((i) >= ntokens) 110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern int nsyms; 112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern int ntokens; 113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern int nvars; 114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef int item_number; 11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define ITEM_NUMBER_MAX INT_MAX 117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern item_number *ritem; 118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern unsigned int nritems; 119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* There is weird relationship between OT1H item_number and OTOH 121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project symbol_number and rule_number: we store the latter in 122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project item_number. symbol_number values are stored as-is, while 123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project the negation of (rule_number + 1) is stored. 124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Therefore, a symbol_number must be a valid item_number, and we 126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project sometimes have to perform the converse transformation. */ 127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline item_number 129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsymbol_number_as_item_number (symbol_number sym) 130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return sym; 132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline symbol_number 135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectitem_number_as_symbol_number (item_number i) 136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return i; 138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline bool 141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectitem_number_is_symbol_number (item_number i) 142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return i >= 0; 144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Rule numbers. */ 147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef int rule_number; 14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define RULE_NUMBER_MAX INT_MAX 149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern rule_number nrules; 150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline item_number 152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectrule_number_as_item_number (rule_number r) 153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return -1 - r; 155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline rule_number 158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectitem_number_as_rule_number (item_number i) 159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return -1 - i; 161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline bool 164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectitem_number_is_rule_number (item_number i) 165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return i < 0; 167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*--------. 170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Rules. | 171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`--------*/ 172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct 174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* The number of the rule in the source. It is usually the index in 176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project RULES too, except if there are useless rules. */ 177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project rule_number user_number; 178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* The index in RULES. Usually the rule number in the source, 180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project except if some rules are useless. */ 181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project rule_number number; 182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project symbol *lhs; 184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project item_number *rhs; 185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* This symbol provides both the associativity, and the precedence. */ 187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project symbol *prec; 188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project int dprec; 190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project int merger; 191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* This symbol was attached to the rule via %prec. */ 193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project symbol *precsym; 194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project location location; 196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bool useful; 197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project const char *action; 199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project location action_location; 200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} rule; 201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern rule *rules; 203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* A function that selects a rule. */ 205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef bool (*rule_filter) (rule *); 206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return true IFF the rule has a `number' smaller than NRULES. That is, it is 20805436638acc7c010349a69c3395f1a57c642dc62Ying Wang useful in the grammar. */ 20905436638acc7c010349a69c3395f1a57c642dc62Ying Wangbool rule_useful_in_grammar_p (rule *r); 210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return true IFF the rule has a `number' higher than NRULES. That is, it is 21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang useless in the grammar. */ 21305436638acc7c010349a69c3395f1a57c642dc62Ying Wangbool rule_useless_in_grammar_p (rule *r); 214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 21505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Return true IFF the rule is not flagged as useful but is useful in the 21605436638acc7c010349a69c3395f1a57c642dc62Ying Wang grammar. In other words, it was discarded because of conflicts. */ 21705436638acc7c010349a69c3395f1a57c642dc62Ying Wangbool rule_useless_in_parser_p (rule *r); 218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print this rule's number and lhs on OUT. If a PREVIOUS_LHS was 220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project already displayed (by a previous call for another rule), avoid 221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project useless repetitions. */ 222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid rule_lhs_print (rule *r, symbol *previous_lhs, FILE *out); 22305436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid rule_lhs_print_xml (rule *r, FILE *out, int level); 224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return the length of the RHS. */ 226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint rule_rhs_length (rule *r); 227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print this rule's RHS on OUT. */ 229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid rule_rhs_print (rule *r, FILE *out); 230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print this rule on OUT. */ 232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid rule_print (rule *r, FILE *out); 233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Table of the symbols, indexed by the symbol number. */ 238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol **symbols; 239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* TOKEN_TRANSLATION -- a table indexed by a token number as returned 241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project by the user's yylex routine, it yields the internal token number 242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project used by the parser and throughout bison. */ 243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern symbol_number *token_translations; 244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern int max_user_token_number; 245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Dump RITEM for traces. */ 249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid ritem_print (FILE *out); 250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return the size of the longest rule RHS. */ 252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsize_t ritem_longest_rhs (void); 253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 25405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Print the grammar's rules that match FILTER on OUT under TITLE. */ 255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid grammar_rules_partial_print (FILE *out, const char *title, 256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project rule_filter filter); 257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Print the grammar's useful rules on OUT. */ 259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid grammar_rules_print (FILE *out); 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Print all of the grammar's rules with a "usefulness" attribute. */ 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid grammar_rules_print_xml (FILE *out, int level); 262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Dump the grammar. */ 264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid grammar_dump (FILE *out, const char *title); 265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Report on STDERR the rules that are not flagged USEFUL, using the 26705436638acc7c010349a69c3395f1a57c642dc62Ying Wang MESSAGE (which can be `rule useless in grammar' when invoked after grammar 26805436638acc7c010349a69c3395f1a57c642dc62Ying Wang reduction, or `rule useless in parser due to conflicts' after conflicts 26905436638acc7c010349a69c3395f1a57c642dc62Ying Wang were taken into account). */ 27005436638acc7c010349a69c3395f1a57c642dc62Ying Wangvoid grammar_rules_useless_report (const char *message); 271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Free the packed grammar. */ 273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid grammar_free (void); 274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* !GRAM_H_ */ 276