2. 2
Fases y Etapas de Compilación
Pedro Antonio Villalta
https://plus.google.com/u/0/105223072803758915793/about
Facebook y Twitter
Facebook.com/pavillalta
twitter.com/pavillalta
Mis Correos
pavillalta@gmail.com
pavillalta@ugb.edu.sv
5. Repaso Sobre las Fases de un Compilador
Las cinco fases de un compilador
anteriormente son las siguientes:
I. Análisis léxico.
II. Análisis sintáctico.
III. Análisis semántica.
IV. Generación de Código.
V. Optimización.
VI.Generación de Código Intermedio
descritas
6. I. Analisis Lexico
El analizador léxico lee el archivo fuente carácter por
carácter y forma grupos de caracteres (lexemas) con
un significado léxico mínimo, nominados tokens, que
son tratados como una entidad única.
El analizador léxico también elimina los componentes
no esenciales del programa fuente, e ignora los
espacios en blanco, los tabuladores, los caracteres de
final de línea, los comentarios y, en general, todo lo que
no sea necesario en las fases posteriores.
9. II. Análisis Sintáctico
Utiliza los tokens encontrados por el
analizador léxico y comprueba si llegan en
el orden correcto proporcionado por la
gramática libre de contexto que define el
lenguaje fuente.
La salida del análisis sintáctico suele ser un
árbol sintáctico con la estructura sintáctica
del programa fuente.
11. III. Análisis Semántico
El analizador semántico se ocupa de
comprobar el significado de las sentencias.
puede
haber
sentencias
sintácticamente
correctas, pero que no se puedan ejecutar
por no tener ningún sentido.
12. III. Análisis Semántico
Generalmente, este análisis se hace al mismo
tiempo que el sintáctico, introduce rutinas
semánticas que intentan encontrar errores de
significado (semánticos) a partir del árbol
sintáctico.
Al mismo tiempo reúnen información sobre los
tipos
de
datos
del
programa
fuente
(variables, constantes, etc.) que será utilizada en
la fase de generación de código.
13. Funciones del Análisis Semántico
Determina el tipo de los resultados
intermedios de las operaciones.
Comprueba que los operandos de un
operador pertenezcan al conjunto de los
tipos posibles para el operador y si son
compatibles entre sí.
14. Resultado del Análisis Semántico
La salida del análisis
semántico suele ser un
árbol semántico, que no es
más que un árbol sintáctico
en el que cada nodo ha
adquirido su significado.
16. IV. Generación de Código Intermedio
Una técnica para facilitar la tarea de
creación de nuevos compiladores consiste
en dividir el compilador en dos partes:
una
fase
de
análisis
y
una
de
síntesis, comunicadas con un lenguaje
intermedio.
18. V. Optimización de Código
Esta fase de síntesis está presente en los compiladores
más sofisticados, y su propósito es producir un
código objeto más eficiente:
Reduciendo
el
espacio
ocupado
por
el
código
generado.
Aumentando la rapidez de ejecución.
Haciendo que se necesite menos memoria cuando se
ejecute.
20. VI. Generación de Código Final
En esta última fase de la compilación se genera el
código objeto (generalmente código de ensamblador o
código máquina) a partir del código intermedio.
Se asigna espacio de memoria para cada nombre del
programa fuente (variables, tipos, constantes, etc.).
Se traduce cada una de las instrucciones en código
intermedio a una secuencia de instrucciones en
código objeto que ejecuten la misma tarea.
21. Ejemplo Generación de Código
Ejemplo:
C := A + B
Código Fuente
Código Objeto Equivalente:
LOAD A
SUM B
STO C
22. Generación de Errores
Cada una de las fases del compilador
detecta unos tipos de errores
determinados.
Por lo tanto, la gestión de errores tiene
que
preverse
cada fase.
individualmente
en
23. Ejemplos de Generación de Errores
En el análisis léxico
Símbolos ajenos al
lenguaje
En el análisis sintáctico
expresiones mal
construidas
En el análisis semántico
variables sin declarar