From: joel de guzman (djowel_at_[hidden])
Date: 2002-01-15 13:17:45
----- Original Message -----
From: "Vladimir Prus" :
> joel de guzman wrote:
> > > Because:
> > > 1. I think that parsing proper is not the most complex thing. It's
> > > assigment to program variables and validation that was hard, at least for
> > > me.
> > Have you seen Spirit's semantic expressions?
> Do you refer to "expr[ref(var)]". I don't think this is enough. Command line
> parsing library must provide storage for values, validate them, handle
> multiple assignments and so on.
Much more than that now. But I am not sure what you mean by "validate them,
handle multiple assignments and so on". Here's a *fully working* calculator
(not just a parser) for example using semantic expressions:
| '(' >> expr[factor(m0)] >> ')'
| ('-' >> factor[factor(m0) = -arg])
| ('+' >> factor[factor(m0)])
= factor[term(m0)] >>
*( ('*' >> factor[term(m0) *= arg])
| ('/' >> factor[term(m0) /= arg])
= term[expr(m0)] >>
*( ('+' >> term[expr(m0) += arg])
| ('-' >> term[expr(m0) -= arg])
Semantic expressions implement a full fledged Lambda lib. with an
interesting twist: It has *true* closures that work on *true* local variables.
> Do you really think that Spirit will be great improvement to a command line
> handling library? At this moment the hand-written code which deal with
> parsing proper is only 44 lines.
I am not sure. I am not an expert on command line interfaces. I
haven't programmed one yet. The only thing I am sure is that it can
be done and it can do much more.
> > > 2. Spirit is nondeterministic recursive descent parser. I don't find this
> > > is acceptable. We want to detect ambiguity in option specification.
> > Not accurate. There are already more deterministic stuff going on.
> > Ambiguity can be constrained. RD is an implementation detail.
> > Research is now towards recursive ascent and even template-
> > metaprogrammed-automata.
> Is it already implemented?
Soon. There are precursors though: Dan Nuffer wrote a dynamic
lexer for Spirit written in Spirit for example. Hartmut Kaiser is now
using that as the lexer over a *full* C preprocessor also using
Spirit. Hartmut already wrote a C parser BTW.
Also, forgive me but why isn't nondeterministic RD not
acceptable for parsing command lines?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk