En realidad, lo más importante que necesita es descifrar el formato binario de los archivos .exe (a menos que esté planeando usar un enlazador existente, en cuyo punto creo que necesita generar archivos obj que también tengan un binario formato).
También necesita lidiar con MUCHO ensamblaje, a menos que ya esté MUY familiarizado con el conjunto de instrucciones x86, probaría otra cosa.
Aquí hay algunas posibilidades:
Antes había una cosa llamada "Tiny C" - supongo que esto es: http://bellard.org/tcc. Tiny C es un compilador suficientemente bueno para compilarse, pero no tan complejo que es difícil de entender. Es una lección escueta de "Cómo construir un compilador" en una caja. Metido con eso en el 8088.
Salida para una CPU "incrustada". Tienden a tener lenguajes de ensamblaje simples y formatos ejecutables muy claramente definidos. Este sería un buen lugar para comenzar.
Salida del código C en lugar de un código binario. Seguro que se trata de una trampa, pero puedes concentrarte en tu idioma y no preocuparte demasiado por el lenguaje ensamblador.
Por último, si realmente desea crear directamente un .exe, primero escriba una aplicación que produzca un exe "Hello world". No se moleste en tenerlo "Compile" nada, simplemente edite manualmente el código, póngalo en el formato exe y ejecútelo; al hacer esto SABRÁ que tiene todos sus bits alineados y en los lugares correctos, entonces usted puede comenzar en un compilador con cierta confianza.
Después de esto, entonces la creación de la lengua se puede hacer a través de una gran cantidad de los procedimientos que se dan aquí - pero si lo que desea es ver cómo funciona todo, definitivamente haría unas pocas iteraciones pequeñas primero, no te preocupes por lo que te encontrarás hasta que te encuentres con él.
Esto es algo que nunca he sido capaz de encontrar cualquier cosa que explica. Perdón por haber causado una facepalm = ( – Cr15py
versión original [Aprender a escribir un compilador] (http://stackoverflow.com/q/1669/2509). Para simplificar, desea el tutorial de Crenshaw, pero para simplificar también * no lo haga * quiero hacer C++ ... – dmckee
@dmckee +1 en no querer C++ - los compiladores que son lo suficientemente sofisticados como para necesitar un árbol de análisis requieren muchas manipulaciones de árbol, y C++ (y Java, y casi cualquier lenguaje fuera de ML/Haskell familia e idiomas de inspiración similar como Scala) realmente apesta a manipulaciones de árboles. –