Compilar un lenguaje de programación consigo mismo

10

Soy estudiante de informática. Quiero crear mi propio lenguaje de programación (un lenguaje básico con pocas instrucciones).

Sé cómo hacer un analizador sintáctico, ya lo hice en Perl. En un artículo, leí algo sobre el compilador, un compilador se hace en sí mismo.

Por ejemplo, el compilador de C está escrito en C. ¿Cómo es posible? Puedo hacer mi propio idioma pero no sé cómo podría ejecutarlo. ¿Alguna idea?

Es realmente una buena pregunta y puedo escribir un blog sobre el proyecto.

BaptisteL
fuente
La gente ha explicado cómo arrancar pero ¿por qué lo necesitas? No hay razón para que no puedas compilar tu lenguaje usando un compilador escrito en C, Perl o cualquier otra cosa. Claro, sería bueno tener un compilador para su idioma escrito en sí mismo, pero eso sería mucho trabajo: tendría que escribir al menos dos compiladores para obtener eso (uno en C / Perl / lo que sea, uno en tu lenguaje).
David Richerby
Hmm .. Creo que escribiré mi primer compilador en C y escribiré un segundo en mi lenguaje. Es realmente interesante crear un pequeño lenguaje de programación, podemos aprender mucho de la informática
BaptisteL

Respuestas:

13

El truco es arrancar . Primero escribe un compilador para su idioma (o un subconjunto del mismo) en otro idioma. Luego, escribe un compilador para su idioma (o un subconjunto grande del que ya puede manejar) en su idioma. Utiliza el compilador anterior para compilar el nuevo compilador, y luego el nuevo compilador puede compilarse.

Yuval Filmus
fuente
Entonces, ¿puedo crear mi primer compilador usando C y la próxima vez compilaré mi compilador v2 con el v1? Pero hay un problema, ¿cómo podría saber que el compilador no tiene ningún problema? ¿Necesito convertir mi código fuente a ensamblador? O en otra cosa?
BaptisteL
2
¿Cómo podría saber que el compilador no tiene ningún problema? En general, usted escribió un programa; ¿Cómo sabes que no tiene errores? Usted no Escribes algunas pruebas y esperas lo mejor. ¿Necesito convertir mi código fuente a ensamblado? Definitivamente no. Puede confiar en el compilador de C. Está haciendo lo mismo, pero con el ensamblaje reemplazado por C (o cualquier otro lenguaje de su elección).
Yuval Filmus
Vale, tengo que confiar en mis habilidades ^^ Quería preguntarle al proceso del compilador. Realmente no entiendo lo que hace un compilador, el analizador sintáctico y léxico está bien, ¿pero el siguiente?
BaptisteL
Entonces generas código. Si no desea entrar en detalles sobre la generación de código de máquina, siempre puede generar código en otro lenguaje, por ejemplo, código C, y usar un compilador externo para compilarlo en código de máquina. (O podría usar un lenguaje interpretado y ejecutar un intérprete.)
Yuval Filmus
Hummm No, prefiero hacerlo así: Mi idioma en enter -> Código de máquina. No quiero convertir mi idioma en otro (igual para la primera compilación) ¿Es posible?
BaptisteL
2

Un compilador que puede compilar sus propias fuentes se denomina compilador de alojamiento propio . Los primeros compiladores fueron escritos en otro idioma. Por ejemplo, el primer compilador de C probablemente se escribió en ensamblador. Todo el truco para usar un compilador anterior de nivel inferior se llama bootstrapping.

Bartosz Przybylski
fuente