A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2006-April/064279.html below:

[Python-Dev] Python Grammar Ambiguity

[Python-Dev] Python Grammar Ambiguity [Python-Dev] Python Grammar AmbiguityMichael Foord fuzzyman at voidspace.org.uk
Mon Apr 24 19:23:50 CEST 2006
skip at pobox.com 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
>
>   

More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4