25 Feb 02:59
Re: skipper rules silently ignored (spirit2)
From: Hartmut Kaiser <hartmut.kaiser <at> gmail.com>
Subject: Re: skipper rules silently ignored (spirit2)
Newsgroups: gmane.comp.parsers.spirit.devel
Date: 2008-02-25 01:59:07 GMT
Subject: Re: skipper rules silently ignored (spirit2)
Newsgroups: gmane.comp.parsers.spirit.devel
Date: 2008-02-25 01:59:07 GMT
Cédric,
This issue should be fixed now by generating a compile time error whenever
the skipper is not convertible to the skipper specified while defining the
grammar/rule.
Thanks again!
Regards Hartmut
> -----Original Message-----
> From: Hartmut Kaiser [mailto:hartmut.kaiser <at> gmail.com]
> Sent: Sunday, February 24, 2008 5:29 PM
> To: 'Spirit Development'
> Cc: 'Joel de Guzman'
> Subject: RE: [Spirit-devel] skipper rules silently ignored (spirit2)
>
> Hi,
>
> > Using the latest svn version of spirit2, I have had a small problem
> > with the
> > skipper rule.
> > Since I wanted to use a rule more complexe than space (and that I
> > didn't
> > have its type):
> >
> > charset::space | ('%' >> *~spirit::char_('\n') >> '\n')
> >
> > I defined my grammar like this:
> >
> > template <typename Iterator>
> > struct my_grammar : qi::grammar_def<Iterator, qi::rule<Iterator> >
> > {...};
> >
> > but doing:
> >
> > bool r = phrase_parse(iter, storage.end(), make_parser(def),
> > charset::space | ('%' >> *~spirit::char_('\n') >> '\n'));
> >
> > ignore the skipping rule
> >
> > in qi/nonterminal/rule.hpp:170
> >
> > template <typename Iterator_, typename Context, typename Skipper>
> > bool parse(
> > Iterator_& first, Iterator_ const& last
> > , Context& context, Skipper const& skipper) const
> > {
> > // in this function, the skipper is ok
> > // but this call loose it (select the unused_type for the skipper
> > overload
> > of the function)
> > return ptr->parse(first, last, context, skipper);
> > }
> >
> > Finally, I did:
> >
> > qi::rule<iterator_t> skipper;
> > skipper = charset::space | ('%' >> *~spirit::char_('\n') >> '\n');
> >
> > bool r = phrase_parse(iter, storage.end(), make_parser(def),
> skipper
> > );
> >
> > which work.
> >
> > It would be great to either make work the first or generate a compile
> > time
> > error, lost quite some time thinking the problem was in my grammar.
>
> Yeah, I have this one on my list already, but somehow didn't get a
> chance to fix it. We'll try to fix it asap (it will generate a
> compilation error). Joel, we need to chat about this, I guess.
>
> Regards Hartmut
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
RSS Feed