Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Spirit Karma: Alternative generator
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2016-03-01 09:51:24


> I am construction karma::rule<OutputIterator, std::string()> which I
> would like to be either a string or quoted string if the string contains
> spaces.
>
> Now I think that the rule should be something like:
>
> rule = (&true[...] << string) | (lit("\"") << string << lit("\""));
>
> but I've failed to write proper semantic action. How could I obtain
> std::string object reference to write something like:
>
> (obj.find(" ") == std::string::npos)
>
> ? Or maybe is there a better way to do the same?

Please keep in mind that semantic actions are executed 'lazily'. That means
that you need to use a function object which executes the semantic code in
its operator()(). The easiest way is to use phoenix::function for that.
Please see the corresponding documentation.

Regards Hartmut
---------------
http://boost-spirit.com
http://stellar.cct.lsu.edu


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net