writing the compiler