Duncan Booth wrote: > Steve Holden <[EMAIL PROTECTED]> wrote: > >> Help me out here. It looks as though the real syntax should >> be something like >> >> assignment_stmt ::= (target_list "=")+ expression_list | >> (target_list "=")+ assignment_stmt > > That is precisely the point. If it was: > > assignment_stmt ::= (target_list "=") expression_list | > (target_list "=") assignment_stmt > > (i.e. removing the '+' which your eyes jumped over) > then the actual assignments would have to apply right to left with each > assignment giving the result for the next one. > > But since it is: > > assignment_stmt ::= (target_list "=")+ expression_list > > the repeated target lists may be expected, and are indeed defined, to > assign left to right.
Thanks, I see the plus sign now and appreciate that it indicates "one or more of", so the syntax is correct. But syntax doesn't imply semantics, so a left-recursive or right-recursive syntax formulation wouldn't require any change to the semantics of assignment. 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, and neither imply any order of execution. I'm sure you understand that syntax only specifies what's legal, not how it should be interpreted. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://del.icio.us/steve.holden Recent Ramblings http://holdenweb.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list