[Oberon] Re (2): LOOP conversion

August Karlstrom fusionfile at gmail.com
Wed Jan 6 21:13:15 CET 2021

On 2021-01-06 19:41, peter at easthope.ca wrote:
> Unrefined oberservations.
> (1) Isomorphism exists between LOOP texts and WHILE texts.
> (2) Loops can be nested in a tree structure.  At each level there can
> be multiple loops and the number of levels is arbitrary.
> (3) In the general case a continuation flag is needed for each level.
> Eg. VAR continue0, continue1 ... : BOOLEAN;
> (4) A LOOP having only one exit in the form "LOOP IF a THEN EXIT END;
> ... END" can be replaced with "WHILE ~a DO ... END".
> (5) A LOOP having only one exit in the form "LOOP ... IF a THEN EXIT
> END END" can be replaced with "REPEAT ... UNTIL a".
> (6) Pattern "LOOP statements0 IF a THEN EXIT END; statements1 END"
> becomes "continue := TRUE; WHILE continue DO; statements0 IF a THEN
> continue := FALSE ELSE statements1 END END".

We should also note that this is only the first step to make the program 
compile. If comprehensibility is the goal the variables named 
"continue", "done" etc. should ideally be replaced with something more 
descriptive and specific. When skimming through the program a loop like

	continue := TRUE;
	WHILE continue DO

is not very informative. After the loop we know that `continue' is false 
but what does that imply?

-- August

More information about the Oberon mailing list