| /* Data definitions for internal representation of bison's input, |
| Copyright (C) 1984, 1986 Bob Corbett and Free Software Foundation, Inc. |
| |
| BISON is distributed in the hope that it will be useful, but WITHOUT ANY |
| WARRANTY. No author or distributor accepts responsibility to anyone |
| for the consequences of using it or for whether it serves any |
| particular purpose or works at all, unless he says so in writing. |
| Refer to the BISON General Public License for full details. |
| |
| Everyone is granted permission to copy, modify and redistribute BISON, |
| but only under the conditions described in the BISON General Public |
| License. A copy of this license is supposed to have been given to you |
| along with BISON so you can know your rights and responsibilities. It |
| should be in a file named COPYING. Among other things, the copyright |
| notice and this notice must be preserved on all copies. |
| |
| In other words, you are welcome to use, share and improve this program. |
| You are forbidden to forbid anyone else to use, share and improve |
| what you give them. Help stamp out software-hoarding! */ |
| |
| /* representation of the grammar rules: |
| |
| ntokens is the number of tokens, and nvars is the number of variables (nonterminals). |
| nsyms is the total number, ntokens + nvars. |
| |
| Each symbol (either token or variable) receives a symbol number. |
| Numbers 0 to ntokens-1 are for tokens, and ntokens to nsyms-1 are for variables. |
| Symbol number zero is the end-of-input token. This token is counted in ntokens. |
| |
| The rules receive rule numbers 1 to nrules in the order they are written. |
| Actions and guards are accessed via the rule number. |
| |
| The rules themselves are described by three arrays: rrhs, rlhs and ritems. |
| rlhs[r] is the symbol number of the left hand side of rule r. |
| The right hand side is stored as symbol numbers in a portion of ritems. |
| rrhs[r] contains the index in ritems of the beginning of the portion for rule r. |
| The length of the portion is one greater |
| than the number of symbols in the rule's right hand side. |
| The last element in the portion contains minus r, which |
| identifies it as the end of a portion and says which rule it is for. |
| |
| The portions of ritems come in order of increasing rule number and are |
| followed by an element which is zero to mark the end. nitems is the |
| total length of ritems, not counting the final zero. Each element of |
| ritems is called an "item" and its index in ritems is an item number. |
| |
| Item numbers are used in the finite state machine to represent |
| places that parsing can get to. |
| |
| Precedence levels are recorded in the vectors sprec and rprec. |
| sprec records the precedence level of each symbol, |
| rprec the precedence level of each rule. |
| |
| Precedence levels are assigned in increasing order starting with 1 |
| so that numerically higher precedence values mean tighter binding |
| as they ought to. Zero as a symbol or rule's precedence means none is assigned. |
| |
| Associativities are recorded similarly in rassoc and sassoc. */ |
| |
| |
| #define ISTOKEN(s) ((s) < ntokens) |
| #define ISVAR(s) ((s) >= ntokens) |
| |
| |
| extern int nitems; |
| extern int nrules; |
| extern int nsyms; |
| extern int ntokens; |
| extern int nvars; |
| |
| extern short *ritem; |
| extern short *rlhs; |
| extern short *rrhs; |
| extern short *rprec; |
| extern short *sprec; |
| extern short *rassoc; |
| extern short *sassoc; |
| extern short *rline; /* Source line number of each rule */ |
| |
| extern int start_symbol; |
| |
| |
| /* associativity values in elements of rassoc, sassoc. */ |
| |
| #define RIGHT_ASSOC 1 |
| #define LEFT_ASSOC 2 |
| #define NON_ASSOC 3 |
| |
| /* token translation table: |
| indexed by a token number as returned by the user's yylex routine, |
| it yields the internal token number used by the parser and throughout bison. |
| If translations is zero, the translation table is not used because |
| the two kinds of token numbers are the same. */ |
| |
| extern short *token_translations; |
| extern int translations; |
| extern int max_user_token_number; |
| |
| /* semantic_parser is nonzero if the input file says to use the hairy parser |
| that provides for semantic error recovery. If it is zero, the yacc-compatible |
| simplified parser is used. */ |
| |
| extern int semantic_parser; |
| |
| /* pure_parser is nonzero if should generate a parser that is all pure and reentrant. */ |
| |
| extern int pure_parser; |
| |
| /* error_token_number is the token number of the error token. */ |
| |
| extern int error_token_number; |