Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <vb09gd$16mr5$1@dont-email.me>
Deutsch   English   Français   Italiano  
<vb09gd$16mr5$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: Top 10 most common hard skills listed on resumes...
Date: Sun, 1 Sep 2024 00:37:49 +0100
Organization: A noiseless patient Spider
Lines: 57
Message-ID: <vb09gd$16mr5$1@dont-email.me>
References: <vab101$3er$1@reader1.panix.com> <vai1ec$2fns2$1@dont-email.me>
 <874j75zftu.fsf@bsb.me.uk> <valrj7$367a8$2@dont-email.me>
 <87mskwy9t1.fsf@bsb.me.uk> <vanq4h$3iieb$1@dont-email.me>
 <875xrkxlgo.fsf@bsb.me.uk> <vapitn$3u1ub$1@dont-email.me>
 <87o75bwlp8.fsf@bsb.me.uk> <vaps06$3vg8l$1@dont-email.me>
 <871q27weeh.fsf@bsb.me.uk> <20240829083200.195@kylheku.com>
 <87v7zjuyd8.fsf@bsb.me.uk> <20240829084851.962@kylheku.com>
 <87mskvuxe9.fsf@bsb.me.uk> <vaq9tu$1te8$1@dont-email.me>
 <875xrivrg0.fsf@bsb.me.uk> <20240829191404.887@kylheku.com>
 <86cylqw2f8.fsf@linuxsc.com> <871q2568vl.fsf@nosuchdomain.example.com>
 <vavmbk$13k4n$1@dont-email.me> <87cylo494u.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 01 Sep 2024 01:37:49 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="7c5d16649a59882fdfa20508367d602d";
	logging-data="1268581"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19lrpMZ6SKxrJ0nDmInSFSl"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:l2vZpxv9NGhoFsb0F21tdukXK4w=
Content-Language: en-GB
In-Reply-To: <87cylo494u.fsf@nosuchdomain.example.com>
Bytes: 3662

On 31/08/2024 23:31, Keith Thompson wrote:
> Bart <bc@freeuk.com> writes:
> [...]
>> Given this:
>>
>>     x + y = z;
>>     (x + y) = z;
>>
>> My compiler produces the same AST for the LHS of '=' in both cases.
> [...]
> 
> If that's the case (and I don't doubt that it is), then your compiler is
> not following the grammar specified by the ISO C standard.  Since
> `x + y` is not a unary-expression, `x + y = z` is not a syntactically
> valid assignment expression.

Yet no compiler out of the dozen I tried reported a syntax error (except 
SDCC).

So what AST is produced by gcc, if any?

Most compilers, including mine, complain that an lvalue is expected.

> 
> A parser that strictly follows the ISO C grammar would reject
> (diagnose, flag, whatever) `x + y = z;` just as it would reject `x = y +;`.

Which one does that (apart from SDCC)?


> This is an observation, not a complaint.  It doesn't imply that your
> compiler is non-conforming or buggy.  A parser that doesn't strictly
> follow the ISO C grammar could still be part of a conforming compiler.
> 

I can also say that the C grammar is buggy:

     assignment-expression:
         conditional-expression
         unary-expression asssignment-operator assignment-expression

When attempting to parse an assignment-expression, do you go for a 
conditional-expression or unary-expression?

The latter is a subset of the former. If you go for a 
conditional-expression and find that an assignment-operator follows, now 
you have to perform some analysis on the LHS to see if that 
conditional-expression contains only a unary-expression.

However, if it's not a unary-expression, it will fail for other reasons
anyway, because all those other things that a conditional-expression 
will be, can't be lvalues.

That also applies to many unary-expressions, such as 42, or a++; those 
can't be lvalues either, even though the syntax is valid.

So it makes sense to do only an lvalue test.