Spirit: skip parser and rules
Hello, I've this code: // w and space_signaler are a function objects which print out some info. bool read_str(const char *in, StrList &w) { rule<> identifier = +alnum_p; rule<> statement = identifier[w] >> ch_p(';')[w]; return parse( in, (statement)[w], space_p[space_signaler] // Called for initial spaces only ).full; } Well, I don't understand why if i use (statement)[w] where signaled, the space_signaler is never called for non-initial spaces, while if i write directly the rule, it does correctly: return parse( in, (identifier[w] >> ch_p(';')[w])[w], space_p[space_signaler] // Called for every space ).full; In the latter case, it parses (skipping spaces) inputs like: "hello;" "hello ;" " hello ; " while in the former it parses correctly inputs like " hello;" "hello;" disallowing spaces between the word and the semicolon. Can someone explain me why does this happens? Thanks very much
Alessandro Re wrote:
Hello, I've this code:
// w and space_signaler are a function objects which print out some info. bool read_str(const char *in, StrList &w) { rule<> identifier = +alnum_p; rule<> statement = identifier[w] >> ch_p(';')[w];
return parse( in, (statement)[w], space_p[space_signaler] // Called for initial spaces only ).full; }
Well, I don't understand why if i use (statement)[w] where signaled, the space_signaler is never called for non-initial spaces, while if i write directly the rule, it does correctly:
return parse( in, (identifier[w] >> ch_p(';')[w])[w], space_p[space_signaler] // Called for every space ).full;
In the latter case, it parses (skipping spaces) inputs like: "hello;" "hello ;" " hello ; " while in the former it parses correctly inputs like " hello;" "hello;" disallowing spaces between the word and the semicolon.
Can someone explain me why does this happens?
The proper Spirit forum is: https://lists.sourceforge.net/lists/listinfo/spirit-general Anyway, I am surprised this compiled at all. You have the wrong rule type. I suggest not using bare rules this way. Use a grammar instead. Please post to the Spirit mailing list for follow ups. Thanks! Regards, -- Joel de Guzman http://www.boostpro.com http://spirit.sf.net
On Mon, Jul 21, 2008 at 3:22 PM, Joel de Guzman
The proper Spirit forum is: https://lists.sourceforge.net/lists/listinfo/spirit-general
Uh, sorry! I didn't knew that, I'll search there :)
Anyway, I am surprised this compiled at all. You have the wrong rule type. I suggest not using bare rules this way. Use a grammar instead. Please post to the Spirit mailing list for follow ups. Thanks!
I'll take a better look at rules then, thanks to you :) Bye
participants (2)
-
Alessandro Re
-
Joel de Guzman