[Python-Dev] add new lambda syntax (original) (raw)
Thomas Wouters thomas at python.org
Fri Jun 28 19:39:02 CEST 2013
- Previous message: [Python-Dev] add new lambda syntax
- Next message: [Python-Dev] add new lambda syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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: ('(' [yieldexpr|testlistcomp|vararglist] ')' |_ _'[' [testlistcomp] ']' |_ _'{' [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 testlistcomp 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>
- Previous message: [Python-Dev] add new lambda syntax
- Next message: [Python-Dev] add new lambda syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]