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.