split compiler into a separate file