lunes, 21 de noviembre de 2011

COMPILADORES


COMPILADOR
Se denomina a un compilador como un programa informático que tiene la capacidad de traducir un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando a su vez un software equivalente que el computador será capaz de interpretar.
ANÁLISIS LÉXICO
Un analizador léxico o analizador lexicográfico (scanner) es un programa que recibe como entrada el código fuente de otro programa y produce una salida compuesta de tokens (componentes léxicos) o símbolos. Estos tokens sirven para una posterior etapa del proceso de traducción, siendo la entrada para el analizador sintáctico.
En esta fase se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carácter de puntuación. A la secuencia de caracteres que representa un componente léxico se le llama lexema. Además, todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente.
Componentes Léxicos
Cuando un analizador léxico reúne los caracteres en un token, generalmente representa el token de manera simbólica, es decir, como un valor de un tipo de datos enumerado que representa el conjunto de tokens del lenguaje fuente. En ocasiones también es necesario mantener la cadena de caracteres misma u otra información derivada de ella, tal como el nombre asociado con un token identificador o el valor de un token de número.
En la mayoría de los lenguajes el analizador léxico sólo necesita generar un token a la vez. En este caso se puede utilizar una variable global simple para mantener la información del token.
 FASES DE UN COMPILADOR

Figura 1: fases de un compilador

FASE DE ANÁLISIS
Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis Léxico, Análisis Sintácticoy Análisis Semántico.
Análisis Léxico: en esta fase se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carácter de puntuación. A la secuencia de caracteres que representa un componente léxico se le llama lexema. Además, todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente.
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).
Análisis Semántico:esta fase 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. Utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones.
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. Ejemplo: las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz.
FASE DE SÍNTESIS
Esta fase consiste en generar el código objeto equivalente al programa fuente. Sólo se genera código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas. Esta fase abarca las siguientes subfases:
Generación de Código Intermedio:algunos compiladores generan una representación intermedia explícita del programa fuente. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.
Una forma de representación intermedia es "código de tres direcciones" que es como el lenguaje ensamblador de una PC en la que cada posición de memoria puede actuar como un registro. El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos. Esta representación intermedia tiene las siguientes propiedades:
1.       Cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones.
2.       El traductor debe generar un nombre temporal para guardar los valores calculados por cada instrucción.
3.       Algunas instrucciones de "tres direcciones" tienen menos de tres operandos, por ejemplo, la asignación.
Optimización de Código: consiste en mejorar el código intermedio, de modo que resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es posible sobre todo si el traductor es un compilador, debido a que un intérprete le resulta difícil optimizar el código objeto.
Generación de Código:esta constituye la fase final de un compilador. En ella se genera el código objeto que por lo general consiste en código en lenguaje máquinao código en lenguaje ensamblador.
Manejo de Tabla de Símbolos:esta estructura de datos mantiene la información asociada con los identificadores: funciones, variables, constantes y tipos de datos. Esta tabla contiene un registro por cada identificador, con campos para los atributos de cada identificador.Esta estructura permite encontrar rápidamente el registro de cada identificador y almacenar o consultar datos de ese registro.
Detección de Errores:en cada fase se pueden detectar errores. Sin embargo, después de detectar un error, cada fase del compilador debe tratar de alguna manera a ese error para poder continuar con la compilación, permitiendo la detección de más errores en el programa fuente.


WEBGRAFIA:
Wikipedia (2011). Compilador. Artículo disponible en: http://es.wikipedia.org/wiki/Compilador
Mi Tecnológico (2010). Fases de un Compilador. Articulo disponible en: http://www.mitecnologico.com/Main/FasesDeUnCompilador
Juan Botía. Análisis Léxico. Articulo disponible en: https://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r59444.PDF
Wikipedia (2011). Analizador Léxico. Articulo disponible en: http://es.wikipedia.org/wiki/Analizador_l%C3%A9xico
ALFRED AHO Y JEFFREY ULLMAN, Compiladores Principios, Técnicas y Herramientas.

No hay comentarios:

Publicar un comentario