Hyphenated keywords interacts badly with operator overloading

Remi Forax forax at univ-mlv.fr
Wed Jan 23 23:00:40 UTC 2019

Yes !
the lexer is greedy so there is no ambiguity at parser level.


----- Mail original -----
> De: "John Rose" <john.r.rose at oracle.com>
> À: "Brian Goetz" <brian.goetz at oracle.com>
> Cc: "amber-dev" <amber-dev at openjdk.java.net>
> Envoyé: Mercredi 23 Janvier 2019 23:44:44
> Objet: Re: Hyphenated keywords interacts badly with operator overloading

> On Jan 23, 2019, at 8:37 AM, Brian Goetz <brian.goetz at oracle.com> wrote:
>> I think the bigger point here is that some keywords/reserved identifiers  (this,
>> null, true, false, and soon switch) can be used in expressions, and that we
>> should be more careful hyphenating those.  Which is a point that was left out
>> of the first mail.
> IIRC HK in expressions was briefly discussed but didn't seem
> to offer any serious road-blocks.  Best case is we take extra
> care when hyphenating `null`, `this`, `true`, and a few
> other keywords.  Worst case is we hyphenate like crazy,
> and get lexical-level ambiguities, which are resolved (as
> usual) by the greedy rule:  The longest possible token
> is parsed.  So `++x` is increment not `+/*…*/+x`.
> In short, if we wish, we can sweep this problem under
> an existing rug.
> As long as we introduce HK before OO (likely!), and
> mandate that any present or future HK gets greedily
> lexed, then adding OO will not change the lexical
> structure of any valid program, including in cases
> where we add new HK's after OO.
> (And, yes, there are already cases where a greedily
> lexed token is immediately illegal, without further
> analysis.  A very long string of decimal digits is
> such a token. And so would be a nonsense HK.)
> Example:  Suppose we add OO, and *after that* add
> four-valued boolean logic including new keywords
> `true-ish` and `false-ish`.  Any valid OO-using program
> (oxymoron?) that includes expressions like `x=false-ish`
> willi be invalid under the greedy rule because `false-ish`
> is a reserved keyword, even if not defined.  The programmer
> would have to throw in one or more spaces like `x=false - ish`.
> Later on, the erroneous expression `x=false-ish` would
> become a valid expression (using four-valued logic).
> — John

More information about the amber-dev mailing list