SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
Compiladores
Benjamín Joaquín Martínez
1.2 Dada la asignación en C
a [i+1] = a[i] + 2
Dibuje un árbol de análisis gramatical y árbol sintáctico para la expresión utilizando como guía el
ejemplo semejante de la sección 1.3
Expresión
Expresión de asignación
Expresión Expresión
=
Expresión de
subindice
Expresión aditiva
Expresión [ Expresión aditiva ]
Identificador
a
Expresión Expresión
+
Identificador
i
Numero
1
Expresión
+ Expresión
Expresión de subíndice Numero
2
Expresión [ Expresión ]
Identificador
a
Identificador
i
1.5 Si su compilador aceptara la entrada directamente desde el teclado, determine si dicho
compilador lee el programa entero antes de generar mensajes de error o bien genera mensajes
de error a medida que los encuentra. ¿Qué implicación tiene hacer esto en el número de
pasadas?
Los errores pueden ser detectados durante casi cualquier fase de la compilación. (pág. 18 párrafo
1) Pero es conveniente procesar todo el programa fuente varias veces antes de generar el código.
Ya que en cada pasada se construye un árbol sintáctico o un código intermedio a partir de la
fuente (pág. 15 párrafo 5) y dependiendo del lenguaje un compilador puede ser hasta de una
pasada, lo que equivaldría a leer el programa entero antes de generar algún manejo de error, pero
en la mayoría de los compiladores se usan más de una pasada para cada fase de compilación
(sintáctico, semántico, etc.) (Pág. 16 párrafo 1)
Expresión de asignación
Expresión de
subíndice
Expresión aditiva
Identificador
a
Expresión aditiva
Identificador
i
Numero
1
Expresión
de
subíndice
Identificador
a
Identificador
i
Numero
2
1.4. Esta pregunta supone que usted trabaja con un compilador que tiene una opción para
producir salida en lenguaje ensamblador.
a. Determine si su compilador realiza optimizaciones de incorporación de constantes.
Hablando del árbol sintáctico en varios casos es más fácil optimizar una forma linealizada
de árbol que está más cercano al código ensamblador (pág. 11 párrafo 1) .
Se pueden realizar de manera directa sobre el árbol al colapsar algún subárbol secundario
de su nodo raíz con su valor constante. (pág. 10, párrafo 4)
b. Una optimización relacionada pero más avanzada es la de propagación de constantes:
una variable que actualmente tiene un valor constante es reemplazada por ese valor en
las expresiones. Por ejemplo, el código (en sintaxis de C)
x = 4;
y = x + 2;
se reemplazaría, utilizando propagación de constantes ( e incorporación de constantes),
por el código
x = 4;
y = 6;
Determine si su compilador efectuó propagación de constantes.
Haciendo el árbol sintáctico la incorporación de constantes se hace al colapsar el nodo de la
expresión x por su valor constante 4. Pero no hay una operación adicional para x más que la
asignación de una constante.
Si x = 4; y y = x+2;
El código intermedio se reduce a x = 4; y=6;
Se incorpora la constante en y = x+2;  y = 4+2;
Y se propaga al generar una nueva constante a partir de otra en y =6;
C. Proporcione tantas razones como pueda de por qué la propagación de constantes es más
difícil que la incorporación de constantes.
En la incorporación de constantes solo se reemplaza un espacio referenciado en memoria por su
valor constante. Lo que equivale a colapsar el nodo donde está la expresión de asignación.
Pero en la propagación de constantes, se conllevan más pasos, esto equivaldría a realizar más
operaciones colapsando todo en un subárbol. .
La propagación de constantes ocupa entonces el uso de variables temporales para alojar el
resultado intermedio de las operaciones en estos subárboles.
Es más complicado que la incorporación de constantes pues en la primera hacemos más rápida la
ejecución pero la segunda busca eliminar operaciones redundantes o innecesarias.
Sentencia de asignación
Identificador
y
Expresión aditiva
2
Sentencia de
asignación
x 4
4
6
Colapsa el
nodo por
incorporación
de constante
Colapsa nodo
por
propagación
de constantes
Sentencia de asignación
y
6
Código
intermedio
d. Una situación relacionada con la propagación de constantes y la incorporación de constantes
es el uso de las constantes nombradas en un programa. Utilizando una constante nombrada x en
vez de una variable podemos traducir el ejemplo anterior como el siguiente código en C;
const int x = 4;
…
y= x + 2;
…
Determine si su compilador realiza propagación/incorporación bajo estas circunstancias.
¿En que difiere esto del inciso b?
No hace la propagación de constantes. Se salta la incorporación de constantes en
Const int x = 4;
Pero haría la incorporación de constantes en y = x + 2;
Dando como código intermedio
Const int x = 4; y =6;

Más contenido relacionado

La actualidad más candente

Control de flujo bucles
Control de flujo buclesControl de flujo bucles
Control de flujo bucles
Omar Grano
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
Ronal Palomino
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punteros
pedreror1
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
Ysaac Ruiz
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
luisabn
 
Guiaunidad iii
Guiaunidad iiiGuiaunidad iii
Guiaunidad iii
mayral
 

La actualidad más candente (20)

02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
02 - Conceptos fundamentales sobre tipos de datos en lenguaje C
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
04 - Sentencias de control condicionales y ciclos en lenguaje C: for, while, ...
 
Lenguaje c sintaxis
Lenguaje c sintaxisLenguaje c sintaxis
Lenguaje c sintaxis
 
Recursividad
RecursividadRecursividad
Recursividad
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantes
 
Control de flujo bucles
Control de flujo buclesControl de flujo bucles
Control de flujo bucles
 
Tutorial C++
Tutorial C++Tutorial C++
Tutorial C++
 
Punteros
PunterosPunteros
Punteros
 
la instrucción if , Leer cadenas, caracteres
 la instrucción if , Leer cadenas, caracteres la instrucción if , Leer cadenas, caracteres
la instrucción if , Leer cadenas, caracteres
 
03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C03 - Entrada y salida en lenguaje C
03 - Entrada y salida en lenguaje C
 
2 punteros y lenguaje c
2 punteros y lenguaje c2 punteros y lenguaje c
2 punteros y lenguaje c
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
Ejercicios resueltos con Python
Ejercicios resueltos con PythonEjercicios resueltos con Python
Ejercicios resueltos con Python
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punteros
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Guiaunidad iii
Guiaunidad iiiGuiaunidad iii
Guiaunidad iii
 
Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1
 
Lista de raptor sus comandos y su función
Lista de raptor sus comandos y su funciónLista de raptor sus comandos y su función
Lista de raptor sus comandos y su función
 

Similar a COMPILADORES1.pdf

Comparacion lenguajes-de-programacion-c-y-cplusplus
Comparacion lenguajes-de-programacion-c-y-cplusplusComparacion lenguajes-de-programacion-c-y-cplusplus
Comparacion lenguajes-de-programacion-c-y-cplusplus
Abefo
 
Guia 2nd o & 3er
Guia 2nd o & 3erGuia 2nd o & 3er
Guia 2nd o & 3er
martell024
 
Compiladores
CompiladoresCompiladores
Compiladores
jose haar
 

Similar a COMPILADORES1.pdf (20)

Comparacion lenguajes-de-programacion-c-y-cplusplus
Comparacion lenguajes-de-programacion-c-y-cplusplusComparacion lenguajes-de-programacion-c-y-cplusplus
Comparacion lenguajes-de-programacion-c-y-cplusplus
 
Estructuras de decisión o selectivas
Estructuras de decisión o selectivasEstructuras de decisión o selectivas
Estructuras de decisión o selectivas
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Guia 2nd o & 3er
Guia 2nd o & 3erGuia 2nd o & 3er
Guia 2nd o & 3er
 
Tema3
Tema3Tema3
Tema3
 
Programacion matlab
Programacion matlabProgramacion matlab
Programacion matlab
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
C++
C++C++
C++
 
Módulo 4 (sin estilo)
Módulo 4 (sin estilo)Módulo 4 (sin estilo)
Módulo 4 (sin estilo)
 
Presnetación Go
Presnetación GoPresnetación Go
Presnetación Go
 
P01 secuencial
P01 secuencialP01 secuencial
P01 secuencial
 
Que es una directiva de preprocesador
Que es una directiva de preprocesadorQue es una directiva de preprocesador
Que es una directiva de preprocesador
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
Lenguaje de simulacion
Lenguaje de simulacionLenguaje de simulacion
Lenguaje de simulacion
 
Módulo 4
Módulo 4Módulo 4
Módulo 4
 
Módulo 4
Módulo 4Módulo 4
Módulo 4
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Documeto compilardorcontadorletras
Documeto compilardorcontadorletrasDocumeto compilardorcontadorletras
Documeto compilardorcontadorletras
 
Instrucciones Básicas para C++
Instrucciones Básicas para C++Instrucciones Básicas para C++
Instrucciones Básicas para C++
 

Más de Benjamín Joaquín Martínez

Más de Benjamín Joaquín Martínez (20)

Sistemas de detección de intrusiones.pdf
Sistemas de detección de intrusiones.pdfSistemas de detección de intrusiones.pdf
Sistemas de detección de intrusiones.pdf
 
Portafolio ingles.pdf
Portafolio ingles.pdfPortafolio ingles.pdf
Portafolio ingles.pdf
 
Tabla de llamadas para linux x86_64 bits.pdf
Tabla de llamadas para linux x86_64 bits.pdfTabla de llamadas para linux x86_64 bits.pdf
Tabla de llamadas para linux x86_64 bits.pdf
 
Sistema de registro con php
Sistema de registro con phpSistema de registro con php
Sistema de registro con php
 
compiladores6Benjamin133467.pdf
compiladores6Benjamin133467.pdfcompiladores6Benjamin133467.pdf
compiladores6Benjamin133467.pdf
 
Compiladores5_Benjamin133467.pdf
Compiladores5_Benjamin133467.pdfCompiladores5_Benjamin133467.pdf
Compiladores5_Benjamin133467.pdf
 
133467 compiladores 4.pdf
133467 compiladores 4.pdf133467 compiladores 4.pdf
133467 compiladores 4.pdf
 
133467_COMPILADORES3.pdf
133467_COMPILADORES3.pdf133467_COMPILADORES3.pdf
133467_COMPILADORES3.pdf
 
Logica proposicional
Logica proposicionalLogica proposicional
Logica proposicional
 
Lenguajes para dispositivos moviles 133467
Lenguajes para dispositivos moviles 133467Lenguajes para dispositivos moviles 133467
Lenguajes para dispositivos moviles 133467
 
Bd distribuidas
Bd distribuidasBd distribuidas
Bd distribuidas
 
diseño de bases de datos distribuidas
diseño de bases de datos distribuidas   diseño de bases de datos distribuidas
diseño de bases de datos distribuidas
 
procesamiento de consultas distribuidas
procesamiento de consultas distribuidasprocesamiento de consultas distribuidas
procesamiento de consultas distribuidas
 
Algoritmo de INGRES
Algoritmo de INGRES Algoritmo de INGRES
Algoritmo de INGRES
 
Fragmentación
FragmentaciónFragmentación
Fragmentación
 
Modelo cliente servidor
Modelo cliente servidorModelo cliente servidor
Modelo cliente servidor
 
Arquitectura de bases de datos distribuidas
Arquitectura de bases de datos distribuidasArquitectura de bases de datos distribuidas
Arquitectura de bases de datos distribuidas
 
Bases de datos distribuidas heterogeneas
Bases de datos distribuidas heterogeneasBases de datos distribuidas heterogeneas
Bases de datos distribuidas heterogeneas
 
Sistemas gestores de BD
Sistemas gestores de BDSistemas gestores de BD
Sistemas gestores de BD
 
Arquitectura de bd
Arquitectura de bdArquitectura de bd
Arquitectura de bd
 

Último

2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
EncomiendasElSherpa
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
GuillermoBarquero7
 

Último (6)

Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
 
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOSESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
 
Trabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - OfimáticaTrabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - Ofimática
 
Caso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business CentralCaso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business Central
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
 

COMPILADORES1.pdf

  • 1. Compiladores Benjamín Joaquín Martínez 1.2 Dada la asignación en C a [i+1] = a[i] + 2 Dibuje un árbol de análisis gramatical y árbol sintáctico para la expresión utilizando como guía el ejemplo semejante de la sección 1.3 Expresión Expresión de asignación Expresión Expresión = Expresión de subindice Expresión aditiva Expresión [ Expresión aditiva ] Identificador a Expresión Expresión + Identificador i Numero 1 Expresión + Expresión Expresión de subíndice Numero 2 Expresión [ Expresión ] Identificador a Identificador i
  • 2. 1.5 Si su compilador aceptara la entrada directamente desde el teclado, determine si dicho compilador lee el programa entero antes de generar mensajes de error o bien genera mensajes de error a medida que los encuentra. ¿Qué implicación tiene hacer esto en el número de pasadas? Los errores pueden ser detectados durante casi cualquier fase de la compilación. (pág. 18 párrafo 1) Pero es conveniente procesar todo el programa fuente varias veces antes de generar el código. Ya que en cada pasada se construye un árbol sintáctico o un código intermedio a partir de la fuente (pág. 15 párrafo 5) y dependiendo del lenguaje un compilador puede ser hasta de una pasada, lo que equivaldría a leer el programa entero antes de generar algún manejo de error, pero en la mayoría de los compiladores se usan más de una pasada para cada fase de compilación (sintáctico, semántico, etc.) (Pág. 16 párrafo 1) Expresión de asignación Expresión de subíndice Expresión aditiva Identificador a Expresión aditiva Identificador i Numero 1 Expresión de subíndice Identificador a Identificador i Numero 2
  • 3. 1.4. Esta pregunta supone que usted trabaja con un compilador que tiene una opción para producir salida en lenguaje ensamblador. a. Determine si su compilador realiza optimizaciones de incorporación de constantes. Hablando del árbol sintáctico en varios casos es más fácil optimizar una forma linealizada de árbol que está más cercano al código ensamblador (pág. 11 párrafo 1) . Se pueden realizar de manera directa sobre el árbol al colapsar algún subárbol secundario de su nodo raíz con su valor constante. (pág. 10, párrafo 4) b. Una optimización relacionada pero más avanzada es la de propagación de constantes: una variable que actualmente tiene un valor constante es reemplazada por ese valor en las expresiones. Por ejemplo, el código (en sintaxis de C) x = 4; y = x + 2; se reemplazaría, utilizando propagación de constantes ( e incorporación de constantes), por el código x = 4; y = 6; Determine si su compilador efectuó propagación de constantes. Haciendo el árbol sintáctico la incorporación de constantes se hace al colapsar el nodo de la expresión x por su valor constante 4. Pero no hay una operación adicional para x más que la asignación de una constante. Si x = 4; y y = x+2; El código intermedio se reduce a x = 4; y=6; Se incorpora la constante en y = x+2;  y = 4+2; Y se propaga al generar una nueva constante a partir de otra en y =6;
  • 4. C. Proporcione tantas razones como pueda de por qué la propagación de constantes es más difícil que la incorporación de constantes. En la incorporación de constantes solo se reemplaza un espacio referenciado en memoria por su valor constante. Lo que equivale a colapsar el nodo donde está la expresión de asignación. Pero en la propagación de constantes, se conllevan más pasos, esto equivaldría a realizar más operaciones colapsando todo en un subárbol. . La propagación de constantes ocupa entonces el uso de variables temporales para alojar el resultado intermedio de las operaciones en estos subárboles. Es más complicado que la incorporación de constantes pues en la primera hacemos más rápida la ejecución pero la segunda busca eliminar operaciones redundantes o innecesarias. Sentencia de asignación Identificador y Expresión aditiva 2 Sentencia de asignación x 4 4 6 Colapsa el nodo por incorporación de constante Colapsa nodo por propagación de constantes Sentencia de asignación y 6 Código intermedio
  • 5. d. Una situación relacionada con la propagación de constantes y la incorporación de constantes es el uso de las constantes nombradas en un programa. Utilizando una constante nombrada x en vez de una variable podemos traducir el ejemplo anterior como el siguiente código en C; const int x = 4; … y= x + 2; … Determine si su compilador realiza propagación/incorporación bajo estas circunstancias. ¿En que difiere esto del inciso b? No hace la propagación de constantes. Se salta la incorporación de constantes en Const int x = 4; Pero haría la incorporación de constantes en y = x + 2; Dando como código intermedio Const int x = 4; y =6;