[ragel-users] Question on ragel

Adrian Thurston thurston at complang.org
Sun Nov 24 17:59:11 UTC 2013


You're right it won't work because the fcall transfers control 
immediately. The fbreak is unreachable.

Try saving the return point to a var using the scanner name, changing 
the fcall to fnext and then use fgoto (return_point) in place of the fret.

Adrian

On 13-10-13 03:14 PM, eric at makechip.com wrote:
>
> Hi -
>
> I would like to construct a scanner like the following:
>
> main := |*
>      A { fcall m1; fbreak; }
>   *|;
>
> m1 := |*
>     B { fcall m2; fbreak; }
> *|;
>
> m2 := |*
>     C { fret; fret; fbreak; }
> *|;
>
> Although ragel will  compile this, the generated C-code looks
> like it will not work like I intend.  There are two problems.
> One I would like machine C to return back to main, but I don't
> want to use fgoto because in the general case it may be a different
> scanner that needs to be returned to.   The other problem
> is that I don't think the fbreaks will work.  I really want to
> return a token, then perform the fcall, or fret.  Is this
> even possible?
>
> Thanks,
>
> Eric West
>
>
>
>
>
>
> _______________________________________________
> ragel-users mailing list
> ragel-users at complang.org
> http://www.complang.org/mailman/listinfo/ragel-users
>

_______________________________________________
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