I'm finishing up a PLY lexer and parser for the current CVS version of
the Python grammar.  As part of it I've been testing a lot of dark
corners in the grammar definition and implementation.  Python 2.5 has
some small and rare problems which I'm pleased to note have been
pretty much fixed in Python 2.6.

I have two questions about the grammar definition.  Here's a
difference between 2.5 and 2.6.

% cat x.py
c = "This is 'c'"
def spam((a) = c):
  print a
spam()

% python2.5 x.py
This is 'c'
% python2.6 x.py
  File "x.py", line 2
    def spam((a) = c):
SyntaxError: non-default argument follows default argument


I don't understand why that's changed.  This shouldn't be a
SyntaxError and there is no non-default argument following the default
argument.

Note that this is still valid

>>> def spam((a,) = c):
...   pass
...

I think 2.6 is incorrect.  According to the documentation at
  http://docs.python.org/ref/function.html

defparameter    ::=     parameter ["=" expression]
sublist ::=     parameter ("," parameter)* [","]
parameter       ::=     identifier | "(" sublist ")"
funcname        ::=     identifier


Second question is about trailing commas in list comprehension.  I
don't understand why the commented out line is not allowed.

[x for x in 1]
#[x for x in 1,]  # This isn't legal
[x for x in 1,2]
[x for x in 1,2,]
[x for x in 1,2,3]

The Grammar file says

# Backward compatibility cruft to support:
# [ x for x in lambda: True, lambda: False if x() ]
# even while also allowing:
# lambda x: 5 if x else 2
# (But not a mix of the two)
testlist_safe: old_test [(',' old_test)+ [',']]

but if I change it to also allow

    testlist_safe : old_test ','

then PLY still doesn't report any ambiguities in the grammar and I
can't find an expression that exhibits a problem.

Could someone here enlighten me?

                                Andrew
                                [EMAIL PROTECTED]
_______________________________________________
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

Reply via email to