[Python-Dev] add new lambda syntax

Thomas Wouters thomas at python.org
Fri Jun 28 19:39:02 CEST 2013


On Fri, Jun 28, 2013 at 7:01 PM, Amaury Forgeot d'Arc <amauryfa at gmail.com>wrote:

> 2013/6/28 Pynix Wang <pynix.wang at gmail.com>
>
>> I want use coffeescript function syntax to write python lambda expression
>> so I modified the Grammar file.
>>
>> ```
>> atom: ('(' [yield_expr|testlist_comp|vararglist] ')' |
>>        '[' [testlist_comp] ']' |
>>        '{' [dictorsetmaker] '}' |
>>        NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')
>> trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME | '->' text
>> ```
>>
>> but when I write
>> ```
>> (x,y=1)->x+y
>> ```
>> the parser doesn't go into vararglist.
>>
>
> This grammar is not LL(1) anymore (it's probably LALR now)
> when seeing "x", it has the choice between testlist_comp and vararglist,
> and the first one is picked.
> Python's parser generator only supports LL(1) grammars.
>

Indeed. You may be able to make this work, but you'd have to fold the bits
of vararglist you need into testlist_comp, then reject invalid syntax that
matches the grammar (like "(x=expr for ...)" or "((x+1)=expr)" or
"(*foo=1)") in the compiler. Something like (untested):

testlist_comp: (test|star_expr) ['=' test]( comp_for | (','
(test|star_expr) ['=' test])* [','] )

-- 
Thomas Wouters <thomas at python.org>

Hi! I'm an email virus! Think twice before sending your email to help me
spread!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130628/21268a54/attachment.html>


More information about the Python-Dev mailing list