On Fri, Jun 28, 2013 at 7:01 PM, Amaury Forgeot d'Arc <amauryfa@gmail.com> wrote:
2013/6/28 Pynix Wang <pynix.wang@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@python.org>

Hi! I'm an email virus! Think twice before sending your email to help me spread!