Cerrado . Esta pregunta debe estar más
centrada . Actualmente no acepta respuestas.
Comentarios
Responder
Digamos que está escribiendo un nuevo lenguaje de programación llamado «XYZ». El primer paso es escribir un compilador para este lenguaje. Dado que este nuevo lenguaje aún no existe, escribe el compilador en … digamos java. Lo llamaremos jxyz. Hacer este proceso es una clase típica en la universidad .
Ahora tiene un programa java (jxyz) que toma un archivo fuente XYZ y produce un ejecutable. Entonces es posible emprender la escritura de un compilador para XYZ en XYZ que sea compatible con jxyz.
En este punto, tiene un compilador para XYZ que se cumplió con jxyz. Bien, llame a este programa «xyzFromJ».
«xyzFromJ» debería poder tomarse a sí mismo como una entrada y compilarse completamente eliminando todo lo creado por jxyz de las dependencias y la definición del lenguaje. A partir de este momento, cualquier cambio en el lenguaje XYZ se puede realizar en el compilador escrito en XYZ y compilado por sí mismo.
Respuesta
Paso 1. Escriba su compilador en un idioma diferente.
Paso 2. Compile el código del Paso 1.
Paso 3. Escriba su compilador en el mismo idioma.
Paso 4. Compile el código de paso 3.
Repita los pasos 3-4 para cualquier actualización adicional de su compilador.
Tenga en cuenta que los pasos 1 y 3 pueden ocurrir simultáneamente o en un orden diferente.
Admito que esto es una simplificación excesiva.
Comentarios
Respuesta
A diferencia de otras respuestas que sugieren escribir el compilador en algún otro idioma (presumiblemente uno que se ejecuta en la misma máquina a la que se dirige), también es posible (en realidad preferible) escribir el compilador en el idioma de destino desde el principio.
Supongamos que desea escribir un compilador para C para un procesador ARM. Ya tiene un compilador de C que se ejecuta en Windows (arquitectura Intel). Escribe su nuevo compilador en C, tanto el front-end (análisis léxico y análisis sintáctico) como el back-end (generación de código). El back-end, por supuesto, está escrito para generar código para ARM, no para Intel.
Luego compila la fuente para el nuevo compilador con el compilador existente. Una vez que esté satisfecho de que el compilador está generando código válido para ARM, tome el código ARM compilado y ejecútelo en la arquitectura ARM de destino. Ahora tiene la fuente para el nuevo compilador, que se puede modificar y alimentar en su ejecutable y generar una nueva versión.
Este proceso se llama compilación cruzada. La ventaja es que solo tiene para escribir el compilador una vez.
Respuesta
de otra respuesta:
Step 1. Write your compiler in a different language. Step 2. Compile the code from Step 1. Step 3. Write your compiler in the same language. Step 4. Compile the code from step 3.
Los pasos 1 y 2 solo son necesarios para el «primer compilador» de un nuevo lenguaje. Hay muchas variaciones en los pasos 3 y 4, por lo que, por ejemplo, puede escribir el generador de código para una nueva arquitectura, compilación cruzada, luego ejecute el mismo compilador en una nueva máquina.O puede extender su compilador para manejar nueva sintaxis y construcciones sin usar ninguna de las extensiones, luego reescribir el compilador para usar las extensiones y compilarse a sí mismo.