]> git.saurik.com Git - bison.git/blame - TODO
(resolve_sr_conflict): Use abort rather than assert.
[bison.git] / TODO
CommitLineData
416bd7a9
MA
1-*- outline -*-
2
3c146b5e
AD
3* Header guards
4
32f0598d 5From Franc,ois: should we keep the directory part in the CPP guard?
3c146b5e
AD
6
7
c19988b7
AD
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
efea6231
AD
15* URGENT: Documenting C++ output
16Write a first documentation for C++ output.
17
bc933ef1 18
88bce5a2 19* Documentation
959e5f51
AD
20Before releasing, make sure the documentation ("Understanding your
21parser") refers to the current `output' format.
88bce5a2
AD
22
23
d43baf71
AD
24* GLR & C++
25Currently, the GLR parser cannot compile with a C++ compiler.
26
27
2ab9a04f 28* Report
ec3bc396 29
2ab9a04f
AD
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.
d7215705 35
2ab9a04f
AD
36** Disabled Reductions
37See `tests/conflicts.at (Defaulted Conflicted Reduction)', and decide
38what we want to do.
d7215705 39
2ab9a04f 40** Documentation
bc933ef1
AD
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?
ec3bc396 46
2ab9a04f
AD
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
ec3bc396 52
948be909 53* Extensions
2ab9a04f 54
959e5f51
AD
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
2ab9a04f 86It should be improved, in particular when using Bison features such as
959e5f51
AD
87locations, and YYPARSE_PARAMS. For the time being, it is almost
88recommended to yyprint to steal internal variables...
2ab9a04f
AD
89
90** Several %unions
6cbfbcc5
AD
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.
76551463 95
5c0a0514
AD
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
f0e48240
AD
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
fa770c86
AD
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
d7215705
AD
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?
fa770c86 138
51dec47b 139
51dec47b 140
2ab9a04f 141* Documentation
51dec47b 142
2ab9a04f
AD
143** History/Bibliography
144Some history of Bison and some bibliography would be most welcome.
145Are there any Texinfo standards for bibliography?
146
147
148
948be909
PE
149* Java, Fortran, etc.
150
948be909 151
f414d77d
AD
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.
948be909
PE
162 <http://www.goice.co.jp/member/mo/hack-progs/bison-java.html>
163
f414d77d
AD
164