writing a C compiler