Está en la página 1de 26

TEMA 2.

GENERACIÓN DE
CÓDIGO
INTERMEDIO
Lenguaje y Autómatas II
Integrantes:
• Diana Carolina Balam Mazún
• Marco Alejandro Cupul Hau
• Gabriel Alberto Tejero Romero
Después del análisis sintáctico y
semántico.
Representación más simplificada del
código original para facilitar la
traducción hacia el código final.
Programa para una máquina abstracta.
2.1
NOTACIONES
2.1.1 PREFIJA
La Expresión o Notación PreFija nos indica que el operador va antes de los operandos sus
características principales son:
-Los operandos conservan el mismo orden que la notación infija equivalente.
-No requiere de paréntesis para indicar el orden de precedencia de operadores ya que el es una
operación.
-Se evalúa de izquierda a derecha hasta que encontremos el primer operador seguido
inmediatamente de un par de operandos.
-Se evalúa la expresión binaria y el resultado se cambia como un nuevo operando. Se repite este
hasta que nos quede un solo resultado.
2.1.2 INFIJA
La Expresión o Notación InFija es la forma más común que
utilizamos para escribir expresiones matemáticas, estas notaciones se
refiere a que el operador está entre los operandos. La notación infija
puede estar completamente parentizada o puede basarse en un
esquema de precedencia de operadores así como el uso de paréntesis
para invalidar los arreglos al expresar el orden de evaluación de una
expresión:

3*4=12

3*4+2=14

3*(4+2)=18
2.1.3 POSTFIJA

Como su nombre lo indica se refiere a que el operador ocupa la posición después


de los operandos sus características principales son:
-El orden de los operandos se conserva igual que la expresión infija equivalente
no utiliza paréntesis ya que no es una operación ambigua.
-La operación posfija no es exactamente lo inverso a la operación prefija
equivalente:
(A+B)*C AB+C*
2.2
REPRESENTACIONES DE
CÓDIGO INTERMEDIO
● Existen maneras formales para representar código intermedio.

● Estas notaciones simplifican la traducción de nuestro código


fuente a nuestro código objeto ya que ahorran y acotan
símbolos de la tabla de símbolos
2.2.1 NOTACIÓN POLACA
Es la originada por un Autómata con pila, en la que los operadores siempre preceden a
los operandos sobre los que actúan, y que tiene la ventaja de no necesitar paréntesis:
● Se utiliza principalmente para la representación de expresiones aritméticas.
● Expresión a notación polaca inversa.

Algoritmo
● Representa la expresión en forma de árbol sintáctico.
● Recorrer el árbol en postorden. Ejemplo: a + b * c-d Código a b c
* + d-

Es una forma de notación para la lógica, la aritmética, y el álgebra.


Ventajas y desventajas de la
notación polaca
● Generación de código: Simple, no utiliza registros.
● Optimización: Es difícil de reordenar ya que hay que considerar el contenido de
la pila.
● Interpretación rápida: Es muy fácil de interpretar ya que solo necesita una pila.
● Transportable: Si, ya que todos los procesadores implementan una pila.

Estándar Polaca

2 * (3 + 5) 2+35

2*3+5 +*235
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.
● El código P hace referencia a máquinas que utilizan o se auxilian de pilas para
generar código objeto.
● En muchos caso la P se asociado a código portable el cual garantiza que el código
compilado en una máquina se pueda ejecutar en otras.
● Para garantizar la portabilidad del código se necesita que el lenguaje esté
estandarizado por algún instituto y que dicho código no tenga extensiones
particulares.
● También se recomienda la no utilización de características especiales exclusivas de
alguna arquitectura de computadoras en particular.
2.2.3 TRIPLOS
● Las proposiciones de tres direcciones se parece mucho al ensamblador, el cual
es un lenguaje intermedio más entendible para la máquina.
● Las estructuras de control (if, switch, while, do-while, for) son realmente
etiquetas goto disfrazadas.
● Con una estructura de tres campos se pueden omitir los valores temporales,
dicha estructura recibe el nombre de triples y tiene los siguientes campos: op,
arg1 y arg2.
● En la notación de tripletes se necesita menor espacio y el compilador no
necesita generar los nombres temporales. Sin embargo, en esta
notación,trasladar una proposición que defina un valor temporal exige que se
modifiquen todas las referencias a esa proposición.
● El código que generan los triples recibe el nombre de código de dos direcciones,
aunque en ocasiones puede variar.
● Cuando se utilizan triples se ocupan punteros a la misma estructura de los triples.

* b t1 t2 //cuádruplos

* b (0) //triple

● La notación de tres direcciones es una forma abstracta de código intermedio.


● Esta notación se puede implementar como registros con campos para el operador y
operadores.
● La evaluación de expresiones en corto circuito implica que se evalúan condiciones
revisando valores anteriores; por ejemplo, para el operador AND con una condición
que se detecte como falsa toda la expresión es falsa, en el caso del operador OR si
se encuentra una condición verdadera todo será verdadera
2.2.4 CUÁDRUPLOS
● Es una estructura tipo registro con cuatros campos que se llaman: op, arg1, arg2
y resultado. OP tiene un código intermedio.
● Los operadores unarios como x:=-y no utilizan arg2. Generalmente arg1, arg2 y
resultado son valores de tipo puntero y apuntan a una entrada en la tabla de
símbolos.
2.3 ESQUEMA
DE
GENERACIÓN
Estrategias o acciones que se deberán
realizarse y tomarse en cuenta en el
momento de generar código
intermedio.
2.3.1 VARIABLES Y
CONSTANTES
Las declaraciones de Ejemplo:
variables y constantes pi=3.1416
deben separarse de tal
manera que queden las area=pi*radio^2
expresiones una por Variables: radio, area
una de manera simple. Constante: pi
2.3.2 EXPRESIONES
Ejemplo: (a+2)*(b+c)
Variables en direcciones 1000,
La traducción de 1001 y 1002, respectivamente.
operaciones aritméticas r1:= &1000
debe especificarse una r2:= 2
por una, de tal forma r3:= r1 + r2
que una expresión sea r4:= &1001
lo más mínimo posible. r5:= &1002
r6:= r4 + r5
r7:= r3 * r6
2.3.3 INSTRUCCIONES DE
ASIGNACIÓN
Deben quedar Ejemplo:
expresadas por una
x = a+b/5;
expresión sencilla, si
ésta es compleja se debe quedar de la
debe reducir hasta forma:
quedar un operador
sencillo. y = b/5; z = a+y; x=z
2.3.4 INSTRUCCIONES DE
CONTROL
Deben expresarse de Ejemplo:
manera lo más sencilla if (a == b && f!=5 && f
posible de tal forma %3==0)
que puedan evaluarse Se evalúa:
en cortocircuito. x = (a==b && f!=5)
y = x && f%3==0;
if (y)
En el código de los EJEMPLO:
if (x <100 || x > 200 && x!=
saltos los operadores y) x=0;
lógicos &&, || y ! son Se puede traducir como las
siguientes instrucciones:
traducidos a saltos If x < 100 goto L2
aunque estos no If False x > 200 goto L1
If False x != y goto L1
aparecen realmente en L2: x =0
el código. L1: Si la expresión es
verdadera se alcanza la
etiqueta L2 y se realiza la
asignación en caso contrario
no haría nada.
Los ciclos se Ejemplo:
While (A>B) and (A<=2*B-5)
descomponen en un do A:= A+B
ciclo genérico, por lo Código intermedio generado
será:
que ciclos «while»,
L1: if A>B goto L2
«for» y «do-while» goto L3
tienen la misma L2: T1:= 2*B
T2:= T1-5
representación interna. if A
goto L3
Todo queda en forma L4: A:= A+B
de «while» goto L1
L3: . . .
2.3.5 FUNCIONES

Las funciones pueden reducir a en línea. Lo que


se hace es 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

ARREGLOS: EJEMPLO:
Los arreglos se char *a=“Hola”; se
descomponen en reduce a:
estructuras básicas de
a[0]=‘H’; a[1]=‘o’;
manejo de manera
a[2]=‘l’; a[3]=‘a’;
simple.
a[4]=‘\0’;
CONCLUSIÓN
FUENTES DE INFORMACIÓN
http://dsc.itmorelia.edu.mx/~jcolivares/courses/ps207b/ps2_u6.pdf

https://kupdf.net/download/23-esquemas-de-generacion_59d59dbd08bbc5ff73686f0d_
pdf

http://repositori.uji.es/xmlui/bitstream/handle/10234/5916/codigo.apun.pdf?sequence=
1&isAllowed=y

https://docplayer.es/63195004-Indice-unidad-2-generacion-de-codigo-intermedio.html

https://www.itescam.edu.mx/portal/asignatura.php?clave_asig=SCD-1016&carrera=ISI
C-2010-224&id_d=151

http://itpn.mx/recursosisc/7semestre/leguajesyautomatas2/Unidad%20II.pdf

También podría gustarte