On Thursday, July 22, 2021 at 6:26:22 PM UTC-4, Tim Rentsch wrote:
> James Kuyper <
james...@alumni.caltech.edu> writes:
> > On Saturday, July 10, 2021 at 11:49:09 AM UTC-4, Tim Rentsch wrote:
...
> >> The word "adjacent" doesn't alway mean touching. There is another
> >> word for that, the word "adjoining". Booking a hotel reservation
> >> for adjacent rooms is not the same as a reservation for adjoining
> >> rooms.
> >
> > But, if it doesn't mean "touching", what does it mean?
> In hotels, normally it means on the same floor and with no
> intervening rooms or other major building structures (but small
> things like utility closets don't count). In a country inn where
> there are standalone cottages rather than rooms, two cottages
> would normally be called adjacent if there were no other cottages
> in between, and the cottages in question were not inordinately far
> apart.
>
> In the C standard it means having no intervening tokens.
> > If a blank space
> > doesn't prevent them from being adjacent, what does?
> Another token (not a string literal token, presumably, ...
I think your wording got a little confused there. In "A""B""C", the "B"
string literal token definitely does prevent the "A" and "C" string literal
tokens from being considered adjacent. An implementation would
certainly be non-conforming if it concatenated "A" directly to "C" without
first concatenating one or the other with "B".
The following wording may be intended to address that issue:
> ... but only
> because we might consider a sequence of string literal tokens
> to be "adjacent tokens").
but it's not very clear that it does. The simpler approach is to say that
the one thing that unambiguously DOES prevent two string literal tokens
from being considered adjacent is another string literal token. The only
real question is whether there's anything else that does so.
It would make much more sense for pre-processing tokens to serve as
separators, rather than tokens, since tokens don't exist yet during
translation phase 6 - they don't come into existence until they are
created by conversion from pre-processing tokens during translation
phase 7. String literals are members of both categories. header-names
are removed during translation phase 4, but all of the other differences
between pre-processing tokens and tokens remain valid during phase 6.
However, since white-space characters separating tokens supposedly
remains significant until translation phase 7, the same logic that favors
pre-processing tokens over tokens also favors including white-space
characters as separators. If they are still significant in phase 6, how are
they significant, if not as separators of string literal tokens? I don't claim
that this was the committee's intent (which is irrelevant to my mode of
reading the standard), only that it's an unintentional side effect of putting
the wording about white-space characters in the wrong translation
phase, which should be corrected.
...
> > I contend that it doesn't clearly make that distinction anywhere,
> If I may make a suggestion, how you read the C standard doesn't
> match the reading mode expected by its authors. ...
Your reading mode puts too much emphasis on guessing the intent of
the authors, and not enough on trying to write the text clearly enough to
avoid the need for such guesswork. You might be right that it is the
intended reading mode, but if so, I consider it a seriously flawed one.
...
> ... If no one else has noticed it in
> more than 30 years, what does that say about how clear or unclear
> the distinction is?
You can't be sure that no one else has noticed it, only that no one has
mentioned the issue in any forum that you monitor, during the time that
you have monitored it. Unless you're super-human, you could not have
come close to monitoring all forums where such an issue might have
been raised, for the entire 30 years that you refer to.