[fpc-pascal] Re: Very odd case parsing problem
Sven Barth
pascaldragon at googlemail.com
Sun Dec 29 12:06:19 CET 2013
Am 29.12.2013 09:10 schrieb "Mark Morgan Lloyd" <
markMLl.fpc-pascal at telemetry.co.uk>:
>
> leledumbo wrote:
>>>
>>> I can fix that either by putting a semicolon before the else- which I
>>
>> believe is strictly incorrect
>>
>> Nope, that's correct. Take a look at the syntax diagram for case
statement
>> here:
>> http://www.freepascal.org/docs-html/ref/refsu50.html
>>
>> As you can see, each "case" is terminated by ";". From the parser point
of
>> view, your code is exactly parsed as:
>
>
> 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.
>
> 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
>
> case expression of case-element { ; case-element } else
>
> where a case-element ends with a statement which can be a
compound-statement which again defines ; as a separator.
>
> (Oh Lord this is all we need: a syntax war to round off the year.)
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.
Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20131229/b9e58fe6/attachment.html>
More information about the fpc-pascal
mailing list