You are on page 1of 10

Introduccin a la compilacin

Materia: Programacin en sistemas Alumno: Carlos Arturo Reyes Morales Numero de control: 07480135

Guadalupe, Nuevo Len, 13 de Septiembre del 2010

Introduccin La escritura de compiladores comprende los lenguajes de programacin, la arquitectura de computadoras, teora de lenguajes, algoritmos e ingeniera de software, afortunadamente con algunas tcnicas bsicas de escritura de compiladores podemos crear traductores para una gran cantidad de lenguajes y maquinas, ahora nos centraremos en describir los componentes de un compilador, el entorno en que trabajan y algunas herramientas de diseo de compiladores. 1.1 Compiladores
Un compilador es un programa que lee un programa escrito en un lenguaje, el lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto, adems de informar de errores en el proceso.

Programa Fuente

Compilador

Programa Objeto

Mensajes de error Existe una gran cantidad de lenguajes de programacin, al igual tambin existe una gran cantidad de lenguajes objeto pueden ser otro lenguaje de programacin o incluso lenguaje mquina. Los compiladores generalmente se clasifican en compiladores de pasada, mltiples pasadas, ejecucin, depuracin u optimizacin, sin importar el tipo, todos realizan las mismas tareas especficas. Al comprender estas tareas se pueden crear compiladores para una gran cantidad de lenguajes de lenguaje fuente y maquinas objeto utilizando las mismas tcnicas base.

Mtodo de anlisis y sntesis de la compilacin


En la compilacin hay 2 partes: el anlisis y la sntesis. El anlisis divide el programa fuente en los elementos que lo componen y crea una representacin intermedia del programa fuente, la parte del diseo construye el programa objeto a partir de la representacin intermedia. Durante el anlisis se determinan las operaciones que implica el programa fuente y se registran en una estructura jerrquica llamada rbol llamado rbol sintctico, donde cada nodo representa una accin y los hijos de un nodo son los argumentos de la operacin.

Muchas herramientas de software que manipulan programas fuente realizan algn tipo de anlisis primero, algunos ejemplos son: Editores de estructuras.- Toma como entrada una secuencia de rdenes para construir un programa fuente, analiza el texto del programa, imponindolo a una estructura jerrquica apropiada, de esta forma puede realizar tareas adicionales tiles para la preparacin de programas, adems la salida del editor suele ser similar a la salida de la fase de anlisis de un compilador. Impresoras estticas.-Analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible. Verificadores estticos.- lee un programa, lo analiza y detecta los posibles errores sin ejecutar el programa, puede detectar si hay partes de un programa que no se lograran ejecutar o si una variable se trata de utilizar sin ser definida, adems de detectar errores lgicos como tratar de usar una variable real como apuntador. Intrpretes.- en lugar de producir un programa objeto como resultado de una traduccin, realiza las operaciones que implica un programa fuente, muchas veces se utilizan para ejecutar lenguajes de rdenes, pues cada operador que se ejecuta en un lenguaje de rdenes suele ser una invocacin de una rutina compleja como un editor o un compilador. Tradicionalmente se concibe a un compilador como un programa que traduce un programa fuente, sin embargo hay otros procesos que funcionan de una forma similar a un compilador, por ejemplo: y y y Formadores de textos Compiladores de circuitos de silicio Intrpretes de consultas.

El contexto de un compilador
Adems de un compilador se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa se puede dividir en mdulos almacenados en archivos distintos, la labor de reunir el programa fuente se le asigna a otro programa conocido como preprocesador.

1.2- Anlisis del programa fuente


Ahora hablaremos del anlisis, se ilustra su uso en algunos lenguajes de formacin de textos. En la compilacin consta de 3 fases: Anlisis lineal.- en la que la cadena de caracteres que conforma el programa se lee de izquierda a derecha y se agrupa en componentes lxicos que son secuencias de caracteres que tienen un significado colectivo.

Anlisisjerrquico.- en el que los caracteres o los componentes lxicos se agrupan jerrquicamente en colecciones anidadas con un significado colectivo. AnlisisSemntico.- en el que se realizan ciertas revisiones para asegurar que los componentes de un programa se ajustan de un modo significativo.

Anlisis lxico
En un compilador al anlisis lineal se le conoce como anlisis lxico. Ejemplo: Posicin = inicial + velocidad * 60

Se agruparan de la siguiente forma: y y y y y y y Identificador posicin El smbolo de asignacin = El identificador inicial El signo de suma El identificador velocidad El signo de multiplicacin El numero 60

Anlisis sintctico
El anlisis jerrquico se denomina anlisis sintctico. Este implica agrupar los componentes lxicos del programa fuente en frases gramaticales que puedan ser comprendidas por el compilador para sintetizar la salida. La estructura jerrquica de un programa se expresa utilizando reglas recursivas, por ejemplo: y y y Cualquier identificador es una expresin. Cualquier nmero es una expresin. Si la expresin1 y la expresin2 son expresiones entonces su suma y su producto son expresiones.

En este caso la tercera regla es recursiva. La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Generalmente se elige una divisin que simplifique la tarea completa del anlisis. Un factor para determinar esta divisin es si una construccin del lenguaje fuente es inherentemente recursiva. Las construcciones lxicas no requieren recursin, mientras que las sintcticas suelen requerirla.

Anlisis semntico
En esta fase se revisa el programa fuente para tratar de encontrar errores semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de cdigo.En ella se utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificar los operadores y operando de expresiones y proposiciones. Durante la verificacin de tipos se verifica si cada operador tiene operando permitidos por la especificacin del lenguaje fuente.

Anlisis en formadores de textos.


La entrada de un formador de texto especifica una jerarqua de cajas: regiones rectangulares que se van a llenar con algn patrn de bits, representando pixeles claros y oscuros para ser impresos por el dispositivo de salida.

1.3.- Las fases de un compilador


Un compilador opera en fases. Cada una de las cuales transforma al programa fuente de una representacin en otra. A continuacin se mostrara un ejemplo.

Administracin de la tabla de smbolos


Una funcin esencial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir informacin de los atributos de cada identificador, estos puede proporcionar informacin de la memoria asignada a un identificador, su tipo, su mbito, el nmero y el tipo de sus argumentos. Una Tabla de smbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. La estructura de datos permite encontrar rpidamente el registro de cada identificador y almacenar o consultar rpidamente datos en ese registro.

Generacin de cdigo intermedio


Despus de los anlisis sintctico y semntico algunos compiladores generan representacin intermedia explicita del programa fuente. Se puede considerar como un programa para una maquina abstracta. Debe contar con 2 caractersticas importantes: debe ser fcil de producir y fcil de traducir al programa objeto.

Optimizacin de cdigo
La fase de optimizacin de cdigo trata de mejorar el cdigo intermedio, de modo que resulte un cdigo maquina ms rpido de ejecutar.

Generacin de cdigo
La fase final de un compilador es la generacin de cdigo objeto, que por lo general consiste en cdigo maquina relocalizarle o ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Despus cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de mquina que ejecuta la misma tarea.

1.4.- Programas de Sistemas relacionados con un compilador


La entrada de un compilador puede producirse por uno o varios preprocesadores, y puede necesitarse otro procesamiento de salida que produce el compilador antes de obtener un cdigo de maquina ejecutable.

Preprocesadores
Producen la entrada para un compilador, y pueden realizar las siguientes funciones: Procesamiento de macros.- puede permitir al usuario definir macros, que son abreviaturas de construcciones ms grandes. Inclusin de archivos.- Puede ingresar archivos de encabezamiento en el texto del programa. Preprocesadores Racionales .- enriquecen lenguajes antiguos con recursos ms modernos de flujo de control y de estructuras de datos. Extensiones a lenguajes.- Tratan de crear posibilidades al lenguaje que equivalen a macros incorporadas. Los procesadores de macros tratan dos clases de proposiciones: definicin y uso de macros, las definiciones normalmente se indican con algn carcter exclusivo.

Ensambladores
Algunos compiladores producen cdigo ensamblador, otros realizan el trabajo del ensamblador, produciendo cdigo de maquina relocalizarle que se puede pasar directamente al editor de carga y enlace. El cdigo ensamblador es una versin mnemotcnica del cdigo de mquina, donde se usan nombres en lugar de cdigos binarios para operaciones, y tambin se usan nombres para las direcciones de memoria. Es comn que los lenguajes ensambladores tengan recursos para manejar macros que son similares a las consideradas antes para los procesos de macros.

Ensamblado de dos pasadas


La forma ms simple de un ensamblador hace dos pasadas sobre entrada, en donde una pasada consiste en leer una vez un archivo de entrada, se encuentran todos los identificadores que denoten posiciones de memoria y se almacenan en una tabla de smbolos, cuando se encuentran por primera vez los identificadores, se les asignan posiciones de memoria. En la segunda pasada el ensamblador examina el archivo de entrada de nuevo, esta vez traduce cada cdigo de operacin a la secuencia de bits que representa esa operacin en lenguaje mquina y traduce cada identificador que representa una posicin de memoria a la direccin dada por ese identificador en la tabla de smbolos. El resultado de la segunda pasada normalmente es cdigo de maquina relocalizable, lo cual puede cargarse a partir de la posicin L, es decir, si se le suma L a todas las posiciones del cdigo, entonces todas las referencias sern correctas.

Cargadores y editores de enlace


Por lo general un programa denominado cargador realiza ambas funciones de carga y edicin de enlaces, el proceso de carga consiste en tomar el cdigo de maquina relocalizable, modificar las direcciones relocalizables y ubicar las instrucciones y los datos modificados en las posiciones apropiadas de la memoria. El editor de enlace permite formar un solo programa a partir de varios archivos de cdigo de maquina relocalizable, estos archivos pueden haber sido el resultado de varias compilaciones distintas, y uno o varios de ellos pueden ser archivos de biblioteca de rutina proporcionadas por el sistema y disponibles para cualquier programa que lo necesite.

1.5.-El agrupamiento de fases


Con frecuencia las fases se agrupan en una etapa inicial y una etapa final, la etapa inicial comprende las fases que dependen del lenguaje fuente y que son independientes de la maquina objeto. Ah normalmente se incluyen los anlisis lxico y sintctico, la creacin de la tabla de smbolos, el anlisis semntico y la generacin de cdigo intermedio. La etapa inicial tambin puede hacer cierta optimizacin de cdigo, adems incluye el manejo de errores correspondiente a cada una de estas fases. La etapa final incluye aquellas partes del compilador que dependen de la maquina objeto y en general no dependen del lenguaje fuente si no del lenguaje intermedio, en esta fase se encuentran aspectos de la fase de optimizacin de cdigo, generacin de cdigo as como la correccin de errores y las operaciones con la tabla de smbolos.

1.6.-Herramientas para La construccin de compiladores


El escritor del compilador puede usar ciertas herramientas de software como depuradores para el reparar su cdigo sin problemas, algunas de las herramientas usadas comnmente son los siguientes: Generadores de analizadores sintcticos.- como su nombre lo indica, generan analizadores sintcticos a partir de una entrada fundamentada en una gramtica independiente del contexto. Generadores de analizadores lxicos.- Generan analizadores lxicos en base a una especificacin basada en expresiones regulares. Dispositivos de traduccin dirigida por la sintaxis.- Estos producen grupos de rutinas que recorren el rbol sintctico generando cdigo intermedio. Generadores automticos de cdigo.- Tales herramientas toman un conjunto de reglas que definen la traduccin de cada operacin del lenguaje intermedio al lenguaje de mquina para la maquina objeto. Las regles deben incluir suficiente detalle para manejar los distintos mtodos de acceso posibles de los datos. Dispositivos para anlisis de flujo de datos.- Mucha de la informacin necesaria para hacer una buena optimizacin de cdigo implica hacer un anlisis de flujo de datos que consiste en recolectar informacin de la forma en que se transmiten los valores de una parte del programa a cada una de las otras partes.

You might also like