develooper Front page | perl.perl6.language | Postings from October 2006

Precedence levels and associativity conflicts (Re: class interface of roles)

Thread Next
From:
Carl Mäsak
Date:
October 21, 2006 02:29
Subject:
Precedence levels and associativity conflicts (Re: class interface of roles)
Message ID:
16d769b70610210228o49bd2678o294f504ec95700b5@mail.gmail.com
Larry (>):
> [...]
> The non-chaining precedence level is a bunch non-associative operators
> like .. and cmp.  Historically, all operators of a particular precedence
> level have had the same associativity, so that when you analyze
>
>     $a op1 $b op2 $c
>
> you only have to compare op1 with op2 if they're the same precedence, and
> given the prededence you don't actually have to look at the individual
> ops.  What would it mean to have a left-associative op at the same precedence
> level as a right-associative op:
>
>     $a lefty $b righty $c
>
> Who would win?  So generally we try not to mix associativity within a
> precedence level.

Short question: what would happen if I as the user would try and
define two operators on the same precedence level, and then try to use
them in the above way? How far would I get?

In other words, I'd do something like this:

 my sub infix:<lefty>  is assoc('left')  ($a, $b) { $a - $b; }
 my sub infix:<righty> is assoc('right') ($a, $b) { $a - $b; }

 say (1 lefty 2 righty 3);   # a-ha! will this be -4 or 2 ?

Pugs currently dies on evaluating the last line, explaining to me that
an "ambiguous use of a right associative operator" occurred. This
might even be a fairly sane behavior. The only alternative I can think
of right now would be to disallow even _declaring_ two operators of
different associativity on the same precedence level... but that kind
of strictitude doesn't sound very perlish.

Kindly,
-- 
masak

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About