a = b = 1 just syntactic sugar?

Ed Avis ed at membled.com
Mon Jun 9 02:43:50 EDT 2003


martin at v.loewis.de (Martin v. =?iso-8859-15?q?L=F6wis?=) writes:

>>>That doesn't answer my question. What would be the output of this
>>>statement?
>> 
>>It is syntactically ambiguous because of the two print statements both
>>accepting commas.  
>
>This still doesn't answer my question "What would be the output?",

What I meant was, I imagine the output would be the same as the output
of the statement

    print ,))(

that is, a syntax error.

>I assume you want it to cause a SyntaxError.
>
>Then the question is what algorithm exactly do you apply to detect an
>ambiguity?

Yes - I don't know enough about parser generators to tell what they
do in the case of an ambiguity.  Would it find a syntax error or would
it pick one of the two alternatives based on which production occurs
earlier in the grammar definition?

>No, it is rejected because nobody has made a specification, yet, as
>to how exactly it should work. Only if a precise, detailed, complete,
>and implementable specification is made, it can be studied for
>undesired effects, and possibly be rejected.

OK.  My one-line grammar change and proposed semantics is not a
precise specification because I am not well-aquainted with the parser
generator Python uses and so I can't explain how it would affect the
language in corner cases, such as the ambiguous statement you
mentioned.

Are there already legal Python constructs that match two or more
grammar rules?

>>Elsewhere in this thread I have mentioned
>>
>>    lambda_form ::=
>>                 "lambda" [parameter_list]: simple_stmt
>>
>>which seems to match the specification of 'any statement that can fit
>>on one line' (which itself seems pretty exact to me).
>
>Elsewhere in the thread I have said that this interpretation is
>incorrect: a simple_stmt always ends with a NEWLINE, something which
>you apparently don't want.

And yet elsewhere I have replied citing the definition of simple_stmt
from <http://python.org/doc/current/ref/grammar.txt>, which seems to
show that simple_stmt does not end with a NEWLINE.

>It's counter-intuitive that
>
>x = (lambda s: print s)
>
>is incorrect. Under your proposal, it would be incorrect, and you
>would have to write
>
>x = (lambda s: print s
>)
>
>to insert the necessary NEWLINE.

No, please look at the grammar
<http://python.org/doc/current/ref/grammar.txt> and see that there is
no NEWLINE in simple_stmt.  Or if there is, point it out because I
must have overlooked it.

-- 
Ed Avis <ed at membled.com>




More information about the Python-list mailing list