Para hacer un compilador te servirá mucho aprender teoría de lenguajes formales y autómatas. Por ahí empieza.
Lo que debe hacer primero (si bien recuerdo) es un análisis gramátical (reconocer los tokens, quitar espacios en blanco, comentarios, etc) y luego un análisis sintáctico (que esten en el orden apropiado los tokens).
Luego sigue convertir el código fuente a código objeto.
Para el análisis léxico existe una herramienta llamada LEX, transforma el código fuente de tu compilador a código en C, investiga sobre éste programa para que vayas conociendo mejor el mundo de los compiladores.
Y por último, transformar el código objeto a un ejecutable, esto sólo consiste en traducir el código objeto a lenguaje ensamblador dependiendo del tipo de procesador que se esté usando. Y listo
Compiladores de C para MS-DOS:
Borland (cualquiera es bueno).
Dev C++ (freeware)
Microsoft Visual C++.
Estos son los que he usado y me han funcionado muy bien y aunque son para C++ puedes hacer perfectamente programas de C
Y para linux tienes el GnuCC.
Suerte
Marcadores