User defined precedence for user defined operators.

glen herrmannsfeldt <gah@ugcs.caltech.edu>
14 Aug 2006 15:15:36 -0400

          From comp.compilers

Related articles
User defined precedence for user defined operators. gah@ugcs.caltech.edu (glen herrmannsfeldt) (2006-08-14)
Re: User defined precedence for user defined operators. tommy.thorn@gmail.com (Tommy Thorn) (2006-08-15)
Re: User defined precedence for user defined operators. DrDiettrich1@aol.com (Hans-Peter Diettrich) (2006-08-15)
Re: User defined precedence for user defined operators. marcov@stack.nl (Marco van de Voort) (2006-08-15)
Re: User defined precedence for user defined operators. tmk@netvision.net.il (Michael Tiomkin) (2006-08-15)
User defined precedence for user defined operators. derek@knosof.co.uk (Derek M Jones) (2006-08-15)
Re: User defined precedence for user defined operators. torbenm@app-5.diku.dk (2006-08-18)
| List of all articles for this month |

From: glen herrmannsfeldt <gah@ugcs.caltech.edu>
Newsgroups: comp.lang.fortran,comp.compilers
Date: 14 Aug 2006 15:15:36 -0400
Organization: Compilers Central
References: <1155280055.803334.85200@h48g2000cwc.googlegroups.com> <1155424619.168792.202040@h48g2000cwc.googlegroups.com> <ebpn6e$qbt$1@vilya.larc.nasa.gov> <1hk1yfv.zyn74w12uw4xsN%nospam@see.signature> <44E0B3FF.4040401@cits1.stanford.edu>
Keywords: Fortran, parse, question

Brooks Moses wrote:


> Richard E Maine wrote:


>> 2. It might even be possible to have ambiguities because changing
>> precedence can change what the operands are. I haven't tried to concoct
>> an example, but I suspect it could happen.


I was going to write something about this, but instead I am
cross-posting to comp.compilers, where the people who actually
know about parsing theory reside.


For new readers to this discussion, the question relates to being
able to specify the precedence for user defined operators (operator
overloading), and the possible ambiguities that can cause.


As far as I know, the languages that allow operator overloading
use the same precedence in all cases for each operator.


In any case, it is convenient to parse reading left to right,
and to be able to make decisions with only a small amount
of reading ahead.


> Trivially:


> Type(a) + Type(b) returns a Type(b)
> Type(b) + Type(a) returns a Type(a)


> Type(a) * Type(a) is lower precedence than cross-type +
> Type(b) * Type(b) is higher precedence than cross-type +


> Type(b) + Type(a) * Type(a) + Type(b) is (arguably) ambiguous.


-- glen


[I don't think I've ever seen a language where the operator precedence
depended on the types of the operands, and I hope I never do. -John]



Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.