|
|
1.1 ! root 1: /* Data definitions for internal representation of bison's input, ! 2: Copyright (C) 1984, 1986, 1989 Free Software Foundation, Inc. ! 3: ! 4: This file is part of Bison, the GNU Compiler Compiler. ! 5: ! 6: Bison is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 2, or (at your option) ! 9: any later version. ! 10: ! 11: Bison is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with Bison; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: /* representation of the grammar rules: ! 22: ! 23: ntokens is the number of tokens, and nvars is the number of variables ! 24: (nonterminals). nsyms is the total number, ntokens + nvars. ! 25: ! 26: Each symbol (either token or variable) receives a symbol number. ! 27: Numbers 0 to ntokens-1 are for tokens, and ntokens to nsyms-1 are for ! 28: variables. Symbol number zero is the end-of-input token. This token ! 29: is counted in ntokens. ! 30: ! 31: The rules receive rule numbers 1 to nrules in the order they are written. ! 32: Actions and guards are accessed via the rule number. ! 33: ! 34: The rules themselves are described by three arrays: rrhs, rlhs and ! 35: ritem. rlhs[R] is the symbol number of the left hand side of rule R. ! 36: The right hand side is stored as symbol numbers in a portion of ! 37: ritem. rrhs[R] contains the index in ritem of the beginning of the ! 38: portion for rule R. ! 39: ! 40: If rlhs[R] is -1, the rule has been thrown out by reduce.c ! 41: and should be ignored. ! 42: ! 43: The length of the portion is one greater ! 44: than the number of symbols in the rule's right hand side. ! 45: The last element in the portion contains minus R, which ! 46: identifies it as the end of a portion and says which rule it is for. ! 47: ! 48: The portions of ritem come in order of increasing rule number and are ! 49: followed by an element which is zero to mark the end. nitems is the ! 50: total length of ritem, not counting the final zero. Each element of ! 51: ritem is called an "item" and its index in ritem is an item number. ! 52: ! 53: Item numbers are used in the finite state machine to represent ! 54: places that parsing can get to. ! 55: ! 56: Precedence levels are recorded in the vectors sprec and rprec. ! 57: sprec records the precedence level of each symbol, ! 58: rprec the precedence level of each rule. ! 59: rprecsym is the symbol-number of the symbol in %prec for this rule (if any). ! 60: ! 61: Precedence levels are assigned in increasing order starting with 1 so ! 62: that numerically higher precedence values mean tighter binding as they ! 63: ought to. Zero as a symbol or rule's precedence means none is ! 64: assigned. ! 65: ! 66: Associativities are recorded similarly in rassoc and sassoc. */ ! 67: ! 68: ! 69: #define ISTOKEN(s) ((s) < ntokens) ! 70: #define ISVAR(s) ((s) >= ntokens) ! 71: ! 72: ! 73: extern int nitems; ! 74: extern int nrules; ! 75: extern int nsyms; ! 76: extern int ntokens; ! 77: extern int nvars; ! 78: ! 79: extern short *ritem; ! 80: extern short *rlhs; ! 81: extern short *rrhs; ! 82: extern short *rprec; ! 83: extern short *rprecsym; ! 84: extern short *sprec; ! 85: extern short *rassoc; ! 86: extern short *sassoc; ! 87: extern short *rline; /* Source line number of each rule */ ! 88: ! 89: extern int start_symbol; ! 90: ! 91: ! 92: /* associativity values in elements of rassoc, sassoc. */ ! 93: ! 94: #define RIGHT_ASSOC 1 ! 95: #define LEFT_ASSOC 2 ! 96: #define NON_ASSOC 3 ! 97: ! 98: /* token translation table: ! 99: indexed by a token number as returned by the user's yylex routine, ! 100: it yields the internal token number used by the parser and throughout bison. ! 101: If translations is zero, the translation table is not used because ! 102: the two kinds of token numbers are the same. */ ! 103: ! 104: extern short *token_translations; ! 105: extern int translations; ! 106: extern int max_user_token_number; ! 107: ! 108: /* semantic_parser is nonzero if the input file says to use the hairy parser ! 109: that provides for semantic error recovery. If it is zero, the yacc-compatible ! 110: simplified parser is used. */ ! 111: ! 112: extern int semantic_parser; ! 113: ! 114: /* pure_parser is nonzero if should generate a parser that is all pure and reentrant. */ ! 115: ! 116: extern int pure_parser; ! 117: ! 118: /* error_token_number is the token number of the error token. */ ! 119: ! 120: extern int error_token_number;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.