path: root/gnuwin32/contrib/bison/2.4.1/bison-2.4.1-src/TODO
diff options
authorQt by Nokia <>2011-04-27 12:34:00 +0200
committeraxis <>2011-04-27 12:34:00 +0200
commit92351a70e0b9193a1def156a470d9156beb8528b (patch)
treebbd040ad01c7a01d13939f45ad68c7d84d21b955 /gnuwin32/contrib/bison/2.4.1/bison-2.4.1-src/TODO
Long live the qt5 Qt repository
Diffstat (limited to 'gnuwin32/contrib/bison/2.4.1/bison-2.4.1-src/TODO')
1 files changed, 309 insertions, 0 deletions
diff --git a/gnuwin32/contrib/bison/2.4.1/bison-2.4.1-src/TODO b/gnuwin32/contrib/bison/2.4.1/bison-2.4.1-src/TODO
new file mode 100644
index 00000000..b2bca354
--- /dev/null
+++ b/gnuwin32/contrib/bison/2.4.1/bison-2.4.1-src/TODO
@@ -0,0 +1,309 @@
+-*- outline -*-
+* Header guards
+From Franc,ois: should we keep the directory part in the CPP guard?
+* Yacc.c: CPP Macros
+Do some people use YYPURE, YYLSP_NEEDED like we do in the test suite?
+They should not: it is not documented. But if they need to, let's
+find something clean (not like YYLSP_NEEDED...).
+* Installation
+* Documentation
+Before releasing, make sure the documentation ("Understanding your
+parser") refers to the current `output' format.
+** vector
+Move to using vector, drop stack.hh.
+** I18n
+Catch up with yacc.c.
+* Report
+** GLR
+How would Paul like to display the conflicted actions? In particular,
+what when two reductions are possible on a given lookahead token, but one is
+part of $default. Should we make the two reductions explicit, or just
+keep $default? See the following point.
+** Disabled Reductions
+See `tests/ (Defaulted Conflicted Reduction)', and decide
+what we want to do.
+** Documentation
+Extend with error productions. The hard part will probably be finding
+the right rule so that a single state does not exhibit too many yet
+undocumented ``features''. Maybe an empty action ought to be
+presented too. Shall we try to make a single grammar with all these
+features, or should we have several very small grammars?
+** --report=conflict-path
+Provide better assistance for understanding the conflicts by providing
+a sample text exhibiting the (LALR) ambiguity. See the paper from
+DeRemer and Penello: they already provide the algorithm.
+** Statically check for potential ambiguities in GLR grammars. See
+<> for an approach.
+* Extensions
+** Labeling the symbols
+Have a look at the Lemon parser generator: instead of $1, $2 etc. they
+can name the values. This is much more pleasant. For instance:
+ exp (res): exp (a) '+' exp (b) { $res = $a + $b; };
+I love this. I have been bitten too often by the removal of the
+symbol, and forgetting to shift all the $n to $n-1. If you are
+unlucky, it compiles...
+But instead of using $a etc., we can use regular variables. And
+instead of using (), I propose to use `:' (again). Paul suggests
+supporting `->' in addition to `:' to separate LHS and RHS. In other
+ r:exp -> a:exp '+' b:exp { r = a + b; };
+That requires an significant improvement of the grammar parser. Using
+GLR would be nice. It also requires that Bison know the type of the
+symbols (which will be useful for %include anyway). So we have some
+time before...
+Note that there remains the problem of locations: `@r'?
+** $-1
+We should find a means to provide an access to values deep in the
+stack. For instance, instead of
+ baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }
+we should be able to have:
+ foo($foo) bar($bar) baz($bar): qux($qux) { $baz = $foo + $bar + $qux; }
+Or something like this.
+** %if and the like
+It should be possible to have %if/%else/%endif. The implementation is
+not clear: should it be lexical or syntactic. Vadim Maslow thinks it
+must be in the scanner: we must not parse what is in a switched off
+part of %if. Akim Demaille thinks it should be in the parser, so as
+to avoid falling into another CPP mistake.
+** -D, --define-muscle NAME=VALUE
+To define muscles via cli. Or maybe support directly NAME=VALUE?
+** XML Output
+There are couple of available extensions of Bison targeting some XML
+output. Some day we should consider including them. One issue is
+that they seem to be quite orthogonal to the parsing technique, and
+seem to depend mostly on the possibility to have some code triggered
+for each reduction. As a matter of fact, such hooks could also be
+used to generate the yydebug traces. Some generic scheme probably
+exists in there.
+XML output for GNU Bison and gcc
+XML output for GNU Bison
+* Unit rules
+Maybe we could expand unit rules, i.e., transform
+ exp: arith | bool;
+ arith: exp '+' exp;
+ bool: exp '&' exp;
+ exp: exp '+' exp | exp '&' exp;
+when there are no actions. This can significantly speed up some
+grammars. I can't find the papers. In particular the book `LR
+parsing: Theory and Practice' is impossible to find, but according to
+`Parsing Techniques: a Practical Guide', it includes information about
+this issue. Does anybody have it?
+* Documentation
+** History/Bibliography
+Some history of Bison and some bibliography would be most welcome.
+Are there any Texinfo standards for bibliography?
+* Java, Fortran, etc.
+* Coding system independence
+Paul notes:
+ Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is
+ 255). It also assumes that the 8-bit character encoding is
+ the same for the invocation of 'bison' as it is for the
+ invocation of 'cc', but this is not necessarily true when
+ people run bison on an ASCII host and then use cc on an EBCDIC
+ host. I don't think these topics are worth our time
+ addressing (unless we find a gung-ho volunteer for EBCDIC or
+ PDP-10 ports :-) but they should probably be documented
+ somewhere.
+ More importantly, Bison does not currently allow NUL bytes in
+ tokens, either via escapes (e.g., "x\0y") or via a NUL byte in
+ the source code. This should get fixed.
+* --graph
+Show reductions.
+* Broken options ?
+** %token-table
+** Skeleton strategy
+Must we keep %token-table?
+* src/print_graph.c
+Find the best graph parameters.
+* BTYacc
+See if we can integrate backtracking in Bison. Charles-Henri de
+Boysson <> is working on this, and already has some
+results. Vadim Maslow, the maintainer of BTYacc was contacted, and we
+stay in touch with him. Adjusting the Bison grammar parser will be
+needed to support some extra BTYacc features. This is less urgent.
+** Keeping the conflicted actions
+First, analyze the differences between byacc and btyacc (I'm referring
+to the executables). Find where the conflicts are preserved.
+** Compare with the GLR tables
+See how isomorphic the way BTYacc and the way the GLR adjustments in
+Bison are compatible. *As much as possible* one should try to use the
+same implementation in the Bison executables. I insist: it should be
+very feasible to use the very same conflict tables.
+** Adjust the skeletons
+Import the skeletons for C and C++.
+** Improve the skeletons
+Have them support yysymprint, yydestruct and so forth.
+* Precedence
+** Partial order
+It is unfortunate that there is a total order for precedence. It
+makes it impossible to have modular precedence information. We should
+move to partial orders (sounds like series/parallel orders to me).
+** Correlation b/w precedence and associativity
+Also, I fail to understand why we have to assign the same
+associativity to operators with the same precedence. For instance,
+why can't I decide that the precedence of * and / is the same, but the
+latter is nonassoc?
+If there is really no profound motivation, we should find a new syntax
+to allow specifying this.
+** RR conflicts
+See if we can use precedence between rules to solve RR conflicts. See
+what POSIX says.
+* $undefined
+From Hans:
+- If the Bison generated parser experiences an undefined number in the
+character range, that character is written out in diagnostic messages, an
+addition to the $undefined value.
+Suggest: Change the name $undefined to undefined; looks better in outputs.
+* Default Action
+From Hans:
+- For use with my C++ parser, I transported the "switch (yyn)" statement
+that Bison writes to the bison.simple skeleton file. This way, I can remove
+the current default rule $$ = $1 implementation, which causes a double
+assignment to $$ which may not be OK under C++, replacing it with a
+"default:" part within the switch statement.
+Note that the default rule $$ = $1, when typed, is perfectly OK under C,
+but in the C++ implementation I made, this rule is different from
+$<type_name>$ = $<type_name>1. I therefore think that one should implement
+a Bison option where every typed default rule is explicitly written out
+(same typed ruled can of course be grouped together).
+Note: Robert Anisko handles this. He knows how to do it.
+* Warnings
+It would be nice to have warning support. See how Autoconf handles
+them, it is fairly well described there. It would be very nice to
+implement this in such a way that other programs could use
+Don't work on this without first announcing you do, as I already have
+thought about it, and know many of the components that can be used to
+implement it.
+* Pre and post actions.
+From: Florian Krohm <>
+X-Sent: 1 week, 4 days, 14 hours, 38 minutes, 11 seconds ago
+The other day I had the need for explicitly building the parse tree. I
+used %locations for that and defined YYLLOC_DEFAULT to call a function
+that returns the tree node for the production. Easy. But I also needed
+to assign the S-attribute to the tree node. That cannot be done in
+YYLLOC_DEFAULT, because it is invoked before the action is executed.
+The way I solved this was to define a macro YYACT_EPILOGUE that would
+be invoked after the action. For reasons of symmetry I also added
+YYACT_PROLOGUE. Although I had no use for that I can envision how it
+might come in handy for debugging purposes.
+All is needed is to add
+ YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen, yyloc, (yylsp - yylen));
+ YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen);
+at the proper place to bison.simple. Ditto for YYACT_PROLOGUE.
+I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUE
+to bison. If you're interested, I'll work on a patch.
+* Better graphics
+Equip the parser with a means to create the (visual) parse tree.
+Copyright (C) 2001, 2002, 2003, 2004, 2006 Free Software Foundation,
+This file is part of Bison, the GNU Compiler Compiler.
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <>.