refactor Expression and subclasses