UNIDAD 1 ARQUITECTURA DE LOS COMPILADORES E INTERPRETES
Unidad de competencia
Determina la estructura general de los compiladores e intérpretes
con base en la funcionalidad de sus etapas y fases
Concepto, características, aplicabilidad y 2 ejemplos
Arquitectura de compiladores e intérpretes, máquinas
virtuales
Compiladores: Un traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes de bajo nivel se le denomina compilador.
--El tiempo que se necesita para
traducir un lenguaje de alto nivel a lenguaje objeto se denomina tiempo de
compilación.
--El tiempo que tarda en
ejecutarse un programa objeto se denomina tiempo de ejecución.
La construcción de un compilador involucra la división
del proceso en una serie de fases que variará con su complejidad. Generalmente
estas fases se agrupan en dos tareas: el análisis del programa fuente y la
síntesis del programa objeto.
*Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales) y Análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
*Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).
TIPOS DE COMPILADORES
Esta taxonomía de los tipos de compiladores no es excluyente, por lo que
puede haber compiladores que se adscriban a varias categorías:
*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.
Aplicabilidad
La función principal que cumple es traducir a un lenguaje
mucho más sencillo y entendible por la máquina, informa al usuario si existen
errores en el código fuente con el fin de ejecutar la aplicación sin problema,
si existe algún error simplemente se detiene.
Los intérpretes son programas que simplemente
ejecutan las instrucciones que encuentran en el texto fuente. En muchos casos
coexisten en memoria el programa fuente y el programa intérprete.
El encargado de
hacer esto es un programa llamado intérprete. A diferencia del
compilador, el intérprete de un lenguaje no produce una traducción a código
máquina. El intérprete intenta realizar "al vuelo" lo que se expresa
en los ficheros fuente. El intérprete contiene en su interior miles de
porciones de código máquina, que combinándolas adecuadamente pueden realizar
las mismas tareas que expresa una orden escrita en el lenguaje de alto nivel.
Cuando un programa
es interpretado, el proceso que se sigue es el siguiente: el intérprete obtiene
una instrucción del fichero fuente y la realiza inmediatamente. Para ello,
ejecuta en secuencia varias de esas porciones de código máquina que
comentábamos antes, y que residen en el interior del intérprete. Cuando la CPU
termina la ejecución de esa secuencia, el resultado es que la CPU habrá hecho
lo que la línea de código fuente expresaba.
Los programas
interpretados suelen ser más lentos que los compilados debido a la necesidad de
traducir el programa mientras se ejecuta, pero a cambio son más flexibles como
entornos de programación y depuración (lo que se traduce,
por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa
o añadir módulos completamente nuevos), y permiten ofrecer al programa
interpretado un entorno no dependiente de la máquina donde se ejecuta el
intérprete, sino del propio intérprete (lo que se conoce comúnmente
como máquina virtual).
Los programas
interpretes clásicos son:
BASIC
QBASIC
QUICKBASIC
VISUALBASIC
SMALLTALK
JAVA
BASIC
QBASIC
QUICKBASIC
VISUALBASIC
SMALLTALK
JAVA
Máquina virtual
Una Máquina Virtual de Sistema es un programa que nos
permite albergar un Ordenador Ficticio dentro de un Ordenador existente, es
decir, un software que simula por completo el comportamiento de un Ordenador
real sin que este exista, albergado virtualmente en un ordenador físico.
Este tipo de
programas nos permitirán con un solo PC disponer de múltiples Sistemas
Operativos funcionando simultáneamente usando tan solo una única máquina física.
una Virtual podemos por ejemplo instalar varios PCS
virtuales con distintos sistemas operativos y estudiar la forma de conectarlos
en una red a través también de routers virtuales.
Otra utilidad
primordial consiste en poder trabajar con aplicaciones que funcionan sobre
distintos sistemas operativos al que posee el ordenador anfitrión, disponiendo
de un solo Ordenador físico, esto a veces, resulta prácticamente
imprescindible, cuando un ordenador con un sistema Operativo Servidor necesita
trabajar con un programa que no corre sobre ese sistema servidor.
Las máquinas
virtuales se usan, por lo tanto, de forma muy frecuente en el ámbito
profesional y en la enseñanza, podremos, usándolas, probar y estudiar
cómodamente distintos sistemas operativos, plataformas de programación,
comportamiento de programas inestables etc.
Los Emuladores son
un tipo de máquinas virtuales cuya única diferencia es que solo soportan un
sistema, por ejemplo existen emuladores de videoconsolas, de sistemas
Operativos móviles, como Android o Symbian etc. esto también puede resultar de
gran utilidad.
Aunque en este artículo nos referimos principalmente a las Máquinas
Virtuales de Sistema debemos saber que existe otro tipo de Máquinas Virtuales,
llamadas de proceso, la diferencia entre ellas es que las segundas solo pueden
ejecutar un proceso simultáneamente y su comportamiento no se distingue en la
práctica de un programa convencional, aunque sí que son máquinas virtuales
puesto que a diferencia de una aplicación convencional trabajan aisladas del
sistema anfitrión a pesar de estar alojadas en él, además su misión no es
emular un sistema operativo si no funcionar como una plataforma independiente,
un ejemplo de este tipo es la Máquina Virtual de Java.
Como principal inconveniente, las Máquinas
Virtuales incrementan notablemente el trabajo que soporta el Equipo Físico
anfitrión, cada Sistema Operativo en funcionamiento añade una carga de procesos
enorme y ante todo ocupa una gran cantidad de memoria RAM, es imprescindible,
por lo tanto, disponer de un Ordenador potente y con gran cantidad de memoria
si queremos hacer correr a varios SO simultáneamente.
No hay comentarios:
Publicar un comentario