code: private LVal parseLValTerm(int start, EnclosingScope scope) {
  		checkNotEof();
  		start = index;
  		// First, attempt to disambiguate the easy forms:
  		Token lookahead = tokens.get(index);
  		switch (lookahead.kind) {
  		case Identifier:
  			Identifier name = parseIdentifier();
  			LVal var;
  			if(scope.isVariable(name)) {
  				var = new Expr.VariableAccess(Type.Void, scope.getVariableDeclaration(name));
  			} else {
  				var = new Expr.StaticVariableAccess(Type.Void, new Decl.Link<>(new Name(name)));
  			}
  			return annotateSourceLocation(var, start);
  		case LeftBrace: {
  			match(LeftBrace);
  			LVal lval = parseLVal(start, scope);
  			match(RightBrace);
  			return lval;
  		}
  		case Star: {
  			match(Star);
  			LVal lval = parseLVal(start, scope);
  			return annotateSourceLocation(new Expr.Dereference(Type.Void, lval), start);
  		}
  		default:
  			syntaxError("unrecognised lval", lookahead);
  			return null; // dead-code
  		}
  	}
docs: Parse an lval term, which is of the form:
  
  <pre>
  TermLVal ::= Identifier             // Variable assignment
  | '(' LVal ')'            // Bracketed assignment
  </pre>
  
  @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