¿Existe alguna forma de escribir un compilador en su propio idioma?
Debe tener algún lenguaje existente para escribir su nuevo compilador. Si estuviera escribiendo un compilador nuevo, digamos, C ++, simplemente lo escribiría en C ++ y lo compilaría primero con un compilador existente. Por otro lado, si estuviera creando un compilador para un nuevo lenguaje, llamémoslo Yazzleof, primero tendría que escribir el nuevo compilador en otro lenguaje. Generalmente, este sería otro lenguaje de programación, pero no tiene por qué serlo. Puede ser ensamblado o, si es necesario, código máquina.
Si fuera a iniciar un compilador para Yazzleof, generalmente no escribiría un compilador para el lenguaje completo inicialmente. En su lugar, escribiría un compilador para Yazzle-lite, el subconjunto más pequeño posible de Yazzleof (bueno, al menos un subconjunto bastante pequeño ). Luego, en Yazzle-lite, escribiría un compilador para el lenguaje completo. (Obviamente, esto puede ocurrir de forma iterativa en lugar de en un salto.) Debido a que Yazzle-lite es un subconjunto adecuado de Yazzleof, ahora tiene un compilador que puede compilarse a sí mismo.
Hay un artículo realmente bueno sobre cómo arrancar un compilador desde el nivel más bajo posible (que en una máquina moderna es básicamente un editor hexadecimal), titulado Bootstrapping a simple compiler from nothing . Se puede encontrar en https://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html .