martes, 17 de febrero de 2009

Análisis léxico



El análilsis léxico es un proceso mediante el cual se realiza un escaneo para leer los diferentes caracteres que contiene el programa fuente. Esto se realiza caracter a caracter despúes se agrupan teniendo en cuenta su significado propio; a este agrupamiento se le denomina componentes léxicos en ingles se conoce como Tokens.




COMPONENTES LEXICOS

Palabras reservadas: if, while, do, else. Identificadores: asociados a variables, nombres de funciones. Por ejemplo: posición, velocidad, tiempo. Operadores: = * + - / == > < & ! = . . . símbolos especiales: ; ( ) [ ] f g ... Constantes numéricas: literales que representan valores enteros, en coma flotante, 982, 0xF678, -83.2E+2,... Constantes de caracteres: literales que representan cadenas concretas de caracteres, \hola mundo".




FUNCIONES DEL ANALISIS LÉXICO

-Eliminación de espacios en blanco, comentarios, tabuladores y saltos de línea
-Asistencia en el informe de errores elaborado por el AS
-Cuenta de números de línea con comentarios, macros
-Convierte los valores literales al tipo que corresponda.
-Inclusion de ficheros: #include









¿Qué es un compilador ?

Un compilador es un programa que permite traducir un lenguaje fuente o lenguaje de programacion a un lenguaje objeto o código ensamblador, el cual es un lenguaje que puede entender la maquina; mediante el proceso de traducción es importante mencionar que se realiza detección de errores en el programa fuente. Los compiladores se utilizan tanto para lenguajes de programación tradicionales, como Fortran, C o Ada, o para aplicaciones especializadas como por ejemplo lenguajes de descripción de hardware, lenguajes de programación de robots, entre otros.


PARTES DE LA COMPILACIÓN

Análisis: Se realiza una division del programa en sus componentes y se crea una representación intermedia del programa fuente. Durante esta fase la estructura del programa se guarda en una estructura de datos especial que se denomina árbol sintáctico.

  1. Análisis léxico: separación de cada elemento componente del programa
  2. Análisis sintáctico: agrupa los componentes léxicos en frases gramaticales
  3. Análisis semántico: Se revisa el programa fuente para comprobar que las reglas semánticas del lenguaje (aquellas relativas al significado de las distintas instrucciones) se cumplen. Un ejemplo de regla semántica es la comprobación de tipos en las expresiones.

Síntesis: Construye el programa destino deseado a partir de una descripción en un lenguaje de representación intermedia.


Las tres primeras fases que realiza un compilador son: análisis léxico, sintáctico y semántico las cuales corresponden al analisis, pero dentro de la segunda fase de la compilación es decir durante la sintesis existen las siguientes fases: generación de código intermedio, optimador de código, y generador de código y existen otras dos fases la administración de la tabla de simbolos y el manejo de errores las cuales hacen interacción con las seis fases.


La tabla de símbolos: es una estructura de datos que almacena los identificadores utilizados en el programa fuente así como los atributos de cada identificador. Estos atributos pueden proporcionar información sobre el tipo del identificador, su tamaño, su rango de visibilidad, sus argumentos (en caso de procedimientos). La tabla de símbolos tiene operaciones para encontrar un identificador rápidamente, y leer sus atributos o modificarlos. Asimismo, permite introducir nuevos identificadores. Cada una de las fases de compilación puede realizar modificaciones de los registros de una tabla de símbolos, generalmente añadiendo más atributos a medida que se van conociendo.
El manejador de errores: es un módulo que gestiona las acciones a realizar por cada uno de los errores encontrados en las diferentes fases de la compilación.

PROGRAMAS DE SISTEMAS RELACIONADOS CON UN COMPILADOR

Preprocesador: Un programa fuente puede estar dividido en módulos almacenados en ficheros diferentes. La tarea de recopilar el código fuente almacenado en estos ficheros puede ser encomendada a un preprocesador. Asimismo, un preprocesador puede expandir las macros
convirtiéndolas en instrucciones ejecutables.
Ensamblador: Para poder obtener un programa ejecutable es preciso ensamblar este programa final con un ensamblador convencional.
Enlazador.Esta herramienta toma código máquina relocalizable de los diferentes objetos compilados y de librería, modifica las direcciones relocalizables para situarlas a los valores absolutos adecuados, y crea el programa ejecutable.