CARRERA. ING. SISTEMAS COMPUTACIONALES MATERIA. LENGUAJES Y AUTÓMATAS NOMBRE DEL MAESTRO(A). MC. LORENA SANTOS ESPINOZA NOMBRE DEL ALUMNO JAVIER FLORES MONTALVO GRADO. SEXTO SEMESTRE
AUTOR: JAVIER FLORES MONTALVO
INTRODUCCIÓN Para llevar a cabo la creación de un lenguaje de programación (lenguaje artificial) es de suma importancia conocer que es un traductor, intérprete, cargador, ligador, ensamblador y compilador es por eso que en este trabajo e incluido varias definiciones para tener un concepto más claro de cada uno de los temas que tratare.
¿QUÉ ES UN TRADUCTOR? DEFINICIÓN 1 Un traductor entre dos lenguajes de programación, es un programa que realiza una transformación (una traducción) entre ellos: el lenguaje de entrada al traductor (lenguaje fuente) y el de salida del traductor (lenguaje destino); el traductor acepta un texto escrito en el lenguaje fuente (representativo de un determinado algoritmo/programa) y emite como salida una representación de ese mismo algoritmo/programa codificada en el lenguaje destino. El traductor está escrito en un lenguaje de implementación Li, o también llamado host. El proceso de traducción no altera el significado del programa traducido. El traductor analiza el programa de entrada verificando que está correctamente codificado según la definición del lenguaje fuente; si el programa analizado no tiene errores se puede traducir; en caso contrario, el traductor avisa de los errores detectados. La entrada al traductor se denomina programa fuente y la salida programa destino (o también código generado por el traductor).
DEFINICIÓN 2 Para facilitar el trabajo de programación y hacer los programas más legibles, resolviendo las limitaciones que presentan los lenguajes máquina, se han desarrollado lenguajes de programación que permiten utilizar una simbología y terminología próximas a las tradicionalmente utilizadas en la descripción de problemas. Estos lenguajes se denominan genéricamente lenguajes simbólicos. Como la computadora únicamente puede interpretar y ejecutar código máquina, existen programas traductores, que traducen o trasladan programas desde el lenguaje simbólico al lenguaje máquina. En general existen traductores para convertir programas escritos en un lenguaje a otro. El programa inicial se denomina programa fuente, y el programa obtenido tras el proceso de traducción, programa objeto.
AUTOR: JAVIER FLORES MONTALVO
DEFINICIÓN 3 Es un programa que recibe como entrada código escrito en un cierto lenguaje y produce como salida código en otro lenguaje. Generalmente el lenguaje de entrada es de más alto nivel que el de salida. Ejemplos de traductores son los ensambladores y los compiladores.
DEFINICIÓN 4 Programa que procesa un texto fuente y genera un texto objeto. El traductor está escrito en un lenguaje de implementación (LI) o también denominado lenguaje de host. El texto fuente está escrito en lenguaje fuente (LF), por ejemplo un lenguaje de alto nivel. El texto objeto está escrito en lenguaje objeto (LO), por ejemplo un lenguaje máquina, ensamblador u otro lenguaje de alto nivel.
El lenguaje fuente (LF) es el lenguaje origen que transforma el traductor (por ejemplo C, C++, Pascal, FORTRAN, PL/I, COBOL, ADA, MODULA-2, BASIC, C...). También pueden ser lenguajes de bajo nivel. El lenguaje objeto (LO) es el lenguaje al que se traduce el texto fuente. Los lenguajes objeto pueden ser por ejemplo otro lenguaje de alto nivel, el lenguaje máquina de un microprocesador determinado, un lenguaje ensamblador,... El lenguaje de implementación (LI) o lenguaje host es el lenguaje en que está escrito el traductor. Puede ser cualquier lenguaje, desde un lenguaje de alto nivel a un lenguaje máquina
PROCESOS DE TRADUCCIÓN DE UN PROGRAMA
AUTOR: JAVIER FLORES MONTALVO
¿QUÉ ES UN INTÉRPRETE? DEFINICIÓN 1 Es un programa que traduce un lenguaje de alto nivel al lenguaje de máquina de una computadora. El programa siempre permanece en su forma original (programa fuente) y traduce cuando está en la fase de ejecución instrucción por instrucción. El intérprete en los lenguajes de programación simula una máquina virtual, donde el lenguaje de máquina es similar al lenguaje fuente.
DEFINICIÓN 2 Un intérprete hace que un programa fuente escrito en un lenguaje vaya, sentencia a sentencia, traduciéndose a código objeto y sea ejecutado directamente por la computadora. El intérprete capta una sentencia fuente y la traduce, expandiéndola en una o varias instrucciones máquina, que ejecuta inmediatamente, no creándose, por tanto, un fichero o programa objeto almacenable en memoria masiva para posteriores ejecuciones.
DEFINICIÓN 3 Los intérpretes no producen un lenguaje objetivo como en los compiladores. Un intérprete lee el código como está escrito e inmediatamente lo convierte en acciones; es decir, lo ejecuta en ese instante. Existen lenguajes que utilizan un intérprete (como por ejemplo JAVA) que traduce en el instante mismo de lectura el código en lenguaje máquina para que pueda ser ejecutado. La siguiente figura muestra el funcionamiento de un intérprete.
PROCESOS DE UN INTÉRPRETE
AUTOR: JAVIER FLORES MONTALVO
¿QUÉ ES UN CARGADOR? DEFINICIÓN 1 La fase siguiente es introducir o cargar el programa absoluto en memoria, y prepararlo para su ejecución. Estas operaciones las realiza una utilidad denominada cargador. Tradicionalmente las funciones que se asignan a un cargador son las siguientes: 1. Asignar espacio en la memoria principal para el programa. Obviamente esta asignación debe realizarse en espacios libres. 2. Cada programa o módulo relocalizable puede hacer llamadas a otros módulos del programa absoluto. Es necesario ajustar las direcciones de las instrucciones de llamada, de forma que estas queden definidas. Esto no es posible antes de la creación del módulo absoluto, ya que cada módulo relativo no puede conocer a priori dónde se encontrarán los módulos y sus instrucciones. Una de las funciones de los cargadores tradicionales es realizar estos enlaces. 3. El programa absoluto tiene sus direcciones numeradas de 0 a n (son direcciones relativas). El cargador, teniendo en cuenta las zonas de memoria asignadas (que no necesariamente han de ser contiguas) reajusta las direcciones para que correspondan a direcciones físicas reales. 4. Pasa las instrucciones de memoria masiva a memoria principal; es decir, realiza la operación de carga propiamente dicha. En los sistemas actuales las cuatro funciones anteriores pueden estar dispersas en diversos módulos y no pertenecer todas al cargador.
DEFINICIÓN 2 Un cargador es un programa que coloca en la memoria, para su ejecución, el programa guardado en algún dispositivo de almacenamiento secundario. Dependiendo de la manera en que se manejen los procesos de liga y de carga, podemos clasificar a los cargadores en:
Cargadores iniciales. Indican a la computadora la forma de poner, dentro de la memoria principal, unos datos que están guardados en un periférico de memoria externa (cinta, disco, etc.). Sirven para cargar en la memoria pequeños programas que inician el funcionamiento de una computadora.
AUTOR: JAVIER FLORES MONTALVO
Cargadores de arranque Con la máquina vacía e inactiva, no hay necesidad de hacer relocalización de programas, tan solo se puede especificar la dirección absoluta del programa que se cargue en primer lugar.
Cargadores absolutos. Como ya se mencionó el programa cargador pone en memoria las instrucciones guardadas en sistemas externos. Independientemente de que sea un cargador inicial o no, si dichas instrucciones se almacenan siempre en el mismo espacio de memoria (cada vez que se ejecuta el programa cargador), se dice que es un cargador absoluto.
Cargadores con relocalización. En ocasiones, un mismo programa necesita ejecutarse en diferentes posiciones de memoria. Para esto la traducción debe estar realizada en forma adecuada, es decir, no utilizando referencias absolutas a direcciones de memoria, sino referencias relativas a una dirección especial llamada dirección de relocalización.
Cargadores ligadores. Conocidos también por su término inglés Link editor o simplemente Linker, es muy común también referirse a él por la castellanización del nombre inglés, <>. A la acción de montar se le llama asimismo vulgarmente <>. Montar un programa consiste en añadir al programa objeto obtenido en la traducción las rutinas externas a las que hace referencia dicho programa
DEFINICIÓN 3 Un cargador es un programa que coloca en la memoria para su ejecución, el programa guardado en algún dispositivo de almacenamiento secundario. El cargador consiste en un juego de instrucciones que permiten al dispositivo de entrada (teclado o unidad de cinta) asignar la dirección de inicio de la memoria y asegurar que el computador leerá el programa y lo cargara byte a byte.
¿CUÁLES SON LAS FUNCIONES DE UN CARGADOR? Es un programa del sistema que realiza la carga, pero muchos cargadores también incluyen relocalización y ligado. Algunos sistemas tienen un ligador(o editor de ligado) para realizar las operaciones de enlace, y un cargador separado para la relocalización y la carga.
AUTOR: JAVIER FLORES MONTALVO
¿TIPOS DE CARGADORES? 1. *Carga Absoluta y Relocalizable 2. *Cargadores Estáticos 3. *Cargadores Dinámicos
¿CUÁLES SON LOS CARGADORES DE CARGA ABSOLUTA Y RELOCALIZABLE? *El proceso de carga absoluta consiste en que con la máquina vacía o inactiva no hay necesidad de hacer relocalización de programas tan solo se puede especificar la dirección absoluta del programa que se cargue en primer lugar. *Relocalización: Los cargadores que permiten la relocalización de programas se denominan cargadores relocalizadores o relativos.
¿QUÉ ES UN CARGADOR DINÁMICOS? *El cargador dinámico (dld.so) se utiliza para cargar dinámicamente bibliotecas compartidas durante el inicio ejecutable.
PROCESOS DE UN CARGADOR
AUTOR: JAVIER FLORES MONTALVO
¿QUÉ ES UN LIGADOR? Es un programa que enlaza todos los programas o módulos obteniendo lo que denominamos programa ejecutable. Un ligador es un programa de sistema que combina dos o más programas objeto separado y permite que se hagan referencias unos a otros, o sea, que cada uno de estos programas puedan hacer referencia a código ó variables de los otros programas con los que está enlazado.
¿CUÁLES SON LAS PRINCIPALES FUNCIONES DE UN LIGADOR? 1. Los editores de ligado pueden efectuar varias funciones últimas además de la simple preparación de un programa objeto para su ejecución. 2. Se pueden utilizar para construir paquetes de subrutinas u otras secciones que suelen utilizar juntas.
¿CUÁLES SON LOS TIPOS DE LIGADORES? 1. EDITORES DE LIGADO. La diferencia fundamental entre un editor de ligado y un cargador ligador es: Primero se ensambla o compila el programa fuente, produciendo un programa objeto (que puede contener varias secciones de control diferentes). 2. LIGADOR DINAMICO. El ligador dinámico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria. 3. EDITOR DE LIGADO DEL SISTEMA /370. La técnica de referencia a un número se usa para mejorar la eficiencia. El programa de salida del editor de ligado se llama módulo de carga, y puede cargarse en la memoria para su ejecución, y suele contener suficiente información para permitir que el editor de ligado los reprocese.
¿CUÁLES SON LOS LIGADORES ESTÁTICOS? Cuando se utilizan subrutinas en un programa, el código ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecución. Para esto, antes de cargar un programa, debe ligarse su código objeto con los códigos objeto (guardados en uno o más archivos) de cada una de las subrutinas invocadas por él, obteniendo así un programa ejecutable que contiene tanto el código del módulo invocador como el código de los módulos invocados.
AUTOR: JAVIER FLORES MONTALVO
¿CUÁLES SON LOS LIGADORES DINÁMICOS? Ligado dinámico El ligado dinámico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria.
PROCESOS DE UN LIGADOR
AUTOR: JAVIER FLORES MONTALVO
¿QUÉ ES UN ENSAMBLADOR? DEFINICIÓN 1 Ensamblador se refiere a un tipo de programa, informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina ejecutable directamente por la máquina para la que se ha generado, en si la función de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina.
DEFINICIÓN 2 Se define como un lenguaje de programación que se usa para dar directamente órdenes al ordenador. A diferencia de otros lenguajes, que usan el sistema operativo como intermediario para ejecutar las tareas (le dicen al sistema operativo que haga una cosa y este es quien se encarga de hacérselo saber al ordenador), el lenguaje ensamblador (en inglés assembly) no usa intermediarios, sino que directamente leda las órdenes a la máquina. Conviene diferenciar para no confundirnos por un lado el término lenguaje ensamblador, y por otro el término ensamblador . El primero sería el lenguaje de programación como tal, mientras el segundo sería el programa que convierte un fichero escrito en lenguaje ensamblador en código máquina o binario para que le ordenador pueda leerlo.
PROCESO DE UN ENSAMBLADOR
AUTOR: JAVIER FLORES MONTALVO
¿QUÉ ES UN COMPILADOR? DEFINICIÓN 1 Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, o también genera aplicaciones que sean directamente utilizables en un ordenador o computadora. Un compilador lee el código fuente creado en un determinado lenguaje de programación, lo interpreta, comprueba su sintaxis y traduce a lenguaje o código máquina toda la serie de instrucciones, generando el archivo ejecutable final (Programa compilado).
TIPOS DE COMPILADORES Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
DEFINICIÓN 2 Un compilador es un programa que lee el código escrito en un lenguaje (lenguaje origen), y lo traduce en un programa equivalente escrito en otro lenguaje (lenguaje objetivo). Como una parte fundamental de este proceso de traducción, el compilador le hace notar al usuario la presencia de errores en el código fuente del programa.
PROCESOS DE UN COMPILADOR
AUTOR: JAVIER FLORES MONTALVO
CONCLUSIÓN Un traductor es el que nos ayuda a darle instrucciones a un ordenador por el cual nosotros empezamos escribiendo un lenguaje de alto nivel mientras el traductor se encarga de traducirlo a un bajo nivel para que de esta manera el ordenador pueda entender lo que queremos que haga. Desde luego que los cargadores y los ligadores son de suma importancia ya que nos ayudan en el trascurso del proceso para poder tener una comunicación con el ordenador Quiero poner muy en claro que no confundamos el nombre de lenguaje ensamblador y ensamblador ya que el lenguaje ensamblador está enfocado más al propio lenguaje mientras que el ensamblador es un programa que convierte en fichero escrito en lenguaje ensamblador Par a poder traducir un programa necesitamos la ayuda de un compilador o un interpretador. Unos programadores prefieren utilizar el compilador ya que al final de su proyecto lo que obtienen es un archivo ejecutable y de esa forma poder proteger su código, mientras que otros prefieren usar el interpretador la diferencia es que el interpretador necesita el código para llevar a cabo su ejecución mientras que el compilador es más que suficiente el ejecutable.
AUTOR: JAVIER FLORES MONTALVO