Re: multistart: free choice of the start symbol

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>

> Le 27 sept. 2020 à 20:46, Rici Lake <[email protected]> a écrit :
> 
> Many parser generators do have the option to parse from various roots. One
> interesting case is ANTLR, which provides methods for parsing from *every*
> non-terminal (with names generated from the non-terminal).

Well, that's "cheating" (as you pointed out farther in your message):
ANTLR implements an recursive descent parser, i.e., its very technique
consists in emitting one parsing function per non-terminal.  So actually,
I expect that all the LL generators support the free choice of the start
symbol.

Bison generates LR parsers.  That does not apply.

> Although the
> vast majority of these interfaces will never be used, it turns out to be
> extremely convenient for debugging grammars (and for didactic purposes,
> such as drawing small parse trees). In ANTLR, these interfaces have little
> or no cost, since it fundamentally produces recursive descent parser
> anyway, but it might still be reasonable to allow "%start *" for parser
> debugging.
> 
> Of course, in a C code generator, you most certainly wouldn't want to
> generate dozens (or hundreds) of unused interfaces, so this kind of feature
> would be better implemented by a general call which took a non-terminal
> enumerator as an argument. But that would require that the returned value
> type be the same regardless of non-terminal, which effectively reduces to
> the YYSTYPE union (or whatever it happens to be).
> 
> OK, it's not necessarily a great idea to design a production interface
> around a feature only used for debugging.

Exactly :)  Reading this sentence reminds me of one of my favorite
scenes in Oceans' 1[0-9]: https://www.youtube.com/watch?v=tcRvN2gtPiw

This feature, "start *", would generate quite larger automata.

In the case of Bison's own grammar, I get 450 states (that only x3,
I was expecting more) *and* additional conflicts (because Bison is
still using LALR for its grammar, so you can still have "subautomata"
that share states).

What I did not anticipate though, is that it crashes when generating
canonical LR on that grammar.  However, I not not yet investigated
the impact of my changes in IELR and canonical LR, so that a TODO.

Using LR, "%start *" should be safe.  You do have a point here.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.