You are on page 1of 2

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE ACAPULCO

INGENIERÍA EN SISTEMAS COMPUTACIONALES

LENGUAJES Y AUTÓMATAS 2

PROFESOR: ING. BEDOLLA SOLANO SILVESTRE

CONTROL DE LECTURA. CAPÍTULO 7: AMBIENTES DE


EJECUCIÓN

CASTAÑÓN DE JESÚS JUAN JOSÉ. No. CONTROL: 15321030

AULA: 7SA HORA: 13:00 – 14:00 H

FECHA DE ENTREGA: 28/SEPTIEMBRE/2018


Construcción de Compiladores Principios y Práctica (Kenneth Louden)
Esto puede requerir análisis extra, como el que realiza un optimizador, y parte
de éste puede ser independiente de la máquina. Pero gran parte de la tarea de
la generación de código depende de los detalles de la máquina objetivo. No
obstante, las características generales de la generación de código permanecen
iguales a través de una amplia variedad de arquitecturas. Esto es
particularmente cierto para el ambiente en tiempo de ejecución o ambiente de
ejecución, el cual es la estructura de la memoria y los registros de la
computadora objetivo con los que se administra la memoria y se mantiene la
información necesaria para guiar el proceso de la ejecución. De hecho, casi
todos los lenguajes de programación utilizan una de tres clases de ambiente en
tiempo de ejecución, cuya estructura esencial no depende de los detalles
específicos de la máquina objetivo. Estas tres clases de ambientes son: el
ambiente completamente estático característico de FORTRAN77; el ambiente
basado en pila de lenguajes como C. C+ +, Pascal y Ada; y el ambiente
completamente dinámico de lenguajes funcionales como LISP. También pueden
utilizar híbridos a partir de todos los anteriores. Se comenta que cada una de
estas clases de ambientes por turno, junto con las características del lenguaje
que determinan qué ambientes son factibles, y cuáles deben ser sus
propiedades. Esto incluye cuestiones de ámbito y asignación, la naturaleza de
llamadas a procedimientos, y las variedades de mecanismos para paso de
parámetros. Las constantes pequeñas de tiempo de compilación, tales como O
y 1, por lo regular se insertan directamente en el código por medio del compilador
y no se les asigna ningún espacio de da- tos. Tampoco se necesita asignar
espacio en el área de datos global para procedimientos o funciones globales,
puesto que el compilador conoce sus puntos de entrada y también se pueden
insertar directamente en el código. Sin embargo, a los valores enteros grandes,
los valores de punto flotante y, en particular, las literales de cadena se les asigna
por lo regular memoria en el área global estática, se almacenan una vez en el
inicio y posteriormente se buscan en esas ubicaciones mediante el código de
ejecución. (En realidad, en las literales de cadena C son visualizados como
apuntadores, de modo que deben ser almacenadas de esta manera.) El área de
memoria utilizada para la asignación de datos dinámicos puede ser organiza- da
de muchas maneras diferentes. Una organización típica divide esta memoria en
un área de pila y un área de apilamiento o montículo (heap), donde el área de
pila es utilizada para los datos cuya asignación se presenta en modo LIFO (por
las siglas del término en inglés "último en entrar, primero en salir", es decir, "last-
in, first-out") y el área de apilamiento es empleada para la asignación dinámica
que no cumple con un protocolo LIFO.

You might also like