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.
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