* Short term
+** Laxism in Bison invocation arguments:
+The flag_argmatch functions were meant to be generic. The introduction of
+-Werror= in generic code is a bit troublesome, and generates weird
+behaviour. Because seeing "error=" causes Bison to match the subsequent
+categories with a generic procedure, but on a very specific variable, the
+following commands are legal, and equivalent:
+
+$ bison -Werror=yacc # OK
+$ bison --warnings=error=yacc # err, looks very weird?
+$ bison -rerror=itemsets # this value of 'report' enum has a value
+ # of '1 << 1', just like Wyacc
+$ bison --report=error=itemsets # (same)
+$ bison -ferror=caret # (same)
+$ bison --feature=error=caret # (same)
+
+Basically, writing -rerror={THINGS} or -ferror={FEATURE} is not prohibited,
+and results in UB.
+
+I don't think there is any reason for the user to expect anything out of
+these options (this implementation-driven behavior is not documented of
+course, as it isn't exactly a feature), so this bug isn't critical but
+should be addressed some day nonetheless.
+
** Graphviz display code thoughts
The code for the --graph option is over two files: print_graph, and
-graphviz. I believe this is because Bison used to also produce VCG graphs,
-but since this is no longer true, maybe we could consider these files for
-fusion.
+graphviz. This is because Bison used to also produce VCG graphs, but since
+this is no longer true, maybe we could consider these files for fusion.
+
+An other consideration worth noting is that print_graph.c (correct me if I
+am wrong) should contain generic functions, whereas graphviz.c and other
+potential files should contain just the specific code for that output
+format. It will probably prove difficult to tell if the implementation is
+actually generic whilst only having support for a single format, but it
+would be nice to keep stuff a bit tidier: right now, the construction of the
+bitset used to show reductions is in the graphviz-specific code, and on the
+opposite side we have some use of \l, which is graphviz-specific, in what
+should be generic code.
-Little effort factoring seems to have been given to factoring in these files,
-and their print-xml and print counterpart. We would very much like to re-use
-the pretty format of states from .output in the .dot
+Little effort seems to have been given to factoring these files and their
+rint{,-xml} counterpart. We would very much like to re-use the pretty format
+of states from .output for the graphs, etc.
-Also, the underscore in print_graph.[ch] isn't very fitting considering
-the dashes in the other filenames.
+Also, the underscore in print_graph.[ch] isn't very fitting considering the
+dashes in the other filenames.
+
+Since graphviz dies on medium-to-big grammars, maybe consider an other tool?
** push-parser
Check it too when checking the different kinds of parsers. And be
the code harder to follow, and uselessly different from the other
skeletons.
-** Variable names.
-What should we name `variant' and `lex_symbol'?
-
** Get rid of fake #lines [Bison: ...]
Possibly as simple as checking whether the column number is nonnegative.
** Rename LR0.cc
as lr0.cc, why upper case?
-** bench several bisons.
-Enhance bench.pl with %b to run different bisons.
-
* Various
** YYERRCODE
Defined to 256, but not used, not documented. Probably the token
This shows that it would be interesting to manage to install skeleton
coverage analysis to the test suite.
-** Table definitions
-It should be very easy to factor the definition of the various tables,
-including the separation bw declaration and definition. See for
-instance b4_table_define in lalr1.cc. This way, we could even factor
-C vs. C++ definitions.
-
* From lalr1.cc to yacc.c
** Single stack
Merging the three stacks in lalr1.cc simplified the code, prompted for
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