[ragel-users] How to avoid % action being called when the match continues?

Iñaki Baz Castillo ibc at aliax.net
Fri Dec 4 23:55:57 UTC 2009

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 

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:

then Ragel calls "command" action 3 times (each times it finds "%").

Thanks for any help.

Iñaki Baz Castillo <ibc at aliax.net>

More information about the ragel-users mailing list