Está en la página 1de 35

COMPILADORES

Erling Morales Quenta

Compiladores e interpretes
Los compiladores e interpretes de los lenguajes de alto nivel producen lenguaje mquina como salida. La diferencia fundamental es la siguiente: Los compiladores realizan la traduccin en tiempo de desarrollo. Es decir, el programa an no se est ejecutando. El compilador recibe todo el cdigo fuente, lo analiza, lo optimiza y lo traduce a lenguaje mquina dejando un programa completo listo para su ejecucin. Tpicos lenguajes compilados son el C o el PASCAL Los intrpretes realizan la traduccin en tiempo de ejecucin. Es decir, a medida que el programa se va ejecutando, el intrprete va traduciendo instrucciones al lenguaje mquina. Un tpico lenguaje interpretado es el BASIC.

Intrprete
Los intrpretes no producen un programa objeto (como en el caso de los compiladores), ms bien ejecutan directamente el programa fuente. Un intrprete traduce una sola instruccin de cdigo fuente en su equivalente a cdigo objeto, la ejecuta y luego pasa a la siguiente instruccin en cdigo fuente, la traduce y ejecuta, y as sucesivamente.

Compiladores
Un compilador es un programa que lee el cdigo escrito en un lenguaje (lenguaje origen), y lo traduce o traduce en un programa equivalente escrito en otro lenguaje (lenguaje objetivo). Como una parte fundamental de este proceso de traduccin, el compilador le hace notar al usuario la presencia de errores en el cdigo fuente del programa. Una vez que se obtiene el lenguaje objeto este es independiente del cdigo fuente.

Compiladores
El compilador deriva su nombre de la manera en que trabaja, buscando en todo el cdigo fuente, recolectando y reorganizando las instrucciones. Un compilador difiere de un intrprete en que el intrprete toma cada lnea de cdigo y la analiza y ejecuta mientras que el compilador mira el cdigo por completo. Los compiladores requieren de un tiempo antes de poder generar un ejecutable, sin embargo los programas creados con compiladores se ejecutan mucho ms rpido que un mismo programa ejecutado con un intrprete.

Compiladores
El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora pueda interpretar y ejecutar. Para cada lenguaje de programacin se requiere un compilador separado, el compilador traduce todo el programa antes de ejecutarlo. En otras palabras un compilador traduce programas insertados en la memoria por el sistema operativo para convertirlos en pulsaciones electrnicas ejecutables (lenguaje mquina).

Clasificacin de Compiladores
Los compiladores pueden ser de: Una sola pasada: Examina el cdigo fuente una vez, generando el cdigo o programa objeto. Pasadas mltiples: Requiere pasos intermedios para producir un cdigo en otro lenguaje y una pasada final para producir y optimizar el cdigo producido durante los pasos anteriores. Optimizacin: Lee un cdigo fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.

Clasificacin de Compiladores
Compiladores incrementales: Generan un cdigo objeto, instruccin por instruccin, cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente. Compilador cruzado: Se genera cdigo en un lenguaje objeto para una mquina diferente de la que se esta utilizando para compilar. U compilador cruzado nos permite programar, por ejemplo en Windows para un ambiente como Linux.

Clasificacin de Compiladores
Ensamblador: Es un lenguaje fuente y posee una estructura sencilla. Compiladores con montador: Ese tipo de compilador compila distintos mdulos de forma independiente y despus es capaz de enlazarlos. Autocompilador: Compilador que esta escrito en el mismo lenguaje que se va a compilar, evidentemente no se puede ejecutar la primera vez. Sirve para hacer ampliaciones de lenguaje, mejorar el cdigo generado, etc.

Clasificacin de Compiladores
Metacompilador: Es sinnimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones de lenguaje, para el que desea obtener un compilador y genera como salida un compilador de ese lenguaje. El desarrollo de los metacompiladores se encuentra con la dificultad de unir la generacin de cdigo con la parte de anlisis. Descompilador: Es un programa que acepta como entrada cdigo mquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilacin.

Caractersticas de un Compilador
Generalmente un compilador se divide en dos partes: * Front End: parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionar. * Back End: parte en donde se genera el cdigo mquina exclusivo para una plataforma a partir de lo analizado en el Front End.

Caractersticas de un Compilador
Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de varios lenguajes de programacin distintos y que el mismo Front End que sirve para analizar el cdigo fuente de un lenguaje de programacin concreto sirva para generar cdigo mquina en varias plataformas distintas. Suele incluir la generacin y optimizacin del cdigo dependiente de la mquina. Por lo general el cdigo que genera el Back End normalmente no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (Linker).

Fases de un Compilador
Anlisis Lxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un anlisis smbolo por smbolo indicando el token por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este anlisis no logra detectar muchos errores por su caracterstica. Anlisis Semntico: Este anlisis es ms difcil de formalizar, determina el tipo de los resultados intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre s.

Fases de un Compilador
Anlisis Sintctico: En esta fase se analiza la estructura de las expresiones en base a gramticas. Aqu ya se puede determinar si una estructura por ejemplo una expresin matemtica esta mal formada. El anlisis que se realiza es jerrquico es decir en base a rboles de derivacin que se obtienen de las mismas gramticas. Generacin de Cdigo Intermedio: El cdigo intermedio es una representacin en base a elementos de 3 y 4 direcciones. Lo que nos permite llegar a la fase de optimizacin de cdigo.

Fases de un Compilador
Optimizacin de Cdigo: Consiste en realizar una mejora en el cdigo intermedio, para reducir el nmero de lneas y hacer que la ejecucin sea ms rpida. Generacin de Cdigo: Llegamos a la generacin de cdigo ensamblador o cdigo mquina del procesador que nos interese.

Fases de un Compilador
Administrador de tabla de smbolos: Una tabla de
smbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. Estos atributos proporcionan informacin sobre la memoria asignada a un identificador, su tipo, su mbito y en el caso de procedimientos o funciones el mtodo para pasar cada argumento (Por valor o referencia) y el tipo de dato que devuelve, si lo hay. Desde el primer momento en que el analizador lxico detecta un identificador en el programa fuente, el identificador se introduce a la tabla de smbolos.

Fases de un Compilador
Deteccin e informacin de errores: Cada fase puede encontrar errores. Sin embargo despus de detectar un error cada fase debe tratar de alguna forma ese error, Manejador para poder continuar la de errores compilacin permitiendo la deteccin de ms errores en el programa fuente. Un compilador que se detiene cuando encuentra el primer error no resulta tan til como debiera.
Cdigo fuente
Anlisis Lxico Anlisis Lxico Anlisis Lxico eneracin de cdigo intermedio Administrador de tabla de smbolos

Cdigo objeto

Optimizacin

eneracin de Cdigo

Etapas del proceso de Compilacin


1. EDICIN. Esta fase consiste en escribir el programa empleando algn lenguaje y un editor. Como resultado nos dar el cdigo fuente de nuestro programa. 2. COMPILACIN. En esta fase se traduce el cdigo fuente obtenido en la fase anterior a cdigo mquina. Si no se produce ningn error se obtiene el cdigo objeto. En caso de errores el compilador los mostrara para ayudarnos a corregirlos y se procedera a su compilacin de nuevo, una vez corregidos.

Etapas del proceso de Compilacin


3. LINKADO. Esta fase consiste en unir el archivo generado en la fase dos con determinadas rutinas internas del lenguaje, obteniendo el programa ejecutable. Existen dos tipos de linkados:
Linkado esttico: Los binarios de las libreras se aaden a nuestros binarios compilados generando el archivo ejecutable. Linkado dinmico: no se aaden las libreras a nuestro binario sino que har que se carguen en memoria las libreras que en ese momento se necesiten.

Etapas del proceso de Compilacin


Una vez traducido, compilado y linkado el archivo esta listo para su ejecucin donde tambin podrn surgir problemas y fallos, para los cuales tendramos que volver a realizar todo el proceso anteriormente citado, de modo que puedan ser corregidos. Por este motivo es importante realizar numerosas pruebas en tiempo de ejecucin antes de presentar el programa al cliente.

Partes de un Compilador
Un compilador tiene las siguientes partes:

COMPIL

ORE

EJ V

COMPILADORES DE JA A
El lenguaje de programacin Java, fue diseado por la compaa Sun Microsystems Inc, con el propsito de crear un lenguaje que pudiera funcionar en redes computacionales heterogneas ( redes de computadoras formadas por ms de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo, etc.),y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier mquina o plataforma.

CARACTERSTICAS DEL COMPILADOR JA A


 Evitar errores de memoria  Imposibilitar acceso al SO  Evitar que caiga la mquina sobre la que corre

Ausencia de punteros: Protege frente a imitacin de objetos, violacin de encapsulacin, acceso a reas protegidas de memoria, ya que el programador no podr referenciar posiciones de memoria especficas no reservadas, a diferencia de lo que se puede hacer en C y C++.

CARACTERSTICAS DEL COMPILADOR JA A


Gestin de memoria: Ya no se puede gestionar la memoria de forma tan directa como en C, (no hay malloc). En cambio, se instancian objetos, no se reserva memoria directamente con la memoria y con el SO. Control de mtodos y variables de clases: Las variables y los mtodos declarados privados slo son accesibles por la clase o subclases herederas de ella y los declarados como protegidos, slo por la clase

CARACTERSTICAS DEL COMPILADOR JA A


Mtodos y clases final: Las clases y los mtodos (e incluso los datos miembro) declarados como final no pueden ser modificados o sobrescritos. Una clase declarada final no puede ser ni siquiera extendida. Recogida de basura: El programador ya no libera la memoria manualmente mediante free. El recogedor de basura de Java se encarga de reclamar la memoria usada por un objeto una vez que ste ya no es accesible o desaparece.

VERIFICADOR DE CDIGOS DE BYTES


permite ejecutar cdigo de bytes de programas Java vlidos, buscando intentos de: Fabricar punteros Ejecutar instrucciones en cdigo nativo Llamar a mtodos con parmetros no vlidos Usar variables antes de inicializarlas

VERIFICADOR DE CDIGOS DE BYTES


El verificador efecta cuatro pasadas sobre cada fichero de clase: En la primera, se valida el formato del fichero. En la segunda, se comprueba que no se instancien subclases de clases final. En la tercera, se verifica el cdigo de bytes: la pila, registros, argumentos de mtodos, opcodes. En la cuarta, se finaliza el proceso de verificacin, realizndose los ltimos tests.

EL MODELO DE LAS CUATRO CAPAS


Este modelo se implementa mediante la construccin de cuatro barreras o lneas de defensa: Primera lnea de defensa: Caractersticas del lenguaje/compilador Segunda lnea de defensa: Verificador de cdigo de bytes Tercera lnea de defensa: Cargador de clases Cuarta lnea de defensa: Gestor de Seguridad

COMPILADORES DE C SHARP

COMPILADORES C SHARP
Es un lenguaje de programacin orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET. Esta es una interfaz de programacin de aplicaciones (API), mientras que C es un lenguaje de programacin independiente diseado para generar programas sobre dicha plataforma.

TIPOS DE COMPILADORES
 Microsoft.NET framework SDK incluye un compilador de C , pero no un IDE.  Microsoft Visual Studio, IDE por excelencia de este lenguaje, versin 2002, 2003, 2005, 2008 y 2010.  #develop, es un IDE libre para C bajo licencia LGPL, muy similar a Microsoft Visual C#.  Mono, es una implementacin GPL de todo el entorno .NET desarrollado por Novell. Como parte de esta implementacin se incluye un compilador de C .  Delphi 2006, de Borland Software Corporation.  dotGNU Portable.NET, de la Free Software Foundation.

CARACTERSTICAS DEL COMPILADOR C#


Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como funciones matemticas y de manejo de archivos, proporcionadas por bibliotecas. Es un lenguaje muy flexible que permite programar con mltiples estilos. Uno de los ms empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).

CARACTERSTICAS DEL COMPILADOR C#


Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de pre procesado, el preprocesador de C, para tareas como definir macros e incluir mltiples archivos de cdigo fuente. Acceso a memoria de bajo nivel mediante el uso de punteros. Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave.

Elements
www.animationfactory.com

También podría gustarte