Tony Whyman via fpc-pascal wrote:

Back in the early eighties, I worked at ICL and we made extensive use of the Prospero Pascal compiler building embedded systems based on the Z80 microprocessor. I still have a 1988 edition of the language specification, and this uses EBNF to define the case statement as:

case-statement = "CASE" case-index "OF"
  case-list-element {";" case-list-element }
   [ ";" OTHERWISE statement][";"] "END"

case-index = expression
case-list-element = case-range-list ":" statement
case-range-list = case-range {"," case-range }
case-range = case-constant [".." case-constant ]
case-constant = constant

What is interesting about the above is not just that it uses "otherwise" but that it insists on a semi-colon before the "otherwise". This may not have been strictly necessary but it does enforce the separation between the case -list-elements and the "otherwise", making the "otherwise" clause into another case-list-element. It also aids readability and it may be why I have always added a semi-colon after the final case-list-element. Note that the final optional ";" is probably needed to allow those that always like to end a statement in a semi-colon.

Prospero Pascal was close to ISO Pascal (although I have lost my original copy of ISO Pascal) and I would guess that the above is copied from ISO Pascal.

ISO-7185 Pascal doesn't have an else/otherwise in the case-statement, ISO-10206 Extended Pascal does, but it is of later date.

The change from "otherwise" to "else" is probably a Borland Pascal invention 
preferring a shorter word and then overlooking the importance of the semi-colon case-list-element 
separator and the resulting ambiguity. The same error then flowed through to exception handling.

As the otherwise-clause is not in ISO-7185 Pascal, it seems more plausible that Borland invented the else-clause (without semicolon) independently. All other Pascals I have looked at, use an otherwise-clause (with an obligatory semicolon). The motivation for this, given in IBM Pascal is interesting. The manual says that the statement-part of the otherwise-clause can be intentionally "left blank" and be used "to prevent possible errors during execution". I recall that in ISO-7185 Pascal it is an error if no case discriminator matches at runtime. So, the otherwise-clause was seen as a way to get around that !

Regards,

Adriaan van Os
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to