|
Boost : |
From: Dan Gohman (dgohman_at_[hidden])
Date: 2002-10-12 07:16:01
On Sat, Oct 12, 2002 at 08:38:48AM +0800, Joel de Guzman wrote:
> First of all, thanks!
Thanks to you and everyone else that has developed Spirit. It
is a very impressive library.
> Iff spirit gets accepted, namespace and the macro prefix will
> boost::spirit and BOOST_SPIRIT. However, since detail
> is an implementation convention, I'd prefer to keep impl if
> that will not (as I assume) affect the review, as a matter of
> choice.
I'll leave up to others any decision about use of `impl' instead
of `detail'.
> Pre 1.5 Spirit did it that way. Yet, here's the rub: doing so
> would prevent rules from being storable in containers. Previous
> experiments with dynamic parsers necessitated rules that are
> copyable and storable in stacks, vectors etc.
Perhaps Spirit should use operator|= for the EBNF syntax. This function
could then provide behavior whatever semantics desired without having
to be constrained by the otherwise-unrelated container requirements.
For example, operator|= could implement the 1.3 behavior:
r |= a;
r |= b;
This would be equivalant to `r = a | b' in 1.5 syntax.
When writing in the EBNF-syntax, I don't want to have to worry about
details like remembering to use .alias() for rules that need it.
> > Types like anychar_ look like they should be moved into an
> > implementation-detail namespace.
>
> Why?
They're not mentioned in the documentation, and as far as I can see, library
users never need to use these by name; anychar_p and the others are the
way that library users use these.
> > How does one instantiate the four-parameter ast_parse function template?
> > I don't know if I just haven't done it right or if there's a bug in
> > Spirit. It isn't ever done in the examples, and there doesn't appear to
> > be tests for any of the tree components :-(.
>
> I CC'd Dan Nuffer. He's the author of the AST/Parse trees.
Upon further investiagion, it appears to be a bug.
--- spirit.orig/boost/spirit/tree/ast.hpp
+++ spirit/boost/spirit/tree/ast.hpp
@@ -248,7 +248,7 @@
scanner_policies_t policies(iter_policy);
IteratorT first = first_;
scanner_t scan(first, last_, policies);
- tree_match<IteratorT> hit = parser.parse(scan);
+ tree_match<IteratorT> hit = parser.derived().parse(scan);
return tree_parse_info<IteratorT>(
first, hit, hit && (first == last_), hit.length(), hit.trees);
}
-- Dan Gohman dgohman_at_[hidden]
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk