Path: csiph.com!news.mixmin.net!eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch
Newsgroups: comp.lang.c
Subject: Re: Christmas Quiz 2022
Date: Mon, 26 Dec 2022 06:24:00 -0800
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <86pmc6w8e7.fsf@linuxsc.com>
References: <20221220054654.91@kylheku.com> <87tu1quou7.fsf@bsb.me.uk> <87ili6unpn.fsf@bsb.me.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Info: reader01.eternal-september.org; posting-host="b017513bf0c3c2565b748ac271e0e545"; logging-data="3458102"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/t4A10of0oG/p5FWLtu9grRsGYlV+/PAg="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:EI/PzrBRrTYou1W/0rtdgXG5QJ4= sha1:AHZfVeMmOcat5lTtm/bOIRUnVqo=
Xref: csiph.com comp.lang.c:168637
Lew Pitcher writes:
> On Tue, 20 Dec 2022 15:03:36 +0000, Lew Pitcher wrote:
>
>> On Tue, 20 Dec 2022 14:57:56 +0000, Ben Bacarisse wrote:
>
> [snip]
>
>>>> The notable point is that the semicolon between clause-1 and
>>>> expression-2 is /not/ part of clause-1, but is, instead part of
>>>> the for statement itself.
>>>
>>> But that does not help if the grammar for a declaration still
>>> includes a semicolon. I wonder what all the relevant parts of the
>>> draft you are referring to look like when taken together.
>>>
>>>> Because of this, I don't believe that your count can be correct.
>>>> But, I'm willing to be educated on this :-)
>>>
>>> Well, I did add (but then deleted) that the count depends on how
>>> the grammar is structured. I should look at a more recent draft
>>> that will have taken the confirmed C11 text as a starting point.
>>> I might do that later, but I am in a rush!
>>
>> Perhaps I've got an outdated copy of the draft standard, and the
>> semicolon question was asked and answered in a later release.
>>
>> Your explanation sounds valid to me. 'Tis a puzzle to be resolved
>> later.
>
> Oops... I found it.
>
> Under 6.8.5 Iteration statements
> Syntax
> ...
> for ( expression ; expression ; expression ) statement
> for ( declaration expression ; expression ) statement
>
> (all expressions are marked optional)
>
> Crisis averted. You are indeed correct, and I've learned something
> new today. :-)
>
> But, that doesn't explain why 6.8.5.3 ("the for statement") shows
> the syntax it does. Perhaps the draft missed something in resolving
> the text between 6.8.5 and 6.8.5.3.
This line
for ( clause-1 ; expression-2 ; expression-3 ) statement
in 6.8.5.3 p1 is not syntax. It may /look/ like syntax, but it
isn't; it is simply a template to assist the discussion later in
the same paragraph and subsequent paragraph (and also in various
footnotes). How do we know it isn't syntax? For starters, it
isn't labeled 'Syntax', as are all other syntax excerpts in the C
standard. (Disclaimer: I'm pretty sure this is true but I
didn't check every one.) Also, none of clause-1, expression-2,
and expression-3 are defined non-terminals. They are there to
serve as reference points for the subsequent discussion, not to
to be part of the C syntax.
So it seems clear that this non-syntax line is present as a
deliberate choice, put there to aid the discussion of semantics
but not as part of the C syntax.