lunes, 21 de noviembre de 2011

FASES DE UN COMPILADOR



Un compilador típicamente opera en fases, cada una lleva a cabo una tarea sobre el programa fuente. Las primeras tres fases suelen agruparse en una sola fase llamada fase de análisis y las últimas tres en una llamada fase de síntesis.



1.       Etapa de Análisis:
En esta etapa se controla que el texto fuente sea correcto en todos los sentidos, y se generen las estructuras necesarias para la generación de código.
      
      a.       Análisis léxico:
En esta fase, la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos, que son secuencias de caracteres que tienen un significado atómico, además el analizador léxico trabaja con la tabla de símbolos introduciendo en esta los nombres de las variables.

b.      Análisis Sintáctico:
En esta fase, se agrupa los componentes léxicos del programa fuentes en frases gramaticales que el compilador utiliza para sintetizar la salida. Trabaja con una gramática de contexto libre y genera el árbol sintáctico que reconoce  su sentencia de entrada

c.       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. Un componente importante del análisis semántico es la verificación de tipos. Aquí el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente. 


2.     Etapa de síntesis:
Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).

      d.      Generación de Código Intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.

e.      Optimización
En esta fase se mejora el código intermedio mediante complejas operaciones y pruebas. De modo que en la siguiente fase resulte un código de máquina más fácil de ejecutar.

f.        Generación de Código
La fase final de un compilador es la generación de código objeto, que por lo general consiste en código máquina reubicable o código ensamblador. Cada una de las variables usadas por el programa se traduce a una dirección de memoria, después, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo, es la asignación de variables a registros.

ANALIZADOR LÉXICO
El analizador léxico es el encargado de buscar los componentes léxicos o palabras que componen el programa fuente, según unas reglas o patrones. La entrada del analizador léxico podemos definirla como una secuencia de caracteres, que pueda hallarse codificada según cualquier estándar: ASCII, EBCDIC, Unicode, etc. El analizador léxico divide esta secuencia de terminales desde el punto de vista del analizador sintáctico. Dicha secuencia es el punto de partida para que el analizador sintáctico construya un árbol sintáctico que reconoce las sentencias de entrada

Funciones de un analizador léxico
El analizador léxico es la primera fase de un compilador, su principal función consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis. Además de esta función principal, el analizador léxico también realiza otras de gran importancia, tales como:
·         Eliminar los comentarios del programa.
·         Eliminar espacios en blanco, tabuladores, retoños de carro, etc.
·         Reconocer los identificadores de usuario, números, palabras, reservadas del lenguaje, etc., y tratarlos correctamente con respecto a la tabla de símbolos.
·         Llevar la cuenta del número de línea por la que va leyendo, por si se produce algún error, dar información acerca de dónde se ha producido.
·         Avisar de errores léxicos
·         También puede hacer funciones de procesador. 





BIBLIOGRAFÍA

1.       Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. (1998). Compiladores: principios, técnicas y herramientas. México: Pearson.
2.       Gálvez, S; Rojas, M. (2005) Java a Tope: Traductores Y Compiladores Con Lex/yacc, Jflex/cup Y Javacc. Málaga: Universidad de Málaga.
3.       Garzón, M; Sampalo, M; Leyva, E; Prieto, I. (2004). Informática. Temario A. Volumen II. Profesores de Educación Secundaria E-book. Madrid: MAD S.L.
4.       Pérez, I. (2005). Lenguaje Y Compiladores. Caracas.  
5. Wikipedia. (2011). Compilador. Recuperado el 20 de noviembre del 2011 de,  http://es.wikipedia.org/wiki/Compilador

.




No hay comentarios:

Publicar un comentario