refactoring. separating compiler and language implementation