PEP-308 a "simplicity-first" alternative

Christian Tismer tismer at tismer.com
Tue Feb 11 21:15:52 EST 2003


holger krekel wrote:
> 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. 

Please don't forget easy LtoR parsing.

> But i think i'd like 
> 
>     obj and obj.method() and "yes" else "no"
> 
> to return "no" instead of AttributeError on None :-)

      (obj and obj.method()) and "yes" else "no"

does the job.
You cannot be minimalistic and requiring a huge
look-ahead at the same time, methinks.

>>>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
>     ^^^^^^^

Be careful not to break the thin ice
of agreement that you achived. Introducing
complexity through a backdoor might kill
your nice approach easily.

> 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.  

Let's talk about that on the Sprint.

> chaining ternary operators without parens is 
> a-bit-insane-anyway-ly y'rs,

Ternary operators are insane at all, so we have to
make them as simple as possible (b.n.s. -- ly y'rs - chris)

-- 
Christian Tismer             :^)   <mailto:tismer at tismer.com>
Mission Impossible 5oftware  :     Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a     :    *Starship* http://starship.python.net/
14109 Berlin                 :     PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34  home +49 30 802 86 56  pager +49 173 24 18 776
PGP 0x57F3BF04       9064 F4E1 D754 C2FF 1619  305B C09C 5A3B 57F3 BF04
      whom do you want to sponsor today?   http://www.stackless.com/







More information about the Python-list mailing list