Please enable JavaScript.
Coggle requires JavaScript to display documents.
Unidad 2 generación de código intermedio - Coggle Diagram
Unidad 2 generación de código intermedio
2.1 Notaciones
2.1.1 Prefija
Es:
Una forma de notación para la lógica, la aritmética, el álgebra y la computación
Programación de computadora:
El lenguaje de programación Ambi
El lenguaje de programación Ambi
Es importante
observar que el número de operandos en una expresión debe igualar al número de operadores más uno, de lo contrario la sentencia no tiene ningún sentido
2 more items...
Su característica distintiva es que
Coloca los operadores a la izquierda de sus operandos
Su inventor fue :
Jan Łukasiewicz alrededor de 1920 para simplificar la lógica proposicional.
2.1.2 Infijo
Es:
La notación común de fórmulas aritméticas y lógicas,
en la cual se escriben los
operadores entre los operandos en que están actuando
Ejemplo:
(ej. 2 + 2) usando un estilo de infijo.
Es necesario
rodear entre paréntesis a los grupos de operandos y operadores
para indicar el
1 more item...
Ejemplo :
Si deseamos representar las expresiones (2+(3
4)) = x y ((2+3)
4)= x en las tres notaciones mencionadas, el resultado sería: (2+(3
4)) = x ((2+3)
4) = x Notación prefija = + 2
3 4 x =
+ 2 3 4 x Notación infija 2+3
4 = x (2+3)
4 = x Notación postfija 2 3 4
+ x = 2 3 + 4
x = Notación funcional igual(suma(2,producto(3,4)),x) igual(producto(suma(2,3),4),x)
2.1.3 Postfija
Realiza :
El operador al final de los dos operandos
utiliza
Una estructura del tipo LIFO (ab+5-Last First Out) pila,
La cual es
La más utilizada para la implementación.
2.2 Representaciones de código intermedio
2.2.1 Notación polar
El orden de operaciones es definido dentro de la estructura de la notación de prefijo y puede ser fácilmente determinada.
Es
especialmente popular entre las operaciones basadas en pila debido a su capacidad natural de distinguir fácilmente el orden de las operaciones sin la necesidad de paréntesis.
Para evaluar el orden de las operaciones
Ejemplo :
Ejemplo 1:
2 + 3 5 Ejemplo 2: +
2 3 5
La originada por un Autómata con pila
2.2.2 Código P
comenzó como un
código ensamblador objetivo estándar producido por varios compiladores Pascal en la década de 1970 y principios de la de 1980.
fue diseñado para
ser directamente ejecutable, contiene una descripción implícita de un ambiente de ejecución particular que incluye tamaños de datos, además de mucha información específica para la maquina P
está compuesta por una memoria de código
2.2.3 Triplos
La diferencia entre triples y cuádruplos es
Que con los triples es referenciado el valor intermedio hacia el número del triple que lo creo, pero en los cuádruplos requiere que ellos tengan nombres implícitos.
En la notación de tripletes se necesita
menor espacio y el compilador no necesita generar los nombres temporales.
Ejemplo :
Saltar si falso, (1), 5 3. =, Z, X 4. Saltar, 7 5. +, Y, 1 6. =, Z, (5) Problema La optimización supone mover tripletas y hay que recalcular las referencias.
2.2.4 Cuádruplos
Es
Una estructura tipo registro con cuatros campos que se llaman: Operador Operando1 Operando2 Resultado
En donde
operando1, operando2 y resultado pueden ser constantes, identificadores y variables temporales definidos por el compilador mientras que operador representa una operación arbitraria.
Facilitan
La aplicación de muchas optimizaciones, pero hay que tener un algoritmo para la reutilización de las variables temporales
2.3 Esquema de generacion
2.3.1 Variables y constantes
deben separarse de tal manera que
queden las expresiones una por una de manera simple. Por ejemplo, int a,b,c; se descompone a int a; int b; intc; respectivamente.
2.3.2 Expresiones
recibe una cadena que representa
Una línea de código intermedio y toma las medidas oportunas para que ese código se utilice.
Expresiones aritméticas
Los operadores que intervienen en ella son numéricos, el resultado es un número y los operadores son aritméticos.
Los operadores aritméticos más comúnmente utilizados son: +, - , * , / y %
2.3.3 Instrucción de asignación
La sintaxis general de la instrucción de asignación es: nombre_de_la_variable = valor
Instrucciones de asignación compuesta
realizan primero una operación en una expresión antes de asignarla a un elemento de programación
2.3.4 Instrucciones de control
sólo permite
resolver problemas sencillos
Sirve para
problemas más complejos
Las instrucciones condicionales
Nos van a permitir representar éste tipo de comportamiento. Sentencias IF y SWITCH.
2.3.5 Funciones
pueden
reducir a en línea, lo que se hace que expandir el código original de la función.
Las funciones se descomponen simplificando los parámetros de manera individual al igual que el valor de retorno
2.3.6 Estructuras
se emplean para
controlar la ejecución y flujo del código, las cuales se dividen en:
Estructuras de Selección:
son aquellas que se utilizan para realizar operaciones basadas en el valor de una expresión.
Estructuras de Iteración
son aquellas que nos permiten ejecutar un bloque de código repetidamente mientras una condición específica sea verdadera