[EMAIL PROTECTED] wrote: > Michael> I've hit on what looks like a fundamental ambiguity in the > Michael> Python grammar which is difficult to get round with PLY; and > Michael> I'm wondering *why* the grammar is defined in this way. > > Michael, > > You refer to the ref manual documentation: > > Michael> List displays (list comprehensions) are defined as (from > Michael> http://docs.python.org/ref/lists.html ) > > Note that the BNF there is mostly designed for human consumption. Have you > verified that the ambiguity is also present in the Grammar file? > From :
http://svn.python.org/view/python/tags/r243/Grammar/Grammar?rev=43414&view=auto list_for: 'for' exprlist 'in' testlist_safe [list_iter] So in the Python grammar list_for *is* defined as an expression list. That follows, because using the parser module I can create an ast for a list comprehension like the following : import parser expr = '[1 for 1 in n]\n' ast = parser.expr(expr) print parser.compileast(ast) Traceback (most recent call last): File "ast_example.py", line 6, in ? print parser.compileast(ast) SyntaxError: can't assign to literal The syntax error is thrown at the compile stage, not the parse stage. Having list_for being defined in terms of something like varlist makes more sense, but isn't how the grammar is done currently. Michael Foord > Skip > > _______________________________________________ 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