compiler construction - ¿Cómo se puede escribir un compilador de lenguaje en ese idioma?
compiler-construction recursion (6)
Posibles duplicados:
Implementando un compilador en “sí mismo”.
Bootstrapping a language
¿Cómo puedes escribir un compilador en el mismo idioma que el idioma para el que estás escribiendo ese compilador? ¿No es ese tipo de recursivo?
Editar : Esto puede ser eliminado, pero de lo contrario ...:
Cómo bootstrap:
Por qué bootstrap:
Al principio, el primer compilador real de ese idioma, no fue escrito en ese idioma, por supuesto. Muy segundo podría estar escrito en ese idioma. Además, dada la especificación de un lenguaje, puede implementar un núcleo básico en un compilador bootstrap, y luego escribir el compilador compatible completo en ese lenguaje usando el subconjunto comprendido por el compilador "bootstrap". Los compiladores de segunda generación también pueden olvidar el compilador "bootstrap".
En algún momento, necesita un compilador (o intérprete) escrito en un idioma diferente. Pero no necesita ser eficiente y se puede hacer en un lenguaje que facilite el análisis y la creación de prototipos (LISP es popular). Una vez que haya usado esto para compilar el "auto-compilador", puede descartarlo y usar el resultado.
Es solo un problema para la primera versión de la historia. Una vez que tengo V1.0 del compilador funcionando, puedo escribir V2.0 en mi idioma y usar el compilador V1.0 para compilarlo. Luego puedo escribir V3.0 y usar V2.0 para compilar eso, usar V3.0 para compilar V4.0 y así sucesivamente.
Es. Por lo general, necesita una versión de arranque del idioma compilada o interpretada de otro idioma.
Y para concentrarme un poco más, hace años leí la historia de un compilador de Pascal escrito como un proyecto de un estudiante graduado. Escrito en Pascal y compilado con el compilador incorporado de Pascal del sistema. Finalmente, fue lo suficientemente bueno como para reemplazar el compilador incorporado de Pascal en el sistema. Desafortunadamente, encontraron un error en la generación de código, pero la solución para el generador de código provocó el error en el compilador, generando un compilador defectuoso. Para solucionarlo, era necesario parchear manualmente los archivos binarios del compilador instalado para luego aplicar el parche a la fuente para reemplazarlo.
La primera pasada del compilador normalmente se escribe en otra cosa hasta que el lenguaje está lo suficientemente bien formado como para poder compilar su propio compilador, luego se puede ingresar a la x escrita en x.
En general, la primera versión del compilador se escribe en un idioma diferente, y luego cada versión posterior se escribe en ese idioma y se compila con la versión anterior. Una vez que haya compilado la versión x
con la versión x-1
, puede usar la versión x
recién creada para recompilarse a sí misma, aprovechando las nuevas optimizaciones que la versión introduce; GCC hace sus lanzamientos de esa manera.