comp.lang.ada
 help / color / mirror / Atom feed
From: anon@anon.org (anon)
Subject: Re: Unary operator after binary operator: legal or not? => Compiler Error
Date: Tue, 31 Jul 2007 23:22:08 GMT
Date: 2007-07-31T23:22:08+00:00	[thread overview]
Message-ID: <AuPri.12685$ax1.5189@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: KdCri.384503$p47.38112@bgtnsc04-news.ops.worldnet.att.net

PROOF!

Using the three statements
 
  return +Left & +Right;
  return +Left * +Right;
  return +Left * -7;

we get the following three Expressions 

  +Left & +Right;
  +Left * +Right
  +Left * -7

Ada LRM 4.4 ( 2 ) =>  expression ::= relation 

  +Left & +Right;
  +Left * +Right
  +Left * -7

Ada LRM 4.4 ( 3 ) =>  relation ::= simple_expression 

  +Left & +Right;
  +Left * +Right
  +Left * -7

Ada LRM 4.4 ( 4 ) =>  simple_expression ::= [unary_adding_operator] 
                                            term 
                                            {binary_adding_operator term}

  ::=  +Left & +Right
       +      => is the unary, 
       Left   => is a Term,
       &      => binary_adding_operator 
       +Right => is second term 

  ::=  +Left * +Right
       +      => is the unary, 
       Left   => is a Term,
       *      => binary_adding_operator 
       +Right => is second term 

  ::=  +Left * -7
       +      => is the unary, 
       Left   => is a Term,
       *      => binary_adding_operator 
       -7     => is second term

For now, skiping Left as a Term, because no compiler error and to save 
time.

Using the second Term!
Ada LRM 4.4 ( 5 ) =>   term ::= factor 

  +Right
  -7

Ada LRM 4.4 ( 6 ) =>   factor ::= primary 

  +Right
  -7

Ada LRM 4.4 ( 7 ) =>   primary ::= numeric_literal | .. | (expression)

  +Right  => is defined as an expression
  -7      => is defined as an expression

Back to Ada LRM 4.4 ( 2 ) => expression ::= relation 

  +Right
  -7

Ada LRM 4.4 ( 3 ) =>  relation ::= simple_expression 

  +Right
  -7

Ada LRM 4.4 ( 4 ) =>  simple_expression ::= [unary_adding_operator] 
                                            term 
                                            {binary_adding_operator term}

  ::=   +Right
        +     => is the unary, 
        Right => term 
 
  ::=  -7
       -  => is the unary, 
       7  => term


Ada LRM 4.4 ( 5 ) =>   term ::= factor 

  Right
  7

Ada LRM 4.4 ( 6 ) =>   factor ::= primary 

  Right
  7

Ada LRM 4.4 ( 7 ) =>   primary ::= numeric_literal | string_literal 

  Right  => string_literal 
  7      => numeric_literal

All three  expressions are valid Ada expressions

  +Left & +Right
  +Left * +Right
  +Left * -7

Which means that the following three statement are valid!

  return +Left & +Right;
  return +Left * +Right;
  return +Left * -7;

Since GNAT gives an error!
That Denote This is a GNAT COMPILER ERROR!

And No Parenthesize Are Required!

GNAT COMPILER ERROR!



In <KdCri.384503$p47.38112@bgtnsc04-news.ops.worldnet.att.net>, anon@anon.org (anon) writes:
>In <h%Bri.384485$p47.369566@bgtnsc04-news.ops.worldnet.att.net>, anon@anon.org (anon) writes:
>>This maybe a compiler error.  It seams that my GNAT 2.1 from (NYC) as 
>>well as my GNAT 4.3 (GNU) and my Adacore GNAT 2005 (GPL) all state 
>>the same that it there is a "missing operand". But if you use the 
>>following:
>>       return "+"(Left) & "+"(Right);
>>or 
>>       return (+Left) & (+Right);
>>they both work
>>
>>From LRM 4.4 .. 4.5 and LRM 6.6 states that the unary functions can be 
>>redefined.  The reason I say this may be an compiler error is because 
>>the following will still give the same error: 
>>
>>Compiling: xyz.adb (source file time stamp: 2007-07-30 03:00:04)
>>
>>     1. 
>>     2. function Xyz (Left, Right : in integer) return integer is
>>     3. 
>>     4. begin -- Xyz
>>     5.     if +Left <= +Right then
>>     6.        return +Left * +Right;
>>                             |
>>        >>> missing operand
>>
>>     7.     end if;
>>     8. end Xyz;
>>
>
>Forgot to add, in my modified math version, if you replace the "+Right" 
>with "+7" which is a simple_expression it still will give an error. And 
>because you could replace the "+7" with "-7", for negative numbers, 
>which is also a simple_expression you still get an error. This means you 
>have found a compiler error!
>
>This needs to be reported!
>
>
>>In <KYtri.46105$Fc.35820@attbi_s21>, "Jeffrey R. Carter" <spam.jrcarter.not@acm.nospam.org> writes:
>>>Here's something confusing I encountered:
>>>
>>>with Ada.Strings.Unbounded;
>>>
>>>function Xyz (Left, Right : in Ada.Strings.Unbounded.Unbounded_String)
>>>return String is
>>>    function "+" (Right : in Ada.Strings.Unbounded.Unbounded_String)
>>>    return String renames Ada.Strings.Unbounded.To_String;
>>>begin -- Xyz
>>>    if +Left <= +Right then
>>>       return +Left & +Right;
>>>       --            ^ Error reported here.
>>>    end if;
>>>end Xyz;
>>>
>>>A compiler reports "missing operand", referencing the space after the "&".
>>>
>>>Why then does it accept the comparison in the previous line? Both are
>>>
>>>+Left [binary operator] +Right
>>>
>>>-- 
>>>Jeff Carter
>>>"Have you gone berserk? Can't you see that that man is a ni?"
>>>Blazing Saddles
>>>38
>>
>




  parent reply	other threads:[~2007-07-31 23:22 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-30 22:52 Unary operator after binary operator: legal or not? Jeffrey R. Carter
2007-07-30 23:39 ` Markus E.L.
2007-07-31  0:22 ` Adam Beneschan
2007-07-31 21:52   ` Jeffrey R. Carter
2007-07-31  8:01 ` anon
2007-07-31  8:16   ` Unary operator after binary operator: legal or not? => Compiler Error anon
2007-07-31  8:38     ` AW: Unary operator after binary operator: legal or not? => CompilerError Grein, Christoph (Fa. ESG)
2007-07-31 15:05     ` Unary operator after binary operator: legal or not? => Compiler Error Robert A Duff
2007-07-31 15:39       ` Dmitry A. Kazakov
2007-07-31 15:53         ` Robert A Duff
2007-07-31 17:02           ` Georg Bauhaus
2007-07-31 19:17             ` Adam Beneschan
2007-08-01  7:16               ` Maciej Sobczak
2007-08-01 15:23                 ` Adam Beneschan
2007-07-31 20:59             ` Robert A Duff
2007-08-01  7:24               ` Georg Bauhaus
2007-08-01  8:02                 ` Dmitry A. Kazakov
2007-08-01  8:17                   ` AW: Unary operator after binary operator: legal or not? => CompilerError Grein, Christoph (Fa. ESG)
2007-08-01 10:10                     ` Ian Clifton
2007-08-01  9:34                   ` Unary operator after binary operator: legal or not? => Compiler Error Georg Bauhaus
2007-08-01 21:51                 ` Jeffrey R. Carter
2007-07-31 17:52           ` Dmitry A. Kazakov
2007-08-02 20:44           ` Charles Lindsey
2007-08-03  7:48             ` Stuart
2007-08-03  7:51             ` Dmitry A. Kazakov
2007-07-31 23:22     ` anon [this message]
2007-08-01  0:13       ` Adam Beneschan
2007-08-01  6:20         ` Unary operator after binary operator: legal or not? => Illegal anon
2007-08-01  5:34       ` AW: Unary operator after binary operator: legal or not? => CompilerError Grein, Christoph (Fa. ESG)
2007-08-01  6:46         ` To := Grein, Christoph (Fa. ESG) anon
2007-08-01  7:11           ` AW: " Grein, Christoph (Fa. ESG)
2007-08-02  6:52             ` anon
2007-08-02  8:56               ` AW: " Grein, Christoph (Fa. ESG)
2007-08-02 22:29                 ` Markus E.L. 2
2007-08-02 23:02                   ` tmoran
2007-08-02 23:11                     ` Ed Falis
2007-08-02 23:34                     ` Markus E.L. 2
2007-08-03  4:42                   ` AW: " Grein, Christoph (Fa. ESG)
2007-08-02 22:28               ` Markus E.L. 2
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox