On 10/13/05, Simon Buchan
Aaron Griffin wrote:
...snip... Just have a no_node parser after the failable bit:
section = identifier >> ch_p('{') >> (*setting) | no_node_d[!ch_p('}')] >> ch_p('}');
(usual not-checked disclaimer) note that if you are careful, you could have the parser simply ignore the incorrect setting, or you could have an 'error node', or pretty much anything you can think of.
Thanks, that's exactly what I was looking for.
On a side note, if I have a rule similar to (keyword >> identifier), the skip_parser will translate "somekeyword a" into "somekeyworda" and will parse it fine. However, what is to stop someone from removing the whitespace in the original code. With a quick glance, it appears the example c grammar from the spirit site will parse "voidfoo()" just fine due to this. Is there anyway I can tell the skip grammar to force a seperation?
Most parsers where this matters that I've seen don't actually define a skip parser, they explicitly *space_p. Alternitively, parse a token stream, not a char stream. I leave this as an exersize for the reader ;-).
I was under the impression that using a skip parser did switch to a
token (phrase?) stream, using the skip parser as a token delimiter.
/me shrugs - Unless of course you're implying
The technique used in QuickBook is:
keyword >> (eps_p - (alnum_p | '_')) ; // make sure we recognize whole words only
(yes, the example C grammar should be fixed)
Going to try this, but I'm not sure if I fully understand. I just came across the distinct_parser family, so my question is: How is this different from using something like: distinct_parser_dynamic<> keyword_p(alnum_p | '_'); keyword_p("my_key_word") >> identifier;
Oh and BTW, the proper forum for Spirit is: spirit-general@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/spirit-general
Done and done. Thanks. - Aaron Griffin