PEP-308 a "simplicity-first" alternative
holger krekel
pyth at devel.trillke.net
Tue Feb 11 21:06:09 EST 2003
Christian Tismer wrote:
> holger krekel wrote:
> > Andrew Koenig wrote:
> >
> >>holger> Inspired by "do the simplest thing that can possibly work" i
> >>holger> now think that
> >>
> >>holger> x and y else z
> >>
> >>holger> might just do it and avoid the need for a new construct.
> >>
> >>I thought so too when I first saw it, but now I'm less sure.
> >>For example, what is the meaning of
> >
> > Damn, you get to the point where i was too lazy to think it out :-)
> >
> >> w and x and y else z
> >
> > (w and x) and y else z
> >
> > should be the meaning.
>
> Wrong.
> w and (x and y else z)
In fact, i don't care too much either way. The main requirement
is that precedence and grouping rules need to be consistent.
But i think i'd like
obj and obj.method() and "yes" else "no"
to return "no" instead of AttributeError on None :-)
> [...]
> > Or in Grammar speek:
> >
> > and_test: not_test ('and' not_test ['else' not_test])*
>
> I don't have the grammar, yet.
> But this one doesn't do what I mean.
I think it would work for your case. You need to sort it out in
the compiler with some look-ahead. This is because when seeing
w and x and y else z
^^^^^^^
the first part you don't know that 'x' in fact belongs to a ternary.
If you try to code it into the parser you might again need look-ahead
which does not work there. That's why i thought it's better to just
recognize the "and y else z" part and not care about what came earlier.
chaining ternary operators without parens is
a-bit-insane-anyway-ly y'rs,
holger
More information about the Python-list
mailing list