Re: Goto (Was Re: Open Source)
- Posted by Juergen Luethje <j.lue at g?x.de> Oct 25, 2007
- 822 views
Me wrote: > Pete Lomax wrote: > > > Juergen Luethje wrote: > > > > > > This whole discussion is not logical for me. Someone asks for intrducing > > > GOTO into Euphoria, and other people make suggestions how to limit the > > > damage then. > > > The first question should be: Why does someone want GOTO, and exactly > > > _for what purposes_? I'm pretty sure then we can find more appropriate > > > constructs for the desired purposes -- high level constructs for the > > > high level language Euphoria. > > > > > Since you ask, I would say to translate a working program written in another > > language to Eu. > > This is a concrete reason which provides a solid basis for discussing, thanks. > > > As I recently said, I am not advocating goto, just not standing > > against it. Here is one case you probably already saw: > > > > int parse() > > { > > Token tok; > > > > reading: > > tok = gettoken(); > > if (tok == END) > > return ACCEPT; > > shifting: > > if (shift(tok)) > > goto reading; > > reducing: > > if (reduce(tok)) > > goto shifting; > > return ERROR; > > } > > If I didn't make a mistake, this translates to the following Eu program: > }}} <eucode> > procedure foo () > Token tok > > while 1 do > -- reading > tok = gettoken() > if tok = END then > return ACCEPT > end if > > while 1 do > -- shifting > if shift(tok) then > exit > end if > -- reducing > if not reduce(tok) then > return ERROR > end if > end while > end while > end procedure > </eucode> {{{ Must of course be 'function', not 'procedure'. I actually would prefer to write the code this way:
function foo () Token tok tok = gettoken() while tok != END do while not shift(tok) do if not reduce(tok) then return ERROR end if end while tok = gettoken() end while return ACCEPT end function
Now this is short and pretty clear. Without using GOTO, the structure of the program (2 nested loops) is directly visible. So the "nature" of the program can be understood immediately and intuitively. Regards, Juergen