Related articles |
---|
Peculiarity in Ada grammar clsi!graham@uunet.UU.NET (1994-01-19) |
Re: Peculiarity in Ada grammar nebbe@lglsun.epfl.ch (1994-01-20) |
Re: Peculiarity in Ada grammar burley@mole.gnu.ai.mit.edu (1994-01-20) |
Newsgroups: | comp.compilers |
From: | burley@mole.gnu.ai.mit.edu (Craig Burley) |
Keywords: | Ada, parse, design |
Organization: | Free Software Foundation 545 Tech Square Cambridge, MA 02139 |
References: | 94-01-071 |
Date: | Thu, 20 Jan 1994 17:45:25 GMT |
clsi!graham@uunet.UU.NET (Paul Graham) writes:
Ada has only one precedence for minus, at the cost of giving unary minus
lower precedence than multiplication operators. This has the unintuitive
effect of making
-5 mod 3 = -(5 mod 3)
while
-5 mod 3 /= (-5) mod 3
I wonder if Ada's expression grammar was designed with operator precedence
parsing in mind? Otherwise, how can the unintuitive precedence of unary
minus be explained?
Probably with one word: "FORTRAN".
In Fortran,
-5*3 = -(5*3)
Further, while FORTRAN 77 doesn't allow consecutive operators (i.e. an
expression like "5**-3" is nonconforming), some vendors that extend it to
do so end up doing things that also seem counterintuitive:
5**-3*5 = 5**(-(3*5))
The above mystery is because, while ** (exponentation) is the
highest-precedence operator of the set {**, -, *}, it cannot be evaluated
until the unary minus operator (-) is evaluated. But that cannot be
evaluated before the multiplication (*) operator is evaluated, since the
latter is higher precedence than the former.
So perhaps, like Fortran, the designers of Ada viewed unary minus as just
shorthand for binary minus with a left-hand operand of 0 (of the
appropriate type).
--
James Craig Burley, Software Craftsperson burley@gnu.ai.mit.edu
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.