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