Análisis Léxico
Un Analizador Léxico transforma la secuencia de símbolos de entrada en una secuencia de componentes léxicos sobre la cual es más fácil hacer luego el análisis sintáctico. El A.L. lee caracteres de entrada y los agrupa en secuencias que tienen significado dentro de la estructura sintáctica del lenguaje fuente.
Un analizador léxico es un traductor que actúa en la primera fase de un proceso de compilación.
Análisis Sintáctico
El análisis sintáctico descubre la estructura sintáctica de la cadena de entrada usando las reglas que definen las cadenas válidas en el lenguaje fuente.
Dichas reglas viene expresadas en forma de una gramática que describe de manera relativamente breve las frases o secuencias válidas en un lenguaje. Una gramática también describe la estructura jerárquica o sintáctica de las frases de un lenguaje.
Análisis Semántico
El análisis semántico verifica que el árbol sintáctico tenga un significado válido dentro de las reglas semánticas del lenguaje. Por ejemplo, el analizador semántico verifica que:
* En una asignación, el tipo de la variable concuerde con el tipo de la expresión asignada.
* Que los subíndices se apliquen a variables tipo arreglo y no a otras.
* Que las variables estén declaradas antes de ser usadas.
Generación de Código Intermedio
La fase de generación de código intermedio se ocupa de generar instrucciones para una máquina virtual genérica a partir de la información recopilada en las fases previas de análisis. La razón por la cual no se genera código objeto directamente es para permitir que la fase de optimización sea genérica y por lo tanto portátil (independiente del código objeto específico).
Optimización
La fase de optimización se encarga de transformar el código intermedio en uno de función equivalente pero de menor tamaño o de menor tiempo de ejecución.
Algunas de las transformaciones que puede llevar a cabo la fase de optimización son:
* Eliminar el cálculo de expresiones cuyo valor no se usa.
* Fundir en uno solo el cálculo repetido de la misma expresión.
* Sacar de los lazos las expresiones cuyo valor no cambia en el lazo.
* Reducir el uso de memoria local reutilizando el espacio de una variable muerta.
Generación de Código Objeto
La fase de generación de código objeto se encarga de generar el programa usando el juego de instrucciones específico de la máquina o CPU objeto, y el formato para archivos ejecutables del sistema operativo. Entre otras cosas, también se le asignan direcciones definitivas a las rutinas y variables que componen el programa.