* configure.in (AC_INIT): Bump to 1.49b.
[bison.git] / TODO
diff --git a/TODO b/TODO
index fd0d4f7084e19c4672d0e771b0dd330ecda6ee68..a6b677f62edf4fa48476d0677ecf152308c7e7c1 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,49 +1,51 @@
 -*- outline -*-
 
 
-* URGENT: Prologue
-The %union is declared after the user C declarations. It can be
-a problem if YYSTYPE is declared after the user part.
-
-Actually, the real problem seems that the %union ought to be output
-where it was defined.  For instance, in gettext/intl/plural.y, we
-have:
-
-       %{
-       ...
-       #include "gettextP.h"
-       ...
-       %}
-
-       %union {
-         unsigned long int num;
-         enum operator op;
-         struct expression *exp;
+* Several %unions
+I think this is a pleasant (but useless currently) feature, but in the
+future, I want a means to %include other bits of grammars, and _then_
+it will be important for the various bits to define their needs in
+%union.
+
+When implementing multiple-%union support, bare the following in mind:
+
+- when --yacc, this must be flagged as an error.  Don't make it fatal
+  though.
+
+- The #line must now appear *inside* the definition of yystype.
+  Something like
+
+       {
+       #line 12 "foo.y"
+         int ival;
+       #line 23 "foo.y"
+         char *sval;
        }
 
-       %{
-       ...
-       static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
-       ...
-       %}
+* Language independent actions
+
+Currently bison, the generator, transforms $1, $$ and so forth into
+direct C code, manipulating the stacks.  This is problematic, because
+(i) it means that if we want more languages, we need to update the
+generator, and (ii), it forces names everywhere (e.g., the C++
+skeleton would be happy to use other naming schemes, and actually,
+even other accessing schemes).
+
+Therefore we want
 
-Where the first part defines struct expression, the second uses it to
-define YYSTYPE, and the last uses YYSTYPE.  Only this order is valid.
+1. the generator to replace $1, etc. by M4 macro invocations
+   (b4_dollar(1), b4_at(3), b4_dollar_dollar) etc.
 
-Note that we have the same problem with GCC.
+2. the skeletons to define these macros.
 
-I suggest splitting the prologue into pre-prologue and post-prologue.
-The reason is that:
+But currently the actions are double-quoted, to protect them from M4
+evaluation.  So we need to:
 
-1. we keep language independance as it is the skeleton that joins the
-two prologues (there is no need for the engine to encode union yystype
-and to output it inside the prologue, which breaks the language
-independance of the generator)
+3. stop quoting them
 
-2. that makes it possible to have several %union in input.  I think
-this is a pleasant (but useless currently) feature, but in the future,
-I want a means to %include other bits of grammars, and _then_ it will
-be important for the various bits to define their needs in %union.
+4. change the [ and ] in the actions into @<:@ and @:>@
+
+5. extend the postprocessor to maps these back onto [ and ].
 
 * Coding system independence
 Paul notes:
@@ -78,16 +80,6 @@ Paul suggests:
    #define BAR 257
    ...
 
-> I'm in favor of
->
-> %token FOO 256
-> %token BAR 257
->
-> and Bison moves error into 258.
-
-Yes, I think that's a valid extension too, if the user doesn't define
-the token number for error.
-
 * Output directory
 Akim: