<p>Am 29.12.2013 09:10 schrieb "Mark Morgan Lloyd" <<a href="mailto:markMLl.fpc-pascal@telemetry.co.uk">markMLl.fpc-pascal@telemetry.co.uk</a>>:<br>
><br>
> leledumbo wrote:<br>
>>><br>
>>> I can fix that either by putting a semicolon before the else- which I<br>
>><br>
>> believe is strictly incorrect<br>
>><br>
>> Nope, that's correct. Take a look at the syntax diagram for case statement<br>
>> here:<br>
>> <a href="http://www.freepascal.org/docs-html/ref/refsu50.html">http://www.freepascal.org/docs-html/ref/refsu50.html</a><br>
>><br>
>> As you can see, each "case" is terminated by ";". From the parser point of<br>
>> view, your code is exactly parsed as:<br>
><br>
><br>
> No, that shows a semicolon separating successive cases, not terminating each one. What's more  statement  can be a  compound statement  and that's similarly defined as using ; as a separator.<br>
><br>
> Bit of an old chestnut, and my recollection is that an extra semicolon would crash some versions of Turbo Pascal. I'm not sure where my copy of J&W is, so I can't go back to the BNF... but it wouldn't help since else  was added to the  case  statement by Turbo Pascal which explicitly has<br>

><br>
>   case expression of case-element { ; case-element } else<br>
><br>
> where a case-element ends with a statement which can be a compound-statement which again defines ; as a separator.<br>
><br>
> (Oh Lord this is all we need: a syntax war to round off the year.)</p>
<p>In case you don't need Delphi compatibility you can use "otherwise" instead of "else" inside a case-statement. This keyword comes from the ISO dialects and is enabled in all modes.</p>
<p>Regards,<br>
Sven</p>