Simple operator precidence chart (and associativity)?

Nick Sabalausky a at a.a
Wed Mar 14 03:12:36 PDT 2012


"Timon Gehr" <timon.gehr at gmx.ch> wrote in message 
news:jjpmov$305u$1 at digitalmars.com...
> On 03/14/2012 01:20 AM, Nick Sabalausky wrote:
>> "Timon Gehr"<timon.gehr at gmx.ch>  wrote in message
>
>>> >> << >>>         // 8 shift operators
>>> == !=>  <  >=<= \ // 9 relational operators
>>> !>  !<  !>= !<=<>\
>>> !<>  <>= !<>= in \
>>> !in is !is
>>> &                 // 10 bitwise AND (ambiguous with 9)
>>> ^                 // 11 bitwise XOR (ambiguous with 9)
>>> |                 // 12 bitwise OR  (ambiguous with 9)
>>
>> Ah, see, that's what I was tripping up on. I thought there seemed to be
>> something slightly odd going on with those (and then from there I started
>> second-guessing everything). It seemed almost like these had both ordered
>> priorities *and* the same priority.
>>
>> So how exactly does this part work then?
>>
>
> It is a special case. If a bitwise operator appears next to a relational 
> operator, then the expression has to be parenthesised for disambiguation. 
> You can think of it as a partial order:
>
>                     ...
>                      |
>               shift operators
>                     ^ ^
>                    /   \
>                   /  bitwise AND
>                  /       \
>                 /      bitwise XOR
>                /            \
> relational operators      bitwise OR
>                 ^           ^
>                  \         /
>                   \       /
>                    \     /
>                     \   /
>                  logical AND
>                       ^
>                       |
>                  logical OR
>                       ^
>                       |
>                      ...
>
> The precedence of bitwise operators cannot be compared with the precedence 
> of relational operators, and D disallows programs that cannot be parsed 
> unambiguously.

Ok, I see. Thanks.




More information about the Digitalmars-d-learn mailing list