]> git.saurik.com Git - bison.git/blame - TODO
tests: enlarge the allowed duration for calc tests
[bison.git] / TODO
CommitLineData
ff1b7a13 1* Short term
f29f8af3
TR
2** Laxism in Bison invocation arguments:
3The flag_argmatch functions were meant to be generic. The introduction of
4-Werror= in generic code is a bit troublesome, and generates weird
5behaviour. Because seeing "error=" causes Bison to match the subsequent
6categories with a generic procedure, but on a very specific variable, the
7following commands are legal, and equivalent:
8
9$ bison -Werror=yacc # OK
10$ bison --warnings=error=yacc # err, looks very weird?
11$ bison -rerror=itemsets # this value of 'report' enum has a value
12 # of '1 << 1', just like Wyacc
13$ bison --report=error=itemsets # (same)
14$ bison -ferror=caret # (same)
15$ bison --feature=error=caret # (same)
16
17Basically, writing -rerror={THINGS} or -ferror={FEATURE} is not prohibited,
18and results in UB.
19
20I don't think there is any reason for the user to expect anything out of
21these options (this implementation-driven behavior is not documented of
22course, as it isn't exactly a feature), so this bug isn't critical but
23should be addressed some day nonetheless.
24
fc4fdd62
TR
25** Graphviz display code thoughts
26The code for the --graph option is over two files: print_graph, and
f29f8af3
TR
27graphviz. This is because Bison used to also produce VCG graphs, but since
28this is no longer true, maybe we could consider these files for fusion.
29
30An other consideration worth noting is that print_graph.c (correct me if I
31am wrong) should contain generic functions, whereas graphviz.c and other
32potential files should contain just the specific code for that output
33format. It will probably prove difficult to tell if the implementation is
34actually generic whilst only having support for a single format, but it
35would be nice to keep stuff a bit tidier: right now, the construction of the
36bitset used to show reductions is in the graphviz-specific code, and on the
37opposite side we have some use of \l, which is graphviz-specific, in what
38should be generic code.
39
40Little effort seems to have been given to factoring these files and their
41rint{,-xml} counterpart. We would very much like to re-use the pretty format
42of states from .output for the graphs, etc.
fc4fdd62 43
f29f8af3
TR
44Also, the underscore in print_graph.[ch] isn't very fitting considering the
45dashes in the other filenames.
fc4fdd62 46
f29f8af3 47Since graphviz dies on medium-to-big grammars, maybe consider an other tool?
1048a1c9 48
836dc334
AD
49** push-parser
50Check it too when checking the different kinds of parsers. And be
51sure to check that the initial-action is performed once per parsing.
52
d27c5e65
AD
53** m4 names
54b4_shared_declarations is no longer what it is. Make it
55b4_parser_declaration for instance.
56
51c994d8
AD
57** yychar in lalr1.cc
58There is a large difference bw maint and master on the handling of
59yychar (which was removed in lalr1.cc). See what needs to be
60back-ported.
61
62
63 /* User semantic actions sometimes alter yychar, and that requires
64 that yytoken be updated with the new translation. We take the
65 approach of translating immediately before every use of yytoken.
66 One alternative is translating here after every semantic action,
67 but that translation would be missed if the semantic action
68 invokes YYABORT, YYACCEPT, or YYERROR immediately after altering
69 yychar. In the case of YYABORT or YYACCEPT, an incorrect
70 destructor might then be invoked immediately. In the case of
71 YYERROR, subsequent parser actions might lead to an incorrect
72 destructor call or verbose syntax error message before the
73 lookahead is translated. */
74
75 /* Make sure we have latest lookahead translation. See comments at
76 user semantic actions for why this is necessary. */
77 yytoken = yytranslate_ (yychar);
78
79
5de5b987
AD
80** stack.hh
81Get rid of it. The original idea is nice, but actually it makes
82the code harder to follow, and uselessly different from the other
83skeletons.
84
ff1b7a13
AD
85** Get rid of fake #lines [Bison: ...]
86Possibly as simple as checking whether the column number is nonnegative.
87
88I have seen messages like the following from GCC.
89
90<built-in>:0: fatal error: opening dependency file .deps/libltdl/argz.Tpo: No such file or directory
91
92
93** Discuss about %printer/%destroy in the case of C++.
94It would be very nice to provide the symbol classes with an operator<<
95and a destructor. Unfortunately the syntax we have chosen for
96%destroy and %printer make them hard to reuse. For instance, the user
97is invited to write something like
98
99 %printer { debug_stream() << $$; } <my_type>;
100
101which is hard to reuse elsewhere since it wants to use
102"debug_stream()" to find the stream to use. The same applies to
103%destroy: we told the user she could use the members of the Parser
104class in the printers/destructors, which is not good for an operator<<
105since it is no longer bound to a particular parser, it's just a
106(standalone symbol).
107
108** Rename LR0.cc
109as lr0.cc, why upper case?
110
ff1b7a13 111* Various
ff1b7a13
AD
112** YYERRCODE
113Defined to 256, but not used, not documented. Probably the token
114number for the error token, which POSIX wants to be 256, but which
115Bison might renumber if the user used number 256. Keep fix and doc?
116Throw away?
117
118Also, why don't we output the token name of the error token in the
119output? It is explicitly skipped:
120
121 /* Skip error token and tokens without identifier. */
122 if (sym != errtoken && id)
123
124Of course there are issues with name spaces, but if we disable we have
125something which seems to be more simpler and more consistent instead
126of the special case YYERRCODE.
127
128 enum yytokentype {
129 error = 256,
130 // ...
131 };
132
133
134We could (should?) also treat the case of the undef_token, which is
135numbered 257 for yylex, and 2 internal. Both appear for instance in
136toknum:
137
138 const unsigned short int
139 parser::yytoken_number_[] =
140 {
141 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
142
143while here
144
145 enum yytokentype {
146 TOK_EOF = 0,
147 TOK_EQ = 258,
148
149so both 256 and 257 are "mysterious".
150
151 const char*
152 const parser::yytname_[] =
153 {
154 "\"end of command\"", "error", "$undefined", "\"=\"", "\"break\"",
155
156
ff1b7a13
AD
157** yychar == yyempty_
158The code in yyerrlab reads:
159
160 if (yychar <= YYEOF)
161 {
162 /* Return failure if at end of input. */
163 if (yychar == YYEOF)
164 YYABORT;
165 }
166
167There are only two yychar that can be <= YYEOF: YYEMPTY and YYEOF.
168But I can't produce the situation where yychar is YYEMPTY here, is it
169really possible? The test suite does not exercise this case.
170
171This shows that it would be interesting to manage to install skeleton
172coverage analysis to the test suite.
173
ff1b7a13
AD
174* From lalr1.cc to yacc.c
175** Single stack
176Merging the three stacks in lalr1.cc simplified the code, prompted for
177other improvements and also made it faster (probably because memory
178management is performed once instead of three times). I suggest that
179we do the same in yacc.c.
180
181** yysyntax_error
182The code bw glr.c and yacc.c is really alike, we can certainly factor
183some parts.
416bd7a9 184
3c146b5e 185
2ab9a04f 186* Report
ec3bc396 187
ff1b7a13
AD
188** Figures
189Some statistics about the grammar and the parser would be useful,
190especially when asking the user to send some information about the
191grammars she is working on. We should probably also include some
192information about the variables (I'm not sure for instance we even
193specify what LR variant was used).
194
2ab9a04f
AD
195** GLR
196How would Paul like to display the conflicted actions? In particular,
742e4900 197what when two reductions are possible on a given lookahead token, but one is
2ab9a04f
AD
198part of $default. Should we make the two reductions explicit, or just
199keep $default? See the following point.
d7215705 200
2ab9a04f
AD
201** Disabled Reductions
202See `tests/conflicts.at (Defaulted Conflicted Reduction)', and decide
203what we want to do.
d7215705 204
2ab9a04f 205** Documentation
bc933ef1
AD
206Extend with error productions. The hard part will probably be finding
207the right rule so that a single state does not exhibit too many yet
208undocumented ``features''. Maybe an empty action ought to be
209presented too. Shall we try to make a single grammar with all these
210features, or should we have several very small grammars?
ec3bc396 211
2ab9a04f
AD
212** --report=conflict-path
213Provide better assistance for understanding the conflicts by providing
214a sample text exhibiting the (LALR) ambiguity. See the paper from
215DeRemer and Penello: they already provide the algorithm.
216
38eb7751
PE
217** Statically check for potential ambiguities in GLR grammars. See
218<http://www.i3s.unice.fr/~schmitz/papers.html#expamb> for an approach.
219
ec3bc396 220
948be909 221* Extensions
2ab9a04f 222
959e5f51
AD
223** $-1
224We should find a means to provide an access to values deep in the
225stack. For instance, instead of
226
ff1b7a13 227 baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }
959e5f51
AD
228
229we should be able to have:
230
231 foo($foo) bar($bar) baz($bar): qux($qux) { $baz = $foo + $bar + $qux; }
232
233Or something like this.
234
f0e48240
AD
235** %if and the like
236It should be possible to have %if/%else/%endif. The implementation is
237not clear: should it be lexical or syntactic. Vadim Maslow thinks it
238must be in the scanner: we must not parse what is in a switched off
239part of %if. Akim Demaille thinks it should be in the parser, so as
240to avoid falling into another CPP mistake.
241
ca752c34
AD
242** XML Output
243There are couple of available extensions of Bison targeting some XML
244output. Some day we should consider including them. One issue is
245that they seem to be quite orthogonal to the parsing technique, and
246seem to depend mostly on the possibility to have some code triggered
247for each reduction. As a matter of fact, such hooks could also be
248used to generate the yydebug traces. Some generic scheme probably
249exists in there.
250
251XML output for GNU Bison and gcc
252 http://www.cs.may.ie/~jpower/Research/bisonXML/
253
254XML output for GNU Bison
255 http://yaxx.sourceforge.net/
f0e48240 256
fa770c86
AD
257* Unit rules
258Maybe we could expand unit rules, i.e., transform
259
ff1b7a13
AD
260 exp: arith | bool;
261 arith: exp '+' exp;
262 bool: exp '&' exp;
fa770c86
AD
263
264into
265
ff1b7a13 266 exp: exp '+' exp | exp '&' exp;
fa770c86
AD
267
268when there are no actions. This can significantly speed up some
d7215705
AD
269grammars. I can't find the papers. In particular the book `LR
270parsing: Theory and Practice' is impossible to find, but according to
271`Parsing Techniques: a Practical Guide', it includes information about
272this issue. Does anybody have it?
fa770c86 273
51dec47b 274
51dec47b 275
2ab9a04f 276* Documentation
51dec47b 277
2ab9a04f
AD
278** History/Bibliography
279Some history of Bison and some bibliography would be most welcome.
280Are there any Texinfo standards for bibliography?
281
2ab9a04f
AD
282* Coding system independence
283Paul notes:
284
ff1b7a13
AD
285 Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
286 255). It also assumes that the 8-bit character encoding is
287 the same for the invocation of 'bison' as it is for the
288 invocation of 'cc', but this is not necessarily true when
289 people run bison on an ASCII host and then use cc on an EBCDIC
290 host. I don't think these topics are worth our time
291 addressing (unless we find a gung-ho volunteer for EBCDIC or
292 PDP-10 ports :-) but they should probably be documented
293 somewhere.
fa770c86 294
ff1b7a13
AD
295 More importantly, Bison does not currently allow NUL bytes in
296 tokens, either via escapes (e.g., "x\0y") or via a NUL byte in
297 the source code. This should get fixed.
aef1ffd5 298
704a47c4 299* Broken options ?
45567173
AD
300** %token-table
301** Skeleton strategy
728c4be2 302Must we keep %token-table?
416bd7a9 303
0e95c1dd 304* Precedence
2ab9a04f
AD
305
306** Partial order
0e95c1dd
AD
307It is unfortunate that there is a total order for precedence. It
308makes it impossible to have modular precedence information. We should
2ab9a04f 309move to partial orders (sounds like series/parallel orders to me).
0e95c1dd 310
2ab9a04f
AD
311** RR conflicts
312See if we can use precedence between rules to solve RR conflicts. See
313what POSIX says.
314
315
69991a58
AD
316* $undefined
317From Hans:
318- If the Bison generated parser experiences an undefined number in the
319character range, that character is written out in diagnostic messages, an
320addition to the $undefined value.
321
322Suggest: Change the name $undefined to undefined; looks better in outputs.
323
2ab9a04f 324
69991a58
AD
325* Default Action
326From Hans:
327- For use with my C++ parser, I transported the "switch (yyn)" statement
328that Bison writes to the bison.simple skeleton file. This way, I can remove
329the current default rule $$ = $1 implementation, which causes a double
330assignment to $$ which may not be OK under C++, replacing it with a
331"default:" part within the switch statement.
332
333Note that the default rule $$ = $1, when typed, is perfectly OK under C,
334but in the C++ implementation I made, this rule is different from
335$<type_name>$ = $<type_name>1. I therefore think that one should implement
336a Bison option where every typed default rule is explicitly written out
337(same typed ruled can of course be grouped together).
338
339* Pre and post actions.
340From: Florian Krohm <florian@edamail.fishkill.ibm.com>
341Subject: YYACT_EPILOGUE
342To: bug-bison@gnu.org
343X-Sent: 1 week, 4 days, 14 hours, 38 minutes, 11 seconds ago
344
345The other day I had the need for explicitly building the parse tree. I
346used %locations for that and defined YYLLOC_DEFAULT to call a function
347that returns the tree node for the production. Easy. But I also needed
348to assign the S-attribute to the tree node. That cannot be done in
349YYLLOC_DEFAULT, because it is invoked before the action is executed.
350The way I solved this was to define a macro YYACT_EPILOGUE that would
351be invoked after the action. For reasons of symmetry I also added
352YYACT_PROLOGUE. Although I had no use for that I can envision how it
353might come in handy for debugging purposes.
76551463 354All is needed is to add
69991a58
AD
355
356#if YYLSP_NEEDED
357 YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen, yyloc, (yylsp - yylen));
358#else
359 YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen);
360#endif
361
362at the proper place to bison.simple. Ditto for YYACT_PROLOGUE.
363
364I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUE
365to bison. If you're interested, I'll work on a patch.
366
35fe0834
PE
367* Better graphics
368Equip the parser with a means to create the (visual) parse tree.
d7215705 369
ff1b7a13
AD
370* Complaint submessage indentation.
371We already have an implementation that works fairly well for named
372reference messages, but it would be nice to use it consistently for all
373submessages from Bison. For example, the "previous definition"
374submessage or the list of correct values for a %define variable might
375look better with indentation.
376
377However, the current implementation makes the assumption that the
378location printed on the first line is not usually much shorter than the
379locations printed on the submessage lines that follow. That assumption
380may not hold true as often for some kinds of submessages especially if
381we ever support multiple grammar files.
382
383Here's a proposal for how a new implementation might look:
384
385 http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00086.html
386
387
388Local Variables:
389mode: outline
390coding: utf-8
391End:
392
f294a2c2
AD
393-----
394
7d6bad19 395Copyright (C) 2001-2004, 2006, 2008-2013 Free Software Foundation, Inc.
f294a2c2 396
51cbef6f 397This file is part of Bison, the GNU Compiler Compiler.
f294a2c2 398
f16b0819 399This program is free software: you can redistribute it and/or modify
f294a2c2 400it under the terms of the GNU General Public License as published by
f16b0819
PE
401the Free Software Foundation, either version 3 of the License, or
402(at your option) any later version.
f294a2c2 403
f16b0819 404This program is distributed in the hope that it will be useful,
f294a2c2
AD
405but WITHOUT ANY WARRANTY; without even the implied warranty of
406MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
407GNU General Public License for more details.
408
409You should have received a copy of the GNU General Public License
f16b0819 410along with this program. If not, see <http://www.gnu.org/licenses/>.