[ragel-users] Re: fnext followed by fbreak

Adrian Thurston thurs... at cs.queensu.ca
Sun Apr 13 22:04:08 UTC 2008


Should now work in scanner actions too.

-Adrian

Andrei Polushin wrote:
> Adrian Thurston wrote:
>> This has been fixed in trunk.
> 
> OK, thank you for that. But it still doesn't work for the scanner actions.
> 
> I've  wrote a test program to clarify that, it's attached.
> 
> 
>> Andrei Polushin wrote:
>>> The action like this:
>>>
>>>      action x {
>>>          fnext somewhere_else;
>>>          fbreak;
>>>      };
>>>
>>> become generated as follows:
>>>
>>>      action x {
>>>          cs = 123;                   // fnext somewhere_else;
>>>          {p++; cs = 456; goto _out;} // fbreak;
>>>      };
>>>
>>> where '123' is the desired next state (aka somewhere_else),
>>> and '456' is the default target state for the transition.
>>>
>>> That is, the effect of fnext is neglected, when followed by fbreak.
>>>
>>> For now, the workaround is to redeclare 'cs' in local block:
>>>
>>>      action x {
>>>          fnext somewhere_else;
>>>          {int cs = -1; fbreak;}
>>>      };
>>>
>>> but I hope there should be a better solution for this.
>>>
>>> For actions that involve both fnext and fbreak, I would suggest
>>> generating {cs = ...} in the beginning of the action, and omit
>>> that assignnment in the code generated by fbreak.
> 



More information about the ragel-users mailing list