[ragel-users] Greedy star operator

Adrian Thurston thurston at complang.org
Wed Jul 21 06:21:30 UTC 2010

Hi Alexander,

You should use the * in text and ** in main on Element.

Also, you'll get a warning about applying kleene star to a machine that 
accepts the zero length word. Normally you don't want to do that because 
it creates an ambiguity. You'll actually see evidence of the ambiguity 
... start_test will get executed more than once.


On 10-07-20 11:56 AM, Alexander Laslavic wrote:
> This is a problem I come up against over and over again:
>      action start_text { printf("start_text") }
>      action end_text {printf("end_text")}
>      text = any**;
>      Text = text>start_text %end_text;
>      Element = Text;
>      main := Element*;
> Essentially, the start_text and end_text actions get called for every
> character.  If I take the star operator off of Element, it works fine, but
> if Element has a star operator, ragel is preferring to repeat the Element
> over repeating the any** in 'text'.
> Is there some way I am not aware of to get it to prefer the inner
> repitition?

ragel-users mailing list
ragel-users at complang.org

More information about the ragel-users mailing list