<div dir="ltr"><div>There is always an equivalent algorithm using arrays etc to make a manual stack (ie. looping instead of function calling to get the "recursion".).</div><div><br></div><div>Sometimes that's all you've got. eg. Fortran 77 etc does not provide recursion because it is not stack based (like C).<br></div><div><br></div><div>Function calling recursion is a lot easier and cleaner though.</div><div><br></div><div>Have you considered just saying sod it and using RPN for your assembler? Well for a first cut anyway.</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 14, 2024 at 6:24 AM Mark Atherton <<a href="mailto:markaren1@xtra.co.nz">markaren1@xtra.co.nz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Didn't pursue it, found a simpler solution.<br>
<br>
Just investigating Shunting yard algorithm for Algebraic to RPN <br>
conversion; can't see how can avoid recursion to process complex <br>
expressions :)<br>
<br>
Hair-loss to follow...<br>
<br>
-Mark<br>
<br>
<br>
On 4/13/2024 6:42 PM, Charles Manning wrote:<br>
> I am curious Mark: did you get the recursion working?<br>
> <br>
> <br>
> On Sat, Mar 30, 2024 at 1:25 PM Mark Atherton <<a href="mailto:markaren1@xtra.co.nz" target="_blank">markaren1@xtra.co.nz</a> <br>
> <mailto:<a href="mailto:markaren1@xtra.co.nz" target="_blank">markaren1@xtra.co.nz</a>>> wrote:<br>
> <br>
>     All,<br>
> <br>
>     The cross assembler is x86 based, has a deterministic exit condition,<br>
>     and debug code showing return values. It only exits once, hence<br>
>     checking<br>
>     compiler constraints before looking closer look for stupidity on my<br>
>     part.<br>
> <br>
>     Thanks for all the comments.<br>
> <br>
>     Mark<br>
> <br>
>     On 3/30/2024 12:15 PM, Volker Kuhlmann wrote:<br>
>      >> I am building an RPN expression evaluator for the uCPU<br>
>     assembler; I can't<br>
>      >> see any other way to go other than to use recursion to do the nested<br>
>      >> processing that I wish.<br>
>      ><br>
>      > I agree that that should have nothing to do with gcc, although it is<br>
>      > possible that gcc has quite a few bugs affecting correct code<br>
>     generation<br>
>      > for some µC cores. Those are gcc version dependent too.<br>
>      ><br>
>      > What architecture are you generating code for? Is your assembler<br>
>     running<br>
>      > on x86? It's safe to assume for that that crashes are caused by your<br>
>      > code, not gcc.<br>
>      ><br>
>      > Recursive programming relies on having a reliable exit condition,<br>
>     taken<br>
>      > before resources like stack run out. An easy way to check is to write<br>
>      > out the parameters for each call on a single line, one line per call,<br>
>      > and any unrestrained criteria show up at the bottom of the screen.<br>
>      ><br>
>      >> It could be that the compiler is not generating re-entrant code.<br>
>      ><br>
>      > Not for x86. More likely a variable which changes with each call<br>
>     is not<br>
>      > local. A compiler bug, if it's for esoteric cores, would still be<br>
>     down<br>
>      > on my list.<br>
>      ><br>
>      > Why don't you just compile for x86 and test in a high-resource<br>
>      > environment first?<br>
>      ><br>
>      > Volker<br>
>      ><br>
> <br>
> <br>
>     _______________________________________________<br>
>     Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a><br>
>     <mailto:<a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a>><br>
>     <a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a><br>
>     <<a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a>><br>
>     Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a><br>
>     <<a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a>><br>
>     Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a><br>
>     <<a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a>> for venue, directions and dates.<br>
>     When replying, please edit your Subject line to reflect new subjects.<br>
> <br>
> <br>
> _______________________________________________<br>
> Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a><br>
> <a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a><br>
> Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a><br>
> Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a> for venue, directions and dates.<br>
> When replying, please edit your Subject line to reflect new subjects.<br>
<br>
<br>
_______________________________________________<br>
Chchrobotics mailing list <a href="mailto:Chchrobotics@lists.ourshack.com" target="_blank">Chchrobotics@lists.ourshack.com</a><br>
<a href="https://lists.ourshack.com/mailman/listinfo/chchrobotics" rel="noreferrer" target="_blank">https://lists.ourshack.com/mailman/listinfo/chchrobotics</a><br>
Mail Archives: <a href="http://lists.ourshack.com/pipermail/chchrobotics/" rel="noreferrer" target="_blank">http://lists.ourshack.com/pipermail/chchrobotics/</a><br>
Meetings usually 3rd Monday each month. See <a href="http://kiwibots.org" rel="noreferrer" target="_blank">http://kiwibots.org</a> for venue, directions and dates.<br>
When replying, please edit your Subject line to reflect new subjects.</blockquote></div>