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* Documentation 16Before releasing, make sure the documentation ("Understanding your 17parser") refers to the current `output' format. 18 19* lalr1.cc 20** vector 21Move to using vector, drop stack.hh. 22 23** I18n 24Catch up with yacc.c. 25 26* Report 27 28** GLR 29How would Paul like to display the conflicted actions? In particular, 30what when two reductions are possible on a given look-ahead token, but one is 31part of $default. Should we make the two reductions explicit, or just 32keep $default? See the following point. 33 34** Disabled Reductions 35See `tests/conflicts.at (Defaulted Conflicted Reduction)', and decide 36what we want to do. 37 38** Documentation 39Extend with error productions. The hard part will probably be finding 40the right rule so that a single state does not exhibit too many yet 41undocumented ``features''. Maybe an empty action ought to be 42presented too. Shall we try to make a single grammar with all these 43features, or should we have several very small grammars? 44 45** --report=conflict-path 46Provide better assistance for understanding the conflicts by providing 47a sample text exhibiting the (LALR) ambiguity. See the paper from 48DeRemer and Penello: they already provide the algorithm. 49 50 51* Extensions 52 53** Labeling the symbols 54Have a look at the Lemon parser generator: instead of $1, $2 etc. they 55can name the values. This is much more pleasant. For instance: 56 57 exp (res): exp (a) '+' exp (b) { $res = $a + $b; }; 58 59I love this. I have been bitten too often by the removal of the 60symbol, and forgetting to shift all the $n to $n-1. If you are 61unlucky, it compiles... 62 63But instead of using $a etc., we can use regular variables. And 64instead of using (), I propose to use `:' (again). Paul suggests 65supporting `->' in addition to `:' to separate LHS and RHS. In other 66words: 67 68 r:exp -> a:exp '+' b:exp { r = a + b; }; 69 70That requires an significant improvement of the grammar parser. Using 71GLR would be nice. It also requires that Bison know the type of the 72symbols (which will be useful for %include anyway). So we have some 73time before... 74 75Note that there remains the problem of locations: `@r'? 76 77 78** $-1 79We should find a means to provide an access to values deep in the 80stack. For instance, instead of 81 82 baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; } 83 84we should be able to have: 85 86 foo($foo) bar($bar) baz($bar): qux($qux) { $baz = $foo + $bar + $qux; } 87 88Or something like this. 89 90** %if and the like 91It should be possible to have %if/%else/%endif. The implementation is 92not clear: should it be lexical or syntactic. Vadim Maslow thinks it 93must be in the scanner: we must not parse what is in a switched off 94part of %if. Akim Demaille thinks it should be in the parser, so as 95to avoid falling into another CPP mistake. 96 97** -D, --define-muscle NAME=VALUE 98To define muscles via cli. Or maybe support directly NAME=VALUE? 99 100** XML Output 101There are couple of available extensions of Bison targeting some XML 102output. Some day we should consider including them. One issue is 103that they seem to be quite orthogonal to the parsing technique, and 104seem to depend mostly on the possibility to have some code triggered 105for each reduction. As a matter of fact, such hooks could also be 106used to generate the yydebug traces. Some generic scheme probably 107exists in there. 108 109XML output for GNU Bison and gcc 110 http://www.cs.may.ie/~jpower/Research/bisonXML/ 111 112XML output for GNU Bison 113 http://yaxx.sourceforge.net/ 114 115* Unit rules 116Maybe we could expand unit rules, i.e., transform 117 118 exp: arith | bool; 119 arith: exp '+' exp; 120 bool: exp '&' exp; 121 122into 123 124 exp: exp '+' exp | exp '&' exp; 125 126when there are no actions. This can significantly speed up some 127grammars. I can't find the papers. In particular the book `LR 128parsing: Theory and Practice' is impossible to find, but according to 129`Parsing Techniques: a Practical Guide', it includes information about 130this issue. Does anybody have it? 131 132 133 134* Documentation 135 136** History/Bibliography 137Some history of Bison and some bibliography would be most welcome. 138Are there any Texinfo standards for bibliography? 139 140 141 142* Java, Fortran, etc. 143 144 145** Java 146 147There are a couple of proposed outputs: 148 149- BYACC/J 150 which is based on Byacc. 151 <http://troi.lincom-asg.com/~rjamison/byacc/> 152 153- Bison Java 154 which is based on Bison. 155 <http://www.goice.co.jp/member/mo/hack-progs/bison-java.html> 156 157Sebastien Serrurier (serrur_s@epita.fr) is working on this: he is 158expected to contact the authors, design the output, and implement it 159into Bison. 160 161 162* Coding system independence 163Paul notes: 164 165 Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is 166 255). It also assumes that the 8-bit character encoding is 167 the same for the invocation of 'bison' as it is for the 168 invocation of 'cc', but this is not necessarily true when 169 people run bison on an ASCII host and then use cc on an EBCDIC 170 host. I don't think these topics are worth our time 171 addressing (unless we find a gung-ho volunteer for EBCDIC or 172 PDP-10 ports :-) but they should probably be documented 173 somewhere. 174 175 More importantly, Bison does not currently allow NUL bytes in 176 tokens, either via escapes (e.g., "x\0y") or via a NUL byte in 177 the source code. This should get fixed. 178 179* --graph 180Show reductions. 181 182* Broken options ? 183** %no-parser 184** %token-table 185** Skeleton strategy 186Must we keep %no-parser? %token-table? 187 188* src/print_graph.c 189Find the best graph parameters. 190 191* BTYacc 192See if we can integrate backtracking in Bison. Charles-Henri de 193Boysson <de-boy_c@epita.fr> is working on this, and already has some 194results. Vadim Maslow, the maintainer of BTYacc was contacted, and we 195stay in touch with him. Adjusting the Bison grammar parser will be 196needed to support some extra BTYacc features. This is less urgent. 197 198** Keeping the conflicted actions 199First, analyze the differences between byacc and btyacc (I'm referring 200to the executables). Find where the conflicts are preserved. 201 202** Compare with the GLR tables 203See how isomorphic the way BTYacc and the way the GLR adjustments in 204Bison are compatible. *As much as possible* one should try to use the 205same implementation in the Bison executables. I insist: it should be 206very feasible to use the very same conflict tables. 207 208** Adjust the skeletons 209Import the skeletons for C and C++. 210 211** Improve the skeletons 212Have them support yysymprint, yydestruct and so forth. 213 214 215* Precedence 216 217** Partial order 218It is unfortunate that there is a total order for precedence. It 219makes it impossible to have modular precedence information. We should 220move to partial orders (sounds like series/parallel orders to me). 221 222This will be possible with a Bison parser for the grammar, as it will 223make it much easier to extend the grammar. 224 225** Correlation b/w precedence and associativity 226Also, I fail to understand why we have to assign the same 227associativity to operators with the same precedence. For instance, 228why can't I decide that the precedence of * and / is the same, but the 229latter is nonassoc? 230 231If there is really no profound motivation, we should find a new syntax 232to allow specifying this. 233 234** RR conflicts 235See if we can use precedence between rules to solve RR conflicts. See 236what POSIX says. 237 238 239* $undefined 240From Hans: 241- If the Bison generated parser experiences an undefined number in the 242character range, that character is written out in diagnostic messages, an 243addition to the $undefined value. 244 245Suggest: Change the name $undefined to undefined; looks better in outputs. 246 247 248* Default Action 249From Hans: 250- For use with my C++ parser, I transported the "switch (yyn)" statement 251that Bison writes to the bison.simple skeleton file. This way, I can remove 252the current default rule $$ = $1 implementation, which causes a double 253assignment to $$ which may not be OK under C++, replacing it with a 254"default:" part within the switch statement. 255 256Note that the default rule $$ = $1, when typed, is perfectly OK under C, 257but in the C++ implementation I made, this rule is different from 258$<type_name>$ = $<type_name>1. I therefore think that one should implement 259a Bison option where every typed default rule is explicitly written out 260(same typed ruled can of course be grouped together). 261 262Note: Robert Anisko handles this. He knows how to do it. 263 264 265* Warnings 266It would be nice to have warning support. See how Autoconf handles 267them, it is fairly well described there. It would be very nice to 268implement this in such a way that other programs could use 269lib/warnings.[ch]. 270 271Don't work on this without first announcing you do, as I already have 272thought about it, and know many of the components that can be used to 273implement it. 274 275 276* Pre and post actions. 277From: Florian Krohm <florian@edamail.fishkill.ibm.com> 278Subject: YYACT_EPILOGUE 279To: bug-bison@gnu.org 280X-Sent: 1 week, 4 days, 14 hours, 38 minutes, 11 seconds ago 281 282The other day I had the need for explicitly building the parse tree. I 283used %locations for that and defined YYLLOC_DEFAULT to call a function 284that returns the tree node for the production. Easy. But I also needed 285to assign the S-attribute to the tree node. That cannot be done in 286YYLLOC_DEFAULT, because it is invoked before the action is executed. 287The way I solved this was to define a macro YYACT_EPILOGUE that would 288be invoked after the action. For reasons of symmetry I also added 289YYACT_PROLOGUE. Although I had no use for that I can envision how it 290might come in handy for debugging purposes. 291All is needed is to add 292 293#if YYLSP_NEEDED 294 YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen, yyloc, (yylsp - yylen)); 295#else 296 YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen); 297#endif 298 299at the proper place to bison.simple. Ditto for YYACT_PROLOGUE. 300 301I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUE 302to bison. If you're interested, I'll work on a patch. 303 304* Move to Graphviz 305Well, VCG seems really dead. Move to Graphviz instead. Also, equip 306the parser with a means to create the (visual) parse tree. 307 308----- 309 310Copyright (C) 2001, 2002, 2003, 2004, 2006 Free Software Foundation, 311Inc. 312 313This file is part of Bison, the GNU Compiler Compiler. 314 315Bison is free software; you can redistribute it and/or modify 316it under the terms of the GNU General Public License as published by 317the Free Software Foundation; either version 2, or (at your option) 318any later version. 319 320Bison is distributed in the hope that it will be useful, 321but WITHOUT ANY WARRANTY; without even the implied warranty of 322MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 323GNU General Public License for more details. 324 325You should have received a copy of the GNU General Public License 326along with Bison; see the file COPYING. If not, write to 327the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 328Boston, MA 02110-1301, USA. 329