Modula-3: Case statements

## Case

A `CASE` statement has the form:

        CASE Expr OF
          L_1 => S_1
        | ...
        | L_n => S_n
        ELSE S_0
        END

where `Expr` is an expression whose type is an ordinal type and each `L` is a list of constant expressions or ranges of constant expressions denoted by "`e_1..e_2`", which represent the values from `e_1` to `e_2` inclusive. If `e_1` exceeds `e_2`, the range is empty. It is a static error if the sets represented by any two `L`'s overlap or if the value of any of the constant expressions is not a member of the type of `Expr`. The "`ELSE S_0`" is optional.

The statement evaluates `Expr`. If the resulting value is in any `L_i`, then `S_i` is executed. If the value is in no `L_i` and "`ELSE S_0`" is present, then it is executed. If the value is in no `L_i` and "`ELSE S_0`" is absent, a checked runtime error occurs.

    Last modified on Wed Apr  3 09:39:10 PST 1996 by heydon
         modified on Mon Apr 18 14:01:42 PDT 1994 by kalsow