Looping Statements
Looping statements generate multiple statements in intermediate code, as shown in the following patterns. (Generate label numbers by j = labelnumber++;.)
for i := start to end do s
(PROGN (:= i start)
(LABEL j)
(IF (<= i end)
(PROGN s
(:= i (+ 1 i))
(GOTO j) )))
while c do s
(PROGN (LABEL j)
(IF c (PROGN s (GOTO j))))
repeat statements until c
(PROGN (LABEL j)
(PROGN statements)
(IF c (PROGN) (GOTO j)))
The empty (PROGN) acts as a no-op.