Bug #10351 Updated: Parsing problem with nested ? : structures

2002-04-29 Thread m . ford

 ID:   10351
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
 Status:   Open
 Bug Type: Feature/Change Request
 Operating System: Sun OS 5.7
 PHP Version:  4.0.3pl1
 New Comment:

I think the key here is not precedence, but associativity.  The ?:
operator is listed as being left-associative which, I think, means your
simplified example will be evaluated like this:

(1 ? (1 ? "3" : "2") : 1) ? "1" : "0"

which will, indeed, result in 1!

A right-associative ?: would be grouped as you expected, like this:

1 ? (1 ? "3" : "2") : (1 ? "1" : "0")

-- ergo, in C ?: must be right-associative!!

(As a side-note, operator associativity is listed in the operator
precedence table with no real explanation of what it means, or link to
such explanation -- perhaps this should be made a documentation feature
request?)


Previous Comments:


[2002-04-29 11:13:40] [EMAIL PROTECTED]

See comment starting with "I checked...".



[2002-04-29 10:34:57] [EMAIL PROTECTED]

I checked, and < has a higher precedence than ?: as one
would expect.  For example, with $dHour = 5, this is
equivalent to:

$departmeals = 1 ? 1 ? "3" : "2" : 1 ? "1" : "0";

which should evaluate to "3" but evaluates to "1" instead.

The C language has no trouble with this construction:

sun-66% cat temp.c
#include 
main(){
printf("%s\n",1 ? 1 ? "3" : "2" : 1 ? "1" : "0");
}
sun-66% cc temp.c
sun-66% a.out
3



[2002-04-27 15:19:22] [EMAIL PROTECTED]

it does execute correctly, given the relative precedence of the '<' and
'?:' operators.



[2001-04-16 16:14:48] [EMAIL PROTECTED]

The following statement does not execute correctly:

 $departmeals = $dHour < 10.5 ? $dHour < 6.0 ? "3" : "2" 
:
   $dHour < 18.0 ? "1" : "0";

No error message--it just returns the wrong result.  It does execute
correctly if parentheses are added:

 $departmeals = $dHour < 10.5 ? ($dHour < 6.0 ? "3" : "2")
:
   ($dHour < 18.0 ? "1" : "0");

The original is not ambiguous; it should parse and execute correctly.





-- 
Edit this bug report at http://bugs.php.net/?id=10351&edit=1




Bug #10351 Updated: Parsing problem with nested ? : structures

2002-04-29 Thread dwilson

 ID:   10351
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
-Status:   Closed
+Status:   Open
 Bug Type: Feature/Change Request
 Operating System: Sun OS 5.7
 PHP Version:  4.0.3pl1
 New Comment:

See comment starting with "I checked...".


Previous Comments:


[2002-04-29 10:34:57] [EMAIL PROTECTED]

I checked, and < has a higher precedence than ?: as one
would expect.  For example, with $dHour = 5, this is
equivalent to:

$departmeals = 1 ? 1 ? "3" : "2" : 1 ? "1" : "0";

which should evaluate to "3" but evaluates to "1" instead.

The C language has no trouble with this construction:

sun-66% cat temp.c
#include 
main(){
printf("%s\n",1 ? 1 ? "3" : "2" : 1 ? "1" : "0");
}
sun-66% cc temp.c
sun-66% a.out
3



[2002-04-27 15:19:22] [EMAIL PROTECTED]

it does execute correctly, given the relative precedence of the '<' and
'?:' operators.



[2001-04-16 16:14:48] [EMAIL PROTECTED]

The following statement does not execute correctly:

 $departmeals = $dHour < 10.5 ? $dHour < 6.0 ? "3" : "2" 
:
   $dHour < 18.0 ? "1" : "0";

No error message--it just returns the wrong result.  It does execute
correctly if parentheses are added:

 $departmeals = $dHour < 10.5 ? ($dHour < 6.0 ? "3" : "2")
:
   ($dHour < 18.0 ? "1" : "0");

The original is not ambiguous; it should parse and execute correctly.





-- 
Edit this bug report at http://bugs.php.net/?id=10351&edit=1




Bug #10351 Updated: Parsing problem with nested ? : structures

2002-04-29 Thread dwilson

 ID:   10351
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
 Status:   Closed
 Bug Type: Feature/Change Request
 Operating System: Sun OS 5.7
 PHP Version:  4.0.3pl1
 New Comment:

I checked, and < has a higher precedence than ?: as one
would expect.  For example, with $dHour = 5, this is
equivalent to:

$departmeals = 1 ? 1 ? "3" : "2" : 1 ? "1" : "0";

which should evaluate to "3" but evaluates to "1" instead.

The C language has no trouble with this construction:

sun-66% cat temp.c
#include 
main(){
printf("%s\n",1 ? 1 ? "3" : "2" : 1 ? "1" : "0");
}
sun-66% cc temp.c
sun-66% a.out
3


Previous Comments:


[2002-04-27 15:19:22] [EMAIL PROTECTED]

it does execute correctly, given the relative precedence of the '<' and
'?:' operators.



[2001-04-16 16:14:48] [EMAIL PROTECTED]

The following statement does not execute correctly:

 $departmeals = $dHour < 10.5 ? $dHour < 6.0 ? "3" : "2" 
:
   $dHour < 18.0 ? "1" : "0";

No error message--it just returns the wrong result.  It does execute
correctly if parentheses are added:

 $departmeals = $dHour < 10.5 ? ($dHour < 6.0 ? "3" : "2")
:
   ($dHour < 18.0 ? "1" : "0");

The original is not ambiguous; it should parse and execute correctly.





-- 
Edit this bug report at http://bugs.php.net/?id=10351&edit=1




Bug #10351 Updated: Parsing problem with nested ? : structures

2002-04-27 Thread jimw

 ID:   10351
 Updated by:   [EMAIL PROTECTED]
 Reported By:  [EMAIL PROTECTED]
-Status:   Open
+Status:   Closed
 Bug Type: Feature/Change Request
 Operating System: Sun OS 5.7
 PHP Version:  4.0.3pl1
 New Comment:

it does execute correctly, given the relative precedence of the '<' and
'?:' operators.


Previous Comments:


[2001-04-16 16:14:48] [EMAIL PROTECTED]

The following statement does not execute correctly:

 $departmeals = $dHour < 10.5 ? $dHour < 6.0 ? "3" : "2" 
:
   $dHour < 18.0 ? "1" : "0";

No error message--it just returns the wrong result.  It does execute
correctly if parentheses are added:

 $departmeals = $dHour < 10.5 ? ($dHour < 6.0 ? "3" : "2")
:
   ($dHour < 18.0 ? "1" : "0");

The original is not ambiguous; it should parse and execute correctly.





-- 
Edit this bug report at http://bugs.php.net/?id=10351&edit=1