fnext followed by fbreak

Andrei Polushin polus... at gmail.com
Sat Apr 12 22:25:02 UTC 2008


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.

-- 
Andrei Polushin
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: fnext.cpp.rl
URL: <http://www.colm.net/pipermail/ragel/attachments/20080413/f524a342/attachment.ksh>


More information about the ragel-users mailing list