I've now done a couple projects with recursion using fcall. It isn't too bad. Is there something I lose by doing this, beyond the ability to express the recursion in Ragel? What would really make switch tools for a project?<br>

<br>-Nate<br><br><br><div class="gmail_quote">On Thu, Apr 7, 2011 at 1:22 PM, Adrian Thurston <span dir="ltr"><<a href="mailto:thurston@complang.org">thurston@complang.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

To expand on this a bit ... it is entirely up to the user to manage the stack allocation. Ragel's support for recursive structures (fcall/fret) is an extension to the basic model, which is pure state machine (not a PDA). If you find you have a lot recursion in what you need to parse, you should consider that ragel might not be the right tool for the job.<br>


<br>
Regards<div class="im"><br>
<br>
On 03/29/2011 09:59 PM, Nate wrote:<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
Yes, see the int[] stack in the link. :) Also note the code under "prepush".<br>
<br>
-Nate<br>
<br>
<br>
On Tue, Mar 29, 2011 at 9:38 PM, Gordeev Vladimir<br></div><div class="im">
<<a href="mailto:gordeev.vladimir.v@gmail.com" target="_blank">gordeev.vladimir.v@gmail.com</a> <mailto:<a href="mailto:gordeev.vladimir.v@gmail.com" target="_blank">gordeev.vladimir.v@gmail.com</a>>> wrote:<br>


<br>
    Hm, this looks like solution. I will try it. Thanks.<br>
<br>
    Related question: Does Ragel have some inner stack to handle nested<br>
    fcall/fret?<br>
<br>
<br>
    On 30.03.2011 00:59, Nate wrote:<br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
    You can use fcall to jump to a machine, then fret to resume where<br>
    you were. It's a bit tricky, but once you understand it you can<br>
    parse recursively. See the startTable action here (though this is<br>
    a pretty hairy parser):<br>
    <a href="http://code.google.com/p/table-layout/source/browse/trunk/build/TableLayoutParser.rl" target="_blank">http://code.google.com/p/table-layout/source/browse/trunk/build/TableLayoutParser.rl</a><br>
<br>
    -Nate<br>
<br>
<br>
    On Tue, Mar 29, 2011 at 2:55 PM, Jonathan Castello<br></div><div class="im">
    <<a href="mailto:twisolar@gmail.com" target="_blank">twisolar@gmail.com</a> <mailto:<a href="mailto:twisolar@gmail.com" target="_blank">twisolar@gmail.com</a>>> wrote:<br>
<br>
        On Tue, Mar 29, 2011 at 1:15 PM, Gordeev Vladimir<br>
        <<a href="mailto:gordeev.vladimir.v@gmail.com" target="_blank">gordeev.vladimir.v@gmail.com</a><br></div><div class="im">
        <mailto:<a href="mailto:gordeev.vladimir.v@gmail.com" target="_blank">gordeev.vladimir.v@gmail.com</a>>> wrote:<br>
        > So I got following error:<br>
        ><br>
        >     test.rl:7:32: graph lookup of "list" failed<br>
<br>
        The reason you get that error is because a rule can only reference<br>
        definitions that came before it. "list" doesn't exist until the<br>
        definition is finished, so it can't reference itself. (That would<br>
        create a recursive structure anyways, which Ragel isn't<br>
        equipped to<br>
        handle natively.)<br>
<br>
        ~Jonathan<br>
<br>
        _______________________________________________<br>
        ragel-users mailing list<br></div>
        <a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a> <mailto:<a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a>><div class="im"><br>
        <a href="http://www.complang.org/mailman/listinfo/ragel-users" target="_blank">http://www.complang.org/mailman/listinfo/ragel-users</a><br>
<br>
<br>
<br>
    _______________________________________________<br>
    ragel-users mailing list<br></div>
    <a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a>  <mailto:<a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a>><div class="im"><br>
    <a href="http://www.complang.org/mailman/listinfo/ragel-users" target="_blank">http://www.complang.org/mailman/listinfo/ragel-users</a><br>
</div></blockquote>
<br>
<br>
    _______________________________________________<br>
    ragel-users mailing list<br>
    <a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a> <mailto:<a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a>><div class="im"><br>
    <a href="http://www.complang.org/mailman/listinfo/ragel-users" target="_blank">http://www.complang.org/mailman/listinfo/ragel-users</a><br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
ragel-users mailing list<br>
<a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a><br>
<a href="http://www.complang.org/mailman/listinfo/ragel-users" target="_blank">http://www.complang.org/mailman/listinfo/ragel-users</a><br></div>
--===============092103<br>
</blockquote>
<br>
-- <br>
Adrian D. Thurston<br>
<a href="http://www.complang.org/thurston/" target="_blank">http://www.complang.org/thurston/</a><div><div></div><div class="h5"><br>
<br>
_______________________________________________<br>
ragel-users mailing list<br>
<a href="mailto:ragel-users@complang.org" target="_blank">ragel-users@complang.org</a><br>
<a href="http://www.complang.org/mailman/listinfo/ragel-users" target="_blank">http://www.complang.org/mailman/listinfo/ragel-users</a><br>
</div></div></blockquote></div><br>