Steve Holden <[EMAIL PROTECTED]> wrote:


> In other words,
> 
> assignment_stmt       ::=       (target_list "=") expression_list |
>                                   (target_list "=") assignment_stmt
> 
> and
> 
> assignment_stmt       ::=       (target_list "=") assignment_stmt |
>                                   (target_list "=") expression_list
> 
> are entirely equivalent

I'm not quite sure what you are getting at. An assigment_stmt and an 
expression_list are not ambiguous so those two productions are identical 
(not just equivalent). Perhaps you are thinking of productions like:

    m_expr ::= u_expr | m_expr "*" u_expr  

which will match the same input, but could produce a different parser 
output than:

    m_expr ::= u_expr | u_expr "*" m_expr  


> I'm sure you understand that syntax only specifies what's legal, not how
> it should be interpreted.

I agree that the syntax does not mandate how it should be interpreted,
but it does lead to expectations.

If the expression_stmt is hidden from the outer assignment_stmt by an inner 
one then it is reasonable to expect that the inner production will be 
completely evaluated before the outer assignment happens. i.e. right to 
left.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to