RE: [boost] Boost.Spirit comments and stuff

Hartmut Kaiser wrote:
Reece Dunn wrote:
[4] I am now making use of boost::spirit::sub_grammar from libs/spirit/doc/techniques.html. One thing I get from this is that the typedef for the grammar type can be very difficult to read, especially for non-trivial grammars! I have started writing a set of type helpers to simplify the process:
[snip]
If there is interest, I shall create a proper submission for them.
Nice idea. Do you want to submit a patch for the libs/spirit/doc/techniques.html file?
I am not sure about a patch to the techniques.html file, maybe you or Joel want to add a comment. The idea was to have the type constructors as a helper file to be used in conjunction with sub_grammar, or when building any non-rule<> (explicitly typed) rule. It contains some of the more common combinations, and can be used (using the skip_parser example) like: typedef boost::spirit::alternative_t < boost::spirit::space_parser, boost::spirit::line_comment, boost::spirit::range_comment
::type start_t;
Including the entire set into the HTML file would be too distracting. A link would probably be best with a few of the classes as an example. NOTE: I have made a revision to alternative3_t so it is now a 2-4 -ary construct (it is easy to extend this to support more if there is a need) using mpl :). I have also added some more constructs that might be useful. Here is a more complex example using my helpers: struct number_parser: public boost::spirit::sub_grammar< number_parser
{ public: typedef boost::spirit::contiguous_sequence_t < boost::spirit::alternative_t < boost::spirit::sequence < boost::spirit::strlit_nocase_t<>::type, boost::spirit::hex_t >, boost::spirit::sequence < boost::spirit::chlit<>, boost::spirit::oct_t >, boost::spirit::real_t<>::type >::type, boost::spirit::kleene_star< boost::spirit::chset_nocase_t<>::type > >::type start_t; public: start_t start; public: inline number_parser(): start ( boost::spirit::lexeme_d [ ( boost::spirit::as_lower_d[ "0x" ] >> boost::spirit::hex_p | '0' >> boost::spirit::oct_p | boost::spirit::real_p ) >> *boost::spirit::as_lower_d[ boost::spirit::chset_p( "ldfu" )] ] ) { } } number; Regards, Reece _________________________________________________________________ It's fast, it's easy and it's free. Get MSN Messenger today! http://www.msn.co.uk/messenger
participants (1)
-
Reece Dunn