|
|
1.1 root 1:
2:
3:
4:
5:
6:
7:
8:
9:
10: Yacc Differences
11:
12:
13:
14:
15:
16: This document gives a short list of differences between the
17: new Yacc and earlier Yaccs.
18:
19: _B_u_g_s _F_i_x_e_d
20:
21: 1. There was a bug which caused Yacc to silently steal
22: away in the night if an action had mismatched '' in it;
23: this is fixed.
24:
25: 2. A number of table size overflow conditions used to be
26: checked incorrectly or not at all; this is now better.
27:
28: 3. A bug which suppressed the printing of some rules with
29: empty RHS's on the y.output file has been fixed.
30:
31: _S_p_e_e_d_u_p_s, _S_h_r_i_n_k_s, _a_n_d _D_i_d_d_l_e_s
32:
33: 1. The old optimizer (-o) flag is now the default in Yacc.
34: At the same time, the Yacc process itself has been sped
35: up; the result is that Yacc takes about the same or
36: slightly longer on short inputs, but is much faster on
37: long inputs.
38:
39: 2. The optimized parsers produced by Yacc are likely to be
40: 2-3 times faster and 1-2k bytes smaller than the old
41: ones, for medium/large grammars. The time to parse is
42: now essentially independent of the grammar size; it
43: used to grow as the size of the grammar did.
44:
45: 3. The y.output file has been considerably reformatted, to
46: make it easier to read. The old "goto" table is gone;
47: the goto's for nonterminal symbols are now printed in
48: the states where they occur. Rules which can be
49: reduced in a state have their rule number printed after
50: them, in (). This makes it much easier to interpret
51: the "reduce n" actions. The message "same as n" has
52: been removed; duplicate states are in fact duplicated,
53: saving shuffling and cross-referencing.
54:
55: 4. Various table sizes are somewhat bigger.
56:
57: 5. The form feed character, and the construction '\f', are
58: now recognized; form feed is ignored (=whitespace) on
59: input.
60:
61:
62:
63:
64: January 14, 1977
65:
66:
67:
68:
69:
70: - 2 -
71:
72:
73:
74: 6. The arrays "yysterm" and "yysnter" are no longer pro-
75: duced on output; they were little used, and took up a
76: surprising amount of space in the parser.
77:
78: 7. Rules in the input which are not reduced are now com-
79: plained about; they may represent unreachable parts of
80: the grammar, botched precedence, or duplicate rules.
81: As with conflicts, a summary complaint, "n rules not
82: reduced", appears at the terminal; more information is
83: on the y.output file.
84:
85: _N_e_w _F_e_a_t_u_r_e_s
86:
87: 1. The actions are now copied into the middle of the
88: parser, rather than being gathered into a separate rou-
89: tine. It's faster. Also, you can return a value from
90: yyparse (and stop parsing...) by saying `return(x);' in
91: an action. There are macros which simulate various
92: interesting parsing actions:
93:
94: YYERROR causes the parser to behave as if a syntax
95: error had been encountered (i.e., do error recovery)
96: YYACCEPT causes a return from yyparse with a value of 0
97: YYABORT causes a return from yyparse with a value of 1
98:
99:
100: 2. The repositioning of the actions may cause scope prob-
101: lems for some people who include lexical analyzers in
102: funny places. This can probably be avoided by using
103: another new feature: the `-d' option. Invoking Yacc
104: with the -d option causes the #defines generated by
105: Yacc to be written out onto a file called "y.tab.h",
106: (as well as on the "y.tab.c" file). This can then be
107: included as desired in lexical analyzers, etc.
108:
109: 3. Actions are now permitted within rules; for such
110: actions, $$, $1, $2, etc. continue to have their usual
111: meanings. An error message is returned if any $n
112: refers to a value lying to the right of the action in
113: the rule. These internal actions are assumed to return
114: a value, which is accessed through the $n mechanism.
115: In the y.output file, the actions are referred to by
116: created nonterminal names of the form $$nnn. All
117: actions within rules are assumed to be distinct. If
118: some actions are the same, Yacc might report
119: reduce/reduce conflicts which could be resolved by
120: explicitly identifying identical actions; does anyone
121: have a good idea for a syntax to do this? The = sign
122: may now be omitted in action constructions of the form
123: ={ ... }.
124:
125:
126:
127:
128:
129:
130: January 14, 1977
131:
132:
133:
134:
135:
136: - 3 -
137:
138:
139:
140: 4. As a result of the rearrangement of rules, people who
141: thought they knew what $1 really turned into, and wrote
142: programs which referred to yypv[1], etc., are in trou-
143: ble. See Steve Johnson if you are really suffering.
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196: January 14, 1977
197:
198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.