On Thu, 26 Sep 2002, John Williams wrote:
: I'm trying to write a revised operator precedence table for perl6,
: similar to the one in perlop.pod.
: 
: This is what I have come up with based on Apocalypse 3 and Exegesis 3.  
: Does anyone have comments?  I'm not sure if the precedence 
: for : (adverb) or 'is' and 'but' are quite right.

Me either.

: perl6 operator precedence
: 
:            left        terms and list operators (leftward) [] {} () quotes
:            left        . and unary .

Unary . can't be left associative.  Perhaps unary . is nonassoc like ++.

:            nonassoc    ++ --
:            left        is but

Should probably be down about where .. is, maybe same as.

:            right       **
:            right       ! \ and unary ~ + - * _   

Probably unary ? goes here too.

:            left        =~ !~

Probably should be the same as all the other comparison ops.

:            left        * / % x

And & maybe.

:            left        + - _

And | maybe.

:            left        << >>

Can be argued these are really just multiplicative.  Or even exponential.

:            right       named unary operators, -X
:            left        < > <= >= lt gt le ge == != <=> eq ne cmp
:            left        &
:            left        | ~

Not sure what to do with ~ if we move & and |.  Probably just follows |.

:            left        &&
:            left        || ~~ //
:            nonassoc    ..  ...

Maybe "but" here.  Maybe "is" too, though compile-time declarations
don't necessarily have the same syntactic constraints as ordinary
expressions.

:            right       ??::
:            right       = := **= += -= _= *= /= %= x= &= |= ~= 
:                             <<= >>= &&= ||= ~~= //= 
:            left        , =>

=> is no longer a comma.  I think it has to be tighter than , now,
or we can't say

    a => "a", b => "b"

Perhaps it goes in as another nonassoc .. operator.

:            left        ;
:            left        :

While semicolon is definitely looser than comma, it's not clear where
colon should go yet.

:            nonassoc    list operators (rightward)
:            right       not

I've also considered unifying C<not> with the list operators, which are
actually right associative, or you couldn't say

    print sort 1,2,3;

On the other hand, it would be strange for C<not> to give its right
side a list context.

:            left        and
:            left        or xor err

Those are fine.  :-)

Larry

Reply via email to