From: Dave Thomas Date: 2000-01-24T22:57:26-06:00 Subject: [ruby-talk:01177] Re: Possible bug in ruby-man-1.4 matz@netlab.co.jp (Yukihiro Matsumoto) writes: > Hi, > > In message "[ruby-talk:01172] Re: Possible bug in ruby-man-1.4" > on 00/01/24, Huayin Wang writes: > > |does this have anything to do with the following? > | > |irb(main):001:0> -2 ** 2 > |-4 > > Yes, but precedence of ** operater is usually higher than unary minus > operator among programming languages, e.g. > > % perl -le 'print -2**2' > -4 > % python -c 'print -2**2' > -4 > % ruby -e 'p -2**2' > -4 > % ruby.new -e 'p -2**2' > 4 Now there's a problem ;-( Maybe the answer is to get rid of the concept of negative numeric literals, so there's never any ambiguity as to whether -2 is a literal of a method call? Then, as an optimization, the parser could notice .-@ terminal pairs and replace them with a negated Fixnum. That way (-2)**2 would be parsed as ** /\ / \ -@ 2:Fixnum / / 2:Fixnum and optimized into ** /\ / \ -2:Fixnum 2:Fixnum Dave