📄 todo
字号:
-*- outline -*-* Header guardsFrom Franc,ois: should we keep the directory part in the CPP guard?* Yacc.c: CPP MacrosDo some people use YYPURE, YYLSP_NEEDED like we do in the test suite?They should not: it is not documented. But if they need to, let'sfind something clean (not like YYLSP_NEEDED...).* DocumentationBefore releasing, make sure the documentation ("Understanding yourparser") refers to the current `output' format.* lalr1.cc** vectorMove to using vector, drop stack.hh.** I18nCatch up with yacc.c.* Report** GLRHow would Paul like to display the conflicted actions? In particular,what when two reductions are possible on a given look-ahead token, but one ispart of $default. Should we make the two reductions explicit, or justkeep $default? See the following point.** Disabled ReductionsSee `tests/conflicts.at (Defaulted Conflicted Reduction)', and decidewhat we want to do.** DocumentationExtend with error productions. The hard part will probably be findingthe right rule so that a single state does not exhibit too many yetundocumented ``features''. Maybe an empty action ought to bepresented too. Shall we try to make a single grammar with all thesefeatures, or should we have several very small grammars?** --report=conflict-pathProvide better assistance for understanding the conflicts by providinga sample text exhibiting the (LALR) ambiguity. See the paper fromDeRemer and Penello: they already provide the algorithm.* Extensions** Labeling the symbolsHave a look at the Lemon parser generator: instead of $1, $2 etc. theycan name the values. This is much more pleasant. For instance: exp (res): exp (a) '+' exp (b) { $res = $a + $b; };I love this. I have been bitten too often by the removal of thesymbol, and forgetting to shift all the $n to $n-1. If you areunlucky, it compiles...But instead of using $a etc., we can use regular variables. Andinstead of using (), I propose to use `:' (again). Paul suggestssupporting `->' in addition to `:' to separate LHS and RHS. In otherwords: r:exp -> a:exp '+' b:exp { r = a + b; };That requires an significant improvement of the grammar parser. UsingGLR would be nice. It also requires that Bison know the type of thesymbols (which will be useful for %include anyway). So we have sometime before...Note that there remains the problem of locations: `@r'?** $-1We should find a means to provide an access to values deep in thestack. For instance, instead of baz: qux { $$ = $<foo>-1 + $<bar>0 + $1; }we should be able to have: foo($foo) bar($bar) baz($bar): qux($qux) { $baz = $foo + $bar + $qux; }Or something like this.** yysymprint interfaceIt should be improved, in particular when using Bison features such aslocations, and YYPARSE_PARAMS. For the time being, it is almostrecommended to yyprint to steal internal variables...** Several %unionsI think this is a pleasant (but useless currently) feature, but in thefuture, 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; }** %if and the likeIt should be possible to have %if/%else/%endif. The implementation isnot clear: should it be lexical or syntactic. Vadim Maslow thinks itmust be in the scanner: we must not parse what is in a switched offpart of %if. Akim Demaille thinks it should be in the parser, so asto avoid falling into another CPP mistake.** -D, --define-muscle NAME=VALUETo define muscles via cli. Or maybe support directly NAME=VALUE?** XML OutputThere are couple of available extensions of Bison targeting some XMLoutput. Some day we should consider including them. One issue isthat they seem to be quite orthogonal to the parsing technique, andseem to depend mostly on the possibility to have some code triggeredfor each reduction. As a matter of fact, such hooks could also beused to generate the yydebug traces. Some generic scheme probablyexists in there.XML output for GNU Bison and gcc http://www.cs.may.ie/~jpower/Research/bisonXML/XML output for GNU Bison http://yaxx.sourceforge.net/* Unit rulesMaybe we could expand unit rules, i.e., transform exp: arith | bool; arith: exp '+' exp; bool: exp '&' exp;into exp: exp '+' exp | exp '&' exp;when there are no actions. This can significantly speed up somegrammars. I can't find the papers. In particular the book `LRparsing: Theory and Practice' is impossible to find, but according to`Parsing Techniques: a Practical Guide', it includes information aboutthis issue. Does anybody have it?* Documentation** History/BibliographySome history of Bison and some bibliography would be most welcome.Are there any Texinfo standards for bibliography?* Java, Fortran, etc.** JavaThere are a couple of proposed outputs:- BYACC/J which is based on Byacc. <http://troi.lincom-asg.com/~rjamison/byacc/>- Bison Java which is based on Bison. <http://www.goice.co.jp/member/mo/hack-progs/bison-java.html>Sebastien Serrurier (serrur_s@epita.fr) is working on this: he isexpected to contact the authors, design the output, and implement itinto Bison.* Coding system independencePaul notes: Currently Bison assumes 8-bit bytes (i.e. that UCHAR_MAX is 255). It also assumes that the 8-bit character encoding is the same for the invocation of 'bison' as it is for the invocation of 'cc', but this is not necessarily true when people run bison on an ASCII host and then use cc on an EBCDIC host. I don't think these topics are worth our time addressing (unless we find a gung-ho volunteer for EBCDIC or PDP-10 ports :-) but they should probably be documented somewhere. More importantly, Bison does not currently allow NUL bytes in tokens, either via escapes (e.g., "x\0y") or via a NUL byte in the source code. This should get fixed.* --graphShow reductions. []* Broken options ?** %no-parser []** %token-table []** Skeleton strategy. []Must we keep %no-parser? %token-table?* src/print_graph.cFind the best graph parameters. []* doc/bison.texinfo** Updateinformations about ERROR_VERBOSE. []** Add explanations aboutskeleton muscles. []%skeleton. []* testsuite** tests/pure-parser.at []New tests.* BTYaccSee if we can integrate backtracking in Bison. Charles-Henri deBoysson <de-boy_c@epita.fr> is working on this, and already has someresults. Vadim Maslow, the maintainer of BTYacc was contacted, and westay in touch with him. Adjusting the Bison grammar parser will beneeded to support some extra BTYacc features. This is less urgent.** Keeping the conflicted actionsFirst, analyze the differences between byacc and btyacc (I'm referringto the executables). Find where the conflicts are preserved.** Compare with the GLR tablesSee how isomorphic the way BTYacc and the way the GLR adjustments inBison are compatible. *As much as possible* one should try to use thesame implementation in the Bison executables. I insist: it should bevery feasible to use the very same conflict tables.** Adjust the skeletonsImport the skeletons for C and C++.** Improve the skeletonsHave them support yysymprint, yydestruct and so forth.* Precedence** Partial orderIt is unfortunate that there is a total order for precedence. Itmakes it impossible to have modular precedence information. We shouldmove to partial orders (sounds like series/parallel orders to me).This will be possible with a Bison parser for the grammar, as it willmake it much easier to extend the grammar.** Correlation b/w precedence and associativityAlso, I fail to understand why we have to assign the sameassociativity to operators with the same precedence. For instance,why can't I decide that the precedence of * and / is the same, but thelatter is nonassoc?If there is really no profound motivation, we should find a new syntaxto allow specifying this.** RR conflictsSee if we can use precedence between rules to solve RR conflicts. Seewhat POSIX says.* $undefinedFrom Hans:- If the Bison generated parser experiences an undefined number in thecharacter range, that character is written out in diagnostic messages, anaddition to the $undefined value.Suggest: Change the name $undefined to undefined; looks better in outputs.* Default ActionFrom Hans:- For use with my C++ parser, I transported the "switch (yyn)" statementthat Bison writes to the bison.simple skeleton file. This way, I can removethe current default rule $$ = $1 implementation, which causes a doubleassignment to $$ which may not be OK under C++, replacing it with a"default:" part within the switch statement.Note that the default rule $$ = $1, when typed, is perfectly OK under C,but in the C++ implementation I made, this rule is different from$<type_name>$ = $<type_name>1. I therefore think that one should implementa Bison option where every typed default rule is explicitly written out(same typed ruled can of course be grouped together).Note: Robert Anisko handles this. He knows how to do it.* WarningsIt would be nice to have warning support. See how Autoconf handlesthem, it is fairly well described there. It would be very nice toimplement this in such a way that other programs could uselib/warnings.[ch].Don't work on this without first announcing you do, as I already havethought about it, and know many of the components that can be used toimplement it.* Pre and post actions.From: Florian Krohm <florian@edamail.fishkill.ibm.com>Subject: YYACT_EPILOGUETo: bug-bison@gnu.orgX-Sent: 1 week, 4 days, 14 hours, 38 minutes, 11 seconds agoThe other day I had the need for explicitly building the parse tree. Iused %locations for that and defined YYLLOC_DEFAULT to call a functionthat returns the tree node for the production. Easy. But I also neededto assign the S-attribute to the tree node. That cannot be done inYYLLOC_DEFAULT, because it is invoked before the action is executed.The way I solved this was to define a macro YYACT_EPILOGUE that wouldbe invoked after the action. For reasons of symmetry I also addedYYACT_PROLOGUE. Although I had no use for that I can envision how itmight come in handy for debugging purposes.All is needed is to add#if YYLSP_NEEDED YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen, yyloc, (yylsp - yylen));#else YYACT_EPILOGUE (yyval, (yyvsp - yylen), yylen);#endifat the proper place to bison.simple. Ditto for YYACT_PROLOGUE.I was wondering what you think about adding YYACT_PROLOGUE/EPILOGUEto bison. If you're interested, I'll work on a patch.* Move to GraphvizWell, VCG seems really dead. Move to Graphviz instead. Also, equipthe parser with a means to create the (visual) parse tree.-----Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.This file is part of GNU Bison.GNU Bison is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU Bison is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with Bison; see the file COPYING. If not, write tothe Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301, USA.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -