|
|
1.1 ! root 1: /* Data definitions for internal representation of bison's input, ! 2: Copyright (C) 1984, 1986 Bob Corbett and Free Software Foundation, Inc. ! 3: ! 4: BISON is distributed in the hope that it will be useful, but WITHOUT ANY ! 5: WARRANTY. No author or distributor accepts responsibility to anyone ! 6: for the consequences of using it or for whether it serves any ! 7: particular purpose or works at all, unless he says so in writing. ! 8: Refer to the BISON General Public License for full details. ! 9: ! 10: Everyone is granted permission to copy, modify and redistribute BISON, ! 11: but only under the conditions described in the BISON General Public ! 12: License. A copy of this license is supposed to have been given to you ! 13: along with BISON so you can know your rights and responsibilities. It ! 14: should be in a file named COPYING. Among other things, the copyright ! 15: notice and this notice must be preserved on all copies. ! 16: ! 17: In other words, you are welcome to use, share and improve this program. ! 18: You are forbidden to forbid anyone else to use, share and improve ! 19: what you give them. Help stamp out software-hoarding! */ ! 20: ! 21: /* representation of the grammar rules: ! 22: ! 23: ntokens is the number of tokens, and nvars is the number of variables (nonterminals). ! 24: 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 variables. ! 28: Symbol number zero is the end-of-input token. This token is counted in ntokens. ! 29: ! 30: The rules receive rule numbers 1 to nrules in the order they are written. ! 31: Actions and guards are accessed via the rule number. ! 32: ! 33: The rules themselves are described by three arrays: rrhs, rlhs and ritems. ! 34: rlhs[r] is the symbol number of the left hand side of rule r. ! 35: The right hand side is stored as symbol numbers in a portion of ritems. ! 36: rrhs[r] contains the index in ritems of the beginning of the portion for rule r. ! 37: The length of the portion is one greater ! 38: than the number of symbols in the rule's right hand side. ! 39: The last element in the portion contains minus r, which ! 40: identifies it as the end of a portion and says which rule it is for. ! 41: ! 42: The portions of ritems come in order of increasing rule number and are ! 43: followed by an element which is zero to mark the end. nitems is the ! 44: total length of ritems, not counting the final zero. Each element of ! 45: ritems is called an "item" and its index in ritems is an item number. ! 46: ! 47: Item numbers are used in the finite state machine to represent ! 48: places that parsing can get to. ! 49: ! 50: Precedence levels are recorded in the vectors sprec and rprec. ! 51: sprec records the precedence level of each symbol, ! 52: rprec the precedence level of each rule. ! 53: ! 54: Precedence levels are assigned in increasing order starting with 1 ! 55: so that numerically higher precedence values mean tighter binding ! 56: as they ought to. Zero as a symbol or rule's precedence means none is assigned. ! 57: ! 58: Associativities are recorded similarly in rassoc and sassoc. */ ! 59: ! 60: ! 61: #define ISTOKEN(s) ((s) < ntokens) ! 62: #define ISVAR(s) ((s) >= ntokens) ! 63: ! 64: ! 65: extern int nitems; ! 66: extern int nrules; ! 67: extern int nsyms; ! 68: extern int ntokens; ! 69: extern int nvars; ! 70: ! 71: extern short *ritem; ! 72: extern short *rlhs; ! 73: extern short *rrhs; ! 74: extern short *rprec; ! 75: extern short *sprec; ! 76: extern short *rassoc; ! 77: extern short *sassoc; ! 78: extern short *rline; /* Source line number of each rule */ ! 79: ! 80: extern int start_symbol; ! 81: ! 82: ! 83: /* associativity values in elements of rassoc, sassoc. */ ! 84: ! 85: #define RIGHT_ASSOC 1 ! 86: #define LEFT_ASSOC 2 ! 87: #define NON_ASSOC 3 ! 88: ! 89: /* token translation table: ! 90: indexed by a token number as returned by the user's yylex routine, ! 91: it yields the internal token number used by the parser and throughout bison. ! 92: If translations is zero, the translation table is not used because ! 93: the two kinds of token numbers are the same. */ ! 94: ! 95: extern short *token_translations; ! 96: extern int translations; ! 97: extern int max_user_token_number; ! 98: ! 99: /* semantic_parser is nonzero if the input file says to use the hairy parser ! 100: that provides for semantic error recovery. If it is zero, the yacc-compatible ! 101: simplified parser is used. */ ! 102: ! 103: extern int semantic_parser; ! 104: ! 105: /* pure_parser is nonzero if should generate a parser that is all pure and reentrant. */ ! 106: ! 107: extern int pure_parser; ! 108: ! 109: /* error_token_number is the token number of the error token. */ ! 110: ! 111: extern int error_token_number;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.