I would at least define different classes for the uptalk versions.

But my main complaint is using the parse tree as a spec at all -- it has way too much noise for a clear description. We don't describe a < b < c by first translating it to (Comparison(a, Comparison(b, c, chained=False), chained=True) either: the reference manual uses a postfix * (i.e. repetition) operator to describe chained comparisons -- while for other operators it favors a recursive definition.

On Mon, Sep 28, 2015 at 7:22 PM, Random832 <random832@fastmail.com> wrote:
On Mon, Sep 28, 2015, at 17:48, Guido van Rossum wrote:
> >     Expr(
> >         value=Attribute(
> >             value=Attribute(
> >                 value=Name(id='spam'), attr='eggs', uptalk=True),
> >             attr='cheese', uptalk=False))
> >
>
> Hm, I think the problem is that this way of representing the tree
> encourages thinking that each attribute (with or without ?) can be
> treated
> on its own.

How else would you represent it? Maybe some sort of expression that
represents a _list_ of attribute/item/call "operators" that are each
applied, and if one of them results in none and has uptalk=True it can
yield early.

Something like...

AtomExpr(atom=Name('spam'), trailers=[Attribute('eggs', uptalk=True),
Attribute('cheese', uptalk=False)])

For a more complex example:

a?.b.c?[12](34).f(56)?(78)

AtomExpr(Name('a'), [
        Attribute('b', True),
        Attribute('c', False),
        Subscript(12, True),
        Call([34], False),
        Attribute('f', False),
        Call([56], False),
        Call([78], True)])

I almost sent this with it called "Thing", but I checked the grammar and
found an element this thing actually maps to.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/



--
--Guido van Rossum (python.org/~guido)