]>
Commit | Line | Data |
---|---|---|
f7d4d87a | 1 | /* Data definitions for internal representation of bison's input, |
9f690211 | 2 | Copyright (C) 1984, 1986, 1989, 1992 Free Software Foundation, Inc. |
f7d4d87a DM |
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 | |
c49a8e71 JT |
18 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
19 | Boston, MA 02111-1307, USA. */ | |
f7d4d87a DM |
20 | |
21 | ||
22 | /* representation of the grammar rules: | |
23 | ||
24 | ntokens is the number of tokens, and nvars is the number of variables | |
25 | (nonterminals). nsyms is the total number, ntokens + nvars. | |
26 | ||
9f690211 RS |
27 | (the true number of token values assigned is ntokens |
28 | reduced by one for each alias declaration) | |
29 | ||
f7d4d87a DM |
30 | Each symbol (either token or variable) receives a symbol number. |
31 | Numbers 0 to ntokens-1 are for tokens, and ntokens to nsyms-1 are for | |
32 | variables. Symbol number zero is the end-of-input token. This token | |
33 | is counted in ntokens. | |
34 | ||
35 | The rules receive rule numbers 1 to nrules in the order they are written. | |
36 | Actions and guards are accessed via the rule number. | |
37 | ||
38 | The rules themselves are described by three arrays: rrhs, rlhs and | |
39 | ritem. rlhs[R] is the symbol number of the left hand side of rule R. | |
40 | The right hand side is stored as symbol numbers in a portion of | |
41 | ritem. rrhs[R] contains the index in ritem of the beginning of the | |
42 | portion for rule R. | |
43 | ||
44 | If rlhs[R] is -1, the rule has been thrown out by reduce.c | |
45 | and should be ignored. | |
46 | ||
47 | The length of the portion is one greater | |
48 | than the number of symbols in the rule's right hand side. | |
49 | The last element in the portion contains minus R, which | |
50 | identifies it as the end of a portion and says which rule it is for. | |
51 | ||
52 | The portions of ritem come in order of increasing rule number and are | |
53 | followed by an element which is zero to mark the end. nitems is the | |
54 | total length of ritem, not counting the final zero. Each element of | |
55 | ritem is called an "item" and its index in ritem is an item number. | |
56 | ||
57 | Item numbers are used in the finite state machine to represent | |
58 | places that parsing can get to. | |
59 | ||
60 | Precedence levels are recorded in the vectors sprec and rprec. | |
61 | sprec records the precedence level of each symbol, | |
62 | rprec the precedence level of each rule. | |
63 | rprecsym is the symbol-number of the symbol in %prec for this rule (if any). | |
64 | ||
65 | Precedence levels are assigned in increasing order starting with 1 so | |
66 | that numerically higher precedence values mean tighter binding as they | |
67 | ought to. Zero as a symbol or rule's precedence means none is | |
68 | assigned. | |
69 | ||
70 | Associativities are recorded similarly in rassoc and sassoc. */ | |
71 | ||
72 | ||
73 | #define ISTOKEN(s) ((s) < ntokens) | |
74 | #define ISVAR(s) ((s) >= ntokens) | |
75 | ||
76 | ||
77 | extern int nitems; | |
78 | extern int nrules; | |
79 | extern int nsyms; | |
80 | extern int ntokens; | |
81 | extern int nvars; | |
82 | ||
83 | extern short *ritem; | |
84 | extern short *rlhs; | |
85 | extern short *rrhs; | |
86 | extern short *rprec; | |
87 | extern short *rprecsym; | |
88 | extern short *sprec; | |
89 | extern short *rassoc; | |
90 | extern short *sassoc; | |
91 | extern short *rline; /* Source line number of each rule */ | |
92 | ||
93 | extern int start_symbol; | |
94 | ||
95 | ||
96 | /* associativity values in elements of rassoc, sassoc. */ | |
97 | ||
98 | #define RIGHT_ASSOC 1 | |
99 | #define LEFT_ASSOC 2 | |
100 | #define NON_ASSOC 3 | |
101 | ||
102 | /* token translation table: | |
103 | indexed by a token number as returned by the user's yylex routine, | |
104 | it yields the internal token number used by the parser and throughout bison. | |
105 | If translations is zero, the translation table is not used because | |
9f690211 RS |
106 | the two kinds of token numbers are the same. |
107 | (It is noted in reader.c that "Nowadays translations is always set to 1...") | |
108 | */ | |
f7d4d87a DM |
109 | |
110 | extern short *token_translations; | |
111 | extern int translations; | |
112 | extern int max_user_token_number; | |
113 | ||
114 | /* semantic_parser is nonzero if the input file says to use the hairy parser | |
115 | that provides for semantic error recovery. If it is zero, the yacc-compatible | |
116 | simplified parser is used. */ | |
117 | ||
118 | extern int semantic_parser; | |
119 | ||
120 | /* pure_parser is nonzero if should generate a parser that is all pure and reentrant. */ | |
121 | ||
122 | extern int pure_parser; | |
123 | ||
124 | /* error_token_number is the token number of the error token. */ | |
125 | ||
126 | extern int error_token_number; |