[ragel-users] Actions executing too often.
Richard Osborn
richardosborn at mac.com
Wed Dec 9 00:34:16 UTC 2009
Is there any way to refactor the code to get the behavior I desire? I
understand why I am getting the current behavior, but I am unsure of
how I can use the given actions to my liking. It seems as though there
should be another set of action types for transitioning to different
states.
On Dec 8, 2009, at 5:47 AM, Iñaki Baz Castillo wrote:
> El Martes, 8 de Diciembre de 2009, Richard Osborn escribió:
>> Hi,
>> I've just recently started learning Ragel. I have read the guide pdf
>> and I can't seem to find a solution to this problem.
>> Let's say I have this grammar:
>> %%{
>> op = '+'+;
>> word = alpha+;
>> spaces = ' '+;
>> base = spaces
>>
>> | word >start_word $in_word %end_word
>> | op >start_op $in_op %end_op
>>
>> ;
>> main := base+;
>> }%%
>>
>> What I would like to see is this:
>> http://imgur.com/POP8U.png
>>
>> What Ragel compiles is this:
>> http://imgur.com/x36VA.png
>>
>> Can anyone help me get the behavior I'm looking?
>
> Imagine you parse "abc".
> Note that "main := base+;".
>
>
> So when Ragel reads "a" it performs ">start_word".
>
> Then Ragel reads "b". How can Ragel know if "b" is part of the first
> 'base' or
> the first char of a new 'base'? Both options are valid, so Ragel
> runs action
> for both (in parallel), so it runs:
>
> - ">start_word" because "b" could be the start of a new 'base'.
>
> - "$in_word" because "b" could be part of the previous 'base' and
> it's a valid
> existing point.
>
> - ">end_word" because when considering "b" as a new 'base' it means
> that first
> 'base' ("a") has totally ended.
>
> Of course, this will happen for each char. The main problem of your
> grammar is
> that Ragel cannot determine (who can?) how to split "base+;" into
> different
> "words" so it takes *all* the valid options *in parallel*.
>
>
> Hope this helps. Regards.
>
>
>
>
> --
> Iñaki Baz Castillo <ibc at aliax.net>
>
> _______________________________________________
> ragel-users mailing list
> ragel-users at complang.org
> http://www.complang.org/mailman/listinfo/ragel-users
More information about the ragel-users
mailing list