[Python-Dev] PEP 492 vs. PEP 3152, new round
Yury Selivanov
yselivanov.ml at gmail.com
Wed Apr 29 03:51:51 CEST 2015
Looking at the grammar -- the only downside of the current approach is that
you can't do 'await await fut'. I still think that it reads better with
parens. If we put 'await' to 'factor' terminal we would allow
await -fut # await (-fut)
I think I something like
power: atom_expr ['**' factor]
atom_expr: [AWAIT] atom_expr | atom_trailer
atom_trailer: atom trailer*
will fix 'await await' situation, but does it really need to be fixed?
Yury
On 2015-04-27 9:44 AM, Yury Selivanov wrote:
> Hi Greg,
>
> I don't want this: "await a() * b()" to be parsed, it's not meaningful.
>
> Likely you'll see "await await a()" only once in your life, so I'm
> fine to use parens for it (moreover, I think it reads better with parens)
>
> Yury
>
>
> On 2015-04-27 8:52 AM, Greg Ewing wrote:
>> Yury Selivanov wrote:
>>> I've done some experiments with grammar, and it looks like
>>> we indeed can parse await quite differently from yield. Three
>>> different options:
>>
>> You don't seem to have tried what I suggested, which is
>> to make 'await' a unary operator with the same precedence
>> as '-', i.e. replace
>>
>> factor: ('+'|'-'|'~') factor | power
>>
>> with
>>
>> factor: ('+'|'-'|'~'|'await') factor | power
>>
>> That would allow
>>
>> await a()
>> res = await a() + await b()
>> res = await await a()
>> if await a(): pass
>> return await a()
>> print(await a())
>> func(arg=await a())
>> await a() * b()
>>
>
More information about the Python-Dev
mailing list