code: private Stmt parseAssignmentStatement(EnclosingScope scope) {
  		int start = index;
  		Tuple<LVal> lvals = parseLVals(scope);
  		match(Equals);
  		Tuple<Expr> rvals = parseExpressions(scope, false);
  		int end = index;
  		matchEndLine();
  		return annotateSourceLocation(new Stmt.Assign(lvals, rvals), start,end-1);
  	}
docs: Parse an assignment statement, which has the form:
  
  <pre>
  AssignStmt ::= LVal '=' Expr
  </pre>
  
  Here the <code>lhs</code> must be an <code>LVal</code> --- that is, an
  expression permitted on the left-side of an assignment. The following
  illustrates different possible assignment statements:
  
  <pre>
  x = y       // variable assignment
  x,y = z     // multi-assignment
  x.f = y     // field assignment
  x[i] = y    // array assignment
  x[i].f = y  // compound assignment
  </pre>
  
  The last assignment here illustrates that the left-hand side of an
  assignment can be arbitrarily complex, involving nested assignments into
  arrays and records.
  
  @see wyc.lang.Stmt.Assign
  
  @param scope
  The enclosing scope for this statement, which determines the
  set of visible (i.e. declared) variables and also the current
  indentation level.
  
  @return