Está en la página 1de 6

Universidad Nacional del Altiplano Puno

FACULTAD DE INGENIERÍA MECÁNICA ELÉCTRICA,


ELECTRÓNICA Y SISTEMAS

ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS

TAREA 02: EJERCICIOS DE INTRODUCCIÓN PARTE 2

Compiladores

Docente:

Mayenka Fernández Chambi

Presentado por:

Christian André Urviola García.

Puno – Perú

2020
Ejercicios de Introducción en Compiladores Segunda Parte
(Presentado por: Christian André Urviola García)
1. Resuelva los ejercicios de la sección 1.6 del texto del curso (Pág. 35)
Sección 1.6:
Ejercicio 1.6.1: Para el código en C estructurado por bloques de la figura 1.13(a),
indique los valores asignados a w, x, y y z.

Solución:

i=6(global), j=7(local)
w=13.
X=i(global)+j(global) = 6+5=11
i=8(local)
y=i(local)+j(global)=8+5=13
z=i(global)+j(global)=11

w = 13
x = 11

y = 13
z = 11
Ejercicio 1.6.2: Repita el ejercicio 1.6.1 para el código de la figura 1.13(b).

Solución:
i=5(local)
w=i(local)+j(global)=5+4=9
x=i(global)+j(global)=3+4=7
j=6(local), i=7(global)
y=i(global)+j(local)=7+6=13
z=i(global)+j(global)=7+4=11
w=9
x=7

y = 13
z = 11
Ejercicio 1.6.3: Para el código estructurado por bloques de la figura 1.14, suponiendo
el alcance estático usual de las declaraciones, dé el alcance para cada una de las doce
declaraciones.
DECLARACIÓN ALCANCE
int w (B1) B1-B2
int x (B1) B1-B2
int y (B1) B1-B5
int z (B1) B1-B5
int x (B2) B2-B3
int z (B2) B2
int w (B3) B3
int x (B3) B3
int w (B4) B4
int x (B4) B4
int y (B5) B5
int z (B5) B5

Ejercicio 1.6.4: ¿Qué imprime el siguiente código en C?

En b: A “x” se le asigna el valor de a que es (x+1)


x = 2+1, e imprime la variable x que es igual a 3.
En c: La variable “x” ahora es local con el valor de 1,
a = x+1, y luego se imprime el valor de “a” con el valor de 2.
2. Realice un resumen del capítulo 1 (No más de una página)

En este capítulo se menciona como los compiladores están fuertemente relacionados


con los lenguajes de programación, las arquitecturas de las máquinas, la teoría de
lenguajes, los algoritmos y la ingeniería de software. Inicia con la estructura de un
compilador el cual va de un programa fuente a un programa destino, para llegar a esto
pasa por las fases en su estructura que son: el analizador léxico, analizador sintáctico,
analizador semántico, generador de código intermedio (estas 4 primeras forman el
grupo front-end), optimizador de código independiente de la máquina, generador de
código y optimizador de código independiente de la máquina (estos 2 últimos forman el
back-end). Cada una de estas fases tienen una particularidad profunda, pero el final de
todos ellos es traducir un lenguaje por así decirlo cercano al del ser humano a un
lenguaje netamente máquina. Luego se habla como evolucionaron los lenguajes de
programación, desde aproximadamente la década de 1940, cuando se programaba
inicialmente en lenguaje máquina, llamado lenguaje de primera generación. Pero esto
era muy complicado de hacer, así que por la década de los 50s aparecieron los lenguajes
ensambladores (representaciones mnemónicas), llamados lenguajes de segunda
generación. Luego aparecieron los que conocemos hasta hoy en día como son los
lenguajes de C, C++, Fortran, Cobol, etc. Llamados los de 3ra generación. Y así
sucesivamente fueron apareciendo muchos más lenguajes con sus respectivas
generaciones. Luego se menciona como un compilador preserva el significado del
programa que se compila, todo esto a base de modelos matemáticos avanzados usados
de manera apropiada, y como se hace uso de muchas diversas técnicas para optimizar
al compilador. También se menciona como la arquitectura de computadoras está
fuertemente ligado a la arquitectura de un compilador, tanto así que ahora primero se
optimiza un modelo de arquitectura de compilador, para luego poder aceptar una
propuesta de arquitectura de computador. También se menciona que no solo un
compilador puede traducir un programa fuente de alto nivel a lenguaje máquina, si no
también traducciones entre diferentes tipos de lenguajes. Entre ellos se señala la
traducción binaria, síntesis de hardware, intérprete de consultas de bases de datos y
simulación compilada. Al final hace mención sobre los fundamentos de los lenguajes de
programación, y como este se relaciona fuertemente con los términos de memoria, con
las distinciones entre estático y dinámico, con los entornos y estados, con los alcances y
estructuras de bloques, controles de acceso, cuándo un alcance es dinámico, cuando un
parámetro es por valor o por referencia, y cuando aun así pasándolo por valor este
obligatoriamente es por referencia. Y de esta manera dando una pequeña vista genera
sobre que tratan los compiladores y como se relacionan estos con tan profundos temas
de estudio.
3. Responda las siguientes preguntas:

• ¿Cuál es la utilidad de un compilador, aparte de traducir un programa?


También evalúa diseños arquitectónicos propuestos. A parte de traducir
entre distintos tipos de lenguajes. También sirve para localizar
desbordamientos en las entradas y salidas de los programas escritos y
también dar seguridad a que un programa no caiga a través del análisis
de flujos de datos.

• ¿El compilador está relacionado a las características de la arquitectura


de un computador?, Explique su respuesta
Si, ya que para explotar al máximo el rendimiento de una arquitectura de
un computador, es necesario que el compilador esté optimizado a este.
A parte que actualmente se usan los compiladores para evaluar posibles
futuras propuestas de arquitecturas de computadores.

• ¿El compilador está relacionado a las características de un lenguaje de


programación?, Explique su respuesta
Si, ya que últimamente hay mucha demanda en lenguajes de alto nivel,
el compilador tiene que tomar decisiones por el programador ya que este
no podría tomar las mejores decisiones, y como un lenguaje de alto nivel
tiende a ser menos rápido que uno de bajo nivel aun que tiene a tener
menos errores, el compilador tiene que adaptarse a optimizar lo mejor
posible todos los aspectos posibles.

También podría gustarte