Refactor your MSDscript implementation so that Expr::interp returns Val* instead of int. For now, your only implementation of Val will be NumVal for numbers (but you'll add boolean values in the next assignment). You can use whatever name you prefer for the classes (e.g., virtual base class Value with subclass NumberValue); the point is just to change over to value objects instead of using int for values.

For clarity, you might rename existing classes like Add to AddExpr, etc., but that's up to you. Although it's optional, renaming those classes is easy compared to the refactoring of Expr::interp, so consider starting with that renaming.

More recommendations: