]> git.saurik.com Git - bison.git/blame - TODO
`stage' was accidently included in a previous patch.
[bison.git] / TODO
CommitLineData
416bd7a9
MA
1-*- outline -*-
2
efea6231
AD
3* URGENT: Documenting C++ output
4Write a first documentation for C++ output.
5
bc933ef1 6
88bce5a2
AD
7* Documentation
8Before releasing, make sure the documentation refers to the current
9`output' format.
10
11
2ab9a04f
AD
12* Error messages
13Some are really funky. For instance
14
15 type clash (`%s' `%s') on default action
16
17is really weird. Revisit them all.
18
19* Stupid error messages
20An example shows it easily:
21
22src/bison/tests % ./testsuite -k calc,location,error-verbose -l
23GNU Bison 1.49a test suite test groups:
24
25 NUM: FILENAME:LINE TEST-GROUP-NAME
26 KEYWORDS
27
28 51: calc.at:440 Calculator --locations --yyerror-verbose
29 52: calc.at:442 Calculator --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose
30 54: calc.at:445 Calculator --debug --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose
31src/bison/tests % ./testsuite 51 -d
32## --------------------------- ##
33## GNU Bison 1.49a test suite. ##
34## --------------------------- ##
35 51: calc.at:440 ok
36## ---------------------------- ##
37## All 1 tests were successful. ##
38## ---------------------------- ##
39src/bison/tests % cd ./testsuite.dir/51
40tests/testsuite.dir/51 % echo "()" | ./calc
411.2-1.3: parse error, unexpected ')', expecting error or "number" or '-' or '('
42
43
44* read_pipe.c
45This is not portable to DOS for instance. Implement a more portable
46scheme. Sources of inspiration include GNU diff, and Free Recode.
47
bc933ef1 48
3ae2b51f
AD
49* value_components_used
50Was defined but not used: where was it coming from? It can't be to
51check if %union is used, since the user is free to $<foo>n on her
52union, doesn't she?
53
efea6231 54
2ab9a04f 55* Report
ec3bc396 56
2ab9a04f
AD
57** GLR
58How would Paul like to display the conflicted actions? In particular,
59what when two reductions are possible on a given lookahead, but one is
60part of $default. Should we make the two reductions explicit, or just
61keep $default? See the following point.
d7215705 62
2ab9a04f
AD
63** Disabled Reductions
64See `tests/conflicts.at (Defaulted Conflicted Reduction)', and decide
65what we want to do.
d7215705 66
2ab9a04f 67** Documentation
bc933ef1
AD
68Extend with error productions. The hard part will probably be finding
69the right rule so that a single state does not exhibit too many yet
70undocumented ``features''. Maybe an empty action ought to be
71presented too. Shall we try to make a single grammar with all these
72features, or should we have several very small grammars?
ec3bc396 73
2ab9a04f
AD
74** --report=conflict-path
75Provide better assistance for understanding the conflicts by providing
76a sample text exhibiting the (LALR) ambiguity. See the paper from
77DeRemer and Penello: they already provide the algorithm.
78
ec3bc396 79
2ab9a04f
AD
80* Extentions
81
82** yyerror, yysymprint interface
83It should be improved, in particular when using Bison features such as
84locations, and YYPARSE_PARAMS. For the time being, it is recommended
85to #define yyerror and yyprint to steal internal variables...
86
87** Several %unions
6cbfbcc5
AD
88I think this is a pleasant (but useless currently) feature, but in the
89future, I want a means to %include other bits of grammars, and _then_
90it will be important for the various bits to define their needs in
91%union.
76551463 92
5c0a0514
AD
93When implementing multiple-%union support, bare the following in mind:
94
95- when --yacc, this must be flagged as an error. Don't make it fatal
96 though.
97
98- The #line must now appear *inside* the definition of yystype.
99 Something like
100
101 {
102 #line 12 "foo.y"
103 int ival;
104 #line 23 "foo.y"
105 char *sval;
106 }
107
fa770c86
AD
108* Unit rules
109Maybe we could expand unit rules, i.e., transform
110
111 exp: arith | bool;
112 arith: exp '+' exp;
113 bool: exp '&' exp;
114
115into
116
117 exp: exp '+' exp | exp '&' exp;
118
119when there are no actions. This can significantly speed up some
d7215705
AD
120grammars. I can't find the papers. In particular the book `LR
121parsing: Theory and Practice' is impossible to find, but according to
122`Parsing Techniques: a Practical Guide', it includes information about
123this issue. Does anybody have it?
fa770c86 124
51dec47b 125
51dec47b 126
2ab9a04f 127* Documentation
51dec47b 128
2ab9a04f
AD
129** History/Bibliography
130Some history of Bison and some bibliography would be most welcome.
131Are there any Texinfo standards for bibliography?
132
133
134
135
136* Coding system independence
137Paul notes:
138
139 Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
140 255). It also assumes that the 8-bit character encoding is
141 the same for the invocation of 'bison' as it is for the
142 invocation of 'cc', but this is not necessarily true when
143 people run bison on an ASCII host and then use cc on an EBCDIC
144 host. I don't think these topics are worth our time
145 addressing (unless we find a gung-ho volunteer for EBCDIC or
146 PDP-10 ports :-) but they should probably be documented
147 somewhere.
fa770c86 148
fa770c86 149
aef1ffd5 150
bcb05e75
MA
151* --graph
152Show reductions. []
153
704a47c4 154* Broken options ?
c3995d99 155** %no-lines [ok]
04a76783 156** %no-parser []
fbbf9b3b 157** %pure-parser []
04a76783
MA
158** %token-table []
159** Options which could use parse_dquoted_param ().
160Maybe transfered in lex.c.
161*** %skeleton [ok]
162*** %output []
163*** %file-prefix []
164*** %name-prefix []
ec93a213 165
fbbf9b3b 166** Skeleton strategy. []
c3a8cbaa
MA
167Must we keep %no-parser?
168 %token-table?
fbbf9b3b 169*** New skeletons. []
416bd7a9 170
c111e171 171* src/print_graph.c
31b53af2 172Find the best graph parameters. []
63c2d5de
MA
173
174* doc/bison.texinfo
1a4648ff 175** Update
c3a8cbaa 176informations about ERROR_VERBOSE. []
1a4648ff 177** Add explainations about
c3a8cbaa
MA
178skeleton muscles. []
179%skeleton. []
eeeb962b 180
704a47c4 181* testsuite
c3a8cbaa
MA
182** tests/pure-parser.at []
183New tests.
0f8d586a 184
cd6a695e
AD
185* input synclines
186Some users create their foo.y files, and equip them with #line. Bison
187should recognize these, and preserve them.
0e95c1dd
AD
188
189* BTYacc
190See if we can integrate backtracking in Bison. Contact the BTYacc
191maintainers.
192
2ab9a04f
AD
193** Keeping the conflicted actions
194First, analyze the differences between byacc and btyacc (I'm referring
195to the executables). Find where the conflicts are preserved.
196
197** Compare with the GLR tables
198See how isomorphic the way BTYacc and the way the GLR adjustements in
199Bison are compatible. *As much as possible* one should try to use the
200same implementation in the Bison executables. I insist: it should be
201very feasible to use the very same conflict tables.
202
203** Adjust the skeletons
204Import the skeletons for C and C++.
205
206** Improve the skeletons
207Have them support yysymprint, yydestruct and so forth.
208
0e95c1dd
AD
209
210* Precedence
2ab9a04f
AD
211
212** Partial order
0e95c1dd
AD
213It is unfortunate that there is a total order for precedence. It
214makes it impossible to have modular precedence information. We should
2ab9a04f 215move to partial orders (sounds like series/parallel orders to me).
0e95c1dd 216
3c9160d9
AD
217This will be possible with a Bison parser for the grammar, as it will
218make it much easier to extend the grammar.
219
2ab9a04f
AD
220** Correlation b/w precedence and associativity
221Also, I fail to understand why we have to assign the same
222associativity to operators with the same precedence. For instance,
223why can't I decide that the precedence of * and / is the same, but the
224latter is nonassoc?
225
226If there is really no profound motivation, we should find a new syntax
227to allow specifying this.
228
229** RR conflicts
230See if we can use precedence between rules to solve RR conflicts. See
231what POSIX says.
232
233
69991a58
AD
234* $undefined
235From Hans:
236- If the Bison generated parser experiences an undefined number in the
237character range, that character is written out in diagnostic messages, an
238addition to the $undefined value.
239
240Suggest: Change the name $undefined to undefined; looks better in outputs.
241
2ab9a04f 242
69991a58
AD
243* Default Action
244From Hans:
245- For use with my C++ parser, I transported the "switch (yyn)" statement
246that Bison writes to the bison.simple skeleton file. This way, I can remove
247the current default rule $$ = $1 implementation, which causes a double
248assignment to $$ which may not be OK under C++, replacing it with a
249"default:" part within the switch statement.
250
251Note that the default rule $$ = $1, when typed, is perfectly OK under C,
252but in the C++ implementation I made, this rule is different from
253$<type_name>$ = $<type_name>1. I therefore think that one should implement
254a Bison option where every typed default rule is explicitly written out
255(same typed ruled can of course be grouped together).
256
3c9160d9
AD
257Note: Robert Anisko handles this. He knows how to do it.
258
2ab9a04f 259
0164db68
AD
260* Warnings
261It would be nice to have warning support. See how Autoconf handles
262them, it is fairly well described there. It would be very nice to
263implement this in such a way that other programs could use
264lib/warnings.[ch].
265
9306c70c
AD
266Don't work on this without first announcing you do, as I already have
267thought about it, and know many of the components that can be used to
268implement it.
269
2ab9a04f 270
69991a58
AD
271* Pre and post actions.
272From: Florian Krohm <florian@edamail.fishkill.ibm.com>
273Subject: YYACT_EPILOGUE
274To: bug-bison@gnu.org
275X-Sent: 1 week, 4 days, 14 hours, 38 minutes, 11 seconds ago
276
277The other day I had the need for explicitly building the parse tree. I
278used %locations for that and defined YYLLOC_DEFAULT to call a function
279that returns the tree node for the production. Easy. But I also needed
280to assign the S-attribute to the tree node. That cannot be done in
281YYLLOC_DEFAULT, because it is invoked before the action is executed.
282The way I solved this was to define a macro YYACT_EPILOGUE that would
283be invoked after the action. For reasons of symmetry I also added
284YYACT_PROLOGUE. Although I had no use for that I can envision how it
285might come in handy for debugging purposes.
76551463 286All is needed is to add
69991a58
AD
287
288#if YYLSP_NEEDED
289 YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen, yyloc, (yylsp - yylen));
290#else
291 YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen);
292#endif
293
294at the proper place to bison.simple. Ditto for YYACT_PROLOGUE.
295
296I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUE
297to bison. If you're interested, I'll work on a patch.
298
d7215705
AD
299* Move to Graphviz
300Well, VCG seems really dead. Move to Graphviz instead. Also, equip
301the parser with a means to create the (visual) parse tree.
302
f294a2c2
AD
303-----
304
305Copyright (C) 2001, 2002 Free Software Foundation, Inc.
306
976e6270 307This file is part of GNU Bison.
f294a2c2 308
976e6270 309GNU Bison is free software; you can redistribute it and/or modify
f294a2c2
AD
310it under the terms of the GNU General Public License as published by
311the Free Software Foundation; either version 2, or (at your option)
312any later version.
313
976e6270 314GNU Bison is distributed in the hope that it will be useful,
f294a2c2
AD
315but WITHOUT ANY WARRANTY; without even the implied warranty of
316MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
317GNU General Public License for more details.
318
319You should have received a copy of the GNU General Public License
976e6270 320along with Bison; see the file COPYING. If not, write to
f294a2c2
AD
321the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
322Boston, MA 02111-1307, USA.