Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Lenguajes
Toda comunicacin involucra la utilizacin de un lenguaje. Las personas utilizan diferentes idiomas ( lenguajes naturales ).
Lenguajes artificiales
Uno de los principales mecanismos de comunicacin entre un ordenador y una persona viene dado por el envo y recepcin de mensajes de tipo textual. El usuario escribe una orden mediante el teclado, y el ordenador la ejecuta devolviendo como resultado un mensaje informativo sobre las acciones llevadas a cabo.
Concepto de traductor
Un traductor se define como un programa que traduce o convierte desde un texto o programa escrito en un lenguaje fuente hasta un texto o programa equivalente escrito en un lenguaje destino produciendo opcionalmente mensajes de error.
Tipos de traductores
Traductores del idioma Compiladores Intrpretes Preprocesadores Intrpretes de comandos Ensambladores Conversores fuente-fuente Compilador cruzado
Compiladores
Un compilador es un traductor que tiene como entrada un archivo en lenguaje formal y como salida tiene un archivo ejecutable. Realiza una traduccin de un cdigo de alto nivel a cdigo mquina. Tambin se entiende por compilador aquel programa que proporciona un archivo objeto en lugar del ejecutable final.
Mag. Hilmar Hinojosa Lazo
Intrpretes
El programa de entrada se reconoce y ejecuta a la vez. No se produce un resultado fsico (cdigo mquina) sino lgico (una ejecucin). Permiten una fcil depuracin. Su ejecucin es lenta. Durante la ejecucin, el intrprete debe residir en memoria, por lo que consume ms recursos.
Mag. Hilmar Hinojosa Lazo
Preprocesadores
Permiten modificar el programa fuente antes de la verdadera compilacin. Hacen uso de macroinstrucciones y directivas de compilacin. Los preprocesadores suelen actuar de manera transparente para el programador, pudiendo incluso considerarse que son una fase preliminar del compilador.
Mag. Hilmar Hinojosa Lazo
Preprocesadores
Intrpretes de comandos
Un intrprete de comandos traduce sentencias simples a invocaciones a programas de una biblioteca. Se utilizan operativos. especialmente en los sistemas
Ensambladores
Son los pioneros de los compiladores, ya que en los albores de la informtica, los programas se escriban directamente en cdigo mquina. En lenguaje ensamblador se establece una relacin biunvoca entre cada instruccin y una palabra mnemotcnica, de manera que el usuario escribe los programas haciendo uso de los mnemotcnicos, y el ensamblador se encarga de traducirlo a cdigo mquina puro. Ejemplo:
Los programas invocados pueden residir en el kernel (ncleo) del sistema o estar almacenados en algn dispositivo externo como rutinas ejecutables que se traen a memoria bajo demanda.
Mag. Hilmar Hinojosa Lazo
Conversores fuente-fuente
Permiten traducir desde un lenguaje de alto nivel a otro lenguaje de alto nivel. El programa fuente resultado puede requerir retoques manuales debido a diversos motivos: En situaciones en que el lenguaje destino carece de importantes caractersticas que el lenguaje origen s tiene. En situaciones en que la traduccin no es inteligente y los programas destino son altamente ineficientes.
Compilador cruzado
Es un compilador que genera cdigo para ser ejecutado en otra mquina. Se utilizan en la fase de desarrollo de nuevos computadores. Ejemplo: Para construir el sistema operativo de un nuevo computador se usa un lenguaje de alto nivel, incluso antes de que dicho nuevo ordenador disponga de un compilador.
Mag. Hilmar Hinojosa Lazo
Proceso de compilacin
El compilador no produce directamente un archivo ejecutable, sino que el cdigo generado se estructura en mdulos que se almacenan en un archivo objeto.
Proceso de enlace
El enlazador o linker resuelve las referencias cruzadas, es decir la utilizacin de objetos externos, que pueden estar declarados en otros archivos objeto o en libreras. Engloba en un nico bloque los distintos registros que almacenan cdigo mquina y genera el ejecutable final incorporando algunas rutinas adicionales procedentes de libreras.
Proceso de enlace
Proceso de carga
El cargador instala el archivo .exe en memoria, es decir que coloca sus diferentes segmentos en memoria (donde el sistema operativo le diga que hay memoria libre para ello) y asigna los registros base a sus posiciones correctas, de manera que las direcciones relativas funcionen correctamente.
Proceso de carga
Compilacin incremental
Cuando se desarrolla un programa fuente, ste se recompila varias veces hasta obtener una versin definitiva libre de errores. En una compilacin incremental slo se recompilan las modificaciones realizadas desde la ltima compilacin. Un compilador incremental puede funcionar a varios niveles: A nivel de carcter A nivel de sentencia A nivel de bloque A nivel de archivo fuente
Mag. Hilmar Hinojosa Lazo
Autocompilador
Es un compilador escrito en el mismo lenguaje que compila (o parecido). Cuando se desea mejorar un compilador, el nuevo compilador se escribe utilizando el lenguaje del antiguo, dando como resultado un compilador ms potente de ese mismo lenguaje.
Metacompilador
Un metacompilador es un compilador de compiladores. Se trata de un programa que acepta como entrada la descripcin de un lenguaje y produce el compilador de dicho lenguaje. No existen metacompiladores completos, pero s parciales que permiten aadir cdigo para completar el resto del compilador. Ejemplos de metacompiladores son: Lex, YACC, FLex, Bison, JavaCC, JLex, Cup, etc.
Descompilador
Un descompilador realiza una labor de traduccin inversa, esto es, pasa de un cdigo mquina al equivalente escrito en el lenguaje que lo gener (programa fuente). La descompilacin es una labor casi imposible, porque al cdigo mquina generado casi siempre se le aplica una optimizacin en una fase posterior, de manera que un mismo cdigo mquina ha podido ser generado a partir de varios cdigos fuente. Slo existen descompiladores de aquellos lenguajes en los que existe una relacin biyectiva entre el cdigo destino y el cdigo fuente, como sucede con los desensambladores, en los que a cada instruccin mquina le corresponde una y slo una instruccin ensamblador.
Mag. Hilmar Hinojosa Lazo
Estructura de un traductor
Un traductor divide su labor en dos etapas: una que anlisis y otra de sntesis.
Anlisis
Anlisis lexicogrfico: Divide el programa fuente en los componentes bsicos del lenguaje a compilar. Cada componente bsico es una secuencia de caracteres del programa fuente, y pertenece a una categora gramatical: nmeros, identificadores de usuario (variables, constantes, tipos, nombres de procedimientos, ...), palabras reservadas, signos de puntuacin, etc. Anlisis sintctico: Comprueba que la estructura de los componentes bsicos sea correcta segn las reglas gramaticales del lenguaje que se compila.
Anlisis
Anlisis semntico: Comprueba que el programa fuente respete las directrices del lenguaje que se compila (todo lo relacionado con el significado): chequeo de tipos, rangos de valores, existencia de variables, etc. Cualquiera de estas tres fases puede emitir mensajes de error derivados de fallas cometidas por el programador en la redaccin de los textos fuente.
Mag. Hilmar Hinojosa Lazo
Sntesis
Generacin de cdigo intermedio: Genera un cdigo independiente de la mquina muy parecido al ensamblador. Generacin de cdigo mquina: Crea un bloque de cdigo mquina ejecutable, as como los bloques necesarios destinados a contener los datos. Fase de optimizacin. La optimizacin puede realizarse sobre el cdigo intermedio (de forma independiente de las caractersticas concretas del microprocesador), sobre el cdigo mquina, o sobre ambos.
Mag. Hilmar Hinojosa Lazo
Tabla de smbolos
Una funcin esencial de un compilador es registrar los identificadores de usuario y sus atributos. Estos atributos pueden proporcionar informacin sobre la memoria asignada a un identificador, la direccin de memoria en que se almacenar en tiempo de ejecucin, su tipo, su mbito, etc. Toda est informacin se guarda en la tabla de smbolos. Su estructura puede ser una tabla hash, un rbol binario de bsqueda, etc.
Mag. Hilmar Hinojosa Lazo
Tabla de smbolos
Tanto la etapa de anlisis como la de sntesis accede a esta estructura.
Preprocesamiento
El cdigo fuente de una aplicacin se puede dividir en mdulos almacenados en archivos distintos. La tarea de reunir el programa fuente se confa a un programa distinto, llamado preprocesador. El preprocesador tambin puede expandir macros. En nuestro ejemplo, la constante PORCENTAJE se sustituye por su valor, dando lugar al texto: comision = fijo + valor * 8; Este pasa a ser la fuente que entrar al compilador.
Mag. Hilmar Hinojosa Lazo
Etapa de sntesis
En la etapa anterior se ha controlado que el programa de entrada es correcto. Por tanto, el compilador ya se encuentra en disposicin de generar el cdigo mquina equivalente semnticamente al programa fuente. Para ello se parte de las estructuras generadas en dicha etapa anterior: rbol sintctico y tabla de smbolos.
Mag. Hilmar Hinojosa Lazo