xref: /original-bsd/old/yacc/yaccdiffs (revision 3b6250d9)
1
2
3
4
5
6
7
8
9
10                      Yacc Differences
11
12
13
14
15
16This document gives a short list of differences between  the
17new Yacc and earlier Yaccs.
18
19_B_u_g_s _F_i_x_e_d
20
211.   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
252.   A number of table size overflow conditions used  to  be
26     checked incorrectly or not at all; this is now better.
27
283.   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
331.   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
392.   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
453.   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
554.   Various table sizes are somewhat bigger.
56
575.   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
746.   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
787.   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
871.   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
1002.   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
1093.   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
1404.   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
199