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:
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
No hay comentarios:
Publicar un comentario