code: private AssignmentStatement parseAssignmentStatement(Token token)
          throws IOException {
  
          // TODO: allow lvalue to support dot notations
          // ie: field = x (store local variable)
          //     obj.field = x (obj.setField)
          //     obj.field.field = x (obj.getField().setField)
          //     array[idx] = x (array[idx])
          //     list[idx] = x (list.set(idx, x))
          //     map[key] = x (map.put(key, x))
          //     map[obj.name] = x (map.put(obj.getName(), x)
          SourceInfo info = token.getSourceInfo();
          VariableRef lvalue = parseLValue(token);
  
          if (peek().getID() == Token.ASSIGN) {
              read();
          }
          else {
              error("assignment.equals.expected", peek());
          }
  
          Expression rvalue = parseExpression();
  
          info = info.setEndPosition(rvalue.getSourceInfo());
  
          // Start mod for 'as' keyword for declarative typing
          if (peek().getID() == Token.AS) {
              read();
              TypeName typeName = parseTypeName();
              SourceInfo info2 = peek().getSourceInfo();
              lvalue.setVariable(new Variable(info2, lvalue.getName(), typeName, true));
          }
          // End mod
  
          return new AssignmentStatement(info, lvalue, rvalue);
      }
docs: When this is called, the identifier token has already been read.