[fpc-pascal] case statement

Michael Van Canneyt michael at freepascal.org
Fri Dec 15 11:04:24 CET 2023



On Fri, 15 Dec 2023, Adriaan van Os via fpc-pascal wrote:

> Michael Van Canneyt via fpc-pascal wrote:
>> 
>> 
>> On Fri, 15 Dec 2023, Adriaan van Os via fpc-pascal wrote:
>> 
>>> Note that the same ambiguity exists in the <exception-handler> syntax (and 
>>> this is less well known)
>>> 
>>> exceptionhandlers =  [ exception-handler { ";" exception-handler } [ 
>>> "ELSE" statement-list ] | statement-list ] .
>>> exception-handler = "ON" [ identifier ":" ] class-type-identifier "DO" 
>>> statement .
>>> 
>>> as <exception-handler> ends with a <statement> and the optional <"ELSE" 
>>> statement-list> part start with "ELSE". Sloppy language design, I assume 
>>> by Borland.
>> 
>> What exactly do you consider "sloppy" ?
>
> The ambiguity in the syntax whether ELSE belong to <statement> or to <"ELSE" 
> statement-list>.

Why do you think this is ambiguous ? It always belongs to statement list.

If there is ambiguity, it is in the if then else construct.
This makes it difficult to read for humans.

>> The fact that the semicolon before the else is optional ?
>
> I don't see a semicolon in the formal syntax.

This works:

---
{$mode objfpc}

uses sysutils;

begin
   try
   except
     on E: EAccessViolation do
       begin
       end;
     on E: EInoutError do
       begin
       end; // can be removed or not.
     else
       begin
       Writeln('OK');
       end;
   end;

end.
---

Michael.


More information about the fpc-pascal mailing list