4 I think this is a pleasant (but useless currently) feature, but in the
 
   5 future, I want a means to %include other bits of grammars, and _then_
 
   6 it will be important for the various bits to define their needs in
 
   9 When implementing multiple-%union support, bare the following in mind:
 
  11 - when --yacc, this must be flagged as an error.  Don't make it fatal
 
  14 - The #line must now appear *inside* the definition of yystype.
 
  24 * Coding system independence
 
  27         Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
 
  28         255).  It also assumes that the 8-bit character encoding is
 
  29         the same for the invocation of 'bison' as it is for the
 
  30         invocation of 'cc', but this is not necessarily true when
 
  31         people run bison on an ASCII host and then use cc on an EBCDIC
 
  32         host.  I don't think these topics are worth our time
 
  33         addressing (unless we find a gung-ho volunteer for EBCDIC or
 
  34         PDP-10 ports :-) but they should probably be documented
 
  37 * Using enums instead of int for tokens.
 
  41    # if defined (__STDC__) || defined (__cplusplus)
 
  42       /* Put the tokens into the symbol table, so that GDB and other debuggers
 
  49       /* POSIX requires `int' for tokens in interfaces.  */
 
  50    #  define YYTOKENTYPE int
 
  60 | I consider this to be a bug in bison:
 
  63 | /tmp % cp ~/src/bison/tests/calc.y src
 
  64 | /tmp % mkdir build && cd build
 
  65 | /tmp/build % bison ../src/calc.y
 
  67 | /tmp % ls -l build src
 
  73 | -rw-r--r--    1 akim     lrde        27553 oct  2 16:31 calc.tab.c
 
  74 | -rw-r--r--    1 akim     lrde         3335 oct  2 16:31 calc.y
 
  77 | Would it be safe to change this behavior to something more reasonable?
 
  78 | Do you think some people depend upon this?
 
  82 Is it that behavior documented?
 
  83 If so, then it's probably not reasonable to change it.
 
  84 I've Cc'd the automake list, because some of automake's
 
  85 rules use bison through $(YACC) -- though I'll bet they
 
  86 all use it in yacc-compatible mode.
 
  90 Hello, Jim and others!
 
  92 > Is it that behavior documented?
 
  93 > If so, then it's probably not reasonable to change it.
 
  94 > I've Cc'd the automake list, because some of automake's
 
  95 > rules use bison through $(YACC) -- though I'll bet they
 
  96 > all use it in yacc-compatible mode.
 
  98 Yes, Automake currently used bison in Automake-compatible mode, but it
 
  99 would be fair for Automake to switch to the native mode as long as the
 
 100 processed files are distributed and "missing" emulates bison.
 
 102 In any case, the makefiles should specify the output file explicitly
 
 103 instead of relying on weird defaults.
 
 107 > | -rw-r--r--    1 akim     lrde        27553 oct  2 16:31 calc.tab.c
 
 108 > | -rw-r--r--    1 akim     lrde         3335 oct  2 16:31 calc.y
 
 110 This is not _that_ ugly as it seems - with Automake you want to put
 
 111 sources where they belong - to the source directory.
 
 113 > | This is not _that_ ugly as it seems - with Automake you want to put
 
 114 > | sources where they belong - to the source directory.
 
 116 > The difference source/build you are referring to is based on Automake
 
 117 > concepts.  They have no sense at all for tools such as bison or gcc
 
 118 > etc.  They have input and output.  I do not want them to try to grasp
 
 119 > source/build.  I want them to behave uniformly: output *here*.
 
 123 It's unfortunate that the native mode of Bison behaves in a less uniform
 
 124 way than the yacc mode. I agree with your point. Bison maintainters may
 
 125 want to fix it along with the documentation.
 
 129 Maybe we could expand unit rules, i.e., transform
 
 137         exp: exp '+' exp | exp '&' exp;
 
 139 when there are no actions.  This can significantly speed up some
 
 142 * Stupid error messages
 
 143 An example shows it easily:
 
 145 src/bison/tests % ./testsuite -k calc,location,error-verbose -l
 
 146 GNU Bison 1.49a test suite test groups:
 
 148  NUM: FILENAME:LINE      TEST-GROUP-NAME
 
 151   51: calc.at:440        Calculator --locations --yyerror-verbose
 
 152   52: calc.at:442        Calculator --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose
 
 153   54: calc.at:445        Calculator --debug --defines --locations --name-prefix=calc --verbose --yacc --yyerror-verbose
 
 154 src/bison/tests % ./testsuite 51 -d
 
 155 ## --------------------------- ##
 
 156 ## GNU Bison 1.49a test suite. ##
 
 157 ## --------------------------- ##
 
 159 ## ---------------------------- ##
 
 160 ## All 1 tests were successful. ##
 
 161 ## ---------------------------- ##
 
 162 src/bison/tests % cd ./testsuite.dir/51
 
 163 tests/testsuite.dir/51 % echo "()" | ./calc
 
 164 1.2-1.3: parse error, unexpected ')', expecting error or "number" or '-' or '('
 
 166 * yyerror, yyprint interface
 
 167 It should be improved, in particular when using Bison features such as
 
 168 locations, and YYPARSE_PARAMS.  For the time being, it is recommended
 
 169 to #define yyerror and yyprint to steal internal variables...
 
 172 This is not portable to DOS for instance.  Implement a more portable
 
 173 scheme.  Sources of inspiration include GNU diff, and Free Recode.
 
 175 * Memory leaks in the generator
 
 176 A round of memory leak clean ups would be most welcome.  Dmalloc,
 
 177 Checker GCC, Electric Fence, or Valgrind: you chose your tool.
 
 179 * Memory leaks in the parser
 
 180 The same applies to the generated parsers.  In particular, this is
 
 181 critical for user data: when aborting a parsing, when handling the
 
 182 error token etc., we often throw away yylval without giving a chance
 
 183 of cleaning it up to the user.
 
 193 ** Options which could use parse_dquoted_param ().
 
 194 Maybe transfered in lex.c.
 
 200 ** Skeleton strategy.   []
 
 201 Must we keep %no-parser?
 
 203 *** New skeletons.      []
 
 206 Find the best graph parameters. []
 
 210 informations about ERROR_VERBOSE.       []
 
 211 ** Add explainations about
 
 216 ** tests/pure-parser.at []
 
 223 akim demaille <akim.demaille@epita.fr> writes:
 
 225 > With great pleasure!  Nonetheless, things which are debatable
 
 226 > (or not, but just `big') should be discuss in `public': something
 
 227 > like help- or bug-bison@gnu.org is just fine.  Jesse and I are there,
 
 228 > but there is also Jim and some other people.
 
 230 I have no idea whether it qualifies as big or controversial, so I'll
 
 231 just summarize for you.  I proposed this change years ago and was
 
 232 surprised that it was met with utter indifference!
 
 234 This debug feature is for the programs/grammars one develops with
 
 235 bison, not for debugging bison itself.  I find that the YYDEBUG
 
 236 output comes in a very inconvenient format for my purposes.
 
 237 When debugging gcc, for instance, what I want is to see a trace of
 
 238 the sequence of reductions and the line#s for the semantic actions
 
 239 so I can follow what's happening.  Single-step in gdb doesn't cut it
 
 240 because to move from one semantic action to the next takes you through
 
 241 lots of internal machinery of the parser, which is uninteresting.
 
 243 The change I made was to the format of the debug output, so that it
 
 244 comes out in the format of C error messages, digestible by emacs
 
 245 compile mode, like so:
 
 247 grammar.y:1234: foo: bar(0x123456) baz(0x345678)
 
 249 where "foo: bar baz" is the reduction rule, whose semantic action
 
 250 appears on line 1234 of the bison grammar file grammar.y.  The hex
 
 251 numbers on the rhs tokens are the parse-stack values associated with
 
 252 those tokens.  Of course, yytype might be something totally
 
 253 incompatible with that representation, but for the most part, yytype
 
 254 values are single words (scalars or pointers).  In the case of gcc,
 
 255 they're most often pointers to tree nodes.  Come to think of it, the
 
 256 right thing to do is to make the printing of stack values be
 
 257 user-definable.  It would also be useful to include the filename &
 
 258 line# of the file being parsed, but the main filename & line# should
 
 259 continue to be that of grammar.y
 
 261 Anyway, this feature has saved my life on numerous occasions.  The way
 
 262 I customarily use it is to first run bison with the traces on, isolate
 
 263 the sequence of reductions that interests me, put those traces in a
 
 264 buffer and force it into compile-mode, then visit each of those lines
 
 265 in the grammar and set breakpoints with C-x SPACE.  Then, I can run
 
 266 again under the control of gdb and stop at each semantic action.
 
 267 With the hex addresses of tree nodes, I can inspect the values
 
 268 associated with any rhs token.
 
 273 Some users create their foo.y files, and equip them with #line.  Bison
 
 274 should recognize these, and preserve them.
 
 277 See if we can integrate backtracking in Bison.  Contact the BTYacc
 
 281 Display more clearly the lookaheads for each item.
 
 284 See if we can use precedence between rules to solve RR conflicts.  See
 
 288 It is unfortunate that there is a total order for precedence.  It
 
 289 makes it impossible to have modular precedence information.  We should
 
 290 move to partial orders.
 
 293 Rewrite the reader in Bison.
 
 295 * Problems with aliases
 
 296 From: "Baum, Nathan I" <s0009525@chelt.ac.uk>
 
 297 Subject: Token Alias Bug
 
 298 To: "'bug-bison@gnu.org'" <bug-bison@gnu.org>
 
 300 I've noticed a bug in bison. Sadly, our eternally wise sysadmins won't let
 
 301 us use CVS, so I can't find out if it's been fixed already...
 
 303 Basically, I made a program (in flex) that went through a .y file looking
 
 304 for "..."-tokens, and then outputed a %token
 
 305 line for it. For single-character ""-tokens, I reasoned, I could just use
 
 306 [%token 'A' "A"]. However, this causes Bison to output a [#define 'A' 65],
 
 307 which cppp chokes on, not unreasonably. (And even if cppp didn't choke, I
 
 308 obviously wouldn't want (char)'A' to be replaced with (int)65 throughout my
 
 311 Bison normally forgoes outputing a #define for a character token. However,
 
 312 it always outputs an aliased token -- even if the token is an alias for a
 
 313 character token. We don't want that. The problem is in /output.c/, as I
 
 314 recall. When it outputs the token definitions, it checks for a character
 
 315 token, and then checks for an alias token. If the character token check is
 
 316 placed after the alias check, then it works correctly.
 
 318 Alias tokens seem to be something of a kludge. What about an [%alias "..."]
 
 323 Hmm. I can't help thinking... What about a --generate-lex option that
 
 324 creates an .l file for the alias tokens used... (Or an option to make a
 
 327 * Presentation of the report file
 
 328 From: "Baum, Nathan I" <s0009525@chelt.ac.uk>
 
 329 Subject: Token Alias Bug
 
 330 To: "'bug-bison@gnu.org'" <bug-bison@gnu.org>
 
 332 I've also noticed something, that whilst not *wrong*, is inconvienient: I
 
 333 use the verbose mode to help find the causes of unresolved shift/reduce
 
 334 conflicts. However, this mode insists on starting the .output file with a
 
 335 list of *resolved* conflicts, something I find quite useless. Might it be
 
 336 possible to define a -v mode, and a -vv mode -- Where the -vv mode shows
 
 337 everything, but the -v mode only tells you what you need for examining
 
 338 conflicts? (Or, perhaps, a "*** This state has N conflicts ***" marker above
 
 339 each state with conflicts.)
 
 344 - If the Bison generated parser experiences an undefined number in the
 
 345 character range, that character is written out in diagnostic messages, an
 
 346 addition to the $undefined value.
 
 348 Suggest: Change the name $undefined to undefined; looks better in outputs.
 
 352 - For use with my C++ parser, I transported the "switch (yyn)" statement
 
 353 that Bison writes to the bison.simple skeleton file. This way, I can remove
 
 354 the current default rule $$ = $1 implementation, which causes a double
 
 355 assignment to $$ which may not be OK under C++, replacing it with a
 
 356 "default:" part within the switch statement.
 
 358 Note that the default rule $$ = $1, when typed, is perfectly OK under C,
 
 359 but in the C++ implementation I made, this rule is different from
 
 360 $<type_name>$ = $<type_name>1. I therefore think that one should implement
 
 361 a Bison option where every typed default rule is explicitly written out
 
 362 (same typed ruled can of course be grouped together).
 
 364 * Pre and post actions.
 
 365 From: Florian Krohm <florian@edamail.fishkill.ibm.com>
 
 366 Subject: YYACT_EPILOGUE
 
 367 To: bug-bison@gnu.org
 
 368 X-Sent: 1 week, 4 days, 14 hours, 38 minutes, 11 seconds ago
 
 370 The other day I had the need for explicitly building the parse tree. I
 
 371 used %locations for that and defined YYLLOC_DEFAULT to call a function
 
 372 that returns the tree node for the production. Easy. But I also needed
 
 373 to assign the S-attribute to the tree node. That cannot be done in
 
 374 YYLLOC_DEFAULT, because it is invoked before the action is executed.
 
 375 The way I solved this was to define a macro YYACT_EPILOGUE that would
 
 376 be invoked after the action. For reasons of symmetry I also added
 
 377 YYACT_PROLOGUE. Although I had no use for that I can envision how it
 
 378 might come in handy for debugging purposes.
 
 379 All is needed is to add
 
 382     YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen, yyloc, (yylsp - yylen));
 
 384     YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen);
 
 387 at the proper place to bison.simple. Ditto for YYACT_PROLOGUE.
 
 389 I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUE
 
 390 to bison. If you're interested, I'll work on a patch.
 
 394 Copyright (C) 2001, 2002 Free Software Foundation, Inc.
 
 396 This file is part of GNU Autoconf.
 
 398 GNU Autoconf is free software; you can redistribute it and/or modify
 
 399 it under the terms of the GNU General Public License as published by
 
 400 the Free Software Foundation; either version 2, or (at your option)
 
 403 GNU Autoconf is distributed in the hope that it will be useful,
 
 404 but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 405 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
 406 GNU General Public License for more details.
 
 408 You should have received a copy of the GNU General Public License
 
 409 along with autoconf; see the file COPYING.  If not, write to
 
 410 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 
 411 Boston, MA 02111-1307, USA.