martes, 7 de febrero de 2017

Unidad 1

Unidad 1 Arquitectura de los Compiladores e Intérpretes

Unidad de competencia: determina la estructura general de los compiladores e intérpretes con base en la funcionalidad de sus etapas y faces

Definición de compiladores e intérpretes
Concepto:
Compilador
Un traductor es cualquier programa que toma un texto escrito en un lenguaje y da como salida en otro lenguaje, Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto.

Interpretes
Ejecutan las instrucciones del programa según se vallan presentando. Necesitan menos memoria, pero son más lentos que los compiladores (LISP, Prolog). Históricamente, se pusieron de moda en los primeros años porque los recursos de memoria eran escasos. Permiten añadir código dinámicamente durante la ejecución.

Características:
Compiladores
Se compila una vez, se ejecuta n-veces
En bucles, la compilación genera código equivalente al bucle pero un intérprete se traduce tantas veces una línea como veces se repite el bucle
El compilador tiene una visión global del programa, por lo que la información de mensajes de errores es más detallada.
Front End: parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.
Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el front end.

Interprete
Un intérprete necesita menos memoria que un compilador

Permite una mayor interactividad con el código en tiempo de desarrollo. Son más sencillos de implementar. Lo cual facilita el estudio de la corrección del intérprete y proporciona nuevas líneas de investigación como la generación automática de intérpretes a partir de las especificaciones semánticas del lenguaje. Proporcionan una mayor flexibilidad que permite modificar y ampliar características del lenguaje fuente. No es necesario contener en memoria todo el código fuente. Esto permite su utilización en sistemas de poca memoria o en entornos de red, en los que se puede obtener el código fuente a medida que se necesita [Plezbert 97]. Facilitan la meta-programación. Un programa puede manipular su propio código fuente a medida que se ejecuta. Esto facilita la implementación de sistemas de aprendizaje automatizado y reflectividad [Aït Kaci 91]. Aumentan la portabilidad del lenguaje: Para que el lenguaje interpretado funcione en otra máquina sólo es necesario que su intérprete funcione en dicha máquina.

Aplicabilidad:


Ejemplos:




Arquitectura de los compiladores e intérpretes
Concepto:
Un compilador contiene varios modulos que transforman, refinan y envıan información. Toda la informacion debe pasar por todos los modulos
Hay dos opciones:
1. Procesar la informacion en partes pequenas (compilador estrecho)
2. Procesar todo el programa (compilador amplio)

Características:
Se leen “pocos” tokens del programa y se producen pocos bytes de codigo (de ser posible
Se desecha casi toda la informacion acerca de los tokens leıdos
Requiere poca memoria (no depende del tamano del programa) pero es m´as lento
Casi todos los compiladores “reales” son de este tipo con componentes amplias (un compilador de C, puede procesar por rutina)
Puede requerir varias pasadas (lecturas del programa fuente) para compilar.
Se aplica cada modulo secuencialmente a todo el programa
Requiere una cantidad de memoria proporcional al tamano del programa

Aplicabilidad:
Se aplica cada modulo secuencialmente a todo el programa
Son mas “sencillos” desde un punto de vista teorico, educativo y de diseño

Ejemplos:




Máquinas virtuales
Concepto:
En informática una máquina virtual es un software que emula a un ordenador y puede ejecutar programas como si fuese un ordenador real. Este software en un principio fue definido como "un duplicado eficiente y aislado de una máquina física". La acepción del término actualmente incluye a máquinas virtuales que no tienen ninguna equivalencia directa con ningún hardware real.

Características:
Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados por los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse del computador o máquina virtual

Aplicabilidad:
Uno de los usos domésticos más extendidos de las máquinas virtuales es ejecutar sistemas operativos para "probarlos". De esta forma podemos ejecutar un sistema operativo que queramos probar (Linux, por ejemplo) desde nuestro sistema operativo habitual (Windows por ejemplo) sin necesidad de instalarlo directamente en nuestro ordenador y sin miedo a que se desconfigure el sistema operativo primario.

Ejemplos:
VMware Software propietario, muy maduro


Virtual PC Software propietario, algunas versiones son freeware

No hay comentarios:

Publicar un comentario