[ragel-users] How to avoid % action being called when the match continues? [SOLVED]
Iñaki Baz Castillo
ibc at aliax.net
Sat Dec 5 00:07:01 UTC 2009
El Sábado, 5 de Diciembre de 2009, Iñaki Baz Castillo escribió:
> Hi, I have a simple grammar:
>
> pchar = ALPHA | DIGIT | ("%" HEXDIG HEXDIG);
> L_BRACKET = "%5b";
> node_name = ( pchar )+ -- L_BRACKET
> step = node_name %command L_BRACKET .....
>
> As you can see, when parsing "step" Ragel calls "command" action when
> L_BRACKET is detected. However, if any other hex-escaped appears into
> node_name then Ragel runs "command" action and then continues still into
> "node_name".
>
> This is: when Ragel is parsing "node_name" and founds "%" (even if it's
> "%99" rather than "%5b") then it runs "command" action. I expected that
> Ragel wouldn't run the leaving action as it remains into node_name.
>
> Why doe Ragel run the % leaving action when finding "%"? perhaps because
> Ragel must take the decision per byte without reading more than one byte?
> If so, is there any way to avoid "command" action being called several
> times for the same node_name?
>
> To clarify: if "step" is:
> qqq%00www%11eee%5bzzz
>
> then Ragel calls "command" action 3 times (each times it finds "%").
Ok, I've solved it by adding a "boolean" variable (well, a "int" as there is
no boolean into C) so when running "command" action I just perform the code if
the variable is 1 and then set it to 0.
--
Iñaki Baz Castillo <ibc at aliax.net>
More information about the ragel-users
mailing list