FOR id ":=" expr1 TO expr2 [ BY stepval ] DO stmts END
Initializes id to expr1, evaluates expr1 and expr2, then executes stmts, increments id by stepval (by 1 if stepval is not specified), and loops if id <= expr2. If stepval is negative, then loops while id >= expr2.
expr1 and expr2 must both be of the same ordinal type (see section Ordinal Types). id is defined locally by the FOR loop as a READONLY variable, and its type is the type common to expr1 and expr2.
VAR i: INTEGER := 5;
    x: INTEGER;
BEGIN
  FOR i := 1 TO 10 DO  x := i  END; (* FOR *)
  IO.PutInt(i);   (* Puts '5', because the 'i' in the FOR loop isn't the same 
                     as this 'i' *)
  IO.PutInt(x);   (* Puts '10' because 'x' was assigned the value of the 'i'
                     in the FOR loop *)
END
Print the letters 'A'..'E' using the CHAR ordinal type for the FOR limits:
FOR i := 'A' TO 'E' DO IO.PutChar(i) END (* 'i' is of type CHAR *)