Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje máquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente.
Cada fase representa una transformación al código fuente para obtener el código objeto
El proceso de traducción se compone internamente de varias etapas o fases, que realizan distintas operaciones lógicas.
FASE DE ANÁLISIS
- Ø Análisis Léxico.- El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente. También se comprueba que los símbolos del lenguaje (palabras clave, operadores,etc) se han escrito correctamente. Este análisis no logra detectar muchos errores por su característica.
Ejemplo:
total=valor*5
Luego del análisis léxico:
id = id * num
Ø Análisis sintáctico.- En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). El análisis que se realiza es jerárquico.
Ejemplo:
position:=initial + rate*60
Ø Análisis semántico.- La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. Este análisis es más difícil de formalizar, determina el tipo de los resultados intermedios, comprueba que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre sí.
FASE DE SÍNTESIS
Ø Generación de código intermedio.- Algunos compiladores generan una representación intermedia explícita del programa fuente, una vez que se han realizado las fases de análisis. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta.
Propiedades de la representación intermedia:
• Debe ser fácil de producir
• Debe ser fácil de traducir al programa objeto
Ø Optimización de código.- Trata de conseguir que el programa objeto sea más rápido en la ejecución y que necesite menos memoria a la hora de ejecutarse. (No todos los compiladores llevan a cabo esta etapa).
Ø Generación de Código.- Llegamos a la generación de código ensamblador o código máquina del procesador que nos interese.
Ejemplo:
a:=b+c
LOAD B
ADD C
STORE A
Tabla de símbolos
En esta estructura se almacena información como: variables, etiquetas, tipos, etc.
Los accesos a la tabla deben ser lo más rápido posibles
Manejo de errores
Es una de las misiones más importantes del compilador. Se utiliza más en el análisis pero los errores pueden darse en cualquier fase. El manejo de errores es una tarea difícil por dos motivos:
1. A veces algunos errores ocultan otros
2. Un error puede provocar una avalancha de errores que se solucionan con el primero
Bibliografía
No hay comentarios:
Publicar un comentario