Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.misty.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Hans-Peter Diettrich Newsgroups: comp.compilers Subject: Re: What is the meaning of an expression? Date: Thu, 20 Jan 2022 13:02:34 +0100 Organization: Compilers Central Lines: 46 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <22-01-076@comp.compilers> References: <22-01-052@comp.compilers> <22-01-060@comp.compilers> <22-01-066@comp.compilers> <22-01-067@comp.compilers> <22-01-068@comp.compilers> <22-01-069@comp.compilers> <22-01-070@comp.compilers> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="64223"; mail-complaints-to="abuse@iecc.com" Keywords: design Posted-Date: 20 Jan 2022 12:41:36 EST X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com In-Reply-To: <22-01-070@comp.compilers> Content-Language: de-DE Xref: csiph.com comp.compilers:2848 On 1/19/22 6:17 PM, Jan Ziak wrote: > On Wednesday, January 19, 2022 at 4:13:36 PM UTC+1, Hans-Peter Diettrich > wrote: >> On 1/19/22 12:18 AM, gah4 wrote: >>> And especially, as the question >>> needs, expressions that don't have a value? >> Aren't these called *statements*? > > One could imagine that, as a minimal requirement that has to be fulfilled by > any statement, the "value" of a statement X must include information about > what the next statement is after X is done executing, unless the programmer or > the compiler proves that the statement never terminates by itself. Can you please specify the language you have in mind? Languages like C or Pascal distinguish expressions from statements in their grammar. Allowed is to ignore the value (result) of an expression evaluation but not to use a non-expression as a value. > Back to the original post by Roger L Costello: A problem with both "The > meaning of an expression is its value" and "The semantics of an expression is > the value of the expression" is that some expressions never return a value ARAIR K&R C defined the value of a function call to be the value contained in the accumulator after return. A decision with horrible consequences if you look at compiler and library source code of that time. OTOH it derogates the meaning of an expression if at any time one can find a value in the defined result register. So I think that it's moot to discuss obscure languages that do not strictly distinguish expressions from statements. At the abstract level we could try to define what *is* an expression, with my favorite: "Evaluation of an expression yields a value." Then it should be clear that the meaning of an expression is a value. DoDi [Early C didn't have default return values, but since the compilers also didn't do much type checking, I can believe there was a code that worked by accident becaues the value of the last expression in a function happened to be in the register where the caller looked for the result. It's sort of like the Berkeley bug, that there was always a zero byte at memory location zero so dereferencing null pointers sort of worked. -John]