Ya conocemos todas las Fases del diseño del Compilador , ahora los Pases del Compilador. Un paso del compilador se refiere al recorrido de un compilador a través de todo el programa. El paso del compilador es de dos tipos: Compilador de paso único y Compilador de dos pasos o Compilador de paso múltiple. Estos se explican a continuación a continuación.
1. Compilador de un solo paso:
si combinamos o agrupamos todas las fases del diseño del compilador en un solo módulo conocido como compilador de un solo paso.
En el diagrama anterior, las 6 fases están agrupadas en un solo módulo, algunos puntos del compilador de un solo paso son los siguientes:
- Un compilador de un paso/un solo paso es ese tipo de compilador que pasa a través de la parte de cada unidad de compilación exactamente una vez.
- El compilador de paso único es más rápido y más pequeño que el compilador de paso múltiple.
- Una desventaja del compilador de paso único es que es menos eficiente en comparación con el compilador de paso múltiple.
- El compilador de un solo paso es aquel que procesa la entrada exactamente una vez , por lo que pasa directamente del análisis léxico al generador de código y luego regresa para la siguiente lectura.
Nota: el compilador de un solo paso casi nunca se realiza, el compilador de Pascal anterior lo hizo como una introducción.
Problemas con el compilador de un solo paso:
- No podemos optimizar muy bien debido a que el contexto de las expresiones es limitado.
- Como no podemos hacer una copia de seguridad y procesarlo, de nuevo, por lo que la gramática debe limitarse o simplificarse.
- Los intérpretes de comandos como bash/sh/tcsh pueden considerarse compiladores de un solo paso, pero también ejecutan la entrada tan pronto como se procesan.
2. Compilador de dos pasos o compilador de pasos múltiples : un compilador
de dos pasos/pasos múltiples es un tipo de compilador que procesa el código fuente o el árbol de sintaxis abstracta de un programa varias veces. En multipass Compiler dividimos las fases en dos pases como:
- Primer paso: se refiere como
- (a). Interfaz
- (b). parte analítica
- (C). Plataforma independiente
En el primer paso, las fases incluidas son como analizador léxico, analizador de sintaxis, analizador semántico, generador de código intermedio que funcionan como front-end y la parte analítica significa que todas las fases analizan el lenguaje de alto nivel y los convierten en código de tres direcciones y el primer paso es independiente de la plataforma porque el La salida del primer paso es como un código de tres direcciones que es útil para todos los sistemas y el requisito es cambiar la optimización del código y la fase del generador de código que llega al segundo paso.
- Segundo Paso: se refiere como
- (a). back-end
- (b). Parte de síntesis
- (C). Dependiente de la plataforma
En el segundo paso, las fases incluidas son como optimización de código y generador de código funcionan como back-end y la parte de síntesis se refiere a tomar la entrada como código de tres direcciones y convertirlas en lenguaje de bajo nivel/lenguaje ensamblador y el segundo paso depende de la plataforma porque la etapa final de un compilador típico convierte la representación intermedia del programa en un conjunto ejecutable de instrucciones que depende del sistema.
Con Multi-Pass Compiler podemos resolver estos 2 problemas básicos:
- Si queremos diseñar un compilador para diferentes lenguajes de programación para la misma máquina. En este caso para cada lenguaje de programación se requiere hacer Front end/primer pase para cada uno de ellos y solo un Back end/segundo pase como:
- Si queremos diseñar un compilador para el mismo lenguaje de programación para diferentes máquinas/sistemas. En este caso, hacemos un back-end diferente para diferentes máquinas/sistemas y hacemos solo un front-end para el mismo lenguaje de programación que:
Diferencias entre los compiladores de paso único y paso múltiple:
Parámetros Pase único Pase múltiple Velocidad Rápido Lento Memoria Más Menos Tiempo Menos Más Portabilidad No Sí