|
|
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.