On Oct 4, 2:13 am, Me <no...@all.com> wrote:
> On Wed, 03 Oct 2007 03:30:36 -0700, Noone wrote:
> > The few C++ compilers where I know what is used use recursive descent.
> > Theoretically, recursive descent can handle an even more restricted set
> > of grammars, but in practice, it's a lot easier to hack, and lends
> > itself to backtracking when necessary.
> Are you talking about hand coding a recursive descent parser
> or using a parser generator that creates recursive descent
> parse trees?
The one I know most about (Sun CC) is hand coded. I think g++
is too. If you're going to use a parser generator, you might as
well use one which uses LR, rather that LL, since it will be
able to handle a larger set of grammars. The advantage of a
hand coded recursive descent parser is that it is easier to
"fudge" cases where the language doesn't fit the grammar.
(Also, typically, you get much better error messages and error
recovery. Colloquially expressed: with an LL parser, such as
recursive descent, you know what you're looking for, which helps
greatly in formulating error messages and in resynchronizing;
with an LR parser, you know what you got, but in the case of an
error, all you really know is that you cannot do anything with
it.)
> About 20
> years ago (college) I wrote some recursive descent code for small grammars
> to do statistical evaluation but could not fathom hand coding one for a
> full scale language with a non-trival grammar. I believed an LALR type
> parser generator was the de-facto standard for implementing non-trivial
> projects.
I think that the general consensus is that LALR parsers are OK
for medium sized projects---they're overkill for very small
things, and the grammar soon becomes too wieldy, especially if
you start adding error productions, for very large languages.
Recursive descent has the advantage that it modularizes very
well.
And of course, almost no real languages can be described
directly by an LR grammar. Even something as simple as Pascal
requires a few simple hacks, and C++ is almost hopeless---the
recursive descent implementations I've heard of use backtracking
(which isn't formally allowed

).
> And yes, it would seem that recursive descent would be easier
> to hack but setting the thing up in the first place seems like
> a nightmare.
Not really. It can be done in a very modular fashion, with each
function being fairly simple. And of course, anything that can
handle standard C++ isn't going to be simple; you need the
modularity to manage it.
--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34