Huh?  Why have `UnaExp::semantic` if it's only called from inside `unaSemantic`?  Just inline it into `unaSemantic` and leave `UnaExp::semantic` as pure virtual.  I don't see how that is any less explicit.