On Fri, Jun 28, 2013 at 7:01 PM, Amaury Forgeot d'Arc <amaur...@gmail.com>wrote:
> 2013/6/28 Pynix Wang <pynix.w...@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 <tho...@python.org> Hi! I'm an email virus! Think twice before sending your email to help me spread!
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com