assign smt  : variable ASSIGN expression(;)
        Feature Type Array adds:
                    | variable SETITEM expression(;)

def assign_statement(self):
        """
        assign smt  : variable ASSIGN expression(;)
        Feature Type Array adds:
                    | variable SETITEM expression(;)
        """
        left = self.variable()
        op = self.cur_token
        self.eat(TokenTypes.ASSIGN)
        right = self.expression()
        smt = None
        if Features.TYPE_ARRAY in self.features and isinstance(left, GetArrayItem):
            # Remake this as a setitem.
            smt = SetArrayItem(left.left, left.right, right)
        else:
            smt = Assign(op, left, right)
        if self.cur_token.type == TokenTypes.SEMI_COLON:
            self.eat(TokenTypes.SEMI_COLON)
        return smt