[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