general purpose compiler