Currently,

* Syntax errors: print user-friendly message and call exit(1)
* Semantics errors: throw exception, prints stack trace and aborts

I think it is better to display user-friendly message in both cases.
How about changing the behaviour of the semantics errors to display user-friendly message too?