]> git.saurik.com Git - bison.git/blame_incremental - TODO
More.
[bison.git] / TODO
... / ...
CommitLineData
1-*- outline -*-
2
3* Coding system independence
4Paul notes:
5
6 Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
7 255). It also assumes that the 8-bit character encoding is
8 the same for the invocation of 'bison' as it is for the
9 invocation of 'cc', but this is not necessarily true when
10 people run bison on an ASCII host and then use cc on an EBCDIC
11 host. I don't think these topics are worth our time
12 addressing (unless we find a gung-ho volunteer for EBCDIC or
13 PDP-10 ports :-) but they should probably be documented
14 somewhere.
15
16* Using enums instead of int for tokens.
17Paul suggests:
18
19 #ifndef YYTOKENTYPE
20 # if defined (__STDC__) || defined (__cplusplus)
21 /* Put the tokens into the symbol table, so that GDB and other debuggers
22 know about them. */
23 enum yytokentype {
24 FOO = 256,
25 BAR,
26 ...
27 };
28 /* POSIX requires `int' for tokens in interfaces. */
29 # define YYTOKENTYPE int
30 # endif
31 #endif
32 #define FOO 256
33 #define BAR 257
34 ...
35
36> I'm in favor of
37>
38> %token FOO 256
39> %token BAR 257
40>
41> and Bison moves error into 258.
42
43Yes, I think that's a valid extension too, if the user doesn't define
44the token number for error.
45
46* Output directory
47Akim:
48
49| I consider this to be a bug in bison:
50|
51| /tmp % mkdir src
52| /tmp % cp ~/src/bison/tests/calc.y src
53| /tmp % mkdir build && cd build
54| /tmp/build % bison ../src/calc.y
55| /tmp/build % cd ..
56| /tmp % ls -l build src
57| build:
58| total 0
59|
60| src:
61| total 32
62| -rw-r--r-- 1 akim lrde 27553 oct 2 16:31 calc.tab.c
63| -rw-r--r-- 1 akim lrde 3335 oct 2 16:31 calc.y
64|
65|
66| Would it be safe to change this behavior to something more reasonable?
67| Do you think some people depend upon this?
68
69Jim:
70
71Is it that behavior documented?
72If so, then it's probably not reasonable to change it.
73I've Cc'd the automake list, because some of automake's
74rules use bison through $(YACC) -- though I'll bet they
75all use it in yacc-compatible mode.
76
77Pavel:
78
79Hello, Jim and others!
80
81> Is it that behavior documented?
82> If so, then it's probably not reasonable to change it.
83> I've Cc'd the automake list, because some of automake's
84> rules use bison through $(YACC) -- though I'll bet they
85> all use it in yacc-compatible mode.
86
87Yes, Automake currently used bison in Automake-compatible mode, but it
88would be fair for Automake to switch to the native mode as long as the
89processed files are distributed and "missing" emulates bison.
90
91In any case, the makefiles should specify the output file explicitly
92instead of relying on weird defaults.
93
94> | src:
95> | total 32
96> | -rw-r--r-- 1 akim lrde 27553 oct 2 16:31 calc.tab.c
97> | -rw-r--r-- 1 akim lrde 3335 oct 2 16:31 calc.y
98
99This is not _that_ ugly as it seems - with Automake you want to put
100sources where they belong - to the source directory.
101
102> | This is not _that_ ugly as it seems - with Automake you want to put
103> | sources where they belong - to the source directory.
104>
105> The difference source/build you are referring to is based on Automake
106> concepts. They have no sense at all for tools such as bison or gcc
107> etc. They have input and output. I do not want them to try to grasp
108> source/build. I want them to behave uniformly: output *here*.
109
110I realize that.
111
112It's unfortunate that the native mode of Bison behaves in a less uniform
113way than the yacc mode. I agree with your point. Bison maintainters may
114want to fix it along with the documentation.
115
116
117* Unit rules
118Maybe we could expand unit rules, i.e., transform
119
120 exp: arith | bool;
121 arith: exp '+' exp;
122 bool: exp '&' exp;
123
124into
125
126 exp: exp '+' exp | exp '&' exp;
127
128when there are no actions. This can significantly speed up some
129grammars.
130
131* Stupid error messages
132An example shows it easily:
133
134src/bison/tests % ./testsuite -k calc,location,error-verbose -l
135GNU Bison 1.49a test suite test groups:
136
137 NUM: FILENAME:LINE TEST-GROUP-NAME
138 KEYWORDS
139
140 51: calc.at:440 Calculator --locations --yyerror-verbose
141 52: calc.at:442 Calculator --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose
142 54: calc.at:445 Calculator --debug --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose
143src/bison/tests % ./testsuite 51 -d
144## --------------------------- ##
145## GNU Bison 1.49a test suite. ##
146## --------------------------- ##
147 51: calc.at:440 ok
148## ---------------------------- ##
149## All 1 tests were successful. ##
150## ---------------------------- ##
151src/bison/tests % cd ./testsuite.dir/51
152tests/testsuite.dir/51 % echo "()" | ./calc
1531.2-1.3: parse error, unexpected ')', expecting error or "number" or '-' or '('
154
155* read_pipe.c
156This is not portable to DOS for instance. Implement a more portable
157scheme. Sources of inspiration include GNU diff, and Free Recode.
158
159* Memory leaks in the generator
160A round of memory leak clean ups would be most welcome. Dmalloc,
161Checker GCC, Electric Fence, or Valgrind: you chose your tool.
162
163* Memory leaks in the parser
164The same applies to the generated parsers. In particular, this is
165critical for user data: when aborting a parsing, when handling the
166error token etc., we often throw away yylval without giving a chance
167of cleaning it up to the user.
168
169* NEWS
170Sort from 1.31 NEWS.
171
172* Prologue
173The %union is declared after the user C declarations. It can be
174a problem if YYSTYPE is declared after the user part. []
175
176Actually, the real problem seems that the %union ought to be output
177where it was defined. For instance, in gettext/intl/plural.y, we
178have:
179
180 %{
181 ...
182 #include "gettextP.h"
183 ...
184 %}
185
186 %union {
187 unsigned long int num;
188 enum operator op;
189 struct expression *exp;
190 }
191
192 %{
193 ...
194 static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
195 ...
196 %}
197
198Where the first part defines struct expression, the second uses it to
199define YYSTYPE, and the last uses YYSTYPE. Only this order is valid.
200
201* --graph
202Show reductions. []
203
204* Broken options ?
205** %no-lines [ok]
206** %no-parser []
207** %pure-parser []
208** %semantic-parser []
209** %token-table []
210** Options which could use parse_dquoted_param ().
211Maybe transfered in lex.c.
212*** %skeleton [ok]
213*** %output []
214*** %file-prefix []
215*** %name-prefix []
216
217** Skeleton strategy. []
218Must we keep %no-parser?
219 %token-table?
220*** New skeletons. []
221
222* src/print_graph.c
223Find the best graph parameters. []
224
225* doc/bison.texinfo
226** Update
227informations about ERROR_VERBOSE. []
228** Add explainations about
229skeleton muscles. []
230%skeleton. []
231
232* testsuite
233** tests/pure-parser.at []
234New tests.
235
236* Debugging parsers
237
238From Greg McGary:
239
240akim demaille <akim.demaille@epita.fr> writes:
241
242> With great pleasure! Nonetheless, things which are debatable
243> (or not, but just `big') should be discuss in `public': something
244> like help- or bug-bison@gnu.org is just fine. Jesse and I are there,
245> but there is also Jim and some other people.
246
247I have no idea whether it qualifies as big or controversial, so I'll
248just summarize for you. I proposed this change years ago and was
249surprised that it was met with utter indifference!
250
251This debug feature is for the programs/grammars one develops with
252bison, not for debugging bison itself. I find that the YYDEBUG
253output comes in a very inconvenient format for my purposes.
254When debugging gcc, for instance, what I want is to see a trace of
255the sequence of reductions and the line#s for the semantic actions
256so I can follow what's happening. Single-step in gdb doesn't cut it
257because to move from one semantic action to the next takes you through
258lots of internal machinery of the parser, which is uninteresting.
259
260The change I made was to the format of the debug output, so that it
261comes out in the format of C error messages, digestible by emacs
262compile mode, like so:
263
264grammar.y:1234: foo: bar(0x123456) baz(0x345678)
265
266where "foo: bar baz" is the reduction rule, whose semantic action
267appears on line 1234 of the bison grammar file grammar.y. The hex
268numbers on the rhs tokens are the parse-stack values associated with
269those tokens. Of course, yytype might be something totally
270incompatible with that representation, but for the most part, yytype
271values are single words (scalars or pointers). In the case of gcc,
272they're most often pointers to tree nodes. Come to think of it, the
273right thing to do is to make the printing of stack values be
274user-definable. It would also be useful to include the filename &
275line# of the file being parsed, but the main filename & line# should
276continue to be that of grammar.y
277
278Anyway, this feature has saved my life on numerous occasions. The way
279I customarily use it is to first run bison with the traces on, isolate
280the sequence of reductions that interests me, put those traces in a
281buffer and force it into compile-mode, then visit each of those lines
282in the grammar and set breakpoints with C-x SPACE. Then, I can run
283again under the control of gdb and stop at each semantic action.
284With the hex addresses of tree nodes, I can inspect the values
285associated with any rhs token.
286
287You like?
288
289* input synclines
290Some users create their foo.y files, and equip them with #line. Bison
291should recognize these, and preserve them.
292
293* BTYacc
294See if we can integrate backtracking in Bison. Contact the BTYacc
295maintainers.
296
297* Automaton report
298Display more clearly the lookaheads for each item.
299
300* RR conflicts
301See if we can use precedence between rules to solve RR conflicts. See
302what POSIX says.
303
304* Precedence
305It is unfortunate that there is a total order for precedence. It
306makes it impossible to have modular precedence information. We should
307move to partial orders.
308
309* Parsing grammars
310Rewrite the reader in Bison.
311
312-----
313
314Copyright (C) 2001, 2002 Free Software Foundation, Inc.
315
316This file is part of GNU Autoconf.
317
318GNU Autoconf is free software; you can redistribute it and/or modify
319it under the terms of the GNU General Public License as published by
320the Free Software Foundation; either version 2, or (at your option)
321any later version.
322
323GNU Autoconf is distributed in the hope that it will be useful,
324but WITHOUT ANY WARRANTY; without even the implied warranty of
325MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
326GNU General Public License for more details.
327
328You should have received a copy of the GNU General Public License
329along with autoconf; see the file COPYING. If not, write to
330the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
331Boston, MA 02111-1307, USA.