]> git.saurik.com Git - bison.git/blame_incremental - TODO
(warn_at, warn, complain_at, complain, fatal_at, fatal): Don't invoke
[bison.git] / TODO
... / ...
CommitLineData
1-*- outline -*-
2
3* Header guards
4
5From Franc,ois: should we keep the directory part in the CPP guard?
6
7
8* Yacc.c: CPP Macros
9
10Do some people use YYPURE, YYLSP_NEEDED like we do in the test suite?
11They should not: it is not documented. But if they need to, let's
12find something clean (not like YYLSP_NEEDED...).
13
14
15* URGENT: Documenting C++ output
16Write a first documentation for C++ output.
17
18
19* Documentation
20Before releasing, make sure the documentation ("Understanding your
21parser") refers to the current `output' format.
22
23
24* GLR & C++
25Currently, the GLR parser cannot compile with a C++ compiler.
26
27
28* Report
29
30** GLR
31How would Paul like to display the conflicted actions? In particular,
32what when two reductions are possible on a given lookahead, but one is
33part of $default. Should we make the two reductions explicit, or just
34keep $default? See the following point.
35
36** Disabled Reductions
37See `tests/conflicts.at (Defaulted Conflicted Reduction)', and decide
38what we want to do.
39
40** Documentation
41Extend with error productions. The hard part will probably be finding
42the right rule so that a single state does not exhibit too many yet
43undocumented ``features''. Maybe an empty action ought to be
44presented too. Shall we try to make a single grammar with all these
45features, or should we have several very small grammars?
46
47** --report=conflict-path
48Provide better assistance for understanding the conflicts by providing
49a sample text exhibiting the (LALR) ambiguity. See the paper from
50DeRemer and Penello: they already provide the algorithm.
51
52
53* Extensions
54
55** %destructor
56I think we should document it as experimental, and allow its use in
57the next releases. But we also need to port it to GLR. What about
58lalr1.cc? Well, read what Hans reported, maybe we don't want
59%detructor. On the other hand, there is no reason not to provide it:
60users can avoid its use.
61
62** $foo
63Have a look at the Lemon parser generator: instead of $1, $2 etc. they
64can name the values. This is much more pleasant. For instance:
65
66 exp (res): exp (a) '+' exp (b) { $res = $a + $b; };
67
68I love this. I have been bitten too often by the removal of the
69symbol, and forgetting to shift all the $n to $n-1. If you are
70unlucky, it compiles...
71
72** $-1
73We should find a means to provide an access to values deep in the
74stack. For instance, instead of
75
76 baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }
77
78we should be able to have:
79
80 foo($foo) bar($bar) baz($bar): qux($qux) { $baz = $foo + $bar + $qux; }
81
82Or something like this.
83
84
85** yysymprint interface
86It should be improved, in particular when using Bison features such as
87locations, and YYPARSE_PARAMS. For the time being, it is almost
88recommended to yyprint to steal internal variables...
89
90** Several %unions
91I think this is a pleasant (but useless currently) feature, but in the
92future, I want a means to %include other bits of grammars, and _then_
93it will be important for the various bits to define their needs in
94%union.
95
96When implementing multiple-%union support, bare the following in mind:
97
98- when --yacc, this must be flagged as an error. Don't make it fatal
99 though.
100
101- The #line must now appear *inside* the definition of yystype.
102 Something like
103
104 {
105 #line 12 "foo.y"
106 int ival;
107 #line 23 "foo.y"
108 char *sval;
109 }
110
111** %if and the like
112It should be possible to have %if/%else/%endif. The implementation is
113not clear: should it be lexical or syntactic. Vadim Maslow thinks it
114must be in the scanner: we must not parse what is in a switched off
115part of %if. Akim Demaille thinks it should be in the parser, so as
116to avoid falling into another CPP mistake.
117
118** -D, --define-muscle NAME=VALUE
119To define muscles via cli. Or maybe support directly NAME=VALUE?
120
121
122* Unit rules
123Maybe we could expand unit rules, i.e., transform
124
125 exp: arith | bool;
126 arith: exp '+' exp;
127 bool: exp '&' exp;
128
129into
130
131 exp: exp '+' exp | exp '&' exp;
132
133when there are no actions. This can significantly speed up some
134grammars. I can't find the papers. In particular the book `LR
135parsing: Theory and Practice' is impossible to find, but according to
136`Parsing Techniques: a Practical Guide', it includes information about
137this issue. Does anybody have it?
138
139
140
141* Documentation
142
143** History/Bibliography
144Some history of Bison and some bibliography would be most welcome.
145Are there any Texinfo standards for bibliography?
146
147
148
149* Java, Fortran, etc.
150
151
152** Java
153
154There are a couple of proposed outputs:
155
156- BYACC/J
157 which is based on Byacc.
158 <http://troi.lincom-asg.com/~rjamison/byacc/>
159
160- Bison Java
161 which is based on Bison.
162 <http://www.goice.co.jp/member/mo/hack-progs/bison-java.html>
163
164